目录
前言
在上一篇文章里,我们已经学习了架构的含义,我们现在已经有了一个系统的抽象架构,那我们该怎么去表达出来呢?由此,诞生了一个新的名词:架构图。架构图就是表达架构的载体,减少沟通障碍,提升协作效率。
架构图是什么?
架构 = 组成 + 决策,模块结构 + 模块关系 是组成,约束 + 设计原则 + 演化方向 是决策;是由系统组件,以及组件间相互关系共同构成的集合体,而架构图则是表达这种集合的载体,是水平的业务单元 + 垂直的技术单元组成的逻辑结构图
架构图分类
业务架构
使用一套方法论,对所涉及到的业务单元进行边界划分 熟悉业务 比如:团购网站系统->商品类目,订单服务,支付,退 款等进行清晰划分
应用架构
对整个系统的实现进行可视化落地实践,系统的层次/开 发原则/各个层次的应用服务,一般为垂直依赖型。 比如:团购网站系统->数据资源层,应用集成层,服务层,展现层。
数据架构
是一套对存储数据的架构逻辑,根据各个系统应用场景、 不同时间段的应用场景 ,对数据进行诸如数据异构、读写 分离、缓存使用、分布式数据策略等划分。
数据架构主要解决三个问题:第一,系统需要什么样的数据;第二,如何存储这些数据;第三,如何进行数据架构设计。
技术架构
承接应用架构的技术需求,并根据识别的技术需 求,进行技术选型,把各个关键技术和技术之间 的关系描述清楚
为什么要画架构图?
- 解决沟通障碍
- 达成共识
- 减少歧义
如何画架构图?
- 搞清楚要画的架构图类型
- 确认架构图中的关键要素(比如产品、技术、服务)
- 梳理关键要素之间的关联:包含、支撑、同级并列等
- 输出关联关系清晰的架构图
UML(Unified Model Language)
统一建模语言,为面向对象开发系统的产品进行说明、可视化、和编制文档的一种标准语言,是面向对象设计的建模工具。
UML分类
- 静态结构图:类图、对象图、包图、组件图、部署图
- 动态行为图:交互图(时序图与协作图)、状态图、活动图
还有另一种分法
- 用例视图:用例图
- 设计视图:类图、对象图
- 进程视图:序列图、协作图、状态图、活动图
- 实现视图:构件图
- 拓扑视图:部署图
用例图:
用例图就是描述用户和系统的交互,可以简单的理解为 谁用软件,用了软件的什么功能。从用户的角度描述了系统的功能,并指出各个功能的执行者,强调用户的使用者,系统为执行者完成哪些功能。
类图:
描述类内部的结构,也就是行为和属性,以及类与类之间的关系。
类与类之间的关系
泛化关系:继承关系,子类和父类之间就是泛化关系空心三角形+实线,子类指向父类(Car 和 Bus)
实现关系:实现接口,类实现接口,空心三角形+虚线,实现指向接口(interface 和 class)
依赖关系:只要在类中用到了对方,就存在依赖关系,箭头的虚线,指向被使用者(person、computer)
关联关系:体现的是业务逻辑的关系,是依赖关系的特例,具有导航性&多重性,两箭头或没有箭头,单向关联一个箭头(teacher、student、course)
聚合关系:业务上整体与部分可以分开,是关联关系的特例,空心棱形指向整体,箭头指向部分(bus、driver)
组合关系:业务上整体与部分不可以分开,同样是是关联关系的特例 ,实心棱形执行整体,箭头指向部分(company、department)
泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖
对象图:
描述的是参与交互的各个对象在交互过程中某一时刻的状态。对象图可以被看作是类图在某一时刻的实例。
序列图:
通过描述对象之间发送消息的时间顺序显示多个对象之间的动态协作。
- 关注正常流程
- 不关注逆流程
- 不关注异常流程
- 不关注分支判断
协作图:
交互图的一种,描述了收发消息的对象的组织关系,强调对象之间的合作关系。时序图按照时间顺序布图,而写作图按照空间结构布图
状态图:
是一种由状态、变迁、事件和活动组成的状态机,用来描述类的对象所有可能的状态以及时间发生时状态的转移条件。
活动图:
是状态图的一种特殊情况,这些状态大都处于活动状态。本质是一种流程图,它描述了活动到活动的控制流。
交互图强调的是对象到对象的控制流,而活动图则强调的是从活动到活动的控制流。活动图是一种表述过程基理、业务过程以及工作流的技术。它可以用来对业务过程、工作流建模,也可以对用例实现甚至是程序实现来建模。
构件图:
构件图是用来表示系统中构件与构件之间,类或接口与构件之间的关系图。其中,构建图之间的关系表现为依赖关系,定义的类或接口与类之间的关系表现为依赖关系或实现关系。
部署图:
描述了系统运行时进行处理的结点以及在结点上活动的构件的配置。强调了物理设备以及之间的连接关系。
图的差异比较
1.序列图(时序图)VS协作图
序列图和协作图都是交互图。二者在语义上等价,可以相互转化。但是侧重点不同:序列图侧重时间顺序,协作图侧重对象间的关系。
共同点:时序图与协作图均显示了对象间的交互。
不同点:时序图强调交互的时间次序。
协作图强调交互的空间结构。
2.状态图VS活动图
状态图和活动图都是行为图。状态图侧重从行为的结果来描述,活动图侧重从行为的动作来描述。状态图描述了一个具体对象的可能状态以及他们之间的转换。在实际的项目中,活动图并不是必须的,需要满足以下条件:1、出现并行过程&行为;2、描述算法;3、跨越多个用例的活动图。
3.活动图VS交互图
二者都涉及到对象和他们之间传递的关系。区别在于交互图观察的是传送消息的对象,而活动图观察的是对象之间传递的消息。看似语义相同,但是他们是从不同的角度来观察整个系统的。
既然选择远方,便只顾风雨兼程!
参考文档:
孤尽老师的PPT