Слоистая архитектура и её проблемы

↑ 8.2 Архитектурные стили и DDD · → Следующая

Обязательно~3 мин чтенияУровень: senior

Зачем это на собесе

Базовый вопрос архитектуры: что такое N-tier, где она ломается и что предлагают взамен.

Объяснение

Классическая слоистая (N-layer) архитектура: Presentation → Business (Application/Domain) → Data Access → БД. Зависимости направлены сверху вниз.

СлойОтветственность
Presentationконтроллеры, UI, DTO
Business/Serviceправила и сценарии
Data Accessрепозитории, ORM
Databaseхранение

Плюсы: простота, знакомая структура, разделение технических ответственностей.

Проблемы:

ПроблемаПояснение
Зависимость домена от БДбизнес-логика зависит от слоя данных, тесты требуют БД
Анемичная модельвся логика в сервисах, сущности пусты
«Сквозной» кодизменение фичи затрагивает все слои (Shotgun Surgery)
Раздувание сервисовOrderService на тысячи строк
Слой как способ группировкипапки Controllers/Services/Repositories скрывают предметную область
Тестыбез абстракций сложно изолировать
Пропуск слоёвUI обращается напрямую к БД

Ответы индустрии: инвертировать зависимости (Clean/Hexagonal), группировать по фичам (Vertical Slice), выделять модули, обогащать домен (DDD).

Нюансы и подводные камни

  • Для небольших CRUD-приложений слоистая архитектура вполне достаточна — не усложняйте.
  • Строгие слои без правил зависимостей вырождаются: закрепляйте архитектурными тестами.
  • Число слоёв не равно качеству архитектуры.

Практика

  1. Нарисуйте зависимости вашего проекта и найдите нарушения (слой → вверх).
  2. Возьмите одну фичу и посчитайте, сколько файлов в скольких слоях она меняет.

Вопросы с ответами

Связанные темы