什么是软件架构
要理解什么是软件架构,首先需要知道架构是什么,架构一词其实是来自英文单词Architecture,表示建筑,体系结构的意思。这里引用了其体系结构的意思,维基百科英文版里对 Architecture 的解释是:规划、设计和建造建筑物的过程及产物。在计算机软件领域,软件架构就成为了描述软件规划设计技术的专有名词。
虽然我们对‘架构’做了解释。但是对于软件架构的概念定义并不那么简单,而且也没有一个统一的定义。
现在对于软件架构的定义分为两大流派,组成派和决策派:
组成派
软件系统的架构将系统描述为计算机组件及组件之间的交互。(The architecture of a software system defined that system in terms of computational components and interactions among those components.)
这个是Mary Shaw在《软件体系结构:一门初露端倪学科的展望》中为“软件架构”给出定义。这个定义是把系统划分为以组件为单位的一个集合。而软件架构就是用于描述组成整个系统中的组件集合中组件与组件之间相互交互。这里的组件可以是一个类、库、模块、框架、一个子系统等等,每个组件负责一个职责。组件可以是粗粒度的也可以是细粒度的,不同的场景描述的组将粒度可能不一样。
组成派的软件架构定义的特点:
- 关注架构实践中的客体—软件,以软件本身为描述对象;
- 软件是由承担不同职责的组件组成,这些组件通过相互交互组成一个系统或者说另外一个组件。
决策派
软件架构包含了关于一下问题的重要决策:
- 软件系统的组织;
- 选择组成系统的结构元素和同门之间的接口,以及当这些元素相互协作是所体现的行为
- 如何组合这些元素,使它们逐渐合成为更大的子系统;
- 用于指导这个系统组织的架构风格:这些元素以及它们的结构、协作和组合。
- 软件架构并不仅仅注重软件本身的结构和行为,还注重其他特性:使用、功能性、性能、弹性、重用、可理解性、经济和技术的限制及权衡,以及美学等。
这是“决策派”软件架构概念的典型代表,决策派的软件架构定义特点:
- 关注架构实践中的主体–人,一人的决策为描述对象。
- 归纳了架构决策的类型,指出架构决策不仅包括关于软件系统的组织、元素、子系统和架构风格等。还包括关于众多非功能需求的决策。
著名软件架构定义
我们知道软架构没有一个统一的定义,且分为为组件派和决策派。这只是站在不同角度看问题的不同理解。下面我就列举几个著名的软件架构定义。从这些定义,我们也能看出提出者的思考方向,我们也可以结合这些定义和我们自己工作实践自己体会软件架构的意义。
- Booch、Rumbaugh和Jacobson对软件架构的定义:
架构是一系列重要决策的集合,这些决策与一下内容有关:软件的组织,构成系统的结构元素及其接口的选择,这些元素在相互协作中明确表现出的行为,这些结构元素和行为元素进一步组合所构成的更大更一抹的子系统,以及指导这一组织–包括这些元素及及其接口、他们的协作和他们的组合–架构风格。 - Garlan和Shaw的定义:
架构包括组件(Component)、连接件(Connector)和约束(Constrain)三大要素。组件可以是一组代码(例如:一个代码块、一个库、一个模块),也可以是独立的程序(例如:数据库程序,一个独立的子系统)。连接件可以是过程调用、管道和消息等,用于表示组件之间的相互关系。约束,一般为组件连接时的条件。 - Perry和Wolf的定义:
架构是一组具有特定形式的架构元素,这些元素分为三类:负责完成数据加工的处理元素(Processing Elements)、作为被加工的信息数据元素(Data Elements)及孕育吧架构不同部分组合在一起的连接元素(Connecting Elements)。
软件架构解析
软件架构关注分割与交互
软件设计其实就是一个分与合的过程。软件架构其实就是设计组件与组件之间的交互,同时也是一系列决策的结果。我们需要决定模块如何划分,每个模块的职责,模块接口如何定义,模块与模块采用何种交互机制(RPC,Massage..),开发技术选型,如何满足质量属性和约束的要求,如何适应变化,等等。