请banq用ddd的角度为我的这个业务场景解下惑,万分感谢

12-02-02 berserk
业务场景是一个费用管理系统的一部分:

用户可以根据某个费用科目来进行费用申请,申请后的费用需要自动转交给用户的上级来审核,走多级审核流程。

申请存在多种状态:待审核,已审核,已驳回等等。

这个业务里,申请是一个bo,拥有如领用,提交审核等行为。

同时这里,存在一个部门、费用科目、审核人的配置对象。

用户在申请时,需要根据这个配置来实现某些功能:

1 显示自己所在部门有那些科目是可以进行申请的。

2 自动搜索用户的申请审核人。

这个配置有一个特殊之处,就是它是不变的,即只要有一个用户根据这个配置提交了一个申请,那这个配置就是不可变的,对这个配置进行修改,只会重新生成一个新的配置对象。

现在我就比较迷糊了,这个配置对象应该是属于一个vo,还是一个bo呢?

从不变性上看,这个配置是vo,因为它一旦在界面上配置后,内部就不会再变化了,不像其他bo一样,会产生变化。

从行为上看,这个配置很像bo,因为它决定了一些关键业务:由它 1 才能过滤出用户可使用的费用科目,2 才能决定用户申请的审核人。

我这边是这么考虑的:

把这个配置看成一个vo+bo的结合。 首先vo是不可变的,其次结合dci的思想,把bo的行为分解到各个role中。

比如:在显示可申请科目的场景里,就建立科目过滤role

在申请提交审核的场景里,就建立科目审核人选择role

请banq老大看看这种思路可以吗?

    

banq
2012-02-02 12:00
2012年02月02日 09:54 "@berserk"的内容
现在我就比较迷糊了,这个配置对象应该是属于一个vo,还是一个bo呢? ...

配置数据是VO,表达一些规则过滤约束,在进行使用了可使用Specification规格模式,在不同场景下通过配置规格对申请科目进行业务上过滤约束。

以上是初步意见。

猜你喜欢