一)什么是软件架构?
不同的人对架构有不同的理解。“软件业的人乐于做这样的事——找一些词汇,并将它们引申到大量微妙而又相互矛盾的含义中”。
但我们可以将软件架构的概念分为两大流派:组成派和决策派。这里给出一些典型的定义:
1) 组成派
Mary Shaw:The architecture of a software system defines that system in termsof computational components and interactions among those components.
这里的“components”组件,可以指子系统、框架、模块、类等不同粒度的软件单元。
这一派可概括为:组件+交互,例如MVC架构中有View、Controller、Model三个组件,交互动作为:View创建Controller,View读取Model,Model通知View等。
2) 决策派
RUP:软件架构包含了关于以下问题的重要决策:
- 软件系统的组织;
- 选择组成系统的结构元素和它们之间的接口,以及当这些元素相互协作时所体现的行为;
- 如何组合这些元素,使它们逐渐合成为更大的子系统;
- 用于指导这个系统组织的架构风格:这些元素以及它们的接口、协作和组合。
这一派可以概括为:架构设计即是进行一系列重要的决策。而这些决策是伴随着对软件系统的层层分解依次展开的。
二)关注点分离原理
该原理可以用一个三维视图来总结:
1) 职责维度:例如系统划分为展现层、业务层、数据层。这里涉及到各种软件设计模式。
2) 粒度维度:根据划分粒度的不同,可以把系统划分为子系统、模块、以及类。
3) 通用性维度:如技术通用部分、领域通用部分。
三)5大视图
逻辑架构
物理架构
开发架构
数据架构
运行架构