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 实现领域驱动设计-理解领域和子域> <实现领域驱动设计>前两章内容,基本上读完了,和<领域驱动设计>不同的是,它把很多的概念都放在前面进行讲述了 ...
随机推荐
- 对称加密之AES加密详解
最近有人问我AES对称加密是啥,我回答了个大概,发现自己不能清晰的讲出来,特此记录,以供学习 一.对称加密 对称加密是最快速.最简单的一种加密方式,加密(encryption)与解密(decrypti ...
- Linux命令_sed
1.替换(将"xxx"替换成"yyy") 现有文件pets.txt 要将其中的"my"替换为"your",可以这样替换, ...
- Tomcat系列(9)——Tomcat 6方面调优(内存,线程,IO,压缩,缓存,集群)
核心部分 内存 线程 IO 压缩 缓存 集群 一.JVM内存优化 Tomcat内存优化,包括内存大小,垃圾回收策略. Windows 下的catalina.bat,Linux 下的catalina.s ...
- VMware 安装Linux系统 CentOS
VMware 安装Linux系统 CentOS 1. 下载镜像系统 centos镜像下载地址:https://www.centos.org/download/ 选择DVD下载即可 linux各版本下 ...
- python之路(5)文件操作(open)
目录 前言 文件的打开模式 文件句柄的方法 seek()方法介绍 前言 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 f = open('demo.txt','r',e ...
- 2018-2019-2 实验二 Java面向对象程序设计
实验内容 1.初步掌握单元测试和TDD 2.理解并掌握面向对象三要素:封装.继承.多态 3.初步掌握UML建模 4.熟悉S.O.L.I.D原则 5.了解设计模式 实验要求 1.没有Linux基础的同学 ...
- 使用Docker安装SonarQube
需先安装docker和docker-compose.见:https://www.cnblogs.com/hackyo/p/9280042.html 在任意目录下新建文件docker-compose.y ...
- 《11招玩转网络安全》之第五招:DVWA命令注入
首先还是将DVWA的安全级别设置为Low,然后单击DVWA页面左侧的Command Injection按钮. 图5-1 Low级别的命令注入 这个就是最典型的命令注入接口.在文本框中输入一个IP ...
- Python核心编程笔记 第三章
3.1 语句和语法 3.1.1 注释( # ) 3.1.2 继续( \ ) 一般使用换行分隔,也就是说一行一个语句.一行过长的语句可以使用反斜杠( \ ) 分 ...
- 最近面试被问到一个问题,AtomicInteger如何保证线程安全?
最近面试被问到一个问题,AtomicInteger如何保证线程安全?我查阅了资料 发现还可以引申到 乐观锁/悲观锁的概念,觉得值得一记. 众所周知,JDK提供了AtomicInteger保证对数字的操 ...