豆类:如何妥善管理受另一个影响的财产

时间:2012-10-30 08:41:58

标签: java javabeans

我有一个Entity / JSF Managed Bean Ticket代表一个帮助台 票。

它有status属性;当状态设置为closed我想要的时候 将closingDate属性的值更改为当前系统时间。 但我认为代码应该包含在bean中,就像每次一样 门票关闭时应记录下来。

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

  1. 设置creationTime私有的setter,并在更改时更改其值 调用status setter。快速而快速,但改变了二者 属性。此外,迫使我使用JPA字段访问(没有太大的问题 因为我已经在使用它,但仍然是一个限制),我不清楚 bean序列化后会发生什么。
  2. 使status属性成为绑定属性,如JavaBeans中所述, 并使类PropertyChangeListener成为自己。很正式,但是 我的比喻有点过于复杂。
  3. 将两个属性的setter设为private,并添加一个非bean方法 执行这两项操作的close()。我会这样,但它可以做到 我使用JSF很复杂。
  4. 什么都不做。保持bean尽可能愚蠢,并将逻辑移动到 控制器;我的手指交叉,希望没有人忘记更新两者 属性。
  5. 我赞成1)或3),但我想知道是否有更好的方法。

1 个答案:

答案 0 :(得分:0)

我不知道是否有人可以通过正确的方式来管理它,因为可以像许多方法一样为许多不同的方法做出争论。要添加到列表中作为1)和3)的组合,例如:

  • status设置为已关闭并将两个设置者都公开时,请设置creationTime更新status的设置者。从JPA的角度来看,我并不知道这有什么不利之处。

然而,我建议反对的是拥有 Entity / JSF Managed Bean 。我建议有两个,一个Entity bean和一个JSF Managed Bean。通过这种方式,您的Entity bean可以保持为 dumb ,而您的JSF Managed Bean将具有 smart 方法,如close()reopen()并且包含对Entity bean的一系列 dumb 调用。此外,您可以在persist()中执行@PreDestroy之类的操作。易于开发,易于维护,易于制定决策。希望你能发现这有用。