领域驱动设计:工作流逻辑在哪里?

时间:2009-09-23 19:55:37

标签: workflow domain-driven-design

在我的项目中,我拥有可在多个实体上运行的工作流程来完成业务交易。表示工作流逻辑的最佳位置是什么?目前我只是创建一个“XXXManager”,它负责与实体对象协作以结束业务事务。还有其他选择吗?

5 个答案:

答案 0 :(得分:3)

我会说你做了正确的事情,与多个实体合作完成某些事情。重要的是每个实体(实际上每个服务)应该有一个single responsibility

您正在谈论的总体工作流程是您可以将其视为应用层的一部分。

According to Paul Gielens(释义)应用层的职责是消化课程粒度的请求(消息/命令)以实现某个总体目标。它通过向域服务发送消息来实现此目的。然后,它(可选)决定向基础结构服务发送通知。

但那么什么是“服务”?!这是一个超载的术语,但描述得很好(再次,by Paul Gielens

您可能还想阅读Onion Architecture了解更多想法......

答案 1 :(得分:2)

通常有一个域对象应该实际处理被误认为是“实体”的控件。

是否存在由于此工作流而创建的某个实例?如果是这样,工作流逻辑可能属于那里。请考虑以下模型中的“订单”。

alt text http://img685.imageshack.us/img685/4383/order.png

奥德是名词和动词。 “订单”是由于“订购”而创建的对象。像任何好的类一样,它既有数据又有行为(我不是指getter和setter)。行为是与数据一起的动态过程,即订购工作流程。 “订单”控制器。

这就是OO被发明的原因。

答案 2 :(得分:1)

DDD可能不完全是关于这种事情的,所以我建议看一下服务层架构模式。 Martin Fowler的书“企业架构模式”是一本很好的书,可以解释它。您也可以在Fowler的网站上找到该模式的描述。

答案 3 :(得分:0)

创建工作流程系统可能是一个令人生畏的前景。您考虑过使用Workflow engines吗?

如果我理解正确,您将需要创建一个管理器,用于跟踪与用户相关的工作流中的不同事务。可能还有其他方法 - 但我总是使用引擎。

答案 4 :(得分:0)

对于很好的答案,我想添加"domain events"(链接仅仅是一个可能的实现),这是埃文斯自己更加关注("increased emphasis on events")。