1.5 设计模式为何如此重要
前面介绍了两种互为补充的软件设计理念——APIE与SOLID。学习完前面介绍的内容,大家应该逐渐意识到,把代码写得清晰而明确会产生许多好处,因为每一位程序员都经常面对(甚至一直面对)这样的问题——如何设计代码才能让这些代码正确地扩展或改变已有代码的功能。
有人说,“通往地狱的路是由对技术债务的长期忽视而铺就的……”。凡是延缓或阻碍应用程序开发的问题都可以称为技术债务(technical debt)。在编程的语境中,刚才那句引言意味着即便代码里有个非常小的问题,也依然会给程序带来损害,它或许没有立刻暴露出来,但以后总会暴露。这还引出了另一个道理:用大家都能看懂的代码把程序的意图清楚表达出来对于正确实现应用程序的逻辑有着很关键的作用,因为这样的代码很容易加以验证(比方说,我们很容易就能测试出应用程序中的某个操作实现得是否正确)。
反之,如果我们发现自己很难给应用程序做业务测试,那就需要尽快意识到这个程序的开发工作已经偏离正轨了。比方说,如果你必须采用各种mock-up(模拟或仿制)技术才能执行验证,那可能就得小心了。这样做经常会出现伪阳性的结果,也就是说,某个功能明明没有写对,但由于你的mock-up掩盖或者绕过了其中的问题,导致你误以为该功能写对了。为什么会出现必须用mock-up才能验证的情况呢?这通常是因为代码的结构过于混乱,让开发者不知道怎么才能清楚地构建出受测对象,所以只能暂且用模拟或仿制的对象来代替。
尽管SOLID与APIE理念提出了许多原则,但这些并不足以保证项目的代码能够一直好下去,这些代码还是有可能变糟[也就是所谓的腐烂(rot)]。完全坚持这些原则是很难做到的,即便做到了,你还是需要继续提升代码品质,因为这些原则无法保证代码一定不会变糟。
软件会越变越糟的原因有很多,但无论如何,我们是有办法让它不变糟或者不继续变糟的,这个办法就是设计模式(design pattern)。设计模式能让代码清晰易懂,还能让我们更为便利地验证这些代码是否正确实现了业务需求。
设计模式是基于一种什么样的理念提出来的呢?你可以将其理解成一套可复用的编程手法,用以解决应用程序开发过程中的常见问题。这套编程手法,与前面提到的APIE或SOLID理念是契合的,而且能让我们在开发应用程序的过程中写出比原来更为清晰、更加好懂且更容易测试的代码。简单地说,设计模式的理念就是提供一套框架,以解决软件设计中的常见问题。