1.1 软件架构概念的分类
Martin Fowler 写道
软件业的人乐于做这样的事--找一些词汇, 并将它们引申到大量微妙而又相互矛盾的含义中. 一个最大的受害者就是"架构"这个词. ...... 很多人都试图给"架构"下定义, 而这些定义本身却很难统一.
鉴于软件架构概念的混乱, 应该采取分类的方法(好处: 包容细节差异, 明确本质共性, 促成概念总体上的清晰).
1.1.1 组成派
Mary Shaw 写道
软件系统的架构将系统描述为计算组件及组件之间的交互(The architecture of a software system defines that system in terms of computational components and interactions among those components.).
"计算组件"是泛指, 分为: 处理组件, 数据组件, 连接组件等. "组件"是广泛意义上的元素之意. 可以指: 子系统, 框架(Framework), 模块, 类等不同粒度的软件单元, 它们可以担负不同的计算职责.
组成派特点:
1.关注架构实践中的客体--软件.
2.分析了软件的组成, 即软件由承担不同计算任务的组件组成, 这些组件通过相互交互完成更高层次的计算.
1.1.2 决策派
Rational Unified Process 写道
软件架构包含了关于以下问题的重要决策:
1.软件系统的组织;
2.选择组成系统的结构元素和它们之间的接口, 以及当这些元素相互协作时所体现的行为;
3.如何组合这些元素, 使它们逐渐合成为更大的子系统;
4.用于指导这个系统组织的架构风格: 这些元素以及它们的接口, 协作和组合;
软件架构并不仅仅注重软件本身的结构和行为, 还注重其他特性: 使用, 功能性, 性能, 弹性, 重用, 可理解性, 经济和技术的限制及权衡, 以及美学等.
决策派特点:
1.关注架构实践中的主体--人.
2.归纳了架构决策的类型, 指出架构决策不仅包括关于软件系统的组织, 元素, 子系统和架构风格等几类决策, 还包括关于众多非功能需求的决策.
1.2 软件架构概念大观
来自SEI的Bass等人的相对比较新的定义, 它将架构的多视图"本性"体现到了架构的定义当中.
SEI的Bass等人 写道
某个软件或计算机系统的软件架构是该系统的一个或多个结构, 每个结构均由软件元素, 这些元素的外部可见属性, 这些元素之间的关系组成(The software architecture of a program or computing system is the structure or structures of the system, which comprise software elements, the externally visible properties of those elements, and the relationships among them.)
1.3 软件架构关注分割与交互
1.4 软件架构是一系列有层次的决策
架构决策是分层次依次展开的.
1.伴随着对软件系统的依次分解, 软件架构师应当不断作出决策.
2.决策制定的顺序往往是先制定技术无关的决策, 后制定技术相关的决策, 后者在前者的指导下进行.