0

我希望这个问题不要太抽象。这是关于 Java EE 架构或服务设计的。我有两个业务逻辑(为了便于阅读在此进行了简化):

@Stateless
@LocalBean
public class EmailService {

  @EJB
  private SomeBean someBean;
  // ... some other EJBs to acces the DB layer (and using JPA)

  public void sendEmail(String recipient /* some parameters */) {
     // ... some email sending logic here

  }
}

@Stateless
@LocalBean
public class ExecutePaymentService {

  @EJB
  private UserBean userBean;
  // ... some other EJBs to acces the DB layer (and using JPA)

  public void executePayment(int amount, int userId) {
     // ... some payment logic here
     // NEED TO SEND EMAIL HERE
  }
}

我的设计是 JSF 托管 Bean 正在调用上述服务。我的问题是托管 Bean 包含一些逻辑:
- 执行付款
- 如果付款成功发送电子邮件
- 如果不做其他事情

我想在服务 EJB 中有这个逻辑,所以托管 Bean 只收集输入并返回结果。

另一个选项是ExecutePaymentService扩展EmailService然后调用 sendEmail 的东西。这可能导致一个巨大的继承树能够从任何服务提供任何服务,在长期和大型应用程序中更难维护......由于大多数服务需要注入 EJB 来访问我无法使用的数据库非 EJB 服务....

什么是允许 a 的更好方法service to call another service

4

1 回答 1

0

您应该问问自己 ExecutePaymentService 是否是电子邮件服务。
也许电子邮件服务只是您需要的功能之一?
为什么不将电子邮件服务注入到 ExecutePaymentService?
我的回答可以应用于其他方式,例如 WebSerivces(可以使用 EJB 实现),
这更像是经典的面向对象设计,而不是真正的 Java 技术设计问题,一旦您了解 ExecutePaymentService 是否在其基础EmailService(我感觉答案是否定的)——
您将了解如何更好地建模 bean。

于 2012-07-19T15:18:02.910 回答