笔记来源于b站视频

1.系统“老化”

  • 需求难:程序员和产品经理沟通困难,更改需求难
  • 开发难:对于上前行代码的类,更改很难,只能用if-else
  • 创新难:对于之前老的技术笔试SSH想更换为SSM,由于涉及太多业务sql,难以更新
  • 测试难:我们只更改了一个类的一小部分代码,想要测试这个部分功能不容易。

微服务能够防止“老化”么

虽然能拆分,但是下单服务仍然会不断膨胀,单个业务不断膨胀,仍需要重构。

代码差距

传统的业务代码:

就是依次调用service接口,完成步骤。

有什么缺点?高质量代码标准:高内聚,低耦合

  • 可维护性差:比如我只是要转账,但是其中还夹杂这风控系统的评估和各种审计等和转账无关的业务,这样的话如果风控系统需要改造,那么这个转账业务也需要改动。
  • 可扩展性差:比如某个业务sql,只在当前类中使用,无法复用。
  • 无法测试:对于这个业务需要开启风控,开启kafka等。

违反那些代码原则?

  • 单一职责:这个类不仅做转账,还做风控,评审
  • 开闭原则:对扩展开放,对修改封闭。比如转账操作,我们有打折优惠,就需要改动代码,那么我们可以将转账操作提出来,封装到一个方法中。
  • 依赖反转:依赖接口,而不是实现类

如何改造?

那讲讲我实习过程中的公司使用的 DDD 吧

DDD 没有固定的格式,每个人都有不同的写法,不过这时可以通过约定来规定。

一般来说,有 port(view) 层,这一层是 rpc 的接口实现层,或者是spring 的 controller 层。

application 层,这一层或许会调用多个domain 下的 service,不仅当前包的,还有其他包下的 service 都可以在这层调用。如果逻辑很简单,那么直接调用 repository 层也可以。

domain 层,这里有所谓领域模型,还有 service 业务逻辑,还有数据库层接口定义 repository。

infra 层,基础组件层,各个数据库的配置,或者其他配置类,工具类等等,数据库接口实现等

DDD笔记的更多相关文章

  1. 20190101.DDD笔记

    建立领域模型步骤 根据提供的信息完善主要业务场景和业务流程: 根据业务流程识别领域事件并按照时序排列: 针对领域事件进行命令识别: 针对领域事件和命令进行聚合和子域的初步识别: 在识别的subdoma ...

  2. DDD领域驱动设计理论篇 - 学习笔记

    一.Why DDD? 在加入X公司后,开始了ASP.NET Core+Docker+Linux的技术实践,也开始了微服务架构的实践.在微服务的学习中,有一本微软官方出品的<.NET微服务:容器化 ...

  3. 阅读文章《DDD 领域驱动设计-如何 DDD?》的阅读笔记

    文章链接: https://www.cnblogs.com/xishuai/p/how-to-implement-ddd.html 文章作者: 田园里的蟋蟀 首先感谢作者写出这么好的文章. 以下是我的 ...

  4. Redis学习笔记~Redis事务机制与Lind.DDD.Repositories.Redis事务机制的实现

    回到目录 Redis本身支持事务,这就是SQL数据库有Transaction一样,而Redis的驱动也支持事务,这在ServiceStack.Redis就有所体现,它也是目前最受业界认可的Redis ...

  5. DDD学习笔记二

    参考:感谢博主的分享... http://www.cnblogs.com/netfocus/archive/2012/02/12/2347938.html DDD ==> 领域驱动设计(Doma ...

  6. DDD学习笔记一

    由于也是初学DDD,难免有很多不足和认识错误的地方.多数内容来自其他网络资料或者书籍. 参考:http://www.cnblogs.com/Leo_wl/p/4418663.html 希望多多提出宝贵 ...

  7. 领域驱动设计(DDD)笔记(一)

      最近在看<领域驱动设计>这本书,准备写点学习笔记博文记录系列.记录本书中的要点和疑惑,不定期更新!先放张MarginNote的图: Aggregate  每个Aggregate 都有一 ...

  8. DDD学习笔记1——分层架构

    新旧架构对比图: DDD中的基础设施层包括数据持久化(ORM数据访问),IoC容器实现,AOP实现(安全,日志记录,缓存等) Repository的接口通常放在领域层,具体实现在基础设施层 旧架构的业 ...

  9. DDD学习笔记(一)

    最近开始筹备一个电商项目. 其实是公司的老本行了. 但今年公司希望在做项目的同时, 沉淀出一套针对电商的基础产品. 这样可以提高新项目的开发效率, 减少重复劳动. 那现如今, DDD(领域驱动设计)应 ...

  10. .net core webapi +ddd(领域驱动)+nlog配置+swagger配置 学习笔记(2)

    DDD领域驱动模型设计 什么是DDD 软件开发不是一蹴而就的事情,我们不可能在不了解产品(或行业领域)的前提下进行软件开发,在开发前,通常需要进行大量的业务知识梳理,而后到达软件设计的层面,最后才是开 ...

随机推荐

  1. 19.8 Boost Asio 异或加密传输

    异或加密是一种对称加密算法,通常用于加密二进制数据.异或操作的本质是对两个二进制数字进行比较,如果它们相同则返回0,如果不同则返回1.异或加密使用一把密钥将明文与密文进行异或运算,从而产生密文.同时, ...

  2. C# 笔记之基本语法

    C#是一种现代的.通用的编程语言,由微软公司开发和推广.它于2000年发布,是一种结构化.面向对象和组件化的语言,旨在为Windows操作系统和Microsoft .NET框架提供强大的支持.可用于开 ...

  3. [Java] 解析Xml配置文件

    1.解析方法 import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;impo ...

  4. PHP中的正则表达式相关函数

    PHP中的正则表达式相关函数 常用的正则函数 1.执行一个正则表达式匹配 int preg_match ( string pattern , string subject [, array & ...

  5. 教你用CSS实现表单部件

    案例介绍 欢迎来到我的小院,我是霍大侠,恭喜你今天又要进步一点点了!我们来用CSS编程实战案例,使用 列表标签完成一个下拉菜单样式的表单部件. 案例演示 运行代码后在浏览器弹出由 标签组成的下拉菜单样 ...

  6. Cpu是如何选择线程的?

    Cpu是如何选择线程的? linux中线程存放格式 linux中线程与进程对应的结构体都是task_struct 唯一不同的点在于线程存放的东西少了点(由于一个进程中的线程们是共享一定数据的那些东西就 ...

  7. VSCode实现GDB图形界面远程调试

    前言 在习惯了集成开发环境的图形界面调试时,首次使用GDB远程调试必定很不习惯,下面讲述如何利用VSCode实现GDB图形界面远程调试 代码在Linux服务器上,而平常都在Windows上使用,那么V ...

  8. KVM环境:Active console session exists for this domain

    做测试过程中被迫换电脑,但没有关掉原电脑的连接,所以用其他电脑连接测试环境时,发现之前的kvm测试环境因没有断开,无法连接: error: operation failed: Active conso ...

  9. ABC 305

    题目列表 前三题过水,第四题分类讨论两个端点之间的距离和所在位置是清醒或睡眠 即可. E 题意:一张图上有一些结点有保安,每个保安有不同的警戒度 \(h_i\),定义 一个结点是安全的 为这个结点可以 ...

  10. DOM和BOM的区别

    DOM和BOM的区别 在浏览器中运行的JavaScript可以认为由三部分组成:ECMAScript描述了该语言的语法和基本对象,DOM文档对象模型描述了处理网页内容的方法和接口,BOM浏览器对象模型 ...