【发布时间】:2013-07-18 17:31:27
【问题描述】:
在领域驱动设计中,领域服务应该包含自然不属于实体内部的操作。
我的习惯是为每个实体创建一个服务并在其中分组一些方法(Organization 实体和OrganizationService 服务)。
但我越想:OrganizationService 没有任何意义,“组织”不是服务,而是事物。
所以现在我必须添加一个将复制整个组织聚合的组织深层复制功能,所以我想将它放在一个服务中。
我应该这样做:OrganizationService::copyOrganization(o)?
或者我应该这样做:OrganizationCopyService::copyOrganization(o)?
更一般地说:“服务”是一个包含多个操作的抽象概念,还是一个服务是一个具体的操作?
编辑:第一个例子不是很好:
-
StrategyService::apply()/cancel()还是StrategyApplicationService::apply()/cancel()? (这里的“应用”与应用层无关;) -
CarService::wash()或CarWashingService::wash()?
在所有这些示例中,最具体的服务名称似乎是最合适的。毕竟,在现实生活中,“洗车服务”是有道理的。但我最终可能会得到很多服务......
*注意:这不是关于意见的问题!这是一个关于领域驱动设计方法的精确、可回答的问题。当我问“我应该”时,我总是厌倦了接近投票,但有 一种 DDD 的做事方式。*
【问题讨论】:
-
为什么要克隆组织?该问题的答案可能会更多地揭示该服务实际提供的内容。我实际上并不想知道 - 我只是想将您的思维过程提升回领域......
-
@MattDavey 我明白你的意思。但恐怕就这么简单:用户想要“复制”/“复制”现有组织,因为他想创建一个看起来很像以前的组织的新组织。不过,我欢迎您对此提出想法 :)
-
“用户想要“复制”/“复制现有的...”——看起来用户给了你一个解决方案来实现而不是一个问题解决!真正的问题是从头开始创建新组织太耗时吗?在这种情况下,您提供的服务可以加快这一过程吗?
-
@MattDavey 我添加了更多示例,因为我选择的示例毕竟不是很好:/
标签: domain-driven-design ddd-service