Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Трирівнева Архітектура | Основи Spring Boot
Spring Boot Backend

bookТрирівнева Архітектура

Це виконується для розділення конкретної логіки на різні класи/пакети, замість написання всього в одному класі.

Порядок обробки запиту: ControllerServiceRepository. Після цього відповідь повертається у зворотному порядку: Repository -> Service -> Controller. Почнемо реалізацію з шару Repository.

Рівень Repository

Це найнижчий шар, де ми отримуємо оброблені дані з шару Service та зберігаємо їх у базі даних.

Ці класи позначаються анотацією @Repository, щоб бути доданими до Spring-контексту.

Main.java

Main.java

copy
1234
@Repository public class RepositoryLevel { // connect DB }

Приклад використання репозиторію

Рівень сервісу

Тут відбувається основна логіка додатку. У сервісах обробляються або змінюються дані перед передачею їх до шару репозиторіїв.

Для сервісів використовується анотація @Service, яка позначає клас як service, що містить бізнес-логіку.

Main.java

Main.java

copy
1234567
@Service public class ServiceLevel { public void logic() { //TODO: write business logic } }

Приклад використання сервісу

Рівень контролера

Цей шар відповідає за початкову взаємодію між клієнтом і сервером. Усі запити, що надходять від клієнта, потрапляють сюди, і він відповідає за отримання даних, наданих клієнтом.

Він обробляє вхідні HTTP-запити та повертає HTTP-відповіді. Контролери виконують роль "мосту" між клієнтом і бізнес-логікою.

На цьому рівні використовуються дві анотації для позначення класу як контролера:

  • @RestController: Оголошує клас як REST-контролер, який обробляє HTTP-запити та повертає дані у форматі JSON;

  • @Controller: Оголошує клас як MVC-контролер, який обробляє запити та повертає подання (наприклад, HTML).

Main.java

Main.java

copy
12345678
@Controller public class ControllerLevel { @GetMapping("/root") public String getPage() { return "template"; } }

Анотація @GetMapping визначає URL для заданого запиту. Це означає, що ми додаємо вказаний шлях /root до домену і у відповідь отримуємо відповідну сторінку.

Приклад використання контролера

Залежність Thymeleaf з відео

Ось посилання на Thymeleaf залежність у Maven репозиторії.

Але що станеться, якщо не дотримуватися цього підходу?

Технічно, нічого не станеться. Навіть якщо ви напишете всю бізнес-логіку у контролері, підключитеся до бази даних там і повернете відповідь клієнту з того ж місця, все працюватиме так само.

Однак, навряд чи ви згадаєте, що саме ви написали там через кілька тижнів, оскільки вся логіка застосунку буде зосереджена в одному місці, що є надзвичайно незручно.

Підсумок

Трирівнева архітектура забезпечує чітке розділення відповідальностей між шарами controllers, services та repositories, що робить процес розробки більш організованим та зручним для підтримки.

Кожен шар зосереджується на своєму завданні, що спрощує як робочий процес, так і керування проєктом.

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 2. Розділ 5

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Awesome!

Completion rate improved to 3.45

bookТрирівнева Архітектура

Свайпніть щоб показати меню

Це виконується для розділення конкретної логіки на різні класи/пакети, замість написання всього в одному класі.

Порядок обробки запиту: ControllerServiceRepository. Після цього відповідь повертається у зворотному порядку: Repository -> Service -> Controller. Почнемо реалізацію з шару Repository.

Рівень Repository

Це найнижчий шар, де ми отримуємо оброблені дані з шару Service та зберігаємо їх у базі даних.

Ці класи позначаються анотацією @Repository, щоб бути доданими до Spring-контексту.

Main.java

Main.java

copy
1234
@Repository public class RepositoryLevel { // connect DB }

Приклад використання репозиторію

Рівень сервісу

Тут відбувається основна логіка додатку. У сервісах обробляються або змінюються дані перед передачею їх до шару репозиторіїв.

Для сервісів використовується анотація @Service, яка позначає клас як service, що містить бізнес-логіку.

Main.java

Main.java

copy
1234567
@Service public class ServiceLevel { public void logic() { //TODO: write business logic } }

Приклад використання сервісу

Рівень контролера

Цей шар відповідає за початкову взаємодію між клієнтом і сервером. Усі запити, що надходять від клієнта, потрапляють сюди, і він відповідає за отримання даних, наданих клієнтом.

Він обробляє вхідні HTTP-запити та повертає HTTP-відповіді. Контролери виконують роль "мосту" між клієнтом і бізнес-логікою.

На цьому рівні використовуються дві анотації для позначення класу як контролера:

  • @RestController: Оголошує клас як REST-контролер, який обробляє HTTP-запити та повертає дані у форматі JSON;

  • @Controller: Оголошує клас як MVC-контролер, який обробляє запити та повертає подання (наприклад, HTML).

Main.java

Main.java

copy
12345678
@Controller public class ControllerLevel { @GetMapping("/root") public String getPage() { return "template"; } }

Анотація @GetMapping визначає URL для заданого запиту. Це означає, що ми додаємо вказаний шлях /root до домену і у відповідь отримуємо відповідну сторінку.

Приклад використання контролера

Залежність Thymeleaf з відео

Ось посилання на Thymeleaf залежність у Maven репозиторії.

Але що станеться, якщо не дотримуватися цього підходу?

Технічно, нічого не станеться. Навіть якщо ви напишете всю бізнес-логіку у контролері, підключитеся до бази даних там і повернете відповідь клієнту з того ж місця, все працюватиме так само.

Однак, навряд чи ви згадаєте, що саме ви написали там через кілька тижнів, оскільки вся логіка застосунку буде зосереджена в одному місці, що є надзвичайно незручно.

Підсумок

Трирівнева архітектура забезпечує чітке розділення відповідальностей між шарами controllers, services та repositories, що робить процес розробки більш організованим та зручним для підтримки.

Кожен шар зосереджується на своєму завданні, що спрощує як робочий процес, так і керування проєктом.

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 2. Розділ 5
some-alt