【问题标题】:ejb references passed in helper class or create ejb insteadejb 引用在帮助类中传递或创建 ejb
【发布时间】:2013-06-09 00:55:07
【问题描述】:

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

问题:我有一个无状态会话 bean VehicleBean,我实现了一个具有业务逻辑和持久性的汽车及其车轮、轮胎等的方法。

@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 等由容器管理。

【问题讨论】:

    标签: ejb-3.0


    【解决方案1】:

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

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

    【讨论】:

    • 如果唯一的问题是通过将 ejb 引用传递给非托管帮助类的代码可读性,我想我更喜欢在我的帮助类中使用 jndi 查找。因为如果我开始在每个单一模式中实现无状态 bean,我使用(例如在我的应用程序中经常使用的构建器或访问者),除了依赖注入之外是否有真正的收获??
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-02
    • 1970-01-01
    • 1970-01-01
    • 2012-03-27
    • 1970-01-01
    • 2010-12-27
    相关资源
    最近更新 更多