Я использовал для разработки своего приложения вокруг модели анонимного домена, поэтому у меня было много объектов репозитория, которые были введены на большой, толстый, уровень обслуживания, ориентированный на транзакцию. Этот шаблон называется сценарием транзакций. Это не считается хорошей практикой, поскольку это приводит к процедурному коду, поэтому я хотел перейти к проекту, управляемому доменом.Дизайн и транзакции, управляемые доменом, в среде Spring
После прочтения нескольких статей в Интернете, слушая рассказ Криса Ричардсона о Parleys и читающий главы DDD POJO в действии, я думаю, что получил большую картину.
Проблема в том, что я не знаю, как организовать транзакции в моем приложении. Ch Ричардсон в своей книге утверждает:
Презентация уровень обрабатывает HTTP-запросы от браузера пользователя, вызвав модели предметной области, прямо или косвенно через фасад, который, как я , описанный в предыдущей главе, либо POJO или EJB.
Хорошо до сих пор, но Srini Penchikala на InfoQ article состояниях:
Некоторых разработчики предпочитают управлять транзакциями в классах DAO которых является плохим дизайном. Это приводит к слишком тонкому управлению транзакциями, что не дает гибкости в управлении вариантами использования, когда транзакции охватывают несколько доменных объектов. Сервисные классы должны обрабатывать транзакции; таким образом, даже если транзакция охватывает несколько доменных объектов, класс службы может управлять транзакцией, поскольку в большинстве случаев использования класс Service обрабатывает поток управления.
Хорошо, поэтому, если я правильно понимаю, классы репозитория не должны быть транзакционными, уровень обслуживания (который теперь намного тоньше) является транзакционным (как это было в шаблоне сценария транзакции). Но что, если объекты домена вызываются через слой представления напрямую? Означает ли это, что мой объект домена должен иметь транзакционное поведение? И как реализовать его в Spring или EJB-среде?
Это кажется странным для меня, поэтому я был бы счастлив, если бы кто-нибудь разъяснил это. Спасибо.
Я добавил тэг java, так как он рассматривает все виды DI + ORM (не только в java, но это ваш контекст) – Bozho