实现领域驱动设计(DDD)学习-领域服务、领域事件、模块、聚合、工厂、资源库

作者: admin 分类: 领域驱动设计 发布时间: 2019-12-02 13:52  阅读: 55 views

这里是简单整理《实现驱动领域设计》的第7、8、9、10、11、12章等内容。示例代码不完整,就不摘了。主要举例说明了在前面章节中引用到的各种名词的解释

领域服务

要注意领域服务和应用服务的区别。应用服务不处理业务逻辑,领域服务是处理业务逻辑的。

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

领域事件

使用领域事件来捕获发生在领域中的一些事情。领域事件的产生、存储、分发和使用如下:

领域事件

领域事件需要唯一标识。

向远程限界上下文发布领域事件时需要使用消息机制。消息系统都采用的发布-订阅模式。

通过使用领域事件,我们可以将任何企业系统设计成自治服务和系统。这里的自治服务表示一个设计良好的业务服务,我们可以将其看成一个系统后者应用程序。在整个企业范围之内,这些自治服务相互独立的完成各自的功能。自治服务可能拥有多个服务接口端点,表示该自治服务向远程客户方提供了多种技术上的服务接口。自治服务可以避免对远程过程调用(RPC)的使用,这可以带来更高程度的独立性。

远程系统有可能不可用或者处于超负荷状态,此时RPC可能会影响客户方的成功调用。随着RPC api的增加,这种风险也将随之增大。避免RPC的使用可以大大地简化系统间的依赖,并减少不可用时带来的彻底请求失败。(但有时RPC不可避免)

将领域事件发布到外部限界上下文可以使用基于REST的消息通知(poll方式)和消息中间件的方式(pull方式)。

模块

DDD中的模块表示了一个命名的容器,用于存放领域中内聚在一起的类。将类放在不同模块中的目的在于达到松耦合性。(这里主要说了模块的命名方式,实际我们更多是按照业务进行分类处理)

聚合

将实体和值对象值在一致性边界内组成聚合。不同的聚合设计要估算一定的聚合成本。

创建原则、但不局限于

  1. 在一致性边界之内建模真正的不变条件
如:  c = a + b;

建模如
AggregateType {

    int a;
    int b;
    int c;
}


  1. 设计小聚合

领域事件

如上这种模型,进行一个基本的操作可能需要多个对象的处理。

  1. 通过唯一标识引用其他聚合

类似主外键,但是有多种方式

工厂

工厂提供了一个创建对象的接口,该接口封装了所有创建对象的复杂操作过程,而不需要承担领域模型中的其他职责。

资源库

资源库通常表示一个安全的存储区域,并对其中所存放的物品起保护作用。通常,聚合类型和资源库之间存在着一对一的关系。(资源库和DAO是不同的,DAO主要是从数据库表的角度看待问题,提供CRUD操作;资源库更加偏向于对象)

这几章的东西其实在我们接触编程以来肯定都接触过。只不过在专业定义和区分上有点混淆和重合。如果按照领域驱动的设计来做的话,可能更加符合‘领域驱动’这一特征


   原创文章,转载请标明本文链接: 实现领域驱动设计(DDD)学习-领域服务、领域事件、模块、聚合、工厂、资源库

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

一条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注

更多阅读