架构文档编写
本文目前只是对于架构师训练营课程的简单总结,有部分自己的总结,但是大部分还是将李智慧老师的课程内容和文档直接记录一遍,希望在将来进一步运用的过程中,返回来能把文字描述和示图都用自己的方式表达出来
架构文档是架构师表达自己架构设计的呈现方式之一,没有人能知道别人脑子中的想法,除非被表达出来。架构文档中,大到系统部署,小到方法实现都可以通过文字和视图一一呈现,方便与人交流,进一步完善自己的设计。因此编写架构文档也是架构师的基本工作之一。
何为软件架构
软件架构是关于软件整体和组件的抽象描述。架构需要满足相关方的需求
架构的组成包括:
架构元素:系统有些什么,有哪些服务器组成,哪些模块,哪些系统
元素间关系:类之间关系,比如是继承还是依赖关系,服务器之间的关系,系统是如何交互的
架构:架构元素和元素间的关系组成了架构
系统
架构文档:架构元素和元素间关系通过架构文档进行表现
架构视图:架构视图组成了架构文档
相关方:架构视图是为相关方写的。相关方很重要,因为只有从相关方的视觉出发,才能写出合适的文档。你的文档可能很正确,很完美,但是并不是合适的。
关注点:不同的相关方的需求不同,架构视图展现可能不同
架构视图
架构视图组成了架构文档,架构师的基本功之一
4+1架构视图模型
一个架构是无法从一个方面来阐述明白的,面对的相关方不同,大家关注点不同,所以我们需要从不同的视觉去描述一个架构。4+1视图模型就是这样去做的,它传达了的就是也正是这样一种重要理念:根据不同的目的和用途,通过不同的视图去表达架构,是立体的,多方面的,多视角的展现。
4+1视图分别是:【逻辑视图】,【过程视图】,【物理视图】,【开发视图】围绕【场景视图】 展现
各个视图的关注点不同,相关方不同
逻辑视图
关注逻辑功能,相关方是客户,用户,开发组织管理者
开发视图
关注如何实现,相关方是开发,测试,指导开发组织设计和实现
物理视图
关注物理节点的部署,相关方是系统集成商,运维
过程视图
是关于系统运行时线程,进程关系的,相关方是性能优化的人员
场景视图
描述用例的使用场景,相关方是用户
通过UML进行软件架构
4+1使用软件建模语言表现
什么是模型
模型是系统的完整的抽象,是人们对某领域特定文档理解和认识
架构师将头脑中的设计投射到模型上,将现实中的问题抽象成领域问题,抽象成业务问题,提取需求,针对需求对软件进行设计
目的
模型的目的是为了与人沟通,查看验证系统是否合理
何时画
讨论,交流时画
何处画图
任何工具都可以,白板,visio,draw.io
统一建模语言UML
UML用来描述问题领域,构思软件的设计,已完成的软件实现。
通用模型元素
在图中使用的概念统称为模型元素
模型元素与模型元素之间的连接关系也是模型元素
常见关系:
依赖,关联:关联是更强的依赖关系
继承,实现:继承是继承父类,实现是实现接口
聚合,组合:聚合表示整体和部分的关系,组合的部分生命周期一致
UML图的分类
根据对象间关系是否会随着时间变化,大致可以UML图分为静态和动态两类
静态模型
描述类,对象和数据结构间的关系
用例图:描述功能需求,需求分析阶段绘制
对象图:不常用
类图:详细设计阶段
组件图
包图:不常用
部署图:不常用
动态模型
UML中的消息
简单消息:谁调用谁
同步消息:对象间的消息,即方法的调用
异步消息:对象发出消息后继续进行
描绘执行流程或实体状态变化
协作图:不常用
序列图:也叫时序图,是任何对象的时序,调用关系,可以在任何阶段画
活动图:泳道,描述不同领域的关系,可以在任何阶段绘制
状态图:描述状态变迁,需求分析阶段,详细分析阶段
实现模型
描述系统实现时的特性,包括源代码的静态结构和运行时的实现结构
包括
组件图
指出模块的边界和关系,在概要设计阶段绘制,关键是组件的划分
部署图
如何写文档
文档应该从粗到细,从大到小
以下取自李智慧老师提供的架构文档模板
1 设计概述
……系统是⼀个……的系统,是公司……战略的核⼼系统,承担着公司……的⽬标任务。
1.1 功能概述
系统主要功能包括……,使⽤者包括……。
1.2 ⾮功能约束
……系统未来预计⼀年⽤户量达到……,⽇订单量达到……,⽇PV达到……,图⽚数量达到
……。
1. 查询性能⽬标:平均响应时间<300ms,95%响应时间<500ms,单机TPS>100;
2. 下单性能⽬标:平均响应时间<800ms,95%响应时间<1000ms,单机TPS>30;
3. ……性能⽬标:平均响应时间<800ms,95%响应时间<1000ms,单机TPS>30;
4. 系统核⼼功能可⽤性⽬标:>99.97%;
5. 系统安全性⽬标:系统可拦截…… 、……、……攻击,密码数据散列加密,客户端数据
HTTPS加密,外部系统间通信对称加密;
6. 数据持久化⽬标:>99.99999%。
2 系统部署图与整体设计
系统上线时预计部署……台物理机,……个⼦系统,和公司……系统交互,和外部第三⽅……
个系统交互。
2.1 系统部署图
⼦系统1的功能职责为……,部署……台服务器,依赖……和……⼦系统,实现 ……功能。
⼦系统2参照⼦系统1来写。
2.2 下单场景⼦系统序列图
1. 下单时,⼦系统先发送……消息到⼦系统3,⼦系统3需要执⾏……完成……处理,然后发
送……消息到财务系统,消息中包含……数据。
2. 收到……的处理结果……后,⼦系统1发送……消息到……⼦系统2……。
2.3 退款场景⼦系统序列图
1. 退款⼦系统先发送……消息到⼦系统3,⼦系统3需要执⾏……完成……处理,然后发
送……消息到财务系统,消息中包含……数据。
2. 收到……的处理结果……后,⼦系统1发送……消息到……⼦系统2……。
2.4 退款场景⼦系统活动图如图所示:
1. 退款开始时,⼦系统1处理XXX,然后判断m的状态,如果m为真,请求⼦系统3处理
ZZZ,如果m为假,⼦系统继续处理ZZZ并结束。
2. ⼦系统3处理ZZZ后,⼀⽅⾯继续处理XYZ,⼀⽅⾯将……消息发送给财务通进⾏AAA处
理。
3. ⼦系统在处理完XYZ后,返回⼦系统继续梳理YYY,然后退款处理结束。
3 ⼦系统1设计
⼦系统1的主要功能职责是……,其中主要包含了……组件。
3.1 ⼦系统1组件图
⼦系统1包含6个组件:
组件1的功能主要是……,需要依赖组件2完成……,是⼦系统1的核⼼组件,⽤户……请求主
要通过组件1完成。
同样的,组件2也可以参照组件1来这样写。
3.1.1 场景A组件序列图
对于场景A,⾸先组件1收到⽤户消息CCC,然后组件1调⽤组件2的XXX⽅法……。
3.1.2 场景B组件活动图
在场景B中,⾸先组件收到……消息,开始处理……,然后判断……,如果为true,那
么……,如果为false,那么……。
3.2 组件1设计
组件1的主要功能职责是……,其中主要包含了……类。
3.2.1 组件1 类图Class1
实现接⼝Interface1,主要功能是……,Class1聚合了Class2和Class3,共同对外提
供……服务,Class1依赖Class4实现……功能,Class4……。
3.2.2 场景A 类序列图
在场景A中,当外部应⽤调⽤类1的create⽅法时,类1……。
3.2.3 对象1状态图对象1
运⾏时有4种状态,初始状态是状态1,当条件1满⾜是,状态1转换为状态2,当条件3
满⾜时,状态2转换为状态4……。
3.3 组件2设计
重复上⾯的格式。
4 ⼦系统2设计
重复上⾯的格式
评论