一文读懂:DDD领域驱动设计

  1. DDD理解的定义:DDD是已经解决复杂软件的思想,核心思想是面向对象(OO),其核心概念是Domain(领域)和Model(模型)

一文读懂:DDD领域驱动设计_第1张图片

  1. 什么是领域呢?领域可以理解为业务的范畴,领域可大可小,对应着大小业务问题的边界,简单来说,领域驱动设计就是将业务上要做的一件大事通过推演和抽象,拆分为多个内聚的领域.
  2. 充血模型:将实体和引起实体状态变换的方法放在一个模型里面
  3. 贫血模型:Pojo
  4. DDD中的模型:
    1. Model与传统的POJO(DTO、DO、DAO)类等对比,都是一个类中有属性、属性有Get/Set方法,并且做传输对象。
    2. Model与传统MVC三层架构层的业务逻辑层中的Service对比,都是处理业务行为(Action)层。
    3. 模型(Model)承载着业务的属性和具体的行为,是业务表达的方式、是DDD的内核。是一个类中有属性、属性有Get/Set方法,并且业务的行为(Action)操作也是在模型类中(充血模型)即做业务逻辑处理,又做数据传输对象,模型分为Entity、Value Object、Service这三种类型。
  1. DDD模型的边界
    1. 限界上下文,领域边界上下文,域的拆分,按业务抽象进行划分,一个业务拆分成几个独立的域,每个域又可以细拆成不同的子域
    2. 防腐层:一个域在访问其他域的模型时,把获取到的模型做层转换映射到自己域的模型中(不直接使用别的域模型作为自己域模型中的一部分),防止源域模型发生变更,依赖源域模型的调用方,在需要源域模型新功能时,必须要全局依赖修改,才在能兼容,防止域上下文不一致产生的冲突
  1. 领域驱动三层架构

一文读懂:DDD领域驱动设计_第2张图片

API层是作为对外打包、前端接口调用使用。Domian层是整个域模型,不能直接把它打包成maven给别人使用,也不能直接把它作为接口给前端使用,有些需要API层作为进行转换后调用Domain,对调用Domain返回的数据进行包装筛选后再返回出去。

Domain层系统的核心层,所有具体的业务逻辑处理、事件处理等都在这层域模型中处理

Repository层数据源代理层,Repository 层类似一个网关代理,它本身没有数据,数据都是通过它的代理来被Domain层访问,被代理的数据源不仅仅可以是DB、ES还可以是HTTP、RPC任何与Domain层进行数据交互的都叫Repository

参考文献:领域驱动设计(DDD)-基础思想 - 知乎 (zhihu.com)

你可能感兴趣的:(设计模式,设计规范)