谈软件架构就不得不说说五视图方法论。
一、多阶段还是多视图
软件架构设计是多视图的,也是多阶段的,首先是多阶段的。
先左后做——这叫阶段,齐头并进——这叫视图。
二、软件架构设计的5视图
根据关注角度的不同,软件架构又分为逻辑架构、开发架构、运行架构、数据架构和物理架构。
逻辑架构:着重考虑功能需求,系统应当向用户提供什么样的服务,关注点主要是行为或职责的划分。逻辑架构关注的功能,不仅包括用户可见的功能,还应当包括为实现用户功能而必须提供的辅助功能。逻辑架构更偏向我们所说的"分层",像经典的"三层架构"。逻辑架构的静态方面是抽象职责的划分,动态方面是承担不同职责的逻辑单元之间的交互与协作关系。
开发架构:着重考虑开发期间的质量属性,关注点是在软件开发环境中软件模块(包)的实际组织方式,具体涉及源程序文件、配置文件、源程序包、编译打包后的目标文件,还包括应用程序依赖的SDK、三方库、中间件以及开发的系统将运行于其上的系统软件和逻辑架构有紧密的关联。
运行架构:着重考虑软件运行期间的质量属性,关注点是系统的并发、同步、通信等问题,这势必涉及到进程、线程、对象等运行时概念。运行架构的静态方面关注软件系统运行时的单元结构,动态方面关注运行时单元之间的交互机制。例如比较常见的"线程同步"问题、死锁问题、对象的生命周期问题等。
物理架构:重考虑安装和部署需求,主要关注软件运行的系统、网络、服务器等基础设施以及如何通过服务器部署和配置网络环境,来实现应用程序的可伸缩性、高可用性等。
数据架构:着重考虑数据需求,关注点是持久化数据的存储方案,不仅包括实体及实体关系数据存储格式,还可能包括数据传递、数据复制、数据同步等策略问题。如何选择关系型数据库、NOSQL,如何保障数据存储层面的性能、高可用性、灾备。
前三种视图,可以归纳为软件架构,而后两种架构,则归为系统架构。