0

この質問が抽象的すぎないことを願っています。これは、JavaEEアーキテクチャまたはサービスの設計に関するものです。私には2つのビジネスロジックがあります(読みやすくするためにここでは簡略化しています)。

@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サービス...

を許可するためのより良い方法は何でしょうservice to call another serviceか?

4

1 に答える 1

0

ExecutePaymentServiceが電子メールサービスであるかどうかを自問する必要があります。
たぶん、電子メールサービスはあなたが必要とする機能主義者の1人にすぎませんか?
ExecutePaymentServiceにEメールサービスを注入してみませんか?
私の答えは、WebSerivces(EJBを使用して実装できます)などの他の手段に適用できます。
これは、実際にはJavaの技術設計の質問というよりも、古典的なオブジェクト指向設計に似ています。ExecutePaymentServiceがそのベースにあるかどうかを理解すると、 EmailService(答えはNOだと思います)-Beanを
より適切にモデル化する方法を理解できます。

于 2012-07-19T15:18:02.910 に答える