【发布时间】:2015-02-13 14:41:14
【问题描述】:
我正在 Java EE、JSF/Primefaces 和 hibernate 下创建一个文档共享平台。对于每个数据对象(文档、存储库和用户),我创建了一个 List<Event> events; 来存储各种事件(用户创建、文档修改等)。
为了尊重分层架构,我有一个定义数据对象的模型层、一个定义会话 bean(包含逻辑)的业务层和定义应用程序视图的表示层。
我为每个数据对象创建了一个会话 bean 来对其处理进行编码。所以我有一个EventsSessionBean 来处理事件的持久性和获取,只要UserSessionBean、DocumentSessionBean 等。
比如在创建User的时候,我之前需要在数据库中持久化UserCreated事件。因此,我必须从EventsSessionBean 调用UserSessionBean 中的方法public Event createEvent(String label);。
这是一种“健康”的编码方式吗?恐怕我的豆子之间会混杂责任。
代码 sn-p:
//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;
}
认为UserSessionBean 在处理事件时对超出其范围的事物进行操作是否有误?
【问题讨论】:
-
完全健康。
-
只有经过编辑的代码描述,不可能说实际所做的事情是否健康。从 EJB 中调用 EJB 当然完全没问题(事实上——你应该这样做),但这并不意味着你拥有的任何代码都在做正确的事情。
-
@Gimby 你怎么看?
-
@Hichamov 扁平的简单代码,可读性强,并以代码可重用的方式正确分离关注点。打败我为什么你怀疑你面前的东西。
-
我最关心我的每一个豆子的责任。我很容易认为,在这个问题的情况下,
UserSessionBean正在处理超出其范围的事件创建
标签: java hibernate jsf jakarta-ee primefaces