做了多年的程序设计,最近一直在关注软件架构方面的东西,出现在书面上非常多的两个词“软件架构”和“软件框架”,让我比较敏感,首先在概念上我们需要有一个初步的认识。
在以前经常和同事、朋友,甚至是合作伙伴之间进行一些技术上的交流,很多时候他们给我的印象是软件“架构”和“框架”被混为一谈,而我也曾经经历过这个阶段。在理解上从模糊混淆到有所认识是需要投入足够的时间来进行理解的。软件“架构”和“框架”是两个不同的概念,但它们也是相互关联的。
软件框架是一特殊的软件,由实际的代码构建而成,是软件系统、子系统的半成品。软件框架为具体的解决方案提供了基础,提供了基础服务和可扩展点,同时软件框架也建立了一些约束,开发人员在此基础上进行特定业务功能的定制开发。例如,在J2EE企业级应用程序开发中,经常使用struts+spring+hibernate来搭建一个基本的项目结构,在没有其他特殊系统需求的前提下,这就是一个软件框架。
软件架构是引导如何设计软件框架的重要决策。它决定了软件系统如何划分,在一定程度上描述了被划分的各个部分之间的静态、动态关系。软件架构的决策体现在软件系统的框架中。
引用《面向模式的软件体系结构(第一卷)》中为框架所下的定义:
框架是一个可实例化的、部分完成的软件系统或子系统,它为一组系统或子系统定义了架构,并提供了构造系统的基本构造块,还为实现特定功能定义了可调整点。在面向对象环境中,框架由抽象类和具体类组成。(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.)