显然在实体bean中使用无状态EJB bean会有异味,但请考虑以下情况并告诉我您是否知道更好的解决方案:
InvoiceTemplate
实体Bean,其字段为NextInvoiceDate
NextInvoiceDate
是一个复杂的过程,应该在InvoiceTemplate
类之外执行NextInvoiceDate
存储到db 时,都应更新InvoiceTemplate
醇>
目前我对NextInvoiceDate
实体bean中@PrePersist
@PreUpdate
方法中InvoiceTemplate
的生成有逻辑。逻辑变得越来越复杂,我想将它移到InvoiceTemplate
实体bean之外。在我看来应该有一个服务来计算NextInvoiceDate
。但是,从InvoiceTemplate
内部调用此服务是否正确?
答案 0 :(得分:3)
这不是一种气味 - 它是一种倾向于领域驱动的设计。
我不知道有任何办法自动执行此操作,但您可以:
Invoicetemplate
的会话bean中,注入具有计算下一个日期的逻辑的帮助bean entity.setNextDateHelper(..)
您还可以检查AspectJ是否不提供某些EJB选项,以便您可以在创建给定类型(InvoiceTemplate
)的实体时注入EJB。 AspectJ就像使用spring bean一样工作,我不知道EJB是否有这样的选项。
答案 1 :(得分:0)
您是否需要像服务或EJB那样复杂的东西?你能写一个静态方法(可能在实用程序类中)来保存逻辑吗?通常我对这种事情有很大的偏见,但如果你所拥有的是一些复杂的逻辑,不需要任何数据库交互或大量的对象协作,那么它可能是最干净的方法。