天天看点

DDD之领域服务与领域事件

领域服务

领域中的服务表示一个无状态的操作,它用于实现特定于某个领域的任务。这里我们要搞清楚什么样的操作需要实体,值对象,什么样的操作需要采用领域服务。

另外,领域服务不是应用服务,在应用服务中我们不需要处理业务逻辑,业务逻辑都落在领域服务中。

领域服务发现:

  • 执行一个显著的业务操作过程
  • 对领域对象进行转换
  • 以多个领域对象作为输入进行计算,产生一个值对象。

    过度使用领域服务将会产生一个贫血模型,例如数据建模时,我们的实体常用只含有get/set方法,所有的业务逻辑都包含在了service。这样导致service变成了一个大泥球。注意区分领域服务与实体,值对象行为。

领域事件

领域事件通常是用来与其他聚合解耦的,采用观察者模式,一个聚合订阅另外一个聚合的事件。

如果是同一个限界上下文时,通常采用进程内的消息发布领域事件,具体实现可以参考我的这篇博客《Spring Data实现领域事件》

如果是在不同限界上下文时,我们可以采用消息中间件,比如rocket mq,kafka进行消息的订阅与发布。

上一篇:《DDD之如何合理设计一个聚合》

下一篇:《DDD之工厂》

继续阅读