[架构师训练营] Week01 - 学习总结
第一周上课,老师不急于教会我们具体的技能点,而是强调作为不易察觉和容易忽视的地方:比如架构是不可描述和设计的,必须要所有人员到位,大家都知晓情况的时候,才能进行设计的,并且以为架构师就是画画uml图就好了。老师在里面提到了所谓的架构设计其实把头脑中抽象的东西画出来。而不是基于某些业务自底向上地设计,换句话说,应该是自顶向下设计。
课程中提炼出了这个隐含的逻辑,开始于领域问题,结束于解决方案。这个往往比直接画uml图更加重要,架构设计不是凭空想象出来的,不是空中楼阁。
uml只是辅助我们思考的一个工具,而不是架构设计的全部。
uml 分为动态图和静态图。
动态图通过描述执行流程或者实体状态变化的方式,来展示软件实体在执行过程中的变化过程,
包括协作图,序列图,活动图,状态图,我们需要关注的是序列图,活动图,状态图。
静态图通过描述类,对象和数据结构以及它们之间存在的关系,来描述软件要素中不变的逻辑结构。
包括用例图,对象图,类图,组件图,包图,部署图,我们需要关注的是用例图,类图,组件图,部署图。
如果按照架构设计三阶段来分:需求分析,概要设计,详细设计来分的话,那么则是:
需求分析
用例图-功能场景,活动图-关键流程,系统级时序图-依赖关系,状态图-状态变迁。
概要设计 组件级
部署图,组件图,组件级时序图,组件级活动图
详细设计
类图 类时序图,状态图-状态枚举值-状态变迁布尔值, 方法级活动图(内部逻辑)。
在各个图中需要做的是了解其中的各种元素。
通用模型元素:
可以在图中使用的概念统称为模型元素。
模型元素常用的元素符号:类,对象,节点,包和组件等
通用模型关系:
依赖 关联
泛化 聚合
实现 组合
依赖:(use a)表示一个元素以某种方式依赖于另一种元素,一个类依赖于与另一个类的定义,其中一个类将影响另外一个类。
关联:(has a)连接(connect)模型元素及链接(link)实例, 类与类之间的联结,使得一个类知道另外一个类的属性和方法。
泛化:表示一般与特殊的关系,即一般元素是特殊关系的泛化,表示类与类之间的继承关系。
实现:类对接口的实现,只继承接口,不继承接口实现
聚合:表示整体与部分的关系,不共享生命周期。
组合:表示整体与部分的关系,共享生命周期。
依赖 vs 关联
关联比依赖关系更强,关联是更强的依赖。
组合 vs 聚合
组合,生命周期一致的,整体消亡,组成部分也随之消亡, 人与身体器官。
聚合,生命周期不一致,整体消亡,组成部分可能还存在,汽车与车轮。
接下来针对这7种图进行详细说明,主要关注图的应用场景,所处阶段, 所包含元素, 以及注意事项,客户。
用例图
应用场景:
描述系统的功能需求,在宏观上给出模型的轮廓。通过对典型用例的分析,使得开发者能够有效地了解用户需求。
所处阶段:
需求分析阶段
包含元素:
角色-小人(可以是用户,也可以是外部系统);用例-椭圆(功能,动宾结构);边界-矩形(界定范围);用例之间关系-include/extend.
注意事项:
1)每张图维持10-20个用例规模,
2)use case可以自顶向下不断细化,抽象出不同层次的用例图。
3)是否细分以相关方看得懂为准。
客户:
架构师
类图
应用场景:
描述类之间的关系。
所处阶段:
详细设计阶段
包含元素:
类-类名,属性,方法;包-常规用途的组合机制;接口-一系列操作的集合;类之间的关系-通用模型元素关系。
注意事项:
尽量保证类相对独立,并且类之间关系清晰。
客户:
研发工程师。
组件图
应用场景:
描述物理组件,模块的边界之间的关系是咋样的。
所处阶段:
概要设计阶段
包含元素:
组件-配置组件(构成系统所必须的组件,是运行系统时需要配置的组件);
工作产品组件(开发过程的产物,是形成配置组件和可执行文件之前必要的工作产品,不直接参与到可执行系统中,而是用来产生系统的中间产品);执行组件代表可运行的系统最终运行产生的运行结果
接口-提供接口(称为导出接口,供给接口,是组件为其他组件提供服务的操作的集合),需求接口(引入接口,组件向其他组件请求相应服务时要遵循的接口)
关系-依赖,实现。
注意事项:
无
客户:
开发工程师
部署图
应用场景:
物理部署,各结点之间进行交互的通信路径称为连接,连接表示系统中的节点存在着联系,用节点之间的连接表示连接,在连接的连线上标准通信类型。
所处阶段:
概要设计阶段
包含元素:
节点-存在与运行时的代表计算机资源的物理元素,可以是硬件也可以是运行其上的软件系统。
节点实例-名称有下划线和结点类型前面有冒号,冒号前面可以有示例名称也可以没有示例名称。
节点类型-
物件-软件开发过程中的产物
连接-通信路径.
结点容器-一个节点可以包含其他节点容器。
注意事项
无
客户
开发工程师
序列图
应用场景:
一种交互图,主要描述对象之间的动态合作关系以及合作过程中的行为次序,常用来描述一个用例的行为。
所处阶段:
需求分析阶段(系统级),概要设计阶段(组件级),详细设计阶段(类级)。
包含元素:
角色-人物或者其它子系统。
对象-对象在交互中扮演的角色,位于时序图顶端和对象代表。
生命线-代表时序图中的对象在一段时间内的存在。每个对象或者序列图下都有一个垂直虚线。
激活期-代表时序图中的对象执行一项操作的时期。
消息-定义交互和协作中交换信息的类,用于对实体间的通信内容建模,信息用于实体间传递信息。 允许实体请求其他服务,消息类型分为同步消息(调用发送消息要同步被调用者返回),异步消息(发送者不用等被调用者返回就能继续向下执行)。
注意事项
无
客户
架构师,开发工程师
活动图
应用场景:
一种描述交互的方式,描述采取何种动作,做什么(对象状态改变),何时发生(动作序列), 以及在何处发生(泳道)。
所处阶段:
需求分析阶段(业务流程),概要设计阶段(子系统),详细设计阶段(方法/函数级)。
包含元素:
流程处理节点,挡板-流程分叉或者聚合,泳道-描述不同领域,完成活动的对象,并聚合一组活动。
注意事项:
无
客户:
架构师,开发工程师
状态图
应用场景:
描述不同状态变化迁移关系,状态因何而产生。
包括元素:
状态,状态迁移条件。
所处阶段:
需求分析阶段,详细设计阶段
注意事项:
无
客户:
架构师, 开发工程师。
uml是一套沟通语言,跟国人学外语一样的,在使用的时候,需要在注意表达形式的同时,注意表达内容。这样才能获得比较好的效果。
评论