Использование EJB-компонентов без сохранения состояния в компоненте - PullRequest
6 голосов
/ 13 сентября 2010

Очевидно, что использование EJB-компонентов без состояния в запахах бина сущности, но, пожалуйста, рассмотрите следующий сценарий и скажите, знаете ли вы лучшее решение:

  1. У меня есть InvoiceTemplate Бин сущностиполе NextInvoiceDate
  2. Генерация NextInvoiceDate является сложной процедурой и должна выполняться вне класса InvoiceTemplate
  3. NextInvoiceDate следует обновлять каждый раз, когда InvoiceTemplate сохраняется вдБ

Пока у меня есть логика относительно генерации NextInvoiceDate в @PrePersist @PreUpdate метона в InvoiceTemplate бобе сущности.Логика становится все более и более сложной, и я хочу переместить ее за пределы сущностного компонента InvoiceTemplate.Мне кажется, что должен быть сервис для расчета NextInvoiceDate.Но тогда правильно ли вызывать этот сервис изнутри InvoiceTemplate?

Ответы [ 2 ]

3 голосов
/ 13 сентября 2010

Это не такой запах - это склонность к доменному дизайну.

Я не знаю ни одного способа сделать это автоматически, но вы можете:

  • в сессионных компонентах, где вы обрабатываете Invoicetemplate, введите вспомогательный компонент, имеющий логику для вычисления следующей даты
  • создайте приватное поле с установщиком на объекте, и прежде чем начать его использовать, вызовите entity.setNextDateHelper(..)

Вы также можете проверить, не предлагает ли AspectJ некоторые параметры EJB, чтобы можно было внедрить EJB при создании объекта данного типа (InvoiceTemplate). AspectJ работает так же с весенними бобами, я не знаю, есть ли такие опции для EJB.

0 голосов
/ 13 сентября 2010

Вам нужно что-нибудь сложное, как сервис или EJB? Можете ли вы просто написать статический метод (возможно, в служебном классе) для хранения логики? Обычно я довольно склонен против такого рода вещей, но если все, что у вас есть, это какая-то сложная логика, которая не требует какого-либо взаимодействия с БД или большого взаимодействия объектов, то это может быть самым чистым подходом.

...