软件架构(9)---架构视图
由于角色和分工不同,软件架构是一个复杂的整体,软件架构工程师不可能在一个视角、一下子讲清楚,而利用多重软件架构视图的方法,可以一次只围绕少数概念和技术展开,分别着重研究软件架构的不同方面,使问题得以清晰公和简化,利于软件架构工程师完成架构设计工作。
因此软件架构的每个视图分别关注不同的方面,针对不同的目标和用途。目前常用架构设计五视图方法进行软件架构描述。它们分别是逻辑架构、开发架构、运行架构、物理架构和数据架构。
逻辑架构的设计着重考虑功能需求,系统应当向用户提供什么样的服务,关注点主要是行为或职责的划分。逻辑架构关注的功能,不仅包括用户可见的功能,还应当包括为实现用户功能而必须提供的辅助功能。逻辑架构的静态方面是抽象职责的划分,动态方面是承担不同职责的逻辑单元之间的交互与协作。
开发架构的设计着重考虑开发期质量属性,关注点是在软件开发环境中软件模块(包)的实际组织方式,具体涉及源程序文件、配置文件、源程序包、编译打包后的目标文件、直接使用的第三方SDK/框架/类库、以及开发的系统将运行于其上的系统软件或中间件。
运行架构的设计着重考虑运行期质量属性,关注点是系统的并发、同步、通信等问题,这势必涉及到进程、线程、对象等运行时概念,以及相关的并发、同步、通信等。运行架构的静态方面关注软件系统运行时的单元结构,动态方面关注运行时单元之间的交互机制。
物理架构的设计着重考虑安装和部署需求,关注点是目标程序及其依赖的运行库和系统软件最终如何安装或部署到物理机器,以及如何部署机器和网络来配合软件系统的可靠性、可伸缩性、持续可用性、性能和安全性等要求。
数据架构的设计着重考虑数据需求,关注点是持久化数据的存储方案,不仅包括实体及实体关系数据存储格式,还可能包括数据传递、数据复制、数据同步等策略。
在运用五视图方法进行架构设计时需要注意两个方面的问题:一是多个架构视图间的同步问题,也就是必须保证不同视图之间是互相解释而不是相互矛盾的;另一个是架构视图的数量问题,原则上是软件系统不涉及某方面的要求时就不需要该方面的视图,严格控制架构视图的数量,但如果有需要,可以引入新的架构视图,从而更加突出和明确地制定和表达特定方面的架构决策,如安全性。
构成每个架构设计视图的元素不同,这些不同的元素撑起不同的思维空间,从而使每个架构视图重点覆盖不同种类的需求,最终所有架构设计视图所表达的语义综合左右一起,就构成了软件架构设计方案。
架构视图 |
着重考虑 |
关注点 |
工具 |
逻辑架构 |
功能需求——系统应答向用户提供什么样的服务 |
行为和职责的划分 |
UML :静态——包图,类图,对象图;动态——序列图,协作图,状态图,活动图。 |
开发架构 |
开发期的质量属性——可扩展性,可重用性,可移植性,易理解性,易测试性 |
软件开发环境中软件模块实际组织方式——具体涉及源程序文件,配置文件,源程序包,编译后的目标文件和第三方库文件 |
UML:包图,类图,组件图 |
运行架构 |
运行期质量属性——性能,可伸缩性,持续可用性,安全性 |
系统的并发和同步,涉及进程和线程技术 |
UML:包图类图对象图来说明运行时的关键的概念;序列图,协作图等来描述交互机制。 |
物理架构 |
安装和部署的需求——包括计算机,网络,硬件设施情况,以及如何部署 |
软件单元如何映射到硬件,以及硬件相关的可靠性,可伸缩性,性能和安全性等 |
UML:部署图,组件图 |
数据架构 |
数据需求 |
持久化数据的组织,数据传递,数据复制和数据同步策略 |
E-R图 |