我想知道下面两个解决方案中哪一个是最佳做法?
问题:我有一个无状态会话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等,由容器管理。
答案 0 :(得分:0)
在构造函数中传递对容器管理对象的引用会降低代码(IMO)的可读性。如果使用依赖注入创建容器管理资源,则代码会变得更加清晰。
让helper类代替实体,并在想要在另一个类中分解业务逻辑时创建一个新的EJB。