自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(162)
  • 收藏
  • 关注

原创 DDD落地实现的深水区(1)架构的规划与决策

DDD更适用的是那些经过多年的维护,业务变得越来越复杂而难于维护的系统。这样的系统,更需要通过对业务的梳理,领域模型的抽象,来指导业务的变更与代码的更改。然而,它们没有采用DDD,现在要转型成DDD,该怎么办呢?

2025-04-07 20:55:08 565

原创 DDD该怎么去落地实现(7)继承关系(下)

通过前面两期的讲解,我们深入探讨了DDD中继承关系如何落地软件开发。但对于有继承关系的领域对象来说,其设计远比我们想象的要复杂,今天我们就接着这个的话题继续探讨吧!

2025-03-18 20:30:30 836

原创 DDD该怎么去落地实现(6)继承关系(中)

如何将DDD的继承关系落地到程序设计,并完成数据库的持久化呢?听范老师继续给大家聊

2025-03-08 22:32:47 528

原创 DDD该怎么去落地实现(5)继承关系(上)

如何将DDD的继承关系落地到程序设计,并完成数据库的持久化呢?是个问题,我们一起探讨一下吧!

2025-03-05 21:22:18 752

原创 DDD该怎么去落地实现(4)多对多关系

在现实世界中,多对多关系其实并不常见,但也还是有的。当领域模型中真的出现了多对多关系时,软件系统又应该如何落地实现呢?我们今天来探讨一下吧

2025-02-27 21:05:23 1138

原创 DDD该怎么去落地实现(3)通用的仓库和工厂

我有一个梦,就是希望DDD能够成为今后软件研发的主流,越来越多研发团队都转型DDD,但阻碍各研发团队转型DDD的拦路虎是什么呢?

2025-02-15 20:46:48 826

原创 DDD该怎么去落地实现(2)难点是“聚合”

聚合是DDD落地实现的痛点与难点,很多同学都不清楚,什么时候该用聚合,怎么用,什么时候又不该用。我们今天就来谈谈“聚合”,彻底推倒这座困难的巨石吧

2025-02-13 13:01:27 844

原创 DDD该怎么去落地实现(1)关键是“关系”

采用了DDD,应当使得我们的开发变得简单,代码变得清爽,而不是代码变得臃肿。因此,我将通过一系列的文章,探讨DDD如何简化,更容易落地软件项目

2025-01-24 20:12:52 708

原创 DDD你真的理解清楚了吗?领域驱动与AI融合

用AI就能自动完成整个项目的开发是不现实的。用DDD将研发过程拆分成几个阶段,让AI一步一步来辅助研发,也许会更加可行,看看我的实践

2025-01-15 14:06:14 1077

原创 DDD你真的理解清楚了吗?再谈非敏捷实践

再谈非敏捷团队如何实践DDD,这次谈谈原型分析法领域建模,文章的最后有彩蛋

2025-01-09 18:29:15 820

原创 DDD你真的理解清楚了吗?在非敏捷团队中的实践

DDD能在非敏捷团队中实践吗?我们通过一个案例实战演练一下吧

2025-01-09 18:18:28 922

原创 DDD你真的理解清楚了吗?DDD与敏捷的结合

基于敏捷的思想,在DDD实践时,最适用的就是“事件风暴”的实践方法,一开始不是编写大量需求文档,而是通过事件风暴会议来互动并探索需求,形成更加轻量级的领域模型作为输出物。

2025-01-05 12:27:53 817

原创 DDD你真的理解清楚了吗?事件风暴会议

事件风暴是DDD最主流的实践方法,它的核心就是领域事件,只要把它抓住了,其它与之相关的人和事都可以顺利带出来,从而理清楚整个系统

2025-01-01 13:20:03 654

原创 DDD你真的理解清楚了吗?统一语言建模

当你学会了“统一语言建模”,你就变成了客户眼中最靓的仔,最愿意与你沟通交流业务,甚至愿意听从你的建议,按照你的方案来提业务需求。这样,整个形势就反转过来,不再是客户提需求,而是在理解业务以后,由我们来提需求。而这样的需求将会更加落地,能更好地解决客户的痛点,这就是“主动式需求分析”

2024-12-31 09:51:32 696

原创 DDD你真的理解清楚了吗?限界上下文该如何划分

DDD你真的理解清楚了吗?其中一个最大的难题是限界上下文该怎么划分,今天我们就来探讨一下吧

2024-12-29 12:30:16 646

原创 DDD你真的理解清楚了吗?非常抽象的聚合

我将通过一系列的文章,将DDD晦涩的概念都讲明白了,今天来谈谈“聚合”

2024-12-26 22:15:37 862

原创 DDD你真的理解清楚了吗?充血模型 or 贫血模型

DDD你真的理解清楚了吗?今天来探讨一下充血模型还是贫血模型

2024-12-21 23:51:47 852

原创 DDD你真的理解清楚了吗?怎么准确理解“值对象”

DDD你真的理解清楚了吗?我通过这一系列知识分享,让大家真正准确地理解DDD中这些晦涩的概念,今天探讨“值对象”

2024-12-20 12:02:38 724

原创 大话重构连载19:大对象的演化过程

很好,我们终于迈出了重构的第一步,而这第一步我们瞄准了代码问题的重灾区——超级大函数。超级大函数之所以是代码问题的重灾区,就是因为它们往往难于阅读、难于维护。面对大函数我们采取的办法是拆分,以功能为核心将其拆分成一个一个独立的函数。拆分后的程序变得易于阅读了,因为要读懂程序你不再需要读完所有代码,选择性的读取那些顶级函数,只需了了数行代码,你就可以明白整个程序。但是,当我们将数千行的大函数分解成数十个小函数时,另一个问题出现了。想象一下,数十个函数被杂乱无章地堆放在一个对象中,看看就让人头疼。实际上,我们

2014-11-17 09:36:51 1314

大话重构连载19:大对象的演化过程

很好,我们终于迈出了重构的第一步,而这第一步我们瞄准了代码问题的重灾区——超级大函数。超级大函数之所以是代码问题的重灾区,就是因为它们往往难于阅读、难于维护。面对大函数我们采取的办法是拆分,以功能为核心将其拆分成一个一个独立的函数。拆分后的程序变得易于阅读了,因为要读懂程序你不再需要读完所有代码,选择性的读取那些顶级函数,只需了了数行代码,你就可以明白整个程序。但是,当我们将数千行的大函数...

2014-11-17 09:18:37 330

原创 大话重构连载18:最常见的问题

使用抽取方法,虽然道理十分简单,但实际操作起来却并不是那么容易的。完成抽取方法最大的困难,就是如何处理抽取函数与原函数的数据交换。如同将一颗大树从土壤里拔出来,盘根错节的根茎,那是剪不断理还乱。当代码还没有被抽取出来之前,它们与其它程序都是在一个函数的内部,因此各个代码段可以毫无顾忌地相互交互数据。但当我们将代码从原函数中抽取出来时,抽取出来的代码与原函数中的代码就形成了一道墙,要交换的数据只能通过参数与返回值进行交互,这将给我们带来诸多麻烦。

2014-11-02 17:24:13 1156

大话重构连载18:最常见的问题

使用抽取方法,虽然道理十分简单,但实际操作起来却并不是那么容易的。完成抽取方法最大的困难,就是如何处理抽取函数与原函数的数据交换。如同将一颗大树从土壤里拔出来,盘根错节的根茎,那是剪不断理还乱。当代码还没有被抽取出来之前,它们与其它程序都是在一个函数的内部,因此各个代码段可以毫无顾忌地相互交互数据。但当我们将代码从原函数中抽取出来时,抽取出来的代码与原函数中的代码就形成了一道墙,要交换的数据只能通...

2014-11-02 17:15:08 176

原创 大话重构连载17:抽取方法的实践

说了那么多理论,我们来看看怎样使用抽取方法来重构遗留系统。如前所述,重构的过程首先是阅读程序代码,边阅读边整理程序。将功能相对独立的代码段放在一起,在前面加上注释。调整一些程序的顺序,将相关的代码尽量放在一起,但要保证程序执行的结果不会发生改变。比较典型的,将变量的定义与使用变量的代码放在一起。这个步骤比较实用,因为许多的遗留系统,其代码都有一个坏毛病,就是在程序开始时定义一大堆变量,但要弄清这些变量都用来做什么,却十分困难。边读边调整,将变量的定义逐渐迁移到使用它的代码段中,将大大提高代码可读性,你甚至会

2014-10-29 09:25:10 1130

大话重构连载17:抽取方法的实践

说了那么多理论,我们来看看怎样使用抽取方法来重构遗留系统。如前所述,重构的过程首先是阅读程序代码,边阅读边整理程序。将功能相对独立的代码段放在一起,在前面加上注释。调整一些程序的顺序,将相关的代码尽量放在一起,但要保证程序执行的结果不会发生改变。比较典型的,将变量的定义与使用变量的代码放在一起。这个步骤比较实用,因为许多的遗留系统,其代码都有一个坏毛病,就是在程序开始时定义一大堆变量,但要弄清这些...

2014-10-29 08:57:52 171

原创 大话重构连载16:超级大函数

事情总是这样的:当我们对一个遗留系统一忍再忍,再忍,忍,还要忍……终于积攒到某一天,实在忍无可忍了,拍案而起,不能再忍了,重构!!!事情就这样发生了。然而,在这时你突然发现,重构的工作千头万绪,真不知从何开始。堆积如山的问题此起彼伏,期望修改的设计思绪万千。这里有个想法,那里有个思路,什么都想做,却什么都做不了,真是脑子里一团乱麻。这时候,没有一个合理的步骤,清晰的计划,瞎干蛮干是十分危险的,它会为你的重构带来不可预期的未来。无数次的经验告诉我,不论是什么系统,采用什么架构,从分解大函数开始,肯定没有错。

2014-10-18 22:55:38 1137

大话重构连载16:超级大函数

事情总是这样的:当我们对一个遗留系统一忍再忍,再忍,忍,还要忍……终于积攒到某一天,实在忍无可忍了,拍案而起,不能再忍了,重构!!!事情就这样发生了。然而,在这时你突然发现,重构的工作千头万绪,真不知从何开始。堆积如山的问题此起彼伏,期望修改的设计思绪万千。这里有个想法,那里有个思路,什么都想做,却什么都做不了,真是脑子里一团乱麻。这时候,没有一个合理的步骤,清晰的计划,瞎干蛮干是十分危险的,它会...

2014-10-18 20:49:04 305

原创 大话重构连载15:采用Mock技术完成测试

第五次重构我们引入了数据库的设计,用户信息要从数据库中读取,问候语库存储在数据库中,并支持添加与更新。数据库的引入使自动化测试变得困难了,因为数据状态总是变化着的,而这种变化使得测试过程不能复现,这是我们不愿看到的。因此,我们在设计时将业务与数据库访问分离,形成了UserDao与GreetingRuleDao。此时,我们的设计应当遵从“依赖反转”原则,即将UserDao与GreetingRuleDao设计成接口,并编写它们的实现UserDaoImpl与GreetingRuleDaoImpl。这样设计就为我们

2014-09-21 12:53:41 1188

大话重构连载15:采用Mock技术完成测试

第五次重构我们引入了数据库的设计,用户信息要从数据库中读取,问候语库存储在数据库中,并支持添加与更新。数据库的引入使自动化测试变得困难了,因为数据状态总是变化着的,而这种变化使得测试过程不能复现,这是我们不愿看到的。因此,我们在设计时将业务与数据库访问分离,形成了UserDao与GreetingRuleDao。此时,我们的设计应当遵从“依赖反转”原则,即将UserDao与GreetingRuleD...

2014-09-21 11:08:30 164

原创 大话重构连载14:我们是这样自动化测试的

说了那么多,让我们用示例看看,系统重构是应该怎样做自动化测试的。还是回到前面那个HelloWorld的例子(详见 3.3 小步快跑是这样玩的),该类中有一个sayHello()方法,只要我们输入当前的时间与用户名,就返回对该用户的问候语。如果当前时间是上午,则返回“Hi, XXX. Good morning!”;如果是下午,则返回“Hi, XXX. Good afternoon!”;如果是晚上,则返回“Hi, XXX. Good Night!”,这是HelloWorld这个程序实现的功能。然后我们开始为这

2014-09-18 01:06:24 1209

大话重构连载14:我们是这样自动化测试的

说了那么多,让我们用示例看看,系统重构是应该怎样做自动化测试的。还是回到前面那个HelloWorld的例子(详见 3.3 小步快跑是这样玩的),该类中有一个sayHello()方法,只要我们输入当前的时间与用户名,就返回对该用户的问候语。如果当前时间是上午,则返回“Hi, XXX. Good morning!”;如果是下午,则返回“Hi, XXX. Good afternoon!”;如果是晚上,则...

2014-09-18 00:52:56 175

原创 大话重构连载13:自动化测试——想说爱你不容易

正如许多事情都有其两面性一样,测试方法也是这样。要保证测试方法正确,最简单、最直观地想法就是多写些测试用例,从更多地角度去测试,但这必然增加我们的测试成本。小步快跑要求我们频繁进行测试,假如我们重构的周期是20分钟,但测试却要花掉10分钟,那么这样的成本就实在太大了。假如这种测试还是开发人员手工测试,每天都有对同样的测试反复执行数十遍,那么开发人员估计就要疯掉了。你可能立即就想到自动化测试了。是的,在许多重构的书籍中,大师们都建议我们在重构开始前,首先建立自动化测试机制。但遗憾的是,我经过多年的实践总结出

2014-09-09 10:58:31 965

大话重构连载13:自动化测试——想说爱你不容易

正如许多事情都有其两面性一样,测试方法也是这样。要保证测试方法正确,最简单、最直观地想法就是多写些测试用例,从更多地角度去测试,但这必然增加我们的测试成本。小步快跑要求我们频繁进行测试,假如我们重构的周期是20分钟,但测试却要花掉10分钟,那么这样的成本就实在太大了。假如这种测试还是开发人员手工测试,每天都有对同样的测试反复执行数十遍,那么开发人员估计就要疯掉了。你可能立即就想到自动化测试...

2014-09-09 10:48:02 304

原创 大话重构连载12:你不能没有保险索

通过前面的描述你已经对重构中“小步快跑”的开发模式有了一个清楚的认识。学会和习惯小步快跑的开发模式,对于重构工作极其重要,因为它让这种大范围、大幅度修改代码的重构工作变得不再像以往那样让人胆战心惊。究其原因,虽然从结果上是在大范围、大幅度调整,但每一步却是小范围、小福度调整,并且能保证每一步都是正确的。然而,这里有一个非常重要的假设条件,那就是“保证每一步都是正确的”,这是怎么保证的呢?就这个问题,我们需要展开来认真讨论讨论。

2014-09-08 07:04:36 981

大话重构连载12:你不能没有保险索

通过前面的描述你已经对重构中“小步快跑”的开发模式有了一个清楚的认识。学会和习惯小步快跑的开发模式,对于重构工作极其重要,因为它让这种大范围、大幅度修改代码的重构工作变得不再像以往那样让人胆战心惊。究其原因,虽然从结果上是在大范围、大幅度调整,但每一步却是小范围、小福度调整,并且能保证每一步都是正确的。然而,这里有一个非常重要的假设条件,那就是“保证每一步都是正确的”,这是怎么保证的呢?就...

2014-09-08 06:59:41 157

原创 大话重构连载11:小步快跑是这样玩的

说了那么多,相信你对小步快跑的概念有了一个初步的印象,但理解还不是很深。让我们来看一看一个实际工作中的例子,来亲身感受一下什么是大布局,什么是大设计,什么是小设计。还是回到前面那个HelloWorld的例子,起初的需求总是简单而清晰的。当用户登录一个网站时,网站往往需要给用户打一个招呼:“hi, XXX! ”。同时,如果此时是上午则显示“Good morning! ”,如果是下午则显示“Good afternoon! ”,除此显示“Good night! ”。对于这样一个需求我们在一个HelloWorld

2014-08-26 10:42:46 1513 1

大话重构连载11:小步快跑是这样玩的

说了那么多,相信你对小步快跑的概念有了一个初步的印象,但理解还不是很深。让我们来看一看一个实际工作中的例子,来亲身感受一下什么是大布局,什么是大设计,什么是小设计。还是回到前面那个Hello World的例子,起初的需求总是简单而清晰的。当用户登录一个网站时,网站往往需要给用户打一个招呼:“hi, XXX! ”。同时,如果此时是上午则显示“Good morning! ”,如果是下午则显示“Go...

2014-08-26 10:29:15 199

原创 大话重构连载10:小设计而不是大布局

开车的朋友一定深有体会,驾驶汽车其实就是在不断矫正汽车行驶方向的一个过程。在整个驾驶过程中,你必须全神贯注地紧盯前方,通过方向盘不断矫正方向,否则即使行驶在直线路段也可能偏离车道。那些疲劳驾驶的司机,因为进入睡眠状态,无法再矫正方向,车辆就会越来越偏离航向。这种情况下,即使数秒钟的小盹,也能造成车毁人亡的严重后果。重构与驾车虽然属于完全不同的领域,但其道理是相同的。

2014-08-10 14:49:09 985

大话重构连载10:小设计而不是大布局

开车的朋友一定深有体会,驾驶汽车其实就是在不断矫正汽车行驶方向的一个过程。在整个驾驶过程中,你必须全神贯注地紧盯前方,通过方向盘不断矫正方向,否则即使行驶在直线路段也可能偏离车道。那些疲劳驾驶的司机,因为进入睡眠状态,无法再矫正方向,车辆就会越来越偏离航向。这种情况下,即使数秒钟的小盹,也能造成车毁人亡的严重后果。重构与驾车虽然属于完全不同的领域,但其道理是相同的。我们在运用重构方法修改代...

2014-08-10 14:39:35 210

原创 大话重构连载9:大布局你伤不起

作为优秀开发人员,重构应当成为一种习惯,自然而然地运用重构的开发模式,自然而然地在优化和调整我们的代码。它首先要求我们掌握重构的开发模式,就是“小步快跑”的开发模式,运用“两顶帽子”的设计顺序,去开发我们的程序。但作为重构初学者来说,这并不容易,即使你已经从业很多年。

2014-08-04 10:19:22 1096

大话重构连载9:大布局你伤不起

作为优秀开发人员,重构应当成为一种习惯,自然而然地运用重构的开发模式,自然而然地在优化和调整我们的代码。它首先要求我们掌握重构的开发模式,就是“小步快跑”的开发模式,运用“两顶帽子”的设计顺序,去开发我们的程序。但作为重构初学者来说,这并不容易,即使你已经从业很多年。所谓改变一种习惯,就好像习惯了左手吃饭的人,突然被要求改成右手,你必然会感到许多的不适。首先的不适是一种心理上的障碍,即如何...

2014-08-04 10:03:43 211

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除