-2

我有一个Ticket代表服务台票证的实体/JSF 托管 Bean。

它有一个status属性;当状态设置为closed我想将closingDate属性的值更改为当前系统时间。但我认为代码应该包含在 bean 中,因为每次关闭票证时都应该记录时间。

管理它的正确方法是什么?我有几个想法。

  1. 将 setter 设为私有,并在调用 settercreationTime时更改其值 。status快速且快速,但让 setter 更改了两个属性。此外,迫使我使用 JPA 字段访问(问题不大,因为我已经在使用它,但仍然是一个限制)并且我不清楚当 bean 被序列化时会发生什么。
  2. 使status属性成为 JavaBeans 中描述的绑定属性,并使类成为PropertyChangeListener其自身。非常正式,但对我来说有点过于复杂了。
  3. close()将两个属性的设置器设为私有,并添加一个执行这两个操作的非 bean 方法 。我会这样做,但它会让我使用 JSF 变得复杂。
  4. 没做什么。尽可能让 bean 保持愚蠢,并将逻辑移至控制器;交叉手指希望没有人忘记更新这两个属性。

我赞成 1) 或 3),但我想知道是否有更好的方法。

4

1 回答 1

0

我不知道是否有人可以告诉您管理它的正确方法,因为可以为许多不同的方法提出论据,就像您提出的那样。要将 1) 和 3) 的组合添加到您的列表中,例如:

  • 当设置为关闭时让status更新的设置者保持公开状态。两者都有好处,因为从 JPA 的角度来看,我不知道这有什么缺点。creationTimestatus

然而,我建议反对的是拥有一个Entity/JSF Managed Bean。我建议有两个,一个实体 bean 和一个 JSF 托管 Bean。这样,您的 Entity bean 可以尽可能地保持,而您的 JSF Managed Bean 将具有智能方法,例如close()orreopen()并且由对 Entity bean 的一系列调用组成。此外,您可以执行类似persist()in 的操作@PreDestroy。易于开发、易于维护、易于决策。希望你会发现这很有帮助。

于 2012-11-01T20:48:20.840 回答