DDD - 概述 - 聚合 - 限界上下文 (四)
最重要的一句话
DDD的所有有相关理论中,只有一句是至关重要的,但是也是最容易被忽略和最难做到的,抛弃传统的设计方式(思路)的思想,这句话起了决定性的作用,但是99%的人都忽略了或者在开始无法正视或理解。
为什么说这句话是最重要的一句话,因为他是设计真正转变的出发点。
基于具体的语义环境
首先,DDD的重点在于领域这个东西,领域的确定必须要基于一定的环境的,简单理解就是 必须同时具备主谓宾,比如:小明关爱小花;对于这句话的理解其实存在歧义,如果没有具体的语义环境下可能有以下两种理解方式:
1).小明 关爱(关系爱护)小花
2).小明关 爱 小花
。。。其他你可能想到的语义。如果不确定具体的语义环境 那么就无法确定限界上下文,间接的就是无法确定聚合如何创建,因为没有这个具体的语义环境就无法确定的限界上下文就无法决定如何确定聚合跟,谁是主(聚合跟)谁是次(实体),谁又是用作点缀、修饰用的(ValueObject).
示例参考
再换一个示例:组织架构,这个几乎所有的管理系统可能都会涉及,尤其是OA之类的管理系统
不合理的方式:按照以往的凡是去设就是,根据组织架构的相关业务(逻辑),你肯定噼里啪啦的设计出来了几张表,Role,RoleClaim,User,UserClaim,UserDetail,LoginLog,Department,...然后就相关也业务开发了,,,但是,你觉得这个和DDD有啥关系,没一毛钱关系,你还是依旧的沉浸在以往的条件反应式的思想中,长期以往的思维方式已经让你机械化的知道需要这么做,那么如果不从DDD的角度,你这么做是完全Oj8K的,是的,你做的完全没问题。但是从DDD角度是完全大错特错的, 如果你有读过 实现领域驱动设计 ,你可能会记得还有一句话就是 以用户(使用者)的思想去思考,而不是继续使用开发者个思维角度去思考,也是因为这个原因。
正确的做法是:首先确定你当前要实现的业务功能,以此确定边界,比如,我们打算开发的内容是,用户角色管理,那么这里就突出了两个对象一个动作,1)用户;2)角色) 3)和一个动作管理,这就确定了我们的上下文对象 可以确定为 UserRoleDbContext(一般的命名会直接明了的凸显出具体的语义含义),
那么这时候猜到了思考我们的聚合跟 Entity 以及ValueObject的设计。所以,这里我们的聚合对象就是User,因为一个用户可以对应多个role,同时role这个对象如果在没有具体的用户的情况下 他的存在也没有任何意义,但是多个用户可能有相同的角色,所以role可以确定为entity(DDD中entity的定义,有具体的标识)
以上是本人在设计在开发中的总结,如果您觉得不合理请指教。谢谢。
DDD - 概述 - 聚合 - 限界上下文 (四)的更多相关文章
- DDD之5限界上下文-定义领域边界的利器
上图是一张普通地图,最刺眼的就是边界? 非常好奇地图绘制工程师是如何描绘如此弯曲多变的边界的?强制行政区域还是人群历史原因自然的人以群分? 我们再换个视角,对工程师或者架构师来说,微服务的边界如何划分 ...
- DDD - 概述 - 聚合 (三)
不要再看那些理论啦,说的云里雾里的,绕到你怀疑人生 一句话概括聚合创建:聚合的一致性决定了聚合边界的确定,决定了聚合对象的创建.所谓的一致性即事务的一致性,细化就是 立即性和原子性.
- 【DDD】领域驱动设计实践 —— 限界上下文识别
本文从战略层面街上DDD中关于限界上下文的相关知识,并以ECO系统为例子,介绍如何识别上下文.限界上下文(Bounded Context)定义了每个模型的应用范围,在每个Bounded Context ...
- 从壹开始微服务 [ DDD ] 之三 ║ 简单说说:领域、子域、限界上下文
前言 哈喽大家好,DDD领域驱动设计系列又开始了,前天周二的那篇入门文章中,也收到了一定的效果(写小说的除外),同时我也是倍感鸭梨,怎么说呢,DDD领域驱动设计已经有十年历史了,甚至更久,但是包括我在 ...
- DDD中限界上下文与通用语言的作用
什么是通用语言 通用语言, 最主要的目的就是减少交流中信息丢失, 在实际开发中, 可能关联很多人, 例如有业务层面的业务细节制定者.领域专家.产品经理.项目经理 .架构师.开发经理.测试经理等等, 即 ...
- DDD理论学习系列(3)-- 限界上下文
1. 引言 限界上下文可以拆分为两个词,限界和上下文. 限界:是指一个界限,具体的某一个范围. 上下文:个人理解就是语境. 比如我们常说的段子: "我想静静." 这个句子一般是想表 ...
- 学习DDD的初步尝试,从最基础的开始,业务介绍,划分限界上下文 ,建立模型
Conference业务简介 Conference是这样一个系统,它提供了一个在线创建会议以及预订会议座位的平台.这个系统的用户有两类: 1:客户,可以创建和管理会议. 2:会议座位预定者,可以预订会 ...
- 从壹开始微服务 [ DDD ] 之六 ║聚合 与 聚合根 (下)
前言 哈喽大家周二好,上次咱们说到了实体与值对象的简单知识,相信大家也是稍微有些了解,其实实体咱们平时用的很多了,基本可以和数据库表进行联系,只不过值对象可能不是很熟悉,值对象简单来说就是在DDD领域 ...
- IDDD 实现领域驱动设计-理解限界上下文
上一篇:<IDDD 实现领域驱动设计-理解领域和子域> <实现领域驱动设计>前两章内容,基本上读完了,和<领域驱动设计>不同的是,它把很多的概念都放在前面进行讲述了 ...
随机推荐
- Zabbix监控磁盘IO值
iostat取硬盘IO值. iostat -x 3 2 | grep vdb | sed -n '2p' | awk '{print $14}' 每3s取一次值,输出第二次vdb硬盘的负载值. 添加Z ...
- 3-ftp搭建成功,服务器能访问,外网无法连接和访问
登录 ECS 管理控制台,找到相应的实例. 在实例的右侧单击管理,进入实例详情页面.选择本实例安全组. 在安全组列表页面,找到相应的安全组,单击配置规则. 在安全组规则页面,单击添加安全组规则. 在添 ...
- Day042---浮动 背景图设置 相对定位绝对定位
1.练习浮动 2.文本属性和字体属性 文本对齐 text-align left 左对齐 right 右对齐 center 中心对齐 justify 两边对齐 只适应于英文 text-indent ...
- Luogu P4716 【模板】最小树形图
题目链接\(Click\) \(Here\) 不知道有什么用的一个东西.本来不打算再大量扩知识点了但还是学一下好了,反正也不难. 原理:树上父亲唯一,每次选最短的父边. 此时会有两类情况: 就这样正常 ...
- Centos6安装Percona-tools工具
Centos6安装Percona-tools工具 环境:centos6.x yum -y install perl-DBI yum -y install perl-DBD-MySQL yum -y i ...
- kubernetes之监控Operator部署Prometheus(三)
第一章和第二章中我们配置Prometheus的成本非常高,而且也非常麻烦.但是我们要考虑Prometheus.AlertManager 这些组件服务本身的高可用的话,成本就更高了,当然我们也完全可以用 ...
- 05--STL序列容器(List)
一:List双向链表简介 list是一个双向链表容器,可高效地进行插入删除元素. list不可以随机存取元素,所以不支持at.(pos)函数与[]操作符.It++(ok) it+5(err)list不 ...
- H5_0004:JS设置循环debugger的方法
在HTML页面加上如下代码,则PC打开控制台后,就会循环debugger,防止调试代码. <script>eval(function (p, a, c, k, e, r) { e = fu ...
- 半导体知识:蚀刻(Etch)工艺讲解
本文转载自微信公众号 - 半导体行业观察 , https://mp.weixin.qq.com/s/F3LXiub6n4iYsQDqDH9K_g
- java 导出
按钮 <a href="###" class="eui-btn eui-btn-small" onclick="Export()"&g ...