【架构师训练营 - 第一课】学习笔记

用户头像
少平
关注
发布于: 2020 年 06 月 10 日

课程1:软件建模与设计文档

不要为了工作而工作,而不去追求其意义;工作之后还有多总结,多反思;

架构一定是在场景中的,不要想象地去做;

4+1视图的概念要记住;其理念也要掌握,4+1视图的模式,就是给不同的相关方去看的;

UML常用图形与4+1视图对应起来;

重点关注如何在不同的场景下使用恰当的UML建模;

如果没有完整的设计,而是深陷其中,只知道撸代码,就会感觉很痛苦;

一定要注重技术文档设计的环节,不然后续都无法控制,把需求抽象出来,然后通过代码把它变成现实;架构师把脑中抽象的模型画出来,就是系统的设计;

架构图、模型图好画,但是这种抽象能力难,需要多加练习;

开发之前,一定要理解业务,把业务抽象成概念模型,这样整个就清晰了;

UML-Unified Modeling Language,之所以叫语言,是为了能够沟通和交流,并且有助于自己思考,画出来的过程,也是自己不断总结反思的过程;语言也有方言之说,所以UML图画的好不好不重要,重要的是能表达出来你的设计意图,可以和他人来沟通;

常用七种模型图务必要记住,在用的时候能够得心应手;(静态图包括:用例图,类图,组件图,部署图;动态图包括:序列图,活动图,状态图)

记住六种通用静态关系的模型元素(类之间的关系):依赖,关联,继承,聚合,实现,组合

类与类之间由弱到强关系是:    没关系 > 依赖 > 关联 > 聚合 > 组合

依赖和关联的区别:依赖是一种弱的关联关系,也可以说关联是一种强依赖;

继承和实现的区别:继承描述父子类关系,强调继承属性等,实现描述接口和实现类等关系,强调实现;

聚合和组合的区别:都表示整体和部分的关系,但是聚合的两个对象之间是可分离的,他们具有各自的生命周期,而组合往往表现为一种唇齿相依的关系;

用例建模:动宾短语(做什么),外边的一个矩形框,叫做边界;用例有使用和扩展两种;角色可以是一个人,也可以是一个系统;描述了有哪些功能,供哪些人使用,他们之间有什么关系;

比原型更抽象,功能点更聚焦,一般在需求分析阶段使用;

用例图可以画多张,不要画一张太大的图,控制十几二十个元素,在一张图中表示清晰即可,不要想着在一张图里边描述全面;一般建议先描述核心功能,然后每一个核心功能再继续细分,自顶向下不断精化;

重点包括:角色,功能,关系,边界;

问:如何判断一个模型画到某个程度就可以了?

答:关键还是相关方,如果你认为画的图给对应的相关方看已经可以描述清楚了,那这个程度就足够了;

软件设计的三个阶段:需求分析,概要设计和详细设计;

对应的三个文档:需求分析文档(用例图),概要设计文档和详细设计文档(类图);

动态关系:简单消息,同步消息,异步消息;

对象之间的消息,即方法调用,都是同步消息;

时序图:对象,生命线,激活,消息;

因为时序图中的对象可以是一个系统,可以是一个模块,也可以是一个类,所以时序图在三个阶段都会用到;不同的阶段关注的元素是不同的;

重点是能表达出来这些元素之间的动态关系;

活动图描述的是流程;

泳道描述的是不同的领域;

因为这个流程的描述,可以是业务的流程,也可以是不同系统/模块的流程,也可以画一个方法内部的处理流程,活动图可以在三个阶段都可以使用;

状态图的用法比较单一,就是用来描述状态的,比如订单状态,审核状态;

状态图一般在需求分析阶段和详细设计阶段使用,用于描述核心对象状态的变化关系;需求分析阶段,是用文字说明的一个状态图;详细设计阶段用枚举类型和枚举值,以及条件变量描述清楚;

合作图或者协作图可以通过时序图生成;一般常用时序图代替;

为什么压测文件很小,却能包含很多文件,就是其信息熵高;对应到个人,也要去提高自己的信息熵;用尽量少更精简的语言,用更少的图,来表达自己的想法,能包含很大的信息量;可以使用一些模式,这样要去刻意练习,善于总结,才能成为高手;

组件图用于表示模块之间的关系,要把模块拆分清楚;如何衡量组件的大小,以及组件之间的依赖关系,这个是设计的核心点;主要用于概要设计阶段,是一种静态关系;组件之间的动态关系,需要用组件时序图来完成,两者配合完成;

一个物理组件,可能是一个jar包,一个逻辑组件的大小衡量,可以到一个开发者能够开发完成的粒度;组件图设计好依赖调用关系,确定好边界,就能各自开发的工作了;

组件图不光描述组件之间的依赖关系,同时也就分配了开发的依赖关系;

部署图描述的是系统之间的关系,以及系统与其他系统的关系,主要用于概要设计阶段;

架构师要做的是概要设计和详细设计,那么画的第一张图是应该是部署图,要先有系统的整体架构;

设计是有场景的,而不在于你用的技术如何好;如果需求的目的是快速验证,那么你做一个能够支持海量访问的系统,就不是一个很好的架构;

静态图和动态图配合,才能描述完整;

时序图应该是在某个场景下的;

需求分析阶段,一般画的图包括:用例图(描述功能场景),活动图(描述关键流程),状态图,时序图(描述当前系统与外部系统的依赖关系)

概要设计阶段,一般画的图包括:部署图,服务的时序图,服务的活动图,组件图,组件的时序图,组件的活动图

详细设计阶段,一般画的图包括:类图,类的时序图,方法的活动图,状态图(状态枚举值和状态变迁的布尔值)

用户头像

少平

关注

还未添加个人签名 2017.10.17 加入

还未添加个人简介

评论

发布
暂无评论
【架构师训练营-第一课】学习笔记