领域服务

    • 无状态
    • 包含领域逻辑
    • 包含知识但不属于实体和值对象

    DDD中的一个重要概念——领域服务,我们没有讨论。其内涵领域逻辑且无状态。领域服务可以被看做是知识的容器,不属于实体或者值对象,但对领域来讲依旧很重要。当一个操作设计多个实体时,使用单个实体的方法行使此功能的意义不大。这个时候可以将功能委托至领域服务。例如汽车服务中的轮胎维护,显然轮胎的维护不属于轮胎。更好的方式是将维护服务转移至领域服务。然而另一个问题出现了,领域服务和应用服务由什么不同?

    • 领域服务
      • 处于领域层
      • 包含领域逻辑
      • 不能和外部通信
    • 应用服务
      • 领域层外部
      • 不包含领域逻辑
      • 能和外部通信

    应用服务属于领域层外,而领域服务在其内。应用服务的职责是和外部通信且不含任何领域逻辑,它将领域逻辑委托给领域类,如实体、资源库和领域服务。领域服务含有领域逻辑且不应和除领域层外的对象通信。例如,现有将产品平均分发至SnackMachine的需求,显然, 它是领域服务的职责,因为它是领域有关的操作且和任何实体无直接关系。