标签:
架构:分析设计阶段;
框架:设计实现阶段。
http://jpkc.whu.edu.cn/jpkc/dxqyxxxtfgnjg/dzja/dzjc/jc2.htm
2.3.1 框架的概念
框架的定义是:框架是可以通过某种回调机制进行扩展的软件系统或子系统的半成品。
首先,框架是半成品,这是它和其他所有软件组件的本质区别。这涉及到“软件重用”的一对内在矛盾:“重用几率”大小和“重用所带来的价值量”大小之间的矛盾。简言之,软件单元的粒度越大,则重用所带来的价值量越大,但重用几率越小;反之,粒度小的软件单元被重用的几率越大,则重用所带来的价值量就越小。框架的智慧就在于此:为了追求重用所带来的价值量最大化,将容易变化的部分封装成扩展点,并辅以回调机制将它们纳入框架的控制范围之内,从而在兼顾定制开销的同时使被重用的设计成果最多。
下面,来解释一下“某种回调机制”的含义。框架并不一定必须用面向对象编程语言实现,如C语言等传统编程语言可以通过函数指针作为参数来实现回调机制,而面向对象编程语言中利用抽象方法(C++中称为虚函数)支持回调机制——无论是抽象类还是接口都利用了抽象方法。
Frank Buschmann等人在《面向模式的软件体系结构(第一卷)》中为框架所下的定义,非常重视框架与架构的关系:
框架是一个可实例化的、部分完成的软件系统或子系统,它为一组系统或 子系统定义了架构,并提供了构造系统的基本构造块,还为实现特定功能定义了可调整点。在面向对象环境中,框架由抽象类和具体类组成。(A framework is a partially complete software (sub-) system that is intended to be instantiated. It defines the architecture for a family of (sub-) systems and provides the basic building blocks to create them. It also defines the places where adaptations for specific functionality should be made. In an object-oriented environment a framework consists of abstract and concrete classes.)
相比之下,Erich Gamma等人在《设计模式》中为框架所下的定义则循循善诱,符合面向对象开发者的口味:
(框架是)一组相互协作的类,形成某类软件的一个可复用设计。框架将设计划分为一组抽象类,并定义它们各自的责任和相互之间的协作,以此来指导体系结构级的设计。开发者通过继承框架类中的类和组合其实例来定制该框架以生成特定的应用。
笔者发现,人们对软件架构存在非常多的误解,其中一个最为普遍的误解就是:将架构(Architecture)和框架(Framework)混为一谈。
一图胜千言,图2-9切中肯綮地点出了架构和框架的区别。一句话,框架是软件,架构不是软件。
框架是一种特殊的软件,它并不能提供完整无缺的解决方案,而是为你构建解决方案提供良好的基础。框架是半成品。典型地,框架是系统或子系统的半成品;框架中的服务可以被最终应用系统直接调用,而框架中的扩展点是供应用开发人员定制的“可变化点”。
图2-9 架构和框架的区别
软件架构不是软件,而是关于软件如何设计的重要决策。软件架构决策涉及到如何将软件系统分解成不同的部分、各部分之间的静态结构关系和动态交互关系等。经过完整的开发过程之后,这些架构决策将体现在最终开发出的软件系统中;当然,引入软件框架之后,整个开发过程变成了“分两步走”,而架构决策往往会体现在框架之中。或许,人们常把架构和框架混为一谈的原因就在于此吧!
我们不能指着某些代码,说这就是软件架构,因为软件架构是比具体代码高一个抽象层次的概念。架构势必被代码所体现和遵循,但任何一段具体的代码都代表不了架构。
标签:
原文地址:http://www.cnblogs.com/feng9exe/p/5620794.html