目录

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的相关概念相关推荐

  1. 如何用 DDD 给 DDD 建模,破解 DDD 的魔法?

    "所有模型都不对,但总有一些是有用的." -- George Box DDD 全称是 Domain-Driven Design,而不是我们所擅长的 Deadline-Driven ...

  2. DDD专栏1:DDD vs DDD : 怎么防止系统变“老“?

    01-DDD vs DDD : 怎么防止系统变"老"? ​ 关于DDD,之前已经简单做过介绍,即Domain Driven Design.那这里怎么又多出了一个DDD呢?其实另一个 ...

  3. java ddd聚合,DDD(五)--集合、聚合根

    1.引言 聚合,字面意思就很简洁明了,是把领域对象聚合在一起,并维护领域对象之间的关系. 聚合其实就是一个在不改变原有实体的情况下将若干实体聚集起来. 2.为什么要聚合呢 在开发中很多实体有着多个一对 ...

  4. 从DDD看企业级问题解决方案框架

    写在前面 最近在考虑如何用最新的一些技术理念,解决企业级业务的问题.怎么理解呢?简单的来说就是区分于原有的微服务.分布式.SOA这些东西,这些东西在企业级维度落地后,必定还是割裂的.我想做的这种企业级 ...

  5. DDD的模式与实践案例

    花名:神帅,毕业5年,混迹于大小厂打怪刷实战经验.资深Java开发工程师. 在企业服务领域和电商领域均有积累,最近一直在研究DDD和低代码领域,对后端微服务业务平台架构的实践和发展比较感兴趣. 公众号 ...

  6. DDD在有赞信贷核心系统中的实践

    概述 学习DDD也一段时间了,阅读过许多相关的文章,但是一直给我一种云里雾里的感觉.一方面大部分文章都是在讲DDD的概念,并没有实际的例子,导致难以理解:另一方面DDD与传统的数据库建模相差较大,对以 ...

  7. 聊一聊,我对DDD的关键理解

    这是阿里技术2023年的第6篇文章 ( 本文阅读时间:10分钟 ) 当我们在学习DDD的过程中,感觉学而不得的时候,可能会问:我们还要学么?这的确引人深思.本文基于工作经验,尝试谈谈对DDD的一些理解 ...

  8. Linux环境ddd安装与使用

    ddd是一个优秀的调试器,安装ddd破费周折 必须安装x开发环境 1.下载 http://ftp.gnu.org/gnu/ddd/,下载最新的ddd-3.3.12.tar.gz # wget http ...

  9. 嵌入式开发中使用DDD进行调试

    在嵌入式程序开发过程中,程序员要进行大量的调试,以此验证程序的正确性,修改潜在的错误.调试器对于程序员来说是不可或缺的必备工具.在Linux环境中,有很多调试工具和调试辅助工具,例如GDB.XXGDB ...

最新文章

  1. 尤雨溪创立 Vue.js 的心路历程纪录片
  2. 作业二:编写一个自动生成四则运算的程序
  3. python 如何查看模块所有方法-Python 查看模块的帮助文档,方法和帮助信息
  4. sql server 2008 您所做的更改要求删除并重新创建以下表
  5. eclipse部署android开发环境
  6. 无星的RN学习之旅(四)——通信、持久化存储、iOS打包
  7. 切换 uniapp_万能前端框架uni app初探03:底部导航开发
  8. Redis未授权访问漏洞记录(端口:6379)
  9. iOS-仿智联字符图片验证码
  10. shl归纳推理测试题库_SHL(外企笔试常见试题)全攻略
  11. 谷歌传奇Jeff Dean获2021年IEEE冯诺依曼奖,8页本科论文被大学图书馆保存至今
  12. 自己动手恢复硬盘丢失数据
  13. 阿里云服务器搭建 Redis 集群
  14. QT 控件加载图片不显示
  15. 【相机标定与三维重建原理及实现】学习笔记2——标定的算法与方法
  16. 同步发电机 有功功率 无功功率调节
  17. web前端html+css实现立体旋转相册(表白可用)
  18. VMware安装mac的流程及unlocker 报错 、出现的一些问题解决方案整理
  19. ARCHS[@]: unbound variable
  20. 03-OSPF OE2和OE1外部路由详解

热门文章

  1. Linux文件重命名批量操作(截取特定位置的字符)
  2. 支持鸿蒙系统的手环,华为最新手环专利曝光,新款手环或搭载鸿蒙系统
  3. bulk insert 服务器不支持代码页 65001
  4. #Z0060. Peaks
  5. CreateWindow函数详解
  6. python自动填写excel,使用python自动填充语料关键词到Excel
  7. ansible之playbook的role用法
  8. 美团点评 TiDB 深度实践之旅
  9. 数据库学习笔记(2)——关系模式
  10. IDEA三种注释快捷键