架构图

用户头像
猴子胖胖
关注
发布于: 2020 年 10 月 25 日

4+1视图模型

架构文档主要包含架构视图,架构视图体现了各个相关方的关注点。

4+1视图模型,体现的观点为单一的视图无法完整的表达架构,因此需要完整的视图集。

系统架构有很多方面,不同的相关方的关注点是不同的,一个架构文档要给不同的相关方呈现不同的视图,同时又要表达系统架构的方方面面,

单独的通过某种视图,通过某种纬度表达架构,是不够的,要通过多种架构视图描述架构方案。



常规的软件架构设计,应该包括4+1种视图。

逻辑视图

过程视图

物理视图

开发视图

场景视图

其中场景视图与其他四种视图都有关联。



逻辑视图的相关方为客户、用户、开发组织管理者

逻辑视图描述的是系统有哪些功能,它的接口、职责、交互是什么样的,有哪些系统,子系统,功能模块,接口,主要用于开发组织划分,进行成本和进度的评估。

功能模块图是逻辑视图的一种。



开发视图的相关方是开发和测试。主要描述系统如何开发和实现,主要描述系统的分层,分区,包组织结构,框架,系统通用服务,业务通用服务,定义类和接口,以及系统平台和相关基础框架,用于指导开发进行设计和落地实现。

类图是开发视图的一种。



物理视图的相关方为系统集成商和运维,主要描述系统逻辑组件和物理组件之间的部署关系和网络通讯关系,系统最终的物理呈现是什么样子的。元素为物理节点,以及物理节点之间的通信。

部署图是物理视图的一种。



过程视图的相关方为开发和性能优化的相关人员,描述系统在运行过程中的线程和进程的情况,主要元素为系统进程、线程、处理队列等,描述他们在运行过程中的动态的执行状态,相关的调用关系,依赖关系,执行过程是什么样的。



场景视图的相关方为用户,设计,开发,描述架构中最主要的场景,及其非功能性需求。

用例图是场景视图的一种。



用UML进行软件架构设计

实践中更多的是使用UML建模的方式。



UML静态图包括:用例图、对象图、类图、组件图、包图、部署图。用于描述类、对象和数据结构之间的关系。

UML动态图包括:协作图、序列图、活动图、状态图。用于展示软件在执行过程中的变化过程。



常见的关系有关联、泛化、依赖、聚合,在uml中有六种符号:依赖、关联、继承、集合、实现、组合。

关联关系比依赖关系更紧密,成员变量,一般为关联关系。若是成员方法内的局部变量,则为依赖关系。

聚合起来的对象消失时,聚合的对象还是可以存在的。组合起来的对象消失时,则组合的对象也消失了。



用例图

用例图通常描述业务功能,功能有哪些,如何对外提供服务。

任何的用例图都有自己的边界,使用用例的角色,可以是人,可以是另外一个系统。用例一定是去做某些事情。用例总是由执行者启动的。

用例之间也可以有关系,使用关系和扩展关系。

使用关系,我理解为代码中的调用。

而扩展关系,我理解为代码中的继承。



需求分析,概要设计,详细设计,每个阶段都应该有一些架构图,用来描述当前阶段的架构设计。

需求分析阶段主要产生的架构图就是用例图,需求分析就是要分析我们要一个什么样的系统出来,一方面有哪些功能,另一方面,跟当前的一些约束和边界是怎样的,需要表达出来。



用例图可以自顶向下不断精化,抽象出不同层次的用例图。



类图

通过类图,可以描述清楚某一个功能,某一个模块,它里面的核心类有哪些,类的名字是什么,类的成员变量有哪些,成员方法有哪些,类之间的关系是什么,继承、组合、关联、聚合等,都可以描述出来。

类图主要用于详细设计阶段。



包图

通常使用组件图,而不是包图。



时序图

UML中的消息:简单消息、同步消息、异步消息。

一般说来,简单消息不区分同步和异步。

一般对象之间的操作为简单消息或同步消息,而涉及多个子系统或者系统之间,调用和回调都可以是异步消息。



时序图用来描述对象之间动态的交互行为,着重体现对象间消息传递的时间顺序。

时序图在需求分析、概要设计、详细涉及阶段都可以使用。

在需求分析阶段,当前设计的系统跟现有系统之间的调用和依赖关系,可以用时序图来表示。

在概要设计阶段,可以画自己设计的服务器,它的子系统之间的调用关系,还可以画组件之间的调用和时序关系,都可以使用时序图。

详细设计阶段,主要画的就是类图,那么类之间的调用关系,可以用时序图来描述。

时序图:描述的是广义的对象之间的交互关系。

广义的对象:可以是类的对象、子系统、组件、服务器。



活动图

UML没有流程图,活动图用于表达流程信息。

活动图有开始、结束。

活动可以有分支,一个活动经过一个分支,变为两个活动。

活动可以聚合,两个活动完成后,聚在一起,进入下一个活动。

一个活动分为几个领域,几个维度,可以跨越几个领域,共同完成整个的处理逻辑和流程。

在开发过程中,可能有多个子系统,多个服务,多个模块,一个用户的处理过程,可能是由多个模块、多个子系统共同完成,一个请求在多个服务之间互相合作,传递,完成处理,描述在处理过程中,经过了哪些模块、哪些服务,可以使用活动图、泳道图来描述。

泳道是一种分组机制。



状态图

用于描述状态变迁

一个业务可能存在多种状态,那么多种状态之间,如何从一种状态变为另一种状态呢?它做了什么行为?完成了什么操作?它的状态会变化,通过状态图来描述。



什么样的行为会出发什么样的变化,到达另外一个状态,哪些状态之间永远不会互相变化,就可以通过状态图来表示。



合作图

合作图已成为协作图,用来描述相互合作的对象间的交互和链接关系。

顺序图体现交互的时间顺序,合作图体现交互对象间的静态链接关系。

除了时序外,在时序图中都包含了,所以实践中更多使用时序图。



组件图

组件图用于描述业务组件模块关系的图。组件包括物理组件和逻辑组件。

更常用的是逻辑组件。

逻辑组件定义的是在架构设计上,一个系统逻辑上分为哪些模块,模块之间的关系是怎样的。

组件图显示代码本身的逻辑结构,它描述系统中存在的软构件以及它们之间的依赖关系。

组件之间的依赖关系是指结构之间在编译,连接或执行时的依赖关系。



部署图

部署图描述的是系统最终部署的样子,描述我们开发的组件部署在哪些服务器上,有哪些服务器,服务器之间的调用依赖关系是什么样的。

部署图在概要设计阶段产生,也是整个架构设计的第一张图。

部署图里,不同的服务器,承担的角色是什么样的,关键组件有哪些,然后就开始去画组件图,有了组件图,通过组件的时序图描述出来,组件之间的动态交互关系,然后再进一步,每个组件里有哪些类图,这样逐渐的细分下来,就有了从上到下,从概要设计到详细设计的完整的架构设计。



发布于: 2020 年 10 月 25 日 阅读数: 13
用户头像

猴子胖胖

关注

6年ios开发,1年golang开发 2020.05.09 加入

还未添加个人简介

评论

发布
暂无评论
架构图