软件设计中“简单”这个原则

今天在看《互联网创业核心技术——构建可伸缩的Web应用》时候,书中的“简单”设计原则让我想起最近的工作以及先前处理此类问题的太多。那么,把书中的内容记录于此,方便时时查看。

最重要的原则是使事物简单。简单没有一个衡量标准,判断一个东西是不是简单的时候,你要首先回答的是这个是对谁以及什么时候而言的。

  • 简单不是走捷径,不是为手边的问题找一个最快的方案。
  • 简单是让别的软件工程师以一种最容易的方式使用你的方案。
  • 简单是当系统变得更庞大更复杂的时候依然能够被理解。

学习如何简单的最好的途径是经验。

简化你的产品可以从以下4个基本步骤开始。

隐藏复杂与构建抽象

隐藏复杂和构建抽象是实现简化最好的方法之一。

如果我们的系统无法保持简单,那么我们能做的就是保持局部简单。主要方式是确保在设计和实现两个方面上,任何单个的类、模块、应用的设计目标及工作原理都能被快速理解。

避免过度设计

实现简化的第二个实践是避免过度设计。

好的设计方法是可以在后期逐渐添加新的功能特性,而不是一开始就开发一个超级大的系统。早期先构建一个合理的抽象层次,然后迭代地增加新特性,要比一开始就设计好全部的功能为将来各种可能进行开发好得多。

尝试测试驱动开发

好处:

  • 没有单元测试用例就没有代码,所以也就没有无用的代码;
  • 工程师可以更好地把握工作的重点;

无论是否使用TDD,都要从用户视角思考问题。假设公司新来的工程师需要使用你开发的接口,那么他想调用的方法是什么?传递的参数是什么?期待的返回值是什么?从这个角度去思考问题,就会更好地开发易于用户调用的代码。

从软件设计的简化范例中学习

可以试着分析一些框架,总结出一些简化的范例。
这些框架被书中推荐的有:Grails、Hadoop、Google Maps API。

没有简单性,工程师就没法理解代码,不能理解软件,系统就无法保证持续发展。对于伸缩性,最好是设计简单的系统然后让它好好运行,而不是设计复杂的系统然后突然崩溃了。