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
相关文章推荐
- 难过了,不要告诉别人。自己知道就好:伤感
- 递归函数内部的原理????不要跟我讲自己调用自己这样的话,我一分也不给你的zz
- 不要自己把自己毁了,加强自控,对自己负责
- 不要相信自己,永远做到最谨慎1(笔记)
- 不要困在自己建造的盒子里――写给.NET程序员
- SQL优化的方针--自己来比较,不要套用公式。
- 危急,不要任意让站点记住password自己主动登陆!
- 请不要重复犯我在学习Python和Linux系统上的错误
- 上班族:不要让自己成为老板的“日用品”!
- 单一线程规则,不要在自己的线程中触摸swing组件
- 写给自己也同惠通道学友~请不要做浮躁的嵌入式工程师
- Manifest.xml中不要出现重复的uses-permission声明
- 作为一名及格的站长都知道内容为王,外链为皇”,一个上网站想要有一个好的排名除了要有吸惹人高质量的内容外还需要强年夜的外链。对于网站内容要环绕网站主题,若是自己文采欠好可以伪原创下,万万不要用工具伪原创
- 不要辜负了自己
- 排高低:冒泡与插入排序。不要管别人,自己设计的才是自己的。
- 当你完不成自己的程序时,就不要睡觉......
- [置顶] Android Studio 如何导出和导入自己的常用设置,避免重复制造轮子。加快开发速度
- Asp.net WebAPI Request参数验证-请不要重复造轮子
- 从1,3,5,7,9,11,13,15中选3个数(选择可重复)作和得30
- 不要在工作中过多地展现自己的才华