- 博客(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该怎么去落地实现(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与敏捷的结合
基于敏捷的思想,在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你真的理解清楚了吗?我通过这一系列知识分享,让大家真正准确地理解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关注的人