DDD(1)-DDD的相关概念
目录
1、领域驱动设计-DDD的概念
1.1、正反例对比
1.2、好差代码对比
1.3、名词解释
1.4、DDD四层架构
2、DDD落地方法
2.1、领域建模-战略
2.2、微服务拆分和设计-战术
1、领域驱动设计-DDD的概念
DDD不是架构,是方法论
1.1、正反例对比
反例
比如一个Web交易系统,凭直觉开发。使用MVC短平快第一个版本没有问题。第二个版本无法交付。比如电商单体页,页面静态化,但是有人开始加ajax,越加越多,项目混乱
正例
用代码体现业务模型,开发人员、邻域专家质检沟通质量得以改善。领域专家(业务专家)怎么设计的,代码就怎么设计。领域专家参与到代码设计中。
特点
系统不是按照MVC划分层次,而是按照业务架构划分成一个个domain,应用程序domain之间的自由组合。一个微服务有多个domain组成。
总结
要在代码中体现领域思想,强调领域专家和开发人员一起参与系统建设
1.2、好差代码对比
差代码示例
好的代码目标
单一职责原则:
开放封闭原则:对外开放,对内修改封闭
依赖反转原则:面向接口依赖,而不是实现类(必须要接口)。
1.3、名词解释
限界上线文:定义领域模型的边界和业务范围
平血模型:就是我们平时用的pojo,只带get、set不带业务方法
充血模型:实体带业务方法,DDD采用这种
防腐层:
1)在架构层面,通过引入防腐层有效隔离限界上下文之间的耦合;
2)防腐层同时还可以扮演适配器、调停者、外观等角色;
3)防腐层往往属于下游限界上下文,用以隔绝上游限界上下文可能发生的变化;
1.4、DDD四层架构
通过以上是不是发现一个问题,系统多出了很多类,本来可以一个类实现的,现在衍生除了好多类。可以看出小型项目体现不出优势,考虑到以后的变动,比如数据库会不会编,三方服务会不会变。
改造后的好处
2、DDD落地方法
分两步
1)领域建模-战略
2)微服务拆分和设计-战术
2.1、领域建模-战略
step1:业务角度出发,事件风暴(分析流程等)
step2:划分业务领域边界,建立基于业务语言的限界上线文
step3:建立领域模型
step4:映射到微服务
限界上线问与子域的关系
子域:业务角度
限界上线文:技术角度
2.2、微服务拆分和设计-战术
step1:事件风暴找出实体和值对象
step2:从实体中找出聚合根
step3:将业务关联紧密的聚合根、实体、值对象组合在一起形成聚合
step4:结合业务将多个聚合划分到一个限界上下文中
step5:分层设计(后面会讲到)
DDD(1)-DDD的相关概念相关推荐
- 如何用 DDD 给 DDD 建模,破解 DDD 的魔法?
"所有模型都不对,但总有一些是有用的." -- George Box DDD 全称是 Domain-Driven Design,而不是我们所擅长的 Deadline-Driven ...
- DDD专栏1:DDD vs DDD : 怎么防止系统变“老“?
01-DDD vs DDD : 怎么防止系统变"老"? 关于DDD,之前已经简单做过介绍,即Domain Driven Design.那这里怎么又多出了一个DDD呢?其实另一个 ...
- java ddd聚合,DDD(五)--集合、聚合根
1.引言 聚合,字面意思就很简洁明了,是把领域对象聚合在一起,并维护领域对象之间的关系. 聚合其实就是一个在不改变原有实体的情况下将若干实体聚集起来. 2.为什么要聚合呢 在开发中很多实体有着多个一对 ...
- 从DDD看企业级问题解决方案框架
写在前面 最近在考虑如何用最新的一些技术理念,解决企业级业务的问题.怎么理解呢?简单的来说就是区分于原有的微服务.分布式.SOA这些东西,这些东西在企业级维度落地后,必定还是割裂的.我想做的这种企业级 ...
- DDD的模式与实践案例
花名:神帅,毕业5年,混迹于大小厂打怪刷实战经验.资深Java开发工程师. 在企业服务领域和电商领域均有积累,最近一直在研究DDD和低代码领域,对后端微服务业务平台架构的实践和发展比较感兴趣. 公众号 ...
- DDD在有赞信贷核心系统中的实践
概述 学习DDD也一段时间了,阅读过许多相关的文章,但是一直给我一种云里雾里的感觉.一方面大部分文章都是在讲DDD的概念,并没有实际的例子,导致难以理解:另一方面DDD与传统的数据库建模相差较大,对以 ...
- 聊一聊,我对DDD的关键理解
这是阿里技术2023年的第6篇文章 ( 本文阅读时间:10分钟 ) 当我们在学习DDD的过程中,感觉学而不得的时候,可能会问:我们还要学么?这的确引人深思.本文基于工作经验,尝试谈谈对DDD的一些理解 ...
- Linux环境ddd安装与使用
ddd是一个优秀的调试器,安装ddd破费周折 必须安装x开发环境 1.下载 http://ftp.gnu.org/gnu/ddd/,下载最新的ddd-3.3.12.tar.gz # wget http ...
- 嵌入式开发中使用DDD进行调试
在嵌入式程序开发过程中,程序员要进行大量的调试,以此验证程序的正确性,修改潜在的错误.调试器对于程序员来说是不可或缺的必备工具.在Linux环境中,有很多调试工具和调试辅助工具,例如GDB.XXGDB ...
最新文章
- 尤雨溪创立 Vue.js 的心路历程纪录片
- 作业二:编写一个自动生成四则运算的程序
- python 如何查看模块所有方法-Python 查看模块的帮助文档,方法和帮助信息
- sql server 2008 您所做的更改要求删除并重新创建以下表
- eclipse部署android开发环境
- 无星的RN学习之旅(四)——通信、持久化存储、iOS打包
- 切换 uniapp_万能前端框架uni app初探03:底部导航开发
- Redis未授权访问漏洞记录(端口:6379)
- iOS-仿智联字符图片验证码
- shl归纳推理测试题库_SHL(外企笔试常见试题)全攻略
- 谷歌传奇Jeff Dean获2021年IEEE冯诺依曼奖,8页本科论文被大学图书馆保存至今
- 自己动手恢复硬盘丢失数据
- 阿里云服务器搭建 Redis 集群
- QT 控件加载图片不显示
- 【相机标定与三维重建原理及实现】学习笔记2——标定的算法与方法
- 同步发电机 有功功率 无功功率调节
- web前端html+css实现立体旋转相册(表白可用)
- VMware安装mac的流程及unlocker 报错 、出现的一些问题解决方案整理
- ARCHS[@]: unbound variable
- 03-OSPF OE2和OE1外部路由详解