设计 - 如何在持久化对象改变状态时处理事件?

时间:2009-05-05 07:34:55

标签: persistence

这可能是一个愚蠢的问题,但我是新手开发者。

让我们说,在数据驱动的CRM'应用程序中,我的客户类型可以经历多个阶段 - 即阶段1 - 5.

当客户更改阶段时 - 应触发事件。 示例 - 当客户从第2阶段进入第3阶段时,会发送电子邮件,更新某些列表并执行一些计算。

我想象客户改变状态可能是应用程序用户通过某个图形界面手动更新客户的结果。

所以我想知道 - 我应该通过断言只有一种方法来更新客户的阶段状态,然后确保只要该操作完成,就会执行一系列操作吗?

在我的想法(和场景)中,这意味着从关系数据库中检索客户,更新阶段字段,使客户退缩,然后始终通过触发注册为依赖于该操作的任何操作来对此操作作出反应特别是相变。 但是,如果我想对10.000个客户进行批量阶段更改,我不确定这会很聪明。

对此有何想法?我真的只是在寻找任何形式的输入 - 假设我完全无能为力。

2 个答案:

答案 0 :(得分:0)

在许多情况下,最好在业务逻辑中使用显式函数来更改阶段。这应该是改变阶段的唯一方法,而且是明确的。就像“ChangeCustomerPhase(Customer customer,Phase newPhase)”一样。如果可以自由更改所有内容,这样就可以更轻松地跟踪更改。

答案 1 :(得分:0)

我认为可以使用单独的功能,一个用于单个客户阶段更改,另一个用于批量更改。后者根据需要会或不会执行额外的行动。它还可以以更有效的方式进行,甚至将行动或其中的一部分排队,如发送电子邮件,进行后台处理,如果额外的行动很长,并且需要及时完成相变方式。

当相变由于某些可能复杂的条件的产生而不是由于手动相变而出现时,会出现另一个问题。然后,您应该在业务逻辑中的某处挂钩条件检查,足够低以捕获影响阶段的所有更新操作。但正如你所写,情况并非如此,因为在你的情况下,相变是手动发出的。