20190101.DDD笔记
建立领域模型步骤
- 根据提供的
信息
完善主要业务场景
和业务流程
; - 根据业务流程识别
领域事件
并按照时序排列
; - 针对领域事件进行
命令识别
; - 针对领域事件和命令进行
聚合
和子域
的初步识别; - 在识别的subdomain中识别
实体
、值对象
、实体间关系
、调整聚合关系
; - 针对领域模型识别
限界上下文
(Bounded Context)。
三原则
- Focus on your core domain.
Core domain:存在差异性竞争力的业务
- Iteratively explore models.
方法:通过实践和软件(UML)
- speak ubiquitous language.
方法:一种能合作的语言,业务术语(概念)
实践
1.信息
2.业务场景图&业务流程图
- 领域事件
- 业务事件
- 时间序列
- 所有的事件
- 命名:聚合#动词的过去时
- 命令
- 来源:
```
- UI 用户操作
- 外部系统触发
- 定时任务
```
- 注意:
```
- cmd:event→1:1,推荐
- cmd:event→1:n,可以,尽量避免
- cmd:event→n:1,不可以
```
- 命名:
动词
- 聚合
- 定义:生命周期相同的领域对象(实体、值对象)的集合。
- 方法:可在cmd和event之间夹出聚合。
```
- 每个聚合都有一个根和一个边界。
- 每个聚合选择其中一个实体作为聚合根,本质是一个实体。
- 一个actor是一个聚合。
- 外部通过聚合根访问聚合内领域对象。
- 尽量小。
``` - 实体&值对象
- 来源:领域对象,来源于业务概念。
- 值对象:无id,状态不可变
DDD中的值对象与C#的struct很像相似,是不是值对象应该使用struct? 答:struct 作为一种技术选择,有时候也许可行,但或许更多时候是不可行,比如:struct不能为空,使得不能与领域对象对应。
- 实体:有id,有状态
- 限界上下文
- 识别:同一个对象,有时表达的含义不同时,此时可能需要两个限界上下文。
- 尽量大
- 跨限界上下文访问:RPC、REST、MQ
- 尽量使子域和限界上下文对应。
- 技术对应
- 子域、限界上下文对应项目(微服务的话,对应应用服务)
- 聚合对应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笔记相关推荐
- DDD领域驱动设计理论篇 - 学习笔记
一.Why DDD? 在加入X公司后,开始了ASP.NET Core+Docker+Linux的技术实践,也开始了微服务架构的实践.在微服务的学习中,有一本微软官方出品的<.NET微服务:容器化 ...
- 领域驱动设计DDD之读书笔记
查看文章 领域驱动设计DDD之读书笔记 转载原地址:http://hi.baidu.com/lijiangzj 2007-08-17 16:53 一.当前Java软件开发中几种认识误区 Hibe ...
- 【笔记】DDD领域驱动设计精粹——浅谈DDD
前言:` 前不久,在工作中使用DDD(领域驱动设计)完成对系统架构和功能的重构,前期参考了很多DDD文章讨论了战略设计划分好模型和领域,然后使用战术设计落实整个项目的重构,重构期间学到了很多DDD的思 ...
- DDD实战课--学习笔记
目录 学好了DDD,你能做什么? 领域驱动设计:微服务设计为什么要选择DDD? 领域.子域.核心域.通用域和支撑域:傻傻分不清? 限界上下文:定义领域边界的利器 实体和值对象:从领域模型的基础单元看系 ...
- PostgreSQL学习笔记YY(2)--Ubuntu下使用DDD调试查看源码(原创)
说明:前一段时间一直在FreeBSD的操作系统环境下进行实验,但是由于多次安装桌面系统失败,所以无法及时更新日志.昨天换了Ubuntu系统,在Unix 环境下摸索了3天之后,终于在Ubuntu上编译, ...
- Redis学习笔记~Redis事务机制与Lind.DDD.Repositories.Redis事务机制的实现
回到目录 Redis本身支持事务,这就是SQL数据库有Transaction一样,而Redis的驱动也支持事务,这在ServiceStack.Redis就有所体现,它也是目前最受业界认可的Redis驱 ...
- DDD实战课(实战篇)--学习笔记
目录 DDD实践:如何用DDD重构中台业务模型? 领域建模:如何用事件风暴构建领域模型? 代码模型(上):如何使用DDD设计微服务代码模型? 代码模型(下):如何保证领域模型与代码模型的一致性? 边界 ...
- DDD学习笔记 - 实战篇(Ⅱ)
14 | 代码模型(下):如何保证领域模型与代码模型的一致性? 课程链接:https://time.geekbang.org/column/article/166147 DDD 强调先构建领域模型然后 ...
- 极客时间 DDD 学习笔记03
11 | DDD实践:如何用DDD重构中台业务模型? 12 | 领域建模:如何用事件风暴构建领域模型? 13 | 代码模型(上):如何使用DDD设计微服务代码模型? 14 | 代码模型(下):如何保证 ...
最新文章
- 空标签作为占位符调整距离
- 看看大网站到底是如何保障网络安全的
- python tensorflow tf.layers.max_pooling2d() 2维输入(例如图像)的最大池化层
- js高级—查询商品案例
- Java——多线程(铁路售票系统案例)
- 性价比高台式计算机,2021年台式电脑什么牌子好,性价比高?
- 简要概述html5的设计宗旨,HTML5程序设计(第2版) 第一章:HTML5概述.doc
- 帝国cms模板仿后台登录界面
- Nodejs 英雄管理系统
- python qt5 designer 免费安装_PyCharm离线安装PyQt5_tools(QtDesigner)
- 如何在苹果Mac更改通知显示的时长?
- 关于雅虎邮箱的Foxmail,outlook设置。
- fits文件的读取与查看
- gui设计模式_GUI的完整形式是什么?
- Protel和Altium是什么关系?
- 廖雪峰python教程杨辉三角_廖雪峰--python教程:笔记三
- 虚拟现实技术实现理论之梦境论述
- Oracle EBS Interface/API(25) - Lookups API
- Python Basic - GIL:global interpreter lock(全局解释器锁)
- 【iOS】跳转App权限设置页面
热门文章
- 移动语义-右值引用-完美转发-万字长文让你一探究竟
- wireshark数据包分析实战
- python编程题3
- 一个简单函数的反汇编分析
- Part 2 — Making Sense of Smart Contracts
- Android Framework------之Keyguard 简单分析
- Android应用与系统安全防御
- 计算机网络与云计算研究背景,基于云计算背景下的计算机网络安全研究
- win7装xp双系统_联智通达什么系统装工控电脑好_搜狐汽车
- sierra mysql_macOS High Sierra 使用 Homebrew 安装 MYSQL 5.7