您的位置:首页 > 其它

30. 不要重复自己

2013-09-12 12:28 459 查看

不要重复自己

在所有的编程准则中,不要重复自己(Don't Repeat Yourself,DRY)可能是最基本的一个。 Andy Hunt和Dave Thomas在《程序员修炼之道》(The Pragmatic Programmer)中阐述了这个原则,成为了许多其它为人熟知的优秀软件开发实践和设计模式的基础。知道辨别重复、理解如何通过适当的实践和正确的抽象消除重复的程序员,可以比一直在用不必要的重复感染程序的程序员产生更清洁的代码。

重复是浪费

进入到应用程序里面的每一行代码都要维护,也是未来的bug的潜在之源。重复会使代码库不必要地膨胀,导致更多产生bug的机会,给系统增加意外的复杂度。重复增加的膨胀也会导致程序员更难以全面了解系统,更难以确定重复逻辑中某一处的修改是否需要也在另一处同样修改。DRY需要的是“系统中每一点知识都要有一个单一的、明确的和权威的表现”。

重复的过程需要自动化

软件开发过程中的很多过程都很重复,而且很容易自动化。同源代码中一样,DRY原则也适用于此。手动测试很慢,容易出错,难以重复,所以如果可能的话,就应该使用自动化测试套件。手动整合软件可能需要很多时间,容易出错,所以自动构建过程应该尽可能频繁地运行,理想状态下是每次提交都运行。痛苦的手动过程存在的地方,都应该自动化、标准化。目标是确保只有一种方法完成任务,它是要尽可能的轻松的。

重复的逻辑需要抽象

逻辑中的重复有多种表现形式。复制、粘贴的if-then或switch-case逻辑就属于其中最容易检测和修正的。很多设计模式有着减少或消除应用程序中逻辑重复的明确目标。如果对象典型情况下在可以使用之前需要一些事件发生了才可以使用,这就可以通过抽象工厂或者工厂方法来实现。如果一个对象行为上有很多可能的变化,这个行为就可以由策略模式插入,而不是使用很大的if-then结构。事实上,总结设计模式本身也是在尝试减少解决普通问题、讨论这些解决方案所需的重复工作。另外,DRY可以应用到架构上,例如数据库模式,以达到标准化。

原则

其它一些软件准则也与DRY有关。一次且仅一次的原则,它只适用于代码的功能行为,可以认为是DRY的一个子集。开放/封闭原则,“软件应该对扩展开放,对修改封闭”,只有在DRY被遵循时才有效。同样地,为人熟知的单一责任原则,它需要类“只有一个理由来改变”,也依赖于DRY。

在架构、逻辑、过程和功能上遵循时,DRY原则可以给软件开发人员提供根本指导,帮助创建更简单、更易维护、更高质量的应用程序。由于确实有需要重复来满足性能或其它需求(例如数据库中的数据反规范化)的场景,它应该只在直接的、确实的需要中使用,而不是想当然。

原文:Don't
Repeat Yourself by Steve
Smith
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐