Короткий ответ: Мне нравятся постоянные, богатые объекты домена.
Длинный ответ:
В течение почти 10 лет я работал на довольно большой системе ~ 500k LOC с использованием Spring и Hibernate. Сначала мы начали с подхода «сценарий транзакции» (см. Раздел «Фаулер»), отчасти потому, что мы не доверяли Hibernate. Однако за короткое время мы стали доверять Hibernate, и благодаря моему гораздо более раннему обучению в довольно пуристском OO, я стал большим сторонником переходной настойчивости в сочетании с подходом, основанным на управлении доменами. Мы в основном пришли к мысли о том, что наша система поддерживается ODBMS (с большим количеством небольших утечек :-)).
Я назвал нашу архитектуру «ядром домена», потому что книга DDD еще не была написана. Это было в первые дни Hibernate, поэтому модель домена не была загрязнена аннотациями. Отдельная забота о сохранении сохранялась отдельно в XML-сопоставлениях.
Снова, с течением времени, мы улучшили нажатие на поведение в доменном слое. У нас была довольно традиционная схема контроллера -> service -> dao ->, которая была применена с учетом времени компиляции. То, что я наблюдал с течением времени, заключается в том, что эта модель очень хорошо работала для нашей системы, которая представляла каждый аспект довольно сложной области управления планом 401 (k), включая настройку плана, торговлю, учет, тестирование соответствия, продажи, брендинг и т. Д. Богатая модель домена с (относительно) прозрачной «магической» настойчивостью была ключом к тому, что мы могли создавать новые функции с точки зрения существующих функций в модели домена.
Наш сервисный уровень только организовал взаимодействие между техническими службами (такими как электронная почта, ввод-вывод файлов, очередь и т. Д.) И помог охватить пакеты доменов, когда это необходимо. Уровень сервиса также определяет границу транзакции (через Spring). Услуги только получили или выпустили DTO или примитивы. Многие люди ненавидят это, как перерыв в DRY, но мы обнаружили, что это помогло нам честно определить интерфейсы службы и код, который их использовал. Это также облегчило отдаленные вещи позже.
Этот подход позволил нам создать высококачественное программное обеспечение с довольно небольшой командой (мы были командой Scrum).
Итак, считайте меня верующим в постоянных объектах домена. Не знаю, помогает ли моя история, но я хотел поделиться ею.
Просмотреть презентацию http://www.infoq.com/presentations/Clean-Model-Tim-McCarthy – MikeSW
Спасибо, это выглядит великолепно! Наблюдение сейчас ... – HolySamosa