你的代码是干的还是湿的?

敏捷开发
• 阅读 44

DRY 代码是一种软件原则,代表不要重复自己 (Don’t repeat yourself),其目标是减少代码的重复。DRY原则上是要求系统中的每一部分,都必须单一、明确、权威地表达。其实就是可靠地开发软件、并让开发项目更易于理解和维护。与之相反的,WET (Write Everything Twice) 则是一个厚颜无耻的缩写,表示相反的意思,即不遵守 DRY 原则的代码。 显而易见,程序员写代码时需遵循DRY原则,而尽量避免WET。

在这篇文章中,我们将探讨将 DRY 原则应用于您的代码的好处。首先,我们将从一个简单的例子开始,说明 DRY 原则的基本优势。

DRY示例

假设代码中有很多地方需要根据当前用户的角色执行。例如,createPage() 只能在用户是编辑者或管理员时执行,deletePage() 只能在用户是管理员时执行,等等。

我们可以使用一个函数 isPermitted(),而不是在 createPage 和 deletePage 中分散检查用户角色的逻辑,如下所示。

  //get the current Subject
Subject currentUser = context.getSubject();
if (isPermitted(currentUser)) {
    //allow execution of deletePage
} else {
    //block execution
}

通过将 isPermitted() 的逻辑保留在一个地方,就可以避免重复,还可以重用代码。额外的优势是逻辑分离,即 createPage() 和 deletePage() 不需要知道如何检查权限。

DRY的优势

可维护性

使用 DRY 的最大好处是可维护性。如果在整个代码中重复检查权限的逻辑,则很难解决重复代码中出现的问题。当解决了一个问题时,会很容易忘记在其他事件中解决这个问题。此外,如果必须修改逻辑,就需要到处复制粘贴。通过使用非重复代码,只需在一个地方维护代码即可。新的逻辑和错误修复可以在一个地方而不是多个地方进行。这可以带来健壮和可靠的软件。

可读性

通常情况下,DRY 代码更具可读性。这并不是因为 DRY 原则本身,而是因为开发人员在代码中付出了额外的努力,使其遵循更多代码规范、代码可读性的原则。

重用

DRY 本质上促进了代码的重用,因为我们正在将 2 个或更多重复代码实例合并到一个代码块中。从长远来看,可重用代码是值得的,因为它加快了开发时间。

测试

这里说的是单元测试和集成测试,不是手工测试。使用测试覆盖的路径和函数越多,要为测试编写的代码就越多。如果代码不重复,只需要测试一条主路径即可。当然,不同的行为仍然需要进行测试。

DRY注意事项

尽管使用 DRY 有所有优点,也要注意一些使用细节:

  1. 并非所有代码都需要合并成一个片段。有时两段代码看起来相似但有细微差别,那么何时将这些代码合并为一个,何时将它们分开需要仔细考虑。
  2. 如果代码“过度干燥”,就会变得难以阅读和理解。有时仅有一个代码块实例还试图应用DRY原则,,虽然很欣赏他们使代码更好和可重用的想法和远见,但在需要重用它的情况之前,并不需要费心让代码遵循 DRY 原则。
  3. 经常被遗漏,DRY 不仅仅局限于代码。它同样适用于数据库设计、文档、测试代码等。

写好一段代码需要时间,但写一段好代码需要更长时间。把优秀的软件设计原则变成习惯,会节省很多开发时间,更利于维护和扩展软件项目。DRY原则,从现在做起吧。

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
2年前
Vtiger CRM 几处SQL注入漏洞分析,测试工程师可借鉴
本文由云社区发表0x00前言干白盒审计有小半年了,大部分是业务上的代码,逻辑的复杂度和功能模块结构都比较简单,干久了收获也就一般,有机会接触一个成熟的产品(vtigerCRM)进行白盒审计,从审计的技术难度上来说,都比公司内的那些业务复杂得多,而真正要提高自己技术水平,更应该看的也是这些代码。vtigerCRM是一个客
可莉 可莉
2年前
0615 shell编程1
0615shell编程1一、shell脚本介绍shell是一种脚本语言和传统的开发语言比较,会比较简单shell有自己的语法;可以使用逻辑判断、循环等语法可以自定义函数,目的就是为了减少重复的代码shell是系统命令的集合
Stella981 Stella981
2年前
0615 shell编程1
0615shell编程1一、shell脚本介绍shell是一种脚本语言和传统的开发语言比较,会比较简单shell有自己的语法;可以使用逻辑判断、循环等语法可以自定义函数,目的就是为了减少重复的代码shell是系统命令的集合
Wesley13 Wesley13
2年前
Java 生成永不重复的ID的代码
packagecom.hh.util;/创建数据库ID的通用方法.@sinceJDK1.6/publicclassCreateID{privatefinalstaticStringstr"123456
Stella981 Stella981
2年前
Babel是如何读懂JS代码的
本文转载自:安秦 https://zhuanlan.zhihu.com/p/27289600概述稍微了解行业现状的开发者都知道,现在前端“ES6即正义”,然而浏览器的支持还是进行时。所以我们会用一个神奇的工具将ES6都给转换成目前支持比较广泛的ES5语法。对,说的就是Babel。本文不再介绍Babel是什么也不讲怎么用,这类
敏捷开发 敏捷开发
1个月前
你的代码是干的还是湿的?
DRY代码是一种软件原则,代表不要重复自己(Don’trepeatyourself),其目标是减少代码的重复。
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
稚然 稚然
3个月前
零声C/C++企业级项目实战班
//下仔のke:https://yeziit.cn/15437/在编程中,循环是控制程序流程的一种结构,它可以重复执行一段代码,直到满足特定的条件。有两种常见的循环结构:while循环和for循环。while循环:while循环会重复执行一段代码,只要给定
贾敦 贾敦
2个月前
免费在线代码生成云平台
代码生成云平台是一种为开发人员提供便捷、高效的代码生成工具和服务的云服务平台。平台的目标是通过自动化和模板化的方式,帮助开发团队加速应用程序的开发过程,减少重复性劳动,提高代码质量,并降低维护成本。以下是一个代码生成云平台可能包含的产品和功能介绍:模板引擎
敏捷开发
敏捷开发
Lv1
女 · 产品经理
公众号:敏捷开发 网址:www.minjiekaifa.com
文章
19
粉丝
0
获赞
0