架构设计的重用
重用(Reuse)是在软件工程实践中获得高效率、高质量产品和系统开发的一种基本手段和主要途径,通过有组织的、系统和有效的重用,我们往往可以获得 10倍率以上的效率提升。而一个优秀的、有长久生命力的软件架构(比方主流的一些框架软件),其本身或其组件被重用的次数越多,其体现的价值也就越大。
软件重用有各种不同的范围、层次、粒度和类型,从函数重用、类重用、构件/组件重用、库(API)重用,到框架重用、架构重用、模式重用,再到软件设计知识、思想的重用等等,重用的效能和效果各有不同。
软件工程经过几十年的发展,已经积累了大量的软件架构模式和设计模式,它们记载、蕴藏了大量成熟、已经验证的软件设计知识、思想和经验。我们平时对各种基础平台、主流框架和API的应用和调用,本身就是一种最为普遍的重用形式。而一个优秀、成熟的软件研发组织,必然会在日常开发中注意收集各种软件设计知识和经验,建立和维护基于架构模式和设计模式等内容的软件重用知识库,积极主动和频繁地运用各种软件模式来解决实际工程问题。
框架(Framework)是一类具有高可重用度的软件,针对某一类应用或领域,它们具有非常灵活的、高度可扩展的软件架构。那么,如何才能设计出可重用的软件架构或其组件?借助于OOA、OOD等抽象分析和设计技术是一种重要的方法。人们在实践中发现,往往越抽象的东西,其适应面也就越广,可重用度也就越高;相反,越具体的东西,其适应面也就越窄,可重用度也就越低。重用,意味着充分利用现成、既有的东西、成果来解决新问题或重复的问题,以“不变”应“ 万变”.在软件架构设计中,应该主动地区分软件架构中的“不变”与“可变”之处,系统地管理好这些稳定点和变化点以适应未来的变化,这也是提高软件架构重用度、获得高质量框架设计的一种重要方法。
架构设计的权衡
与其它所有工程行业一样,软件工程本质上也是一门讲究权衡的科学和艺术。软件架构设计的最难之处往往在于如何在各种相互竞争、矛盾的制约条件之下,作出巧妙的权衡。软件架构设计的权衡水平,也是最能体现软件架构师的设计经验、能力和技巧的地方。
在软件开发和软件架构的设计过程中,从选择平台,到选择语言,选择框架,选择设计模式,选择工具…等等,我们无时不刻都需要权衡,对各种候选项作出合理评判。在架构师带领下,软件研发团队往往还需要对近期目标与远期目标、质量与速度和效率、质量与成本、功能与性能、灵活性与复杂性…等等许多彼此矛盾的设计选项、因素和约束进行细致、小心和理性的权衡。
理性权衡意味着科学决策。进行有效的架构设计权衡,离不开科学的方法,也就是如何运用定量分析和定性分析相结合的方法、因果逻辑和根源分析等等技术,找到最终的甜点(Sweet Spot)。许多时候,能否在很短的时间内作出迅速、果断而正确的科学权衡与取舍决策,构成了一个软件研发团队核心竞争能力的一部分。