在helper类中传递的ejb引用或者创建ejb

时间:2013-06-09 00:55:07

标签: ejb-3.0

我想知道下面两个解决方案中哪一个是最佳做法?

问题:我有一个无状态会话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)使用一个帮助器类CarBuilder,它包含我的VehicleBean中的所有私有方法。由于我不能使用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)有什么好处吗?所以有很多不同的bean,如CarBuilder,MotorcyleBuilder等,由容器管理。

1 个答案:

答案 0 :(得分:0)

在构造函数中传递对容器管理对象的引用会降低代码(IMO)的可读性。如果使用依赖注入创建容器管理资源,则代码会变得更加清晰。

让helper类代替实体,并在想要在另一个类中分解业务逻辑时创建一个新的EJB。