1

以下の 2 つのソリューションのうち、どちらがベスト プラクティスなのか疑問に思っていました。

問題 : ステートレス セッション Bean VehicleBean があり、ビジネス ロジックと、ホイール、タイヤなどを備えた Car の永続性を備えたメソッドを実装しました。

@Stateless
class VehicleBean{
   @PersistenceContext
   private EntityManager em;

   @EJB
   Inspector inspectorBean;

   @EJB
   DocumentBean documentBean;

   public void persistCar(){
      Car car = new Car();
      car.setMake("Ford");
      em.persist(car);
      documentBean.persistDocument(new Document(car));
      for (int i = 0; i < 4; i++){
         createWheel(car);
      }
   private void createWheel(Car car){
      // some business logic
      inspectorBean.inspect();
      Wheel wheel = new Wheel();
      wheel.setCar(car);
      em.persist(wheel);
      ...
   }
   ...
}

互いに呼び出されるさまざまなプライベート メソッド (1) 車の作成、2) 車輪の作成など) があり、これらすべてのメソッドを 1 つのヘルパー クラスに再グループ化したいと考えています。

ソリューション:

1) VehicleBean のすべてのプライベート メソッドを含むヘルパー クラス CarBuilder を使用します。私は ejb インジェクションを使用できないので、次のようにコンストラクターへの参照によって渡したいと思います。

public void persistCar(){
   new CarBuilder(this, document, inspectorBean);
}

class CarBuilder{
   private VehiculeBean vehiculeBean;
   ...
   CarBuilder(VehiculeBean,....){
      this.vehiculeBean = vehiculeBean;
   }
}

2) CarBuilder をステートレス セッション Bean として作成し、その Bean を VehiculeBean に注入します。

2)を使用する利点はありますか?そのため、コンテナによって管理される CarBuilder、MotorcyleBuilder などのさまざまな Bean が多数あります。

4

1 に答える 1

0

コンストラクターでコンテナー管理オブジェクトへの参照を渡すと、コードの可読性が低下します (IMO)。依存性注入を使用してコンテナー管理リソースを作成すると、コードがより明確になります。

別のクラスでビジネス ロジックを分割する場合は、代わりにヘルパー クラスでエンティティを処理し、新しい EJB を作成します。

于 2013-06-09T07:22:01.840 に答える