在域服务中封装进程

时间:2013-01-28 20:25:06

标签: domain-driven-design

注意 - 所有引用均来自DDD: Tackling Complexity in the Heart of Software

第一句(第222页):

  

作为域对象处理

     

在前面让我们同意我们不想制定程序   我们模型的突出方面。对象意味着封装   程序,让我们考虑他们的目标或意图。

     

我所说的是域中存在的进程,即   我们必须代表模型。当这些出现时,他们倾向于   使尴尬的对象设计。

     

本章的第一个例子描述了一个运输系统   路边的货物。这个路由过程与业务有关   含义。服务是明确表达这种过程的一种方式,   同时仍然封装了极其复杂的算法。

第二句(第104,106页):

  

有时候,这不是一件事。在某些情况下,最清晰,最多   实用设计包括概念上不属于的操作   任何对象。而不是强迫这个问题,我们可以遵循自然   问题空间的轮廓,并明确包括服务   模型。

     

当域中的重要流程或转换不是a   实体或值对象的自然责任,添加操作   将模型作为声明为服务的独立接口。限定   关于模型语言的界面,并确保   操作名称是无所不在的语言的一部分。

我无法弄清楚第一作者是否使用术语“进程”来描述相同类型的行为(也应该封装在服务)如第二个引文中所述,或者术语“进程”用于描述一种与他在第104,106页描述的行为完全不同的行为?

谢谢

2 个答案:

答案 0 :(得分:2)

这些概念非常接近,但对我来说,第一个引用看起来更像是关于没有软件的大型现实域过程(例如“货物路由过程”)。

第二个不太清楚,但我认为它描述了在域的建模版本中发生的较小的操作/过程/转换。

虽然第一种应该从早期分析阶段立即点击作为“服务”,后者更加微妙,可能需要更多时间来区分常规实体行为 - 您可以将其首先包含在实体中但是实现当你改进模型时,它并不适合它。

答案 1 :(得分:1)

认为在p。 222他在谈论一种特定的过程。所以就像在p。 102引用,它们可以作为服务实现。但是,某些流程涉及实际的域流程,并且可以从模型中的显式表示中受益。这可能不会立即显而易见,并且可以在服务之外调用更复杂的对象模型。