建立领域模型步骤

  1. 根据提供的信息完善主要业务场景业务流程
  2. 根据业务流程识别领域事件并按照时序排列
  3. 针对领域事件进行命令识别
  4. 针对领域事件和命令进行聚合子域的初步识别;
  5. 在识别的subdomain中识别实体值对象实体间关系、调整聚合关系
  6. 针对领域模型识别限界上下文(Bounded Context)。

    三原则

  7. Focus on your core domain.
    Core domain:存在差异性竞争力的业务
    
  8. Iteratively explore models.
    方法:通过实践和软件(UML)
    
  9. speak ubiquitous language.
    方法:一种能合作的语言,业务术语(概念)
    

    实践

    1.信息

    2.业务场景图&业务流程图

  10. 领域事件
  • 业务事件
  • 时间序列
  • 所有的事件
  • 命名:聚合#动词的过去时
  1. 命令
  • 来源:
    ```
  1. UI 用户操作
  2. 外部系统触发
  3. 定时任务
    ```
  • 注意:
    ```
  1. cmd:event→1:1,推荐
  2. cmd:event→1:n,可以,尽量避免
  3. cmd:event→n:1,不可以
    ```
  • 命名:

    动词
    
  1. 聚合
  • 定义:生命周期相同的领域对象(实体、值对象)的集合。
  • 方法:可在cmd和event之间夹出聚合。
    ```
  1. 每个聚合都有一个根和一个边界。
  2. 每个聚合选择其中一个实体作为聚合根,本质是一个实体。
  3. 一个actor是一个聚合。
  4. 外部通过聚合根访问聚合内领域对象。
  5. 尽量小。
    ```
  6. 实体&值对象
  • 来源:领域对象,来源于业务概念。
  • 值对象:无id,状态不可变
    DDD中的值对象与C#的struct很像相似,是不是值对象应该使用struct?
    答:struct 作为一种技术选择,有时候也许可行,但或许更多时候是不可行,比如:struct不能为空,使得不能与领域对象对应。
    
  • 实体:有id,有状态
  1. 限界上下文
  • 识别:同一个对象,有时表达的含义不同时,此时可能需要两个限界上下文。
  • 尽量大
  • 跨限界上下文访问:RPC、REST、MQ
  • 尽量使子域和限界上下文对应。
  1. 技术对应
  • 子域、限界上下文对应项目(微服务的话,对应应用服务)
  • 聚合对应actor(或者对象类)
  • 推荐尽量一个实体对应一个聚合对应一个actor
  • 应用服务对应Controller API
  • 领域事件对应事件
  • 实体反映在数据库表结构
  • Repository类似DAO
  • DTO在应用层

RESTful架构下的API设计

1. 从命令出发

2. 从资源出发

RESTful架构下“资源”(resource)识别至关重要。在整个DDD建模中,聚合实体都是我们抽象资源的重要入手点。

这种方法比较适合识别Domain层的API设计。

3. 从业务流出发

API 最终都要满足业务的需求,所以也有API设计方法从流程节点的分析出发。

这种设计方法更适合Application层的API设计

4. 定义关键词动词描述

(如果有不正确的地方,希望童鞋指正)

(如果有不正确的地方,希望童鞋指正)

转载于:https://www.cnblogs.com/CharlesZHENG/p/10205258.html

20190101.DDD笔记相关推荐

  1. DDD领域驱动设计理论篇 - 学习笔记

    一.Why DDD? 在加入X公司后,开始了ASP.NET Core+Docker+Linux的技术实践,也开始了微服务架构的实践.在微服务的学习中,有一本微软官方出品的<.NET微服务:容器化 ...

  2. 领域驱动设计DDD之读书笔记

    查看文章   领域驱动设计DDD之读书笔记  转载原地址:http://hi.baidu.com/lijiangzj 2007-08-17 16:53 一.当前Java软件开发中几种认识误区 Hibe ...

  3. 【笔记】DDD领域驱动设计精粹——浅谈DDD

    前言:` 前不久,在工作中使用DDD(领域驱动设计)完成对系统架构和功能的重构,前期参考了很多DDD文章讨论了战略设计划分好模型和领域,然后使用战术设计落实整个项目的重构,重构期间学到了很多DDD的思 ...

  4. DDD实战课--学习笔记

    目录 学好了DDD,你能做什么? 领域驱动设计:微服务设计为什么要选择DDD? 领域.子域.核心域.通用域和支撑域:傻傻分不清? 限界上下文:定义领域边界的利器 实体和值对象:从领域模型的基础单元看系 ...

  5. PostgreSQL学习笔记YY(2)--Ubuntu下使用DDD调试查看源码(原创)

    说明:前一段时间一直在FreeBSD的操作系统环境下进行实验,但是由于多次安装桌面系统失败,所以无法及时更新日志.昨天换了Ubuntu系统,在Unix 环境下摸索了3天之后,终于在Ubuntu上编译, ...

  6. Redis学习笔记~Redis事务机制与Lind.DDD.Repositories.Redis事务机制的实现

    回到目录 Redis本身支持事务,这就是SQL数据库有Transaction一样,而Redis的驱动也支持事务,这在ServiceStack.Redis就有所体现,它也是目前最受业界认可的Redis驱 ...

  7. DDD实战课(实战篇)--学习笔记

    目录 DDD实践:如何用DDD重构中台业务模型? 领域建模:如何用事件风暴构建领域模型? 代码模型(上):如何使用DDD设计微服务代码模型? 代码模型(下):如何保证领域模型与代码模型的一致性? 边界 ...

  8. DDD学习笔记 - 实战篇(Ⅱ)

    14 | 代码模型(下):如何保证领域模型与代码模型的一致性? 课程链接:https://time.geekbang.org/column/article/166147 DDD 强调先构建领域模型然后 ...

  9. 极客时间 DDD 学习笔记03

    11 | DDD实践:如何用DDD重构中台业务模型? 12 | 领域建模:如何用事件风暴构建领域模型? 13 | 代码模型(上):如何使用DDD设计微服务代码模型? 14 | 代码模型(下):如何保证 ...

最新文章

  1. 空标签作为占位符调整距离
  2. 看看大网站到底是如何保障网络安全的
  3. python tensorflow tf.layers.max_pooling2d() 2维输入(例如图像)的最大池化层
  4. js高级—查询商品案例
  5. Java——多线程(铁路售票系统案例)
  6. 性价比高台式计算机,2021年台式电脑什么牌子好,性价比高?
  7. 简要概述html5的设计宗旨,HTML5程序设计(第2版) 第一章:HTML5概述.doc
  8. 帝国cms模板仿后台登录界面
  9. Nodejs 英雄管理系统
  10. python qt5 designer 免费安装_PyCharm离线安装PyQt5_tools(QtDesigner)
  11. 如何在苹果Mac更改通知显示的时长?
  12. 关于雅虎邮箱的Foxmail,outlook设置。
  13. fits文件的读取与查看
  14. gui设计模式_GUI的完整形式是什么?
  15. Protel和Altium是什么关系?
  16. 廖雪峰python教程杨辉三角_廖雪峰--python教程:笔记三
  17. 虚拟现实技术实现理论之梦境论述
  18. Oracle EBS Interface/API(25) - Lookups API
  19. Python Basic - GIL:global interpreter lock(全局解释器锁)
  20. 【iOS】跳转App权限设置页面

热门文章

  1. 移动语义-右值引用-完美转发-万字长文让你一探究竟
  2. wireshark数据包分析实战
  3. python编程题3
  4. 一个简单函数的反汇编分析
  5. Part 2 — Making Sense of Smart Contracts
  6. Android Framework------之Keyguard 简单分析
  7. Android应用与系统安全防御
  8. 计算机网络与云计算研究背景,基于云计算背景下的计算机网络安全研究
  9. win7装xp双系统_联智通达什么系统装工控电脑好_搜狐汽车
  10. sierra mysql_macOS High Sierra 使用 Homebrew 安装 MYSQL 5.7