Domain Model объединяет состояние и правила в объектах, которые защищают инварианты. Anemic Domain Model оставляет в объектах почти только данные, а всю логику переносит в процедурные сервисы.
Чем на уровне бизнес-логики Domain Model в DDD отличается от Anemic Domain Model и почему последняя считается антипаттерном?
Domain Model объединяет состояние и правила в объектах, которые защищают инварианты. Anemic Domain Model оставляет в объектах почти только данные, а всю логику переносит в процедурные сервисы.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Domain Model объединяет состояние и правила в объектах, которые защищают инварианты. Anemic Domain Model оставляет в объектах почти только данные, а всю логику переносит в процедурные сервисы.
Например, order.cancel() может проверять допустимый переход статуса; при анемичной модели внешний код напрямую меняет поля и должен везде повторять ограничения.
Для сложного домена это ведёт к дублированию правил и трудно контролируемому состоянию. Но DTO и простые CRUD-модели не обязаны быть «богатыми»: проблема возникает при несоответствии сложности задачи выбранному дизайну. Оркестрация внешних вызовов и транзакций всё равно может оставаться в application service, не внутри доменной сущности.