0

在问我的问题之前,我必须描述我们的应用程序是如何构建的。门面/服务架构

我们运行了几个在服务层使用ejb的web应用程序。我试图描述一个简单的例子通信:

  • 一个JSF豆(PersonH​​andler)调用一个门面删除“人”对象
  • 一个门面可以用许多不同的服务,但不能使用其他的门面。在这种情况下,PersonFacade使用PersonService(删除该人员)和NotificationService(发送电子邮件)。交易也由门面逻辑控制。如果交易成功提交,则只能发送电子邮件。
  • 服务无法引用其他服务或外观。而不是这个PersonService只有一个对PersonDao的引用(坚持逻辑)。

我觉得这个架构很常见。这是我的问题。

在PersonFacade的删除方法中,我们有非常重要的代码,我们不会重复。每次应该删除一个人这段代码应该运行。在另一个外观逻辑中,我们需要完全相同的代码,但外观< - >不允许外观通信。

这个问题的最佳解决方案是什么?

继承人我当前的解决方案,但我不满意它。我创建了一个新的ejb模块,其中包含一个处理删除逻辑的ejb。两个外观模块都依赖于新模块,所以一切都可以找到,我不会打破“外墙从不使用其他外墙”合同。如果我们每次使用这个,我们需要在不同的地方使用相同的代码,我们的模块将会爆炸,模块会变得混乱。目前我们有超过250个ejb/jar模块。

回答

0

下面是我会考虑的两个选项。

  1. 有在碱门面共同逻辑所有门面的将从延伸,或者
  2. 移动共同逻辑到辅助类(实用)的任何门面可以调用。我看到你已经通过创建一个新的ejb来做类似的事情。我不确定它是否需要成为ejb,取决于确切的逻辑。