Мартин Фаулер рассматривает модель анемического домена как анти-шаблон.
Подвижность модели Persistence в качестве модели домена кажется слишком сильной из-за Недопустимая ошибка реляционной целостности объекта. Для настойчивости и нормализации мы склонны разбивать классы на очень мелкие крошечные кусочки, методы шлепания над этими классами глупы. Плюс постоянство редко меняется, но бизнес-логика меняет справедливый бит.
Итак, нам нужен DomainModel, который основывается на модели сохранения (вместо того, чтобы быть одним и тем же). Затем эта модель домена будет содержать свойства и метод бизнес-логики.
Но теперь эти модели домена по-прежнему остаются за сервисом, и для того, чтобы разоблачить их во внешнем мире, нам нужно преобразовать их в DTO.
Мы делаем такие мужественные отображения здесь.
- Стойкость к модели домена
- Чтобы преобразовать модель домена в DTO для передачи между службами
На этом не заканчивается, так как DTO может быть отображен в ViewModel.
Все это и проблема дублирования логики проверки по-прежнему не исчезают, потому что клиент хочет проверки в реальном времени. ViewModel ничего не знает о проверке, поэтому в SPA, например, вы вынуждены снова переписать логику проверки на стороне клиента (обычно в javascript).
Кроме того, службы по своей природе не имеют статуса (сообщения или RPC-ориентированные), поэтому мы делаем все это сопоставление между Persistence, OO, а затем обратно в процедурный, в какую пользу? Как бы вы оправдали стоимость в практическом плане большинства ИТ-бюджетов?
Получаю, как бы полное DDD, с Aggregate Roots, Domain Models и т.д. было бы "круто", но как вы можете оправдать стоимость и хит производительности dev?
анти-шаблон (или антипаттерн) - это шаблон, используемый в социальном или деловом операций или разработки программного обеспечения, которые могут неэффективным и/или контрпродуктивным на практике
И если это так, не будет ли DDD и Rich Domain Model входить в определение анти-шаблона выше, чем модель "Lean" Domain. Извините, я презираю загруженное слово "Anemic".
Сохраняя модель домена "Lean", вы фактически разрешаете ее делиться без нарушения "принципа абстрактной зависимости", "Do not Repeat Yourself" и трудоемкого, утомительного и подверженного ошибкам процесса отображения одного носителя данных к другому, и независимо от того, что связано с Unit Test, что происходит поверх этого (если вы не собираетесь делать сопоставление без модульного тестирования и надеетесь на лучшее).