美文网首页
DDD 学习笔记(二)基础概念

DDD 学习笔记(二)基础概念

作者: 半亩房顶 | 来源:发表于2020-08-30 14:58 被阅读0次

    概念

    领域 与 子域

    • DDD 的领域就是这个边界内要解决的业务问题域。
    • 我们把划分出来的多个子领域称为子域,每个子域对应一个更小的问题域或更小的业务范围。

    核心域、通用域和支撑域

    这三类为三种不同的子域,不同系统中,核心域不尽相同,需要公司根据自身业务,选定核心域等,完成划分

    • 决定产品和公司核心竞争力的子域是核心域
    • 同时被多个子域使用的通用功能子域是通用域
    • 必需的,但既不包含决定产品和公司核心竞争力的功能,也不包含通用功能的子域,它就是支撑域。

    限界上下文

    通用语言定义上下文含义,限界上下文则定义领域边界

    为什么要提出限界上下文的概念?

    在事件风暴过程中,通过团队交流达成共识的,能够简单、清晰、准确描述业务涵义和规则的语言就是通用语言。通用语言可以直接反应在代码中。
    1、但是通用语言难以完成领域的划分,进而确定微服务的划分,解决微服务想要解决的问题
    2、通用语言在不同上下文中会有不同的含义,引入限界上下文,可以提供上下文环境,消除歧义。

    限界上下文在微服务设计中的作用和意义是什么?

    1、封装通用语言和领域对象,让大家明白功能应该放于哪个领域。
    2、划分领域边界,确定限界上下文,消除歧义。

    实体 和 值对象

    实体和值对象是组成领域模型的基础单元。

    实体
    • 有 ID 标识,聚合内唯一
    • 这些实体类通常采用充血模型
    • 依附于聚合根,其生命周期由聚合根管理
    • 与数据库持久化对象不一定是 一对一的关系
    • 可以引用聚合内的聚合根、实体和值对象
    值对象
    • 不可变,无生命周期,用完即扔
    • 通过对象属性值来识别的对象,它将多个相关属性组合为一个概念整体
    • 简单来说,值对象本质上就是一个集。由若干个用于描述目的、具有整体概念和不可修改的属性组成
    • 值对象尽量只引用值对象

    DDD 提倡从领域模型设计出发,而不是先设计数据模型

    聚合和聚合根

    聚合
    • 高内聚、低耦合,它是领域模型中最底层的边界,可以作为拆分微服务的最小单位
    • 聚合让一些列实体和值对象协同工作,确保这些领域对象在实现共同业务时,保持一致性
    • 聚合之间的边界是微服务内天然的逻辑边界
    聚合根
    • 聚合根是实体,有实体的特点,具有全局唯一标识,有独立的生命周期
    • 聚合相对于组织的话,聚合根则为这个组织的管理者,协调实体和值对象,完成功能
    • 一个聚合只有一个聚合根,聚合根在聚合内对实体和值对象采用直接对象引用的方式进行组织 和协调
    • 聚合根与聚合根之间通过 ID 关联的方式实现聚合之间的协同
    • 其他聚合调用其他聚合中的对象,均需要通过聚合根调用
    如何设计聚合

    1、根据事件风暴,梳理出实体和值对象
    2、从实体中选出聚合根
    3、根据单一职责,以聚合根为核心,划分出所有的相关实体和值对象(整理出依赖模型,确定依赖关系),此为一个聚合
    4、将多个聚合根据业务语义和上下文划分到同一个限界上下文中,结束聚合设计


    欢迎大家关注我的公众号


    半亩房顶

    相关文章

      网友评论

          本文标题:DDD 学习笔记(二)基础概念

          本文链接:https://www.haomeiwen.com/subject/yuiedktx.html