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 实现领域驱动设计-理解领域和子域> <实现领域驱动设计>前两章内容,基本上读完了,和<领域驱动设计>不同的是,它把很多的概念都放在前面进行讲述了 ...
随机推荐
- java实现 链表反转
输入一个链表,反转链表后,输出新链表的表头. 递归法 public class RevnNode { public static class Node { public int value; publ ...
- java day02 记录
一.介绍运算符使用,包含+ - * / 及 自增.三元运算等 package com.itheima_02; /* * 赋值运算符: * 基本的赋值运算符:= * 扩展的赋值运算符:+=,-=,*=, ...
- mysql8.0.15二进制安装
mysql8.0.15二进制安装 今天有幸尝试安装了社区版本的mysql8.0.15,记录下来,供以后方便使用.特此感谢知数堂的叶老师,提供了配置文件的模板. # 第一部分:系统配置 # 1.安装系统 ...
- 深度学习中优化【Normalization】
深度学习中优化操作: dropout l1, l2正则化 momentum normalization 1.为什么Normalization? 深度神经网络模型的训练为什么会很困难?其中一个重 ...
- kubernetes 部署
kubernetes 部署(Centos 7) 一个或者多个兼容 deb 或者 rpm 软件包的操作系统,比如 Ubuntu 或者 CentOS 每台机器 2 GB 以上的内存,内存不足时应用会受限制 ...
- Entity Framework系列教程汇总
翻译自http://www.entityframeworktutorial.net/,使用EF几年时间了,一直没有系统总结过,所以翻译这一系统文章作为总结,由于英语功底有限,翻译的可能有些问题,欢迎指 ...
- sql连接查询中的分类
sql连接查询中的分类 1.内连接(结果不保留表中未对应的数据) 1.1等值连接:关联条件的运算符是用等号来连接的. 1.2不等值连接:连接条件是出等号之外的操作符 1.3自然连接:特殊的等值连接,在 ...
- 1.saltstack入门
1.安装 master: yum install salt-master salt-minion -y minion: yum install salt-minion -y 2.修改配置文件(mini ...
- 安装AB编程软件提示安装失败时如何处理
前言:在安装Studio 5000.FT VIEW.Logxi Emulate等AB编程软件,有时会出现安装失败.在这里,根据自己在安装过程中出现的错误情形,介绍如何处理的方法. 方法步骤 1.在安装 ...
- selenium中的下拉框处理模块Select
在UI自动化测试过程中,经常会遇到一些下拉框,如果我们基于Webdriver操作的话就需要click两次,而且很容易出现问题,实际上Selenium给我们提供了专门的Select(下拉框处理模块). ...