自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 DDD是AI编程的未来吗?AI编程的思路

AI编程替代的不是人,而是不会用AI的人!我们必须要做出改变,逐渐向着需求与设计的方向转变,理解客户的需求,将其转换成软件的设计,进而满足客户需求,而将编码的工作彻底交给AI。这时,DDD必将成为程序员的最好利器而发扬光大

2025-05-24 22:45:14 781

原创 DDD落地实现的深水区(6)组织转型路线图

从传统的软件开发模式,要转型到领域驱动的开发模式,不论从研发人员的设计理念,到整个研发的流程管理,都是一次巨大的转变。因此,今天从组织管理的角度探讨,DDD该如何落地转型。

2025-05-06 21:06:25 773

原创 DDD落地实现的深水区(5)整洁架构落地(下)

嵌入式、桌面端是否也可以使用整洁架构,像Web应用那样地设计、开发与规划系统,让技术更迭更加容易呢?当然可以,看看我的设计思路吧

2025-04-30 14:07:42 957

原创 DDD落地实现的深水区(4)整洁架构落地(上)

虽然在上一期,我对整洁架构的设计思想进行了非常详细地拆解,依然有同学反映,希望将这些设计思想具体落实到项目代码中,给大家详细演示整个的设计过程。既然如此,那么我们今天就好好来谈一谈吧。

2025-04-28 19:51:04 811

原创 DDD落地实现的深水区(3)整洁架构设计

整洁架构的设计思想,将上层业务代码与底层技术框架的解耦,可以很好地解决DDD应对软件层次的复杂性带来的挑战,是DDD架构设计的最佳方案

2025-04-20 20:25:50 583

原创 DDD落地实现的深水区(2)与微服务的整合

今天来到了DDD落地实现的深水区,让我们一起来探讨,DDD领域驱动设计该进行怎样的架构设计,才能更好地支持微服务,存在哪些挑战,以及我们的解决思路

2025-04-14 20:35:49 576

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

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

2025-04-07 20:55:08 1029

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

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

2025-03-18 20:30:30 859

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

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

2025-03-08 22:32:47 554

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

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

2025-03-05 21:22:18 778

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

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

2025-02-27 21:05:23 1201

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

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

2025-02-15 20:46:48 864

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

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

2025-02-13 13:01:27 881

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

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

2025-01-24 20:12:52 752

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

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

2025-01-15 14:06:14 1170

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

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

2025-01-09 18:29:15 863

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

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

2025-01-09 18:18:28 948

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

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

2025-01-05 12:27:53 874 2

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

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

2025-01-01 13:20:03 702

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

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

2024-12-31 09:51:32 741

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

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

2024-12-29 12:30:16 708

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

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

2024-12-26 22:15:37 953

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

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

2024-12-21 23:51:47 1002

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

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

2024-12-20 12:02:38 770

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

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

2014-11-17 09:36:51 1329

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

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

2014-11-17 09:18:37 340

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

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

2014-11-02 17:24:13 1170

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

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

2014-11-02 17:15:08 185

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

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

2014-10-29 09:25:10 1143

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

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

2014-10-29 08:57:52 181

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

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

2014-10-18 22:55:38 1149

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

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

2014-10-18 20:49:04 324

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

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

2014-09-21 12:53:41 1200

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

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

2014-09-21 11:08:30 171

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

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

2014-09-18 01:06:24 1223

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

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

2014-09-18 00:52:56 183

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

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

2014-09-09 10:58:31 977

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

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

2014-09-09 10:48:02 323

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

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

2014-09-08 07:04:36 989

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

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

2014-09-08 06:59:41 162

空空如也

空空如也

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

TA关注的人

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