Архитектурные слои

Domain Layer

Application Layer

⚙️ Infrastructure Layer

🔁 Взаимодействие между контекстами (Bounded Contexts)


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

Характеристика Domain Service Application Service / Use Case Infrastructure Service
Слой Domain (Доменная модель) Application (Слой приложений) Infrastructure (Инфраструктура)
Назначение Бизнес-правила, которые не принадлежат естественно ни одной сущности Координация работы компонентов, реализация входных сценариев Технические детали реализации
Вызов репозиториев ❌ Никогда ✅ Да, управляет загрузкой и сохранением ✅ Да, реализует репозитории
Работа с несколькими агрегатами ✅ Да (только бизнес-логика) ✅ Да (оркестрация + координация) ❌ Не должны
Доступ к инфраструктуре ❌ Никогда ✅ Через интерфейсы (dependency injection) ✅ Да, это их основная роль
Тип данных на вход/выход Domain-модели, Value Objects DTO / Request/Response-модели Технические форматы (JSON, XML, SQL)
Состояние (State) ❌ Stateless ❌ Stateless ❌ Обычно stateless
Жизненный цикл объектов Работает с уже созданными объектами Управляет жизненным циклом доменных объектов Обеспечивает persistence
Управление транзакциями ❌ Не управляет ✅ Определяет границы транзакций ✅ Реализует транзакционность
Обработка ошибок Выбрасывает доменные исключения Преобразует доменные исключения в формат внешних слоев Обрабатывает технические ошибки
Ubiquitous Language ✅ Является частью языка домена ✅ Использует язык домена ❌ Использует технические термины
Пример Расчёт скидки по корзине с учетом статуса клиента Оформление заказа (проверка наличия, создание, сохранение, отправка уведомлений) Email-сервис, HTTP-клиент, Database Repository
Тестируется как Чистая функция с входом/выходом (unit tests) Сквозной сценарий (integration tests, может быть с моками) Технические тесты (database tests, API tests)
Зависимости Только от других доменных объектов От доменных объектов и интерфейсов инфраструктуры От внешних систем и библиотек
Когда использовать Когда бизнес-логика не имеет естественного "владельца" среди сущностей Для каждого внешнего запроса/команды к системе Для всех технических интеграций