1

我想知道以下两种解决方案中的哪一种是最佳实践?

问题:我有一个无状态会话 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 等由容器管理。

4

1 回答 1

0

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

当您想在另一个类中分解业务逻辑时,让帮助类与实体一起工作并创建一个新的 EJB。

于 2013-06-09T07:22:01.840 回答