代码之家  ›  专栏  ›  技术社区  ›  mgamer

在实体bean中使用无状态EJB bean

  •  6
  • mgamer  · 技术社区  · 14 年前

    显然,在实体bean中使用无状态的EJB bean有异味,但是请考虑下面的场景,并告诉我您是否知道更好的解决方案:

    1. 我有一个 InvoiceTemplate 带字段的实体bean NextInvoiceDate
    2. 生成 下一个语音日期 是一个复杂的过程,应该在 发票模板
    3. 下一个语音日期 每次都应该更新 发票模板 存储到数据库

    目前,我对 下一个语音日期 在里面 @PrePersist @PreUpdate 方法 发票模板 实体bean。逻辑越来越复杂,我想把它从 发票模板 实体bean。在我看来应该有一个服务来计算 下一个语音日期 . 但从内部调用此服务是否正确 发票模板 ?

    2 回复  |  直到 14 年前
        1
  •  3
  •   Bozho    14 年前

    这不是一种味道,而是一种向领域驱动的设计倾斜的感觉。

    我不知道有什么方法可以自动完成,但您可以:

    • 在会话beans中处理 Invoicetemplate ,注入具有逻辑来计算下一个日期的助手bean
    • 在实体上创建带有setter的私有字段,然后在开始使用它之前调用 entity.setNextDateHelper(..)

    你也可以检查 AspectJ 不提供一些EJB选项,这样无论何时只要给定类型的实体都可以注入EJB( InvoiceTemplate )已创建。AspectJ与SpringBeans的工作方式类似,我不知道EJB是否有这样的选项。

        2
  •  0
  •   TMN    14 年前

    您需要像服务或EJB那样复杂的东西吗?你能只写一个静态方法(可能在实用程序类上)来保存逻辑吗?通常,我对这类事情很有偏见,但是如果您所拥有的只是一些不需要任何DB交互或大量对象协作的复杂逻辑,那么它可能是最干净的方法。