Программирование на основе домена с использованием Spring - PullRequest
1 голос
/ 25 февраля 2011

У меня есть вопрос по DDD & Spring.Я всегда проектирую свое приложение на основе анемичной доменной модели и сервиса, заботясь о бизнес-логике / персистентности.

Предположим, у вас есть управляемый пружиной сервис персистентности / репозитария для объекта Domain, например Book.Если мне нужно представить метод save () для книги, тогда мне понадобится bean-компонент репозитория внутри моего домена, или мне придется искать контекст для bean-компонента репозитория.Что в точности противоположно внедрению зависимости.

Теперь, если у меня есть идентификатор хранилища, введенный в домен, и объект домена кэшируется (кластеризованный кэш), а затем при десериализации у него не будет внедренной службы хранилища, как пружинные контейнеры.разные.

Я могу ошибаться, но если кто-то может объяснить мне, как этот сценарий будет работать, это будет очень полезно

Ответы [ 2 ]

2 голосов
/ 28 июня 2011

Я думаю, что «фасад» вашего приложения должен использовать репозиторий (или другой сервис инфраструктуры) для сохранения «книги».Книга не должна сохранять себя , это ответственность Репозитория.

Если вам необходимо выполнить какую-либо инфраструктурную операцию (например, поиск в базе данных) из Доменного объекта, товы должны получить доступ к этому репозиторию, просмотрев контекст (и, в результате, получив соединение с Spring) или внедрив репозиторий через внедрение зависимостей в сущности.

Проблема заключается в том, что «создание экземпляра» сущностиэто не ответственность Spring, но провайдера постоянства, поэтому Spring не может справиться с этой инъекцией.Что делать?

Ну, есть несколько способов (ни один из них не очень «красивый») сделать это:

  • Через AOP: вы можете обрабатывать код с помощью Aspect Oriented Framework(как AspectJ) конфигурирование системы для внедрения любой зависимости в сущности в момент создания экземпляра.
  • Через перехватчик Hibernate: если ваш поставщик сохраняемости Hibernate, он предлагает вам подключить перехватчики в определенных точкахЖизненный цикл Сущностей.Вы можете настроить перехватчик, который ищет контекст пружины для внедрения зависимостей в экземпляры каждого объекта.
  • Возможно, самый простой способ - реализовать небольшой и статичный «serviceLocator» в сочетании с пружиной, которая ищет сервисы.Сущности спросили, когда они им нужны.Этот сервисный локатор - просто слой, позволяющий избежать привязки ваших сущностей к Spring.
1 голос
/ 25 февраля 2011

Я думаю, что метод "save" (например, save в БД) не принадлежит объекту домена ... Книга "сохраняет" сама?Или хранилище сохраняет его? ...

...