我的用例如下:
使用订单行、客户和付款详细信息管理订单。
该应用程序包含一个订单列表视图,从中可以打开一个订单详细信息视图以编辑现有订单或创建新订单。订单详细信息视图使用视图参数(现有订单 ID 或无以指示要创建的新订单)。
当打开订单详细信息视图时,OrderControllerBean 将启动 ConversationalScope,并根据订单 ID 的可用性加载或创建新的订单实体。这个 bean 是一个有状态的会话 bean,也可以用作外观。bean 包含处理订单行、客户和付款详细信息以及保存和删除订单的方法。这些方法使用被设计为无状态会话 bean 的注入 EJB 作为某种 DAO 来处理 JPA 实体订单、订单行、客户和支付细节。
从带有客户信息、付款信息和订单行列表的订单详细信息视图,用户可以导航到添加/编辑订单行的订单详细信息视图以及以类似方式导航到客户和付款详细信息视图。这些详细视图都使用相同的 OrderControllerBean。在客户、订单行和付款明细视图中,有确定和取消按钮,它们不是事务性的。
在订单详细信息视图中有一个保存和取消按钮,该按钮应保留在对话期间完成的所有修改。
我现在的问题是:这个设计合适吗?
我不确定以下问题:
如果用户从不使用 Save 或 Cancel 会发生什么?
在转换或会话超时之前,一切都会一直存在吗?从交易的角度来看,这意味着什么?这对托管实体意味着什么?如果用户离开他的工作场所并稍后回来继续进行对话会发生什么?如果对话超时,我该如何优雅地处理这个问题?