Получить доступ

Что такое anemic domain model, чем она плоха и когда всё-таки допустима?

MiddleПринципы проектирования
Коротко

Анемичная модель: сущности — мешки геттеров и сеттеров, вся логика в сервисах. Снаружи ООП, внутри процедурный код: инварианты никто не охраняет, одно правило дублируется по сервисам, объект легко привести в невалидное состояние.

  • Лечение — поведение в сущностях: order.pay() вместо order.setStatus(PAID)
  • Допустимо: CRUD без бизнес-правил, DTO, транзакционные скрипты в простых системах
  • Связь с feature envy и Tell, don't ask

А ещё JPA подталкивает к анемии — сеттеры и конструктор без аргументов

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Дай определение Фаулера и объясни суть претензии: снаружи это ООП, внутри — процедурный код с отдельными структурами данных, поэтому одно бизнес-правило дублируется по нескольким сервисам, а объект можно привести в невалидное состояние. Свяжи с feature envy и «Tell, don't ask». Обязательно назови границу применимости: в тонком CRUD, в DTO и на границах системы анемичная модель уместна — там просто нет инвариантов. Сильный ответ добавляет способ лечения: перенести правила к данным, ввести типы домена вместо примитивов, проверять инварианты в конструкторе.

Что хотят услышать

  • Определение и претензия.
  • Когда это нормально.

Частые ошибки

  • Объявлять анемичную модель безусловным злом без разговора о контексте.
  • Путать её с DTO: DTO анемичен по назначению.

Что спросят дальше

  • Как это связано с primitive obsession?
  • Где проходит граница между доменной логикой и логикой приложения?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем