【发布时间】:2011-08-29 05:31:43
【问题描述】:
我有一个名为VehicleRecord 的域对象,它是一个休眠实体。这些 VehicleRecords 上的 CRUD 操作是通过实体访问对象处理的,该对象实现为无状态会话 bean 接口
@Local
interface VehicleRecordEao {
void add(VehicleRecord record);
List<VehicleRecord> findAll();
...
}
@Stateless
class HibernateVehicleRecordEaoBean implements VehicleRecordEao { ... }
从业务层的角度来看,删除和添加这些记录不仅仅是 CRUD 操作。例如,可能存在日志记录和安全要求。为了向客户端提供这些操作,会话 bean 在业务层中创建。
@Local
interface VehicleRecordManager {
void createVehicleRecord(VehicleRecord record);
List<VehicleRecord> findAll(String make, String model);
...
}
@Stateless
class VehicleRecordManagerBean {
public void createVehicleRecordManager(VehicleRecord record) {
//business rules such as logging, security,
// perhaps a required web service interaction
//add the new record with the Eao bean
}
...
}
控制器在表示层和上述业务层之间工作以完成工作,并根据需要在表示对象(如表单)和实体之间进行转换。
这里有些不对劲(气味)。我有一个名为 Manager 的类,它必须是一个危险信号,但 EJB 书籍中的几个示例实际上暗示了这种高级类,并且倾向于自己使用名称 manager。我是 EJB 设计的新手,但在 OO 设计中制作称为 Manager 或 Handler 或 Utility 的高级类的程序性尖叫,需要重新考虑他们的设计。
这些过程实用程序类会话 bean 是正常模式,还是通过一堆仅与它们操作的实体相关的方法来组织会话是不好的?会话 bean 有任何命名约定吗? Eao 和业务会话 bean 是否应该在同一层工作?
如果这种模式有不那么臭的替代品,我很想知道,谢谢。
【问题讨论】:
标签: java jakarta-ee ejb-3.0