注意 - 所有引用均来自DDD: Tackling Complexity in the Heart of Software
第一句(第222页):
作为域对象处理
在前面让我们同意我们不想制定程序 我们模型的突出方面。对象意味着封装 程序,让我们考虑他们的目标或意图。
我所说的是域中存在的进程,即 我们必须代表模型。当这些出现时,他们倾向于 使尴尬的对象设计。
本章的第一个例子描述了一个运输系统 路边的货物。这个路由过程与业务有关 含义。服务是明确表达这种过程的一种方式, 同时仍然封装了极其复杂的算法。
第二句(第104,106页):
有时候,这不是一件事。在某些情况下,最清晰,最多 实用设计包括概念上不属于的操作 任何对象。而不是强迫这个问题,我们可以遵循自然 问题空间的轮廓,并明确包括服务 模型。
当域中的重要流程或转换不是a 实体或值对象的自然责任,添加操作 将模型作为声明为服务的独立接口。限定 关于模型语言的界面,并确保 操作名称是无所不在的语言的一部分。
我无法弄清楚第一作者是否使用术语“进程”来描述相同类型的行为(也应该封装在服务)如第二个引文中所述,或者术语“进程”用于描述一种与他在第104,106页描述的行为完全不同的行为?
谢谢
答案 0 :(得分:2)
这些概念非常接近,但对我来说,第一个引用看起来更像是关于没有软件的大型现实域过程(例如“货物路由过程”)。
第二个不太清楚,但我认为它描述了在域的建模版本中发生的较小的操作/过程/转换。
虽然第一种应该从早期分析阶段立即点击作为“服务”,后者更加微妙,可能需要更多时间来区分常规实体行为 - 您可以将其首先包含在实体中但是实现当你改进模型时,它并不适合它。
答案 1 :(得分:1)
我认为在p。 222他在谈论一种特定的过程。所以就像在p。 102引用,它们可以作为服务实现。但是,某些流程涉及实际的域流程,并且可以从模型中的显式表示中受益。这可能不会立即显而易见,并且可以在服务之外调用更复杂的对象模型。