从此重构
设计是如此重要,那么开发者的基本设计能力与素质又从何下手来培养呢?
最好的办法,就是请个老师。从框架中了解,从系统中实现,从书文中汲取。然而,设计能力的提升绝非一朝一夕之功,软件开发中的设计大师,往往必须具备多年的修行方可称之为“架构师”。
一个在简历中轻描淡写的“10年软件设计经验”,并非是所有软件人都能修炼成的真功夫,这里没有任何虚情假意可言。在一个项目的实现过程中,逐渐了解什么是对象、什么是对抽象编程、设计模式是如何应用在实际的系统架构、设计原则到底是什么秘密武器,而重要的是完成一个软件项目,对于更多人来说是认识一种软件开发的科学流程。这种体验,才是难能可贵的经验。在设计的广义概念里,几个必需的概念是应该首先被了解和认知的,以排名不分先后的原则罗列,它们大概包括:
· 面向对象(Object-Oriented),关于面向对象没有必要重复嚼舌了,本书的第1章“OO大智慧”中对.NET的面向对象进行了有别于其他专著的介绍,除了以实例突出面向对象之思想大成,还以浓墨铺陈了.NET是如何在底层技术上来实现继承、多态和接口映射等机制,从而使读者可以更加有效和深刻地把握面向对象之精髓。
· 面向服务(Service Oriented),SO至少是个时髦的话题,WCF伴着.NET 3.5的发布,一个一统江湖的面向服务的基础架构横空出世。可以想象的是,未来的分布式系统架构将变得更加柔性和统一,简单而有效。
· 框架(Framework),所谓框架就是应用系统构建所需的基础设施。应用程序是变化万千的,而基础架构则是相对稳定的。这正如我们基于.NET Framework来实现数以万计的.NET应用:Windows Form. Application、Web Form. Application、XML Web Service等,都体现了框架和应用的关系。.NET Framework本身就是一个基础性架构,正如经典的MFC一样,提供了.NET应用赖以生存的基础性支持。对于框架的探索和实践,应该是每个有意提高设计能力的开发者的必经之路。选择一个或几个典型的框架进行梳理与实践,才能有效地了解软件世界的庞大体系是如何和谐统一地运作。从经典框架设计中,寻找灵感,锻炼体验,例如分享经典案例Petshop三层架构的实践体验,通过真正的需求、设计、开发和测试,而在这个旅程中我们就能完成从概念到实践、从表面到思想的体验。
· 设计原则(Design Principles),是面向对象设计程序开发的思想大成,了解面向对象,深入设计模式,则有必要深入设计原则之精髓。可以不了解全部的设计模式,但必须深入每一个设计原则。一个是内功,一个是招式,设计的第一项修炼就从内功开始。本书第2章“OO大原则”对5大设计原则进行了一些以例说理式的实际探讨和分析,几个看似简单的设计原则:单一职责原则、开放封闭原则、依赖倒置原则、接口隔离原则、Liskov替换原则,这5个原则贯彻了一个简单的思想——“面向抽象,松散耦合”。
· 设计模式(Design Pattern),23个设计模式,23个经典智慧,了解和掌握几个重要的设计模式,是修炼面向对象招式的必经之路。无论如何,作为设计者你应该在自己心中知道什么是Abstract Factory、Iterator、Singleton、Adapter、Decorator、Observer、Façade、Template、Command。
· 模式之外,除了23个经典的设计模式,其实还存在很多模式之外的模式,按照粒度的不同而广泛应用在实际的项目系统中。例如,在SOA系统中的Event driven Architecture、Message Bus以及分布式Broker模式;数据持久层的Repository、Active Record还有Identity Map模式;可伸缩系统下的Map/Reduce、Load Balancer以及Result Cache模式;更高架构层面的MVC、MVP以及Pipeline/Filter模式。在某种意义上而言,模式是一种经验的积累和总结,对于系统设计与架构考量,架构师要完成的不仅仅是对功能性需求的把握,还包括非功能性需求、平台与框架的平衡、性能与安全的考量。
在本书第1部分,以“OO大智慧”和“OO大原则”两章的篇幅,分别讲述了关于面向对象的实现本质和思想理念,以面向对象技术在.NET中的应用为起点,熟悉和领略面向对象的智慧与原则,修炼深入.NET技术的基本功,为深入理解.NET的程序设计打好必备的基础。而本章将对以上设计问题继续探讨,从点点滴滴入手来关注设计环节的下一个据点。