首页 > 其他分享 >DDD读书笔记

DDD读书笔记

时间:2023-03-23 23:14:17浏览次数:68  
标签:服务 读书笔记 对象 实体 领域 聚合 DDD

《DDD实战-欧创新》

  • DDD是什么?

“DDD是一种指导思想和方法论,指导拆分复杂业务、划分边界和建设领域模型,并最终指导微服务系统建设落地(draft)”

  • 如何使用DDD

“使用事件风暴进行业务领域建模 -> 使用DDD的战术设计,设计聚合、实体、值对象、领域服务、领域事件以及应用服务等领域对象 -> 再使用DDD的分层架构模型(4层)完成微服务的设计”

  • 如何进行领域建模?

参照 11 10 | DDD、中台和微服务:它们是如何协作的?

总结:按照业务流程划分领域,划分为核心域、通用域和支撑域到合适的粒度,并反复推敲,对于重复或需要重组的领域对象,提炼并重构主领域对象。

  • 使用事件风暴构建微服务步骤

    • 第一步:产品愿景

      • 对产品顶层价值的设计,使产品目标用户、核心价值、差异化竞争点等信息达成一致

      • 例如:为了。。。。。我们需要做。。。。。,为此我们需要xxx核心/通用中台,实现。。。。功能,最终达成。。。。。目标

    • 第二步:业务场景分析

      • 从用户视角触发,根据业务流程或用户旅程,采用用例和场景分析,探索领域中的典型场景,找出领域事件、实体和命令等领域对象,支持领域建模

      • 例如:创建系统的命令会触发系统已创建的事件

    • 第三步:领域建模

      • 根据场景分析中产生的领域对象,比如领域事件、命令等,找出产生这些命令的实体,分析实体之间的关系组成聚合,为聚合划定限界上限文,建立领域模型和领域模型之间的依赖,领域模型利用限界上下文向上可以指导微服务设计,通过聚合向下可以指导聚合根、实体和值对象的设计。

        • 1.根据事件和命令,提取实体

        • 2.从多个实体中找到聚合根,并根据聚合根以及实体之间的依赖关系,组合实体成为聚合

        • 3.划定限界上线文,根据上线文归类聚合

    • 第四步:进行微服务设计

      • 理论上一个领域模型对应一个微服务,具体实施还是需要根据团队的现状来看。

 

  1. 实体和值对象的区别

     

    实体

    值对象

    是否有唯一Id

       

    是否有行为

       

    是否是class

     
    • 不一定,可能是class,可能是简单的属性

    从属关系

    值对象是实体的属性,用于描述实体

    定义

    代表一个子域,有属性、行为和逻辑,是充血模型

    聚合具有相同特征的一类属性(可能就一个,那就不用定义class了),一般没有行为和逻辑,聚合到实体,是实体的一个属性,一般是贫血模型

  2. 聚合根

    1. 是实体,有生命周期,有全局唯一id,负责协调和组织聚合内各实体和值对象协同完成业务逻辑;

    2. 一个聚合内只有一个聚合根

  3. 聚合

    1. 一组业务关系紧密的实体、值对象、聚合很的集合

    2. 一个微服务有多个聚合,一个聚合有多个实体、值对象、命令、领域事件等。

    3. 根据需要,一个聚合可以单独拆出来作为微服务,比如这个聚合遇到高并发挑战了。

  4. 领域服务(DomainService)

    1. 单一实体(或者值对象)不能实现时,领域服务就会出马,它可以组合聚合内的多个实体(或者值对象),实现复杂的业务逻辑。

  5. 实体方法、领域服务、应用服务的区别

    类型

    说明

    所在的包

    实体方法

    实体entity的function,比如createAddress(),原子业务逻辑

    domain.entiry

    领域服务

    domainService,具体多个实体方法,完成较为复杂的业务功能

    domain.service

    应用服务

    APPService,编排和聚合领域服务,对上层facade提供完成的接口业务能力

    application.service

  6. 命令(动作)

    1. 一个业务行为,例如支付这个动作

  7. 领域事件

    1. 命令产生的结果,该结果可能引发后续动作,可能不会引发就此结束;例如支付完成后会产生支付完成事件,会触发财务入账等后续动作。

  8. DDD分层架构

    分层

    功能

    常见的功能

    交互规则和职责边界

    用户接口层

    • 接受用户指令,展示结果

    • 用户

    • 程序

    • 自动化脚本

    • API

    • DTO

    应用层

    • 很薄的一层,不干涉领域行为

    • 能够快速响应业务需求

    • 实现面向用户操作相关的用例和流程

    • 协调和组织多个聚合,完成业务逻辑

    • 组合、编排和转发服务

    • 负责处理业务用例的执行顺序以及结果的拼装

    • 安全认证

    • 权限校验

    • 事务控制

    • 发送或订阅领域事件

    • Application service

    领域层

    • 包括实体、值对象、领域服务和聚合

    • 保持长期稳定

     
    • 聚合(Aggregate)

      • Entity

      • ValueObject

      • DomainService

    • MapperXML

    • Repository(仓储接口)

    基础设施层

    • 贯穿所有层,为其他各层(即用户接口层、应用层和领域层都可以访问该层)提供通用的技术和基础服务

    • 数据库

    • 缓存

    • 消息中间件

    • 第三方工具

    • 驱动

    • 网关

    • 文件

    • Repository AOP(仓储实现)

    • 缓存

    • 消息中间件

    • 第三方工具

    • 驱动

    • 网关

    • 文件

  9. 边界

    边界

    说明

    逻辑边界

    聚合的编辑

    物理边界

    微服务之间的边界,不同微服务部署位置和运行环境是相互隔离的

    代码边界

    不同层或者聚合之间代码目录的边界

标签:服务,读书笔记,对象,实体,领域,聚合,DDD
From: https://www.cnblogs.com/katsu2017/p/17249864.html

相关文章

  • 领域驱动设计DDD应用与最佳实践
    领域驱动设计(DomainDrivenDesign,简称:DDD)设计思想和方法论早在2005年时候就被提出来,但是一直没有重视和推荐使用,直到2015年之后微服务流行之后,再次被人重视和推荐使用。......
  • 3/21人月神话读书笔记
    作为开章第一篇,就先来说说为什么“人月”是“神话”。小学的时候我们都做过这样的应用题:“工厂需要加工一批零件,安排5名工人的话需要10小时完成,那么安排25名工人加工,多少......
  • 《前端serverless 面向全栈的无服务器架构实战》读书笔记
    第1章什么是severless什么是NoOps利用自动化运维代替手工运维模式什么是severless开发者无需关注服务器资源配置情况、部署情况、操作系统以及依赖软件等在内等所有......
  • 《操作系统导论》读书笔记1——CPU虚拟化,进程
    系列文章目录和关于我一丶CPU的虚拟化一个桃子,我们称之为物理(physical)桃子。但有很多想吃这个桃子的人,我们希望向每个想吃的人提供一个属于他的桃子,这样才能皆大欢喜。......
  • Fortran读书笔记(3)
    本篇文章为本人读气象出版社的fortran程序设计,若有侵权,请私信,本人立即删除数组的定义数组举例:integera(-5,5),b(20)character*8d(50)dimensiona(2,3)integera......
  • DDD图例4:用例图
     ......
  • 《幻灭》——读书笔记
    人物:吕西安 大卫·赛夏2023.3.6......
  • DDD实战(01)-概述
    程序设计语言指导怎样把设计更好地落地各种编程范式指导可以用什么样的元素去做设计设计原则与模式指导如何组合分解出来的各个元素分解组合的东西是从哪来?需要你对设计方法......
  • 梦断代码 读书笔记2
    第2章-Agenda之魂第二章,提到了该团队用了很多的方法去提高软件开发的效率速度,想法设法尽可能的去完成预定工作,但是都无一例外的失败了,可知道,这是世界上顶尖的项目开发团队......
  • 《梦断代码》读书笔记
    第0章软件时间作者迷恋于一个开放代码并可以由游戏玩家更改程序的一个游戏,并为在它的基础上创新和增添一些功能而乐此不疲。"HelloWorld"程序能够唤醒每个程序员心中......