Що являє собою шарувата архітектура?
Шарувата архітектура (Layered Architecture) - це один із класичних підходів до проектування програмних систем, при якому застосунок ділиться на логічні рівні (шари), кожен з яких виконує строго визначені функції і взаємодіє тільки з сусідніми шарами.
Основна ідея
Система розбивається на ієрархію рівнів, де:
- верхні шари використовують функціональність нижніх,
- нижні не знають про верхні,
- кожен шар вирішує задачі свого рівня абстракції.
Це створює структуровану, керовану архітектуру з чіткими межами відповідальності.
Класична структура шаруватої архітектури
Зазвичай виділяють 4 основні шари:
- Presentation (представлення / UI) Відповідає за взаємодію з користувачем чи зовнішніми системами. Приклади: вебінтерфейс, API, мобільний застосунок. Основна задача - відобразити дані і передати дії користувача далі.
- Application (прикладний / сервісний шар) Містить бізнес-логіку на рівні процесів і сценаріїв. Приклад: координує кроки "створити замовлення", "оплатити", "надіслати сповіщення". Тут немає деталей зберігання чи UI.
- Domain (доменна логіка / бізнес-правила)
Серце системи: бізнес-об'єкти, правила, інваріанти.
Приклад: клас
Order, правило "замовлення не можна оплатити двічі". Ізольований від інфраструктури. - Infrastructure (інфраструктура / дані) Забезпечує взаємодію із зовнішнім світом: БД, мережа, файли. Приклад: репозиторії, драйвери, зовнішні API. Слугує "опорою" для верхніх шарів.
Принцип взаємодії
Кожен шар знає тільки про найближчий нижній:
UI -> Application -> Domain -> Infrastructure
Це забезпечує:
- незалежність шарів;
- можливість підміняти реалізацію;
- легкість тестування (наприклад, можна підмінити шар даних моками).
Переваги
- Модульність і читабельність коду.
- Тестованість: можна перевіряти кожен шар ізольовано.
- Розширюваність: можна змінювати технологію БД чи UI, не торкаючись логіки.
- Повторне використання: доменна логіка не залежить від інтерфейсів.
Недоліки
- Можлива зайва складність для простих застосунків.
- Можуть з'являтися надлишкові переходи між шарами ("балаканина шарів").
- Порушення меж (наприклад, якщо UI напряму лізе в базу) призводять до архітектурної деградації.
- При великій кількості рівнів - втрати продуктивності.
Приклад
Інтернет-магазин:
- UI - React-застосунок, що показує кошик.
- Application - сервіс замовлень: викликає методи доменної логіки і звертається до репозиторіїв.
- Domain - об'єкт
Orderз методамиaddItem(),calculateTotal(). - Infrastructure - реалізація
OrderRepository, що зберігає дані в PostgreSQL
Коротка відповідь
Для співбесідиPremium
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.