引言
我们常常谈到软件的架构、框架、设计模式与平台,然而常常将它们混淆。
从复用角度讲,设计模式是代码级复用、框架是模块级复用、架构是系统级复用、平台是企业应用级复用。所以从应用规模上可以认为:设计模式<框架<架构<平台。下面做详细介绍。
模式
所谓模式,实际上更应该说是一种可以复用的技巧,它不一定像“模型”一样体现着模块之间的整体关系。而是“模型”的超集,可以用在设计领域的方方面面。模式分为代码模式、设计模式、架构模式。
架构模式
wj百科:是软件架构中在给定环境下,针对常遇到的问题的、通用且可重用的解决方案。类似于软件设计模式但覆盖范围更广,致力于软件工程中不同问题,如计算机硬件性能限制、高可用性、业务风险极小化。一些架构模式会透过软件框架实现。
设计模式
设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。
就是告诉你针对特定问题如何组织类、对象和接口之间的关系,代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用,是前人总结的经验。
面向对象开发中,对象是组成程序的,那么设计模式研究的是对象与对象之间的关系。但对象之间的关系也可以套用在更广的维度中,模块间的结构与关联、进程间的交互,都可以复用设计模式中的某些思路。
比如我要在代码中实现一个全局唯一的配置类,那么就使用Singleton模式。
设计模式在实际编码工作和设计框架时会被使用到,而更高层的架构和平台则不会太关注它。
代码模式
代码模式(或成例)是特定的范例和与特定语言有关的编程技巧。代码模式的好坏会影响到一个中等尺度组件的内部、外部的结构或行为的底层细节,但不会影响到一个部件或子系统的中等尺度的结构,更不会影响到系统的总体布局和大尺度框架。
软件框架
通常指的是为了实现某个业界标准或完成特定基本任务的软件组件规范,也指为了实现某个软件组件规范时,提供规范所要求之基础功能的软件产品。
软件框架是面向领域(如 ERP、计算领域等)的、可复用的“半成品”软件,它实现了该领域的共性部分,并提供了一些定义良好的可变点以保证灵活性和可扩展性。也就是说软件框架是领域分析结果的软件化,是领域内最终应用的模板,是特定语言和技术的架构应用解决方案。
再简单说就是别人已经对这个领域制作软件所需的基础架构功能进行了总结,做出了有代码实体的软件框架结构,可以在别人写好的框架上继续设计,编写自己的软件。好比骨头架上填肉,框架有一定的局限性。
软件架构
摘自wj百科:软件架构是一个系统的草图。软件架构描述的对象是直接构成系统的抽象组件。各个组件之间的连接则明确和相对细致地描述组件之间的通讯。在实现阶段,这些抽象组件被细化为实际的组件,比如具体某个类或者对象。在面向对象领域中,组件之间的连接通常用接口来实现。
个人理解实际应用中,会根据软件架构模式来指导构建自己的软件架构和风格。框架(Framework)关注的是“规范”,架构(Architecture)关注的是“结构”。
区别和联系
架构模式是一个系统的高层次策略,涉及到大尺度的组件以及整体性质和力学。架构模式的好坏可以影响到总体布局和框架性结构。
架构模式是针对给定上下文中软件架构中常见问题的通用、可重用解决方案。
设计模式是中等尺度的结构策略。这些中等尺度的结构实现了一些大尺度组件的行为和它们之间的关系。模式的好坏不会影响到系统的总体布局和总体框架。设计模式定义出子系统或组件的微观结构。
在软件生产中有三种级别的重用:内部重用,即在同一应用中能公共使用的抽象块;代码重用,即将通用模块组合成库或工具集,以便在多个应用和领域都能使用;应用框架的重用,即为专用领域提供通用的或现成的基础结构,以获得最高级别的重用性。
框架通常是代码重用,而设计模式是设计重用,架构则介于两者之间,部分代码重用,部分设计重用,有时分析也可重用。
设计模式是对在某种环境中反复出现的问题以及解决该问题的方案的描述,它比框架更抽象;框架可以用代码表示,也能直接执行或复用,而对模式而言只有实例才能用代码表示。
设计模式是比框架更小的元素,一个框架中往往含有一个或多个设计模式,框架总是针对某一特定应用领域,但同一模式却可适用于各种应用。可以说,框架是软件,而设计模式是软件的知识。
平台
平台的概念类似框架,但又结合架构的考虑,它是更高层面上的“框架”,准确说是一种应用。它是针对企业用户,为解决企业业务需要而形成的产品。