领域服务
- 无状态
- 包含领域逻辑
- 包含知识但不属于实体和值对象
DDD中的一个重要概念——领域服务,我们没有讨论。其内涵领域逻辑且无状态。领域服务可以被看做是知识的容器,不属于实体或者值对象,但对领域来讲依旧很重要。当一个操作设计多个实体时,使用单个实体的方法行使此功能的意义不大。这个时候可以将功能委托至领域服务。例如汽车服务中的轮胎维护,显然轮胎的维护不属于轮胎。更好的方式是将维护服务转移至领域服务。然而另一个问题出现了,领域服务和应用服务由什么不同?
- 领域服务
- 处于领域层
- 包含领域逻辑
- 不能和外部通信
- 应用服务
- 领域层外部
- 不包含领域逻辑
- 能和外部通信
应用服务属于领域层外,而领域服务在其内。应用服务的职责是和外部通信且不含任何领域逻辑,它将领域逻辑委托给领域类,如实体、资源库和领域服务。领域服务含有领域逻辑且不应和除领域层外的对象通信。例如,现有将产品平均分发至SnackMachine的需求,显然, 它是领域服务的职责,因为它是领域有关的操作且和任何实体无直接关系。