我正在Java EE,JSF / Primefaces和hibernate下创建一个文档共享平台。对于每个数据对象(文档,存储库和用户),我创建了一个List<Event> events;
来存储各种事件(用户创建,文档修改等)。
为了尊重分层体系结构,我有一个模型层,我在其中定义数据对象,一个业务层,我定义我的会话bean(包含逻辑)和表示层,其中定义了我的应用程序的视图。
我为每个数据对象创建了一个Session bean来编码它的处理。因此,只要EventsSessionBean
,UserSessionBean
等,我就有DocumentSessionBean
来处理事件的持久性和提取。
例如,在创建用户时,我需要先在数据库中保留UserCreated
事件。因此,我必须在public Event createEvent(String label);
的{{1}}中调用方法UserSessionBean
。
这是一种“健康”的编码方式吗?我担心我的豆子之间会有责任。
代码段:
EventsSessionBean
认为//Class definition
@PersistenceContext
private EntityManager em;
@EJB
private EventSessionBeanLocal eventService;
public static final String EVENT_USER_CREATION = "UserCreated";
public RepositoryOwner createRepositoryOwner(/* username, email, ..etc*/){
Event event = eventService.createEvent(EVENT_USER_CREATION);
RepositoryOwner newUser = new RepositoryOwner();
LinkedList<Event> events = new new LinkedList<>();
events.add(event);
newUser.setEvents(events);
//Set other user attributes
newUser = em.merge(newUser);
return newUser;
}
在处理事件时是否采取了超出其范围的事情,这是错误的吗?
答案 0 :(得分:1)
这没有错,这是常见的做法。另一种方法(可以应用或不应用的天气取决于您的要求和业务逻辑)将具有您将用于此类任务的消息队列(MQ)。例如,您的UserSessionBean
会在创建用户时向队列添加消息,而某些message driven bean (MDB)会收到该消息,并调用EventSessionBean
来保留该事件。
但是,正如我所说,这取决于你的要求是否可以很好地使用。