Skip to content

Commit 4eeada3

Browse files
committed
Update readme
1 parent 7cc985f commit 4eeada3

File tree

2 files changed

+113
-1
lines changed

2 files changed

+113
-1
lines changed

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ Java Enterprise Online Project
3030

3131
## ![video](https://cloud.githubusercontent.com/assets/13649199/13672715/06dbc6ce-e6e7-11e5-81a9-04fbddb9e488.png) 3. [Рекомендуемые подходы обучения на курсе](doc/video3.md)
3232

33-
## ![video](https://cloud.githubusercontent.com/assets/13649199/13672715/06dbc6ce-e6e7-11e5-81a9-04fbddb9e488.png) 4. [Демо и структура разрабатываемого приложения](https://drive.google.com/file/d/1UHzSy9i-uonmTMFoR5v69Y-vyWLCLQWd)
33+
## ![video](https://cloud.githubusercontent.com/assets/13649199/13672715/06dbc6ce-e6e7-11e5-81a9-04fbddb9e488.png) 4. [Структура приложения (многоуровневая архитектура)](doc/video4.md)
3434
### [Демо приложение](http://javaops-demo.ru/topjava)
3535

3636
## ![video](https://cloud.githubusercontent.com/assets/13649199/13672715/06dbc6ce-e6e7-11e5-81a9-04fbddb9e488.png) 5. <a href="https://drive.google.com/file/d/0B9Ye2auQ_NsFSUNrdVc0bDZuX2s/view?resourcekey=0-6scb0PBj2A3Oqf6rsU2egQ">Системы управления версиями. Git.</a>
@@ -119,6 +119,7 @@ Java Enterprise Online Project
119119
120120
- <a href="http://www.mscharhag.com/2014/02/java-8-datetime-api.html">Java 8 Date and Time API</a>
121121
- <a href="http://web.archive.org/web/20201128101944/https://tproger.ru/translations/algorithms-and-data-structures/">Алгоритмы и структуры данных для начинающих: сложность алгоритмов</a>
122+
- [Сложность алгоритмов и Big O Notation](https://threadreaderapp.com/thread/1470666237286010881)
122123
- [Головач: сложность алгоритмов в теме коллекций](https://www.youtube.com/watch?v=Ek9ijOiplNE&feature=youtu.be&t=778)
123124
- <a href="https://drive.google.com/file/d/0B9Ye2auQ_NsFNEJWRFJkVDA3TkU/view?usp=sharing&resourcekey=0-MPCuoLVdSLiSc7hlE2jefQ">Time complexity</a>
124125
- <a href="https://ru.wikipedia.org/wiki/Временная_сложность_алгоритма">Временная сложность алгоритма</a>

doc/video4.md

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
## Структура приложения (многоуровневая архитектура)
2+
## ![video](https://cloud.githubusercontent.com/assets/13649199/13672715/06dbc6ce-e6e7-11e5-81a9-04fbddb9e488.png) 3. [Видео](https://drive.google.com/file/d/1UHzSy9i-uonmTMFoR5v69Y-vyWLCLQWd)
3+
4+
Приложение, которое мы будем разрабатывать это [программа для подсчета калорий](http://javaops-demo.ru/topjava).
5+
6+
В этом видео давайте обсудим структуру этого приложения.
7+
8+
---
9+
Ссылки на отчеты, которые будут использоваться в этом уроке:
10+
11+
- [Многоуровневая архитектура (русскоязыная статья в Wikipedia)](https://ru.wikipedia.org/wiki/%D0%9C%D0%BD%D0%BE%D0%B3%D0%BE%D1%83%D1%80%D0%BE%D0%B2%D0%BD%D0%B5%D0%B2%D0%B0%D1%8F_%D0%B0%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0)
12+
- [Multitier architecture (англоязычная статья в Wikipedia)](https://en.wikipedia.org/wiki/Multitier_architecture)
13+
14+
---
15+
16+
<img src="https://javaops.ru/static/images/projects/top-scheme.jpg" />
17+
18+
На структурной схеме приложения вы видите, что оно условно разделено на 4 части - **Views**,
19+
**Controller**, **Service** и **Repository**.
20+
21+
Такой подход является реализацией многоуровневой архитектуры в программировании.
22+
По английски этот подход называется **_Multitier architecture_**.
23+
24+
Его суть заключение в разделении приложения на несколько слоев,
25+
каждый из которых ответственен за конкретную задачу.
26+
27+
### Слой отображения (view)
28+
Views соответствует слою отображения (или presentation layer) - это user interface или
29+
фронтэнд - все то, что мы видим и с чем взаимодействуем в браузере.
30+
В качестве View могут быть HTML страницы, созданные с использованием специальных
31+
движков шаблонов, например JSP (встроен в Tomcat) или
32+
Thymeleaf (шаблоны по умолчанию в Spring Boot) или отдельное frontend приложение,
33+
написанное на одном из JavaScript фреймворков.
34+
35+
В случае с движками шаблонов, HTML страницы будут располагаться в одном проекте
36+
с основным кодом приложения. Для приложений с “небогатым UI используются именно шаблоны.
37+
Этот подход отличается от так называемых RIA - rich internet application - приложений со сложным UI).
38+
39+
Главное отличие rich internet application от приложений с фронтендом
40+
на движках шаблонов заключается в том, что фронтенд, созданный на движке
41+
шаблонов работает на сервере и это что-то простое.
42+
В случае с rich internet application фронтэнд приложение загружается
43+
через интернет к вам на компьютер и запускается в браузере.
44+
Оно может быть максимально сложным и выполнять функции традиционных
45+
десктоп приложений.
46+
Иногда в одном приложении смешиваются оба способа - например страница
47+
логина-пароля в RIA делаются на шаблонах.
48+
49+
Создание простого фронтэнда на движке шаблонов проще, поэтому
50+
в курсе мы будем использовать этот способ.
51+
52+
### Слой контроллеров (Controller)
53+
Следующий слой, который мы видим - это **Controller**.
54+
55+
В многоуровневой архитектуре он соответствует слою, который
56+
называется “**_Слой приложения_**" или "**_Application layer_**").
57+
В GRASP (General Responsibility Assignment Software Patterns)
58+
он так и называется - Controller layer.
59+
60+
Это слой приложения, который ответственен за обработку HTTP запросов и проверку корректности входных данных. Если мы открываем главную страницу на сайте или отправляем заполненную на сайте форму, фронтэнд приложение отправляет HTTP запрос к серверу (в нашем случае контейнеру сервлетов), который принимает запрос и перенаправляет его в контроллер, соответствующий введенному в браузере URL адресу, или к адресу, который вызывается при отправке формы через сайт.
61+
Также контроллеры могут принимать запросы не только от фронтенда, но и от других приложений.
62+
63+
Слой контроллеров не имеет доступа к базе данных. Контроллеры общаются только с сервисами.
64+
65+
### Слой сервисов (Service layer)
66+
Слой **Service** на схеме приложения соответствует слою
67+
бизнес-логики (или **_Business layer_**) в многоуровневой архитектуре.
68+
В слое service заключена (инкапсулирована) вся бизнес-логика нашего приложения.
69+
Если коммуникация с фронтендом или другими приложениями,
70+
то есть прием данных, это ответственность контроллеров,
71+
то обработка данных это ответственность сервисов.
72+
73+
### Слой доступа к данным (Data layer)
74+
Слой сервисов общается со слоем, ответственным за работу с базами данных.
75+
Этот слой называют **Data layer** (также можно встретить
76+
названия **Persistence Layer** или **Data access layer**) и он
77+
представлен в виде **_Data Access Object_** классов
78+
(коротко **_DAO классы_**) или классов, реализующих паттерн репозиторий.
79+
С обоими видами классов вы попрактикуетесь в ходе курса.
80+
[Репозиторий это также один из архитектурных паттернов](https://martinfowler.com/eaaCatalog/repository.html)
81+
82+
Подобное разделение приложения на слои дает гибкость
83+
и существенно упрощает доработку и переиспользование приложения.
84+
Например, создав по такому принципу приложение,
85+
содержащее слои репозиториев, сервисов и контроллеров
86+
мы в дальнейшем можем легко использовать это приложение
87+
с различными фронтенд приложениями или мобильными приложениями.
88+
Если мы решим перейти на другую базу данных, мы можем
89+
переписать только слой репозиториев и нам не требуется
90+
вносить изменения в слои сервисов и контроллеров.
91+
92+
>Для маленького приложение такой подход может показаться
93+
>избыточно сложным, но по мере роста приложения это является спасением.
94+
95+
Подавляющее большинство реальных приложений построены с использованием именно этой архитектуры.
96+
97+
### Краткие итоги
98+
В этом видео мы познакомились с концепцией многоуровневой архитектуры,
99+
которую мы применим при создании приложения на курсе.
100+
Многоуровневая архитектура предполагает разделение приложения на слои:
101+
- Views - слой отображения является фронтэндом;
102+
- Controller - слой приложения ответственен за прием и валидацию входных данных;
103+
- слой Service включает в себя весь код, отражающий бизнес логику;
104+
- Repository или Data layer отвечает за взаимодействие с базой данных.
105+
106+
Также мы обсудили какие преимущества дает такой подход.
107+
Среди преимуществ в первую очередь возможность повторного
108+
использования различных слоев и упрощение их доработки и изменения.
109+
110+
111+

0 commit comments

Comments
 (0)