Skip to content

Commit 328e5ac

Browse files
committed
Add initial project structure and documentation for Java learning project "java_09"
1 parent 45f3f1c commit 328e5ac

File tree

2 files changed

+1258
-328
lines changed

2 files changed

+1258
-328
lines changed

CLAUDE.md

Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
# 🎓 Учебный Java-проект: от JDBC до веб-приложений ("java_09")
2+
3+
Этот проект — практическая песочница для изучения ключевых технологий Java-разработки. Вы пройдете путь от основ работы с базами данных до создания полноценного многомодульного веб-приложения.
4+
5+
-----
6+
7+
## 🎯 Цель и философия проекта
8+
9+
Главная цель — не просто показать, *как* работает технология, а *почему* выбрано именно такое решение. Проект спроектирован так, чтобы наглядно продемонстрировать эволюцию подходов к хранению данных и построению веб-архитектуры. Он идеально подходит для:
10+
11+
* **Начинающих Java-разработчиков**, желающих увидеть, как теория применяется на практике.
12+
* **Студентов**, изучающих базы данных, веб-технологии и многопоточность.
13+
* **Всех, кто хочет освежить знания** по классическому стеку Java (Servlets, JDBC) перед изучением современных фреймворков вроде Spring.
14+
15+
-----
16+
17+
## 🏗️ Архитектура и структура модулей
18+
19+
Проект построен на **Apache Maven** и разделен на независимые модули. Это позволяет изучать каждую технологию изолированно, не отвлекаясь на сложность всего приложения.
20+
21+
### 📦 Модули проекта
22+
23+
Каждый модуль — это отдельный мини-проект со своей задачей.
24+
25+
* **`01_JDBC`****Основы работы с базами данных**
26+
27+
* **Ключевые концепции**: Прямое взаимодействие с PostgreSQL через **JDBC**.
28+
* **Что внутри**:
29+
* `PreparedStatement` для безопасной работы с SQL-запросами и защиты от инъекций.
30+
* **Пул соединений (Connection Pool)** для оптимизации производительности.
31+
* Простейший веб-интерфейс (JSP + Servlets) для CRUD-операций (Create, Read, Update, Delete).
32+
* Тесты на **JUnit** и **Cucumber** для проверки логики работы с БД.
33+
34+
* **`webapp`****Центральный модуль: веб-приложение "База резюме"**
35+
36+
* **Ключевые концепции**: Архитектура веб-приложения, паттерн "Strategy", эволюция хранилищ данных.
37+
* **Что внутри**:
38+
* **Модель данных**: Классы `Resume`, `Contact`, `Organization` и др.
39+
* **Слой хранения (Storage Layer)**:
40+
* Интерфейс `IStorage` определяет контракт для всех видов хранилищ.
41+
* **Примитивные реализации (в памяти)**: `ArrayStorage` и `MapStorage` для демонстрации базовых коллекций.
42+
* **Файловые реализации**: `FileStorage` (сериализация), `XmlStorage` (JAXB), `JsonStorage` (GSON/Jackson) — показывают разные способы персистентности.
43+
* **База данных**: `SqlStorage` — наиболее "боевая" реализация на PostgreSQL.
44+
* **Веб-слой**: Классические **Servlets** в роли контроллеров и **JSP** в роли представлений.
45+
* **Тестирование**: Полное покрытие тестами всех реализаций `IStorage`.
46+
47+
* **`02_SwingThreads`****Многопоточность в GUI**
48+
49+
* **Ключевые концепции**: Проблема "замораживания" UI и её решение с помощью фоновых потоков (`SwingWorker`).
50+
* **Что внутри**: Простое десктопное приложение на **Swing**, выполняющее долгую операцию без блокировки интерфейса.
51+
52+
* **`WebCalc`** и **`NetworkInterfaces`**
53+
54+
* **Ключевые концепции**: Микро-примеры для демонстрации базовой работы сервлетов и сетевых API Java.
55+
56+
-----
57+
58+
## 🛠️ Технологический стек
59+
60+
* **☕ Язык**: Java 21
61+
* **📦 Сборка**: Apache Maven
62+
* **🗄️ База данных**: PostgreSQL
63+
* **🌐 Веб**: Java Servlets, JSP
64+
* **🧪 Тестирование**: JUnit 5, Cucumber
65+
* **📄 Работа с файлами**: JAXB (для XML), Java Serialization
66+
* **🖥️ GUI**: Swing
67+
68+
-----
69+
70+
## 🚀 Быстрый старт и запуск
71+
72+
Следуйте этим шагам, чтобы запустить проект локально.
73+
74+
### 1\. Предварительные требования
75+
76+
* **Java 21 JDK**
77+
* **Apache Maven**
78+
* **PostgreSQL** (рекомендуется версия 13+)
79+
* **Git**
80+
* **IDE** (например, IntelliJ IDEA) с поддержкой Maven и сервера приложений (Tomcat).
81+
82+
### 2\. Настройка базы данных
83+
84+
Выполните следующие SQL-команды, чтобы создать базу данных и пользователя.
85+
86+
```sql
87+
CREATE DATABASE resumes;
88+
CREATE USER topjava WITH PASSWORD 'password';
89+
GRANT ALL PRIVILEGES ON DATABASE resumes TO topjava;
90+
```
91+
92+
### 3\. Конфигурация проекта
93+
94+
Скопируйте файлы-примеры конфигурации и укажите в них свои данные для подключения к БД:
95+
96+
* В модуле `01_JDBC`: скопируйте `db.properties.template` в `db.properties`.
97+
* В модуле `webapp`: скопируйте `webapp.properties.template` в `webapp.properties`.
98+
99+
### 4\. Сборка и тестирование
100+
101+
Откройте терминал в корневой папке проекта и выполните:
102+
103+
```bash
104+
# Сборка всех модулей и запуск тестов
105+
mvn clean install
106+
```
107+
108+
### 5\. Запуск веб-приложения (`webapp`)
109+
110+
Проще всего запустить приложение из вашей IDE:
111+
112+
1. Настройте конфигурацию запуска для **Apache Tomcat**.
113+
2. Добавьте артефакт `webapp.war` (или `webapp:war exploded`) в деплоймент.
114+
3. Запустите сервер. Приложение будет доступно по адресу `http://localhost:8080/webapp`.
115+
116+
-----
117+
118+
## 📐 Ключевые концепции и принципы
119+
120+
Этот проект — не просто набор кода, а демонстрация важных инженерных практик.
121+
122+
* **Модульность**: Разделение на независимые компоненты упрощает понимание и переиспользование кода.
123+
* **Принцип подстановки Барбары Лисков (LSP из SOLID)**: Благодаря интерфейсу `IStorage` мы можем легко заменить хранилище в памяти на хранилище в БД без изменения бизнес-логики.
124+
* **Паттерн "Стратегия"**: Разные реализации `IStorage` — это и есть стратегии хранения данных.
125+
* **Тестирование**: Проект показывает, как писать юнит-тесты (JUnit) для проверки отдельных классов и BDD-тесты (Cucumber) для проверки поведения всей системы.
126+
* **CI/CD**: В репозитории есть готовые конфигурационные файлы для **GitHub Actions** и **GitLab CI**, включающие сборку, тестирование и анализ покрытия кода с помощью **JaCoCo**.
127+
128+
-----
129+
130+
## 🌱 Возможные доработки и вклад в проект
131+
132+
Этот проект можно и нужно развивать! Вот несколько идей:
133+
134+
1. **Рефакторинг на Spring**: Переписать `webapp` с использованием Spring Boot/MVC/Data JPA, чтобы сравнить классический подход с современным.
135+
2. **Добавить REST API**: Реализовать REST-контроллеры для управления резюме и "оживить" их с помощью простого фронтенда на JavaScript.
136+
3. **Контейнеризация**: Добавить `Dockerfile` и `docker-compose.yml` для запуска всего приложения (веб-сервер + база данных) в один клик.
137+
4. **Улучшить UI**: Заменить JSP на более современный шаблонизатор (например, Thymeleaf) или создать полноценный SPA-фронтенд (React/Vue).
138+
5. **Добавить новые реализации `IStorage`**: Например, для работы с MongoDB или другим NoSQL-хранилищем.

0 commit comments

Comments
 (0)