在本文中将介绍3条重要的软件开发原则,你可能已经知道,也可能只知道其中一条。这些原则看似很简单,但实施起来会很难。不管如何,这些原则提供了一个管理复杂软件项目的强大的途径。当涉及到真实世界中的项目开发时,你会发现这些原则都是很是有用的。
原则1:不要重复本身(Don’t Repeat Yourself,DRY原则)
这个原则很是重要,换言之,就是不要写重复的代码。
当你正在构建一个大型的软件项目时,你一般会被总体复杂性搞得不知所措。解决复杂性的最基本的策略是将系统分红若干个容易处理的部分。起初,你可能想将系统按组件划分,每一个组件表明了一个子系统,其中包含了完成特定功能所需的一切。
组件还能够往下再分,这样复杂性将被下降到单一职责(single responsibility),每一个职责能够使用一个类来实现,类包含了方法和属性。方法实现算法,这些算法和算法的子部分是构成软件业务逻辑的最小知识块。你只须要保证这些块不重复便可。
引用
DRY原则规定,在整个系统中,每个小的知识块只可能发生一次,且每一个知识块必须有一个单1、明确、权威的表征。
在一个完美的应用程序中,每一小块业务逻辑将被封装在一个表征中,也就是一个变量或一个类。变量被封装在一个可以被描述为一个职责表征的类中,类被封装在一个能被描述为功能表征的组件中。这种方式称为模块化架构,DRY原则是其一个重要的部分。
实现DRY
你能够按照如下方式下降软件项目的复杂度,以便更容易地发现潜在的重复问题:
- 绘制软件架构图,并映射主要的组件,复杂的项目可能须要为每一个组件绘制一个专门的架构图。
- 若是你到达了链接职责的层级,你可能须要转换到UML图。
- 在写代码块以前,根据它在项目中的层级命名。定义它表明什么,并肯定你知道它在组件中的做用。
- 定义表征应该展现的内容(如功能是在数据库驱动程序中执行SQL)以及应该隐藏的内容(如数据库认证信息)。
- 确保表征不依赖于另外一个复杂层级的表征(如一个组件依赖于另外一个组件中的类)。
引用
当你发现正写的代码与以前写过的代码相似或相同,你就须要花时间来考虑你正在作什么,并确保不重复本身。
原则2:尽可能简单、一目了然(Keep it Simple Stupid,KISS原则)
引用
最简单的解释每每是最正确的。
这里的Stupid翻译为“一目了然”更好一些,简单并不意味着一目了然,好比“.(){.|.&};.”,够简单吧,但看懂这是什么吗?这实际上是一个bash中的fork炸弹(不断fork一个新进程,耗尽系统资源)。
因此作到简单的同时,还要作到一目了然。你也能够这样理解,将一个软件作得连白痴都会用。这就是用户体验的最高境界了。
如何作到简单且一目了然呢?这要归结到软件开发的可维护性和可理解性。KISS原则每每体如今需求设计阶段,当你考虑如何将客户的需求转变成一个可实现组件时,尝试确认如下部分:
- 收益和努力比例不调的功能
- 高度依赖其余功能的功能
- 可能会变得复杂的功能
总而言之,若是一个任务看起来超复杂,试着去考虑一种创造性、独特的方式。多花时间去讨论关键点,看是否有其余更合适的方案。
原则3:适可而止(You Ain’t Gonna Need It,YAGNI原则)
YAGNI原则指的是只须要将应用程序必需的功能包含进来,而不要试图添加任何其余你认为可能须要的功能。
引用
在一个软件项目中,每每80%的时间花费在20%的功能上。
当你准备列出一个项目清单时,试着考虑如下问题:
- 经过下降抽象的层级,来实现低复杂度
- 根据特性将功能独立出来
- 适度接受非功能性需求
- 识别耗时的任务,并摆脱它们
这些原则看似简单,但在实际运做中,会有各类各样的问题出现。一旦你强迫本身应用这些原则,你会发现你距离创造一个完美的软件已经不远了。