Модель анемичного домена описана Мартином Фаулером как анти-шаблон в дизайне, управляемом доменом. Чтобы иметь бизнес-логику в доменных моделях, часто используются доменные службы. Но внедрение доменных служб в доменные модели считается вредным для Вона Вернона (см. «Внедрение доменного дизайна», стр. 387).
На мой взгляд, эти мнения противоречивы, правда ли это? Как можно рассмотреть обе точки?
Действительно ли это богатая модель домена с введенными службами домена по сравнению с моделью анемичного домена и обычными службами домена ?
domain-driven-design
dependency-injection
services
Sjoerd222888
источник
источник
Ответы:
Анемичная модель - это просто контейнер данных. Не содержит поведения. (На самом деле это можно считать хорошей вещью в функциональной парадигме.) Противоположностью анемичной модели не является модель, внедренная с полным набором доменных служб. Вы описываете две крайности - обе плохие.
Если у вас анемичная модель, вы не совсем понимаете, что предлагает ООП. Если вы начнете внедрять сервисы в эти модели, вы, скорее всего, будете внедрять проблемы, которые не относятся к ним. Либо это, либо ваша модель более анемична, чем вы думаете. Зачем еще вам нужна услуга, отличная от той, которая необходима, но отсутствует? (Отсутствие может означать анемию.)
Избегание обоих «говорит» приводит к более сильному дизайну. Есть ли у вас что-то в сервисе, в котором нуждается модель? Может быть, это следует перенести на модель. Если нет, возможно, вам следует пересмотреть свои проблемы. Поведение модели должно работать внутри модели. Это должно главным образом (если не только) заботиться о членах. Но помните, что все еще будут вещи, которые работают на или с моделью. Например, модели не должны открывать соединения TCP или прослушивать события пользовательского интерфейса, даже если они каким-то образом связаны. Это чужая ответственность , и что кто - то никогда не принадлежит внутри модели.
источник
Это не противоречиво. Оба сторонника хотели бы, чтобы вы поместили свой фактический код в сам объект домена.
то есть.
против ADM
против введенных услуг
Честно говоря, хотя у каждого подхода есть свои плюсы и минусы. Тот, который вы выбираете, во многом зависит от личных предпочтений
источник