扫码阅读
手机扫码阅读
DRY原则下区分重复还是巧合
282 2023-08-22
DRY原则(Don't Repeat Yourself)已经深入人心。重复的代码在不同地方出现,是程序隐患之一。比如你因为某个原因修改了其中一处就提交了,那么就会造成没有修改彻底,进而造成问题。但在按照DRY原则对代码进行重构的时候,要谨慎区分重复和巧合。如果不加以区分,仅仅从代码上看重复,随着业务的推进,可能会给你带来更大的问题。
为什么会这样呢?有些时候的代码重复,仅仅是巧合。在时间上,仅仅在某个时间上,这两部分代码看起来差不多。但如果两边业务相差巨大,那么随着时间的推移。这两边代码就变得越来越不相似。如果你按照DRY原则把他们进行了抽象,那么抽象的部分就需要兼容了两块业务。随着时间的推移,两块业务变得越来越不同,你不得不在抽象的业务层进行多种业务的兼容。里面充斥了各种判断代码,用来判断不同业务场景下如何处理。两个或者多个业务通过这个紧紧耦合在了一起。改动一个业务的特性,可能导致另外个业务不可用。
我曾经碰到一个系统。他把系统几乎所有的业务,都抽象为一个“单据”。因此分成了基本单据、销售单据、入库单据等业务层次。最后的业务都从这里一层层继承。看起来似乎是解决DRY原则。但不同单据业务逻辑相差越来越大。导致在每一层都大量代码处理不同业务的各种情况。系统到最后想做一个修改都极为困难,可谓牵一发而动全身。
区分重复还是巧合。最重要的是从业务角度来考虑,这是否是两个不同业务,还是相同业务在不同服务上的体现?如果是相同的业务,那么毫无疑问我们应该把它们放一起,遵守DRY原则。如果不是,还是分开吧,各自考虑自己的。
原文链接:
http://mp.weixin.qq.com/s?__biz=MzUzMzkxMjE3NQ==&mid=2247483670&idx=1&sn=6b391e222d21a508229d13a41c92ddb6&chksm=fa9d8e16cdea0700ec7e6f93ab96ae848bd7bca4cca65e1ff643f2f06943f81a501d17355e09#rd
老邓聊开发的其他文章
降低软件质量能让你更快吗?
我们经常听到一个说法,说团队软件质量低是因为面临工期压力,为了快速交付不得不做出来的让步。通
工作量评估之小马过河
在软件开发过程中,工作量评估是必不可少的一步。大多数的工作量评估,采用是绝对时间,如人天、人时。这时候就会陷
业务模型驱动需求编写
王大锤老师在上BA课的时候,经常会用一个俄罗斯方块的例子:请描述俄罗斯方块旋转的逻辑。由于俄罗斯方块有好几种
劝君放弃微服务
最近几年以来,微服务开始大行其道。各种项目都开始采用微服务架构。在此基础上,又诞生了多种服务、框架用来治理
敏捷退化
敏捷已经不是个新鲜词了,现在很多团队都实现了某种形式的敏捷。Scrum是其中最为流行的一种方式。但随着时间的
加入社区微信群
与行业大咖零距离交流学习
软件研发质量管理体系建设
白皮书上线