架构图
4+1视图模型
架构文档主要包含架构视图,架构视图体现了各个相关方的关注点。
4+1视图模型,体现的观点为单一的视图无法完整的表达架构,因此需要完整的视图集。
系统架构有很多方面,不同的相关方的关注点是不同的,一个架构文档要给不同的相关方呈现不同的视图,同时又要表达系统架构的方方面面,
单独的通过某种视图,通过某种纬度表达架构,是不够的,要通过多种架构视图描述架构方案。
常规的软件架构设计,应该包括4+1种视图。
逻辑视图
过程视图
物理视图
开发视图
场景视图
其中场景视图与其他四种视图都有关联。
逻辑视图的相关方为客户、用户、开发组织管理者
逻辑视图描述的是系统有哪些功能,它的接口、职责、交互是什么样的,有哪些系统,子系统,功能模块,接口,主要用于开发组织划分,进行成本和进度的评估。
功能模块图是逻辑视图的一种。
开发视图的相关方是开发和测试。主要描述系统如何开发和实现,主要描述系统的分层,分区,包组织结构,框架,系统通用服务,业务通用服务,定义类和接口,以及系统平台和相关基础框架,用于指导开发进行设计和落地实现。
类图是开发视图的一种。
物理视图的相关方为系统集成商和运维,主要描述系统逻辑组件和物理组件之间的部署关系和网络通讯关系,系统最终的物理呈现是什么样子的。元素为物理节点,以及物理节点之间的通信。
部署图是物理视图的一种。
过程视图的相关方为开发和性能优化的相关人员,描述系统在运行过程中的线程和进程的情况,主要元素为系统进程、线程、处理队列等,描述他们在运行过程中的动态的执行状态,相关的调用关系,依赖关系,执行过程是什么样的。
场景视图的相关方为用户,设计,开发,描述架构中最主要的场景,及其非功能性需求。
用例图是场景视图的一种。
用UML进行软件架构设计
实践中更多的是使用UML建模的方式。
UML静态图包括:用例图、对象图、类图、组件图、包图、部署图。用于描述类、对象和数据结构之间的关系。
UML动态图包括:协作图、序列图、活动图、状态图。用于展示软件在执行过程中的变化过程。
常见的关系有关联、泛化、依赖、聚合,在uml中有六种符号:依赖、关联、继承、集合、实现、组合。
关联关系比依赖关系更紧密,成员变量,一般为关联关系。若是成员方法内的局部变量,则为依赖关系。
聚合起来的对象消失时,聚合的对象还是可以存在的。组合起来的对象消失时,则组合的对象也消失了。
用例图
用例图通常描述业务功能,功能有哪些,如何对外提供服务。
任何的用例图都有自己的边界,使用用例的角色,可以是人,可以是另外一个系统。用例一定是去做某些事情。用例总是由执行者启动的。
用例之间也可以有关系,使用关系和扩展关系。
使用关系,我理解为代码中的调用。
而扩展关系,我理解为代码中的继承。
需求分析,概要设计,详细设计,每个阶段都应该有一些架构图,用来描述当前阶段的架构设计。
需求分析阶段主要产生的架构图就是用例图,需求分析就是要分析我们要一个什么样的系统出来,一方面有哪些功能,另一方面,跟当前的一些约束和边界是怎样的,需要表达出来。
用例图可以自顶向下不断精化,抽象出不同层次的用例图。
类图
通过类图,可以描述清楚某一个功能,某一个模块,它里面的核心类有哪些,类的名字是什么,类的成员变量有哪些,成员方法有哪些,类之间的关系是什么,继承、组合、关联、聚合等,都可以描述出来。
类图主要用于详细设计阶段。
包图
通常使用组件图,而不是包图。
时序图
UML中的消息:简单消息、同步消息、异步消息。
一般说来,简单消息不区分同步和异步。
一般对象之间的操作为简单消息或同步消息,而涉及多个子系统或者系统之间,调用和回调都可以是异步消息。
时序图用来描述对象之间动态的交互行为,着重体现对象间消息传递的时间顺序。
时序图在需求分析、概要设计、详细涉及阶段都可以使用。
在需求分析阶段,当前设计的系统跟现有系统之间的调用和依赖关系,可以用时序图来表示。
在概要设计阶段,可以画自己设计的服务器,它的子系统之间的调用关系,还可以画组件之间的调用和时序关系,都可以使用时序图。
详细设计阶段,主要画的就是类图,那么类之间的调用关系,可以用时序图来描述。
时序图:描述的是广义的对象之间的交互关系。
广义的对象:可以是类的对象、子系统、组件、服务器。
活动图
UML没有流程图,活动图用于表达流程信息。
活动图有开始、结束。
活动可以有分支,一个活动经过一个分支,变为两个活动。
活动可以聚合,两个活动完成后,聚在一起,进入下一个活动。
一个活动分为几个领域,几个维度,可以跨越几个领域,共同完成整个的处理逻辑和流程。
在开发过程中,可能有多个子系统,多个服务,多个模块,一个用户的处理过程,可能是由多个模块、多个子系统共同完成,一个请求在多个服务之间互相合作,传递,完成处理,描述在处理过程中,经过了哪些模块、哪些服务,可以使用活动图、泳道图来描述。
泳道是一种分组机制。
状态图
用于描述状态变迁
一个业务可能存在多种状态,那么多种状态之间,如何从一种状态变为另一种状态呢?它做了什么行为?完成了什么操作?它的状态会变化,通过状态图来描述。
什么样的行为会出发什么样的变化,到达另外一个状态,哪些状态之间永远不会互相变化,就可以通过状态图来表示。
合作图
合作图已成为协作图,用来描述相互合作的对象间的交互和链接关系。
顺序图体现交互的时间顺序,合作图体现交互对象间的静态链接关系。
除了时序外,在时序图中都包含了,所以实践中更多使用时序图。
组件图
组件图用于描述业务组件模块关系的图。组件包括物理组件和逻辑组件。
更常用的是逻辑组件。
逻辑组件定义的是在架构设计上,一个系统逻辑上分为哪些模块,模块之间的关系是怎样的。
组件图显示代码本身的逻辑结构,它描述系统中存在的软构件以及它们之间的依赖关系。
组件之间的依赖关系是指结构之间在编译,连接或执行时的依赖关系。
部署图
部署图描述的是系统最终部署的样子,描述我们开发的组件部署在哪些服务器上,有哪些服务器,服务器之间的调用依赖关系是什么样的。
部署图在概要设计阶段产生,也是整个架构设计的第一张图。
部署图里,不同的服务器,承担的角色是什么样的,关键组件有哪些,然后就开始去画组件图,有了组件图,通过组件的时序图描述出来,组件之间的动态交互关系,然后再进一步,每个组件里有哪些类图,这样逐渐的细分下来,就有了从上到下,从概要设计到详细设计的完整的架构设计。
版权声明: 本文为 InfoQ 作者【猴子胖胖】的原创文章。
原文链接:【http://xie.infoq.cn/article/d771791a2803017b6b9ebe64d】。文章转载请联系作者。
评论