极客时间第 0 期架构师训练营第一周总结
客套和前言就省略了,看标题就知道。
首先要吐槽下!
这周课程的主要内容是UML图的介绍和使用。
UML作为一种软件设计的表达方式和展示工具,使用起来并不难,老师也说,难的不是怎么画图,而是怎么把业务进行抽象。
我以为,老师会在讲具体UML的时候重点讲解如何做业务抽象,结果只是说一些干巴巴的理论,例子也举得很少。听得有些乏味了。
希望以后能多举实例,而不是纯讲理论。
虽说,学系统架构需要悟性。能否照顾下我这样悟性不高的学生呢?
另外,就是互动问答时间很少,也希望后续能跟老师有更多的互动。
言归正传。以下是我这周的学习总结。
关于架构师
架构师的职责
编写架构设计文档
开发编程框架
重构软件代码
技术选型并解决应用中的问题
优化系统性能
模块分解与微服务架构重构
保证系统安全与高可用
大数据应用
技术创新
沟通管理
架构师的主要能力
编程能力:好的架构师必须要是好的程序员
基础技术掌控能力:好的架构师必须有扎实的计算机基础知识
常用技术产品的理解与应用能力:对各种市面上流行的技术和产品,理解它们的优缺点以及适用范围
性能优化与分析故障的能力:要能主动发现系统的瓶颈和故障并提出有效的解决方案。
常用架构模式和框架的理解与应用能力:与第3点类似,应用千变万化,不变的是套路
建模以及设计文档的方法和能力:把抽象的业务转变为可沟通的表达方式和可落地执行的代码
业务理解与功能模块以及非功能模块拆解能力:拆解是为了更好的扩展性
快速学习能力:最基本的技能
沟通与领导力:适配大规模系统下多人协作的要求
谁是架构师
架构师是做架构设计和对系统架构负责的那个人。他只是一个头衔或角色,并不是一个具体的职位。
在无人做架构的项目中,你把架构设计出来,无论刚开始设计的是好是坏,只要大家对你的设计做出评价(无论评价是好是坏)就已经承认你架构师的地位。
什么是软件架构
如上图:
系统有一个架构
架构是由架构元素和元素之间的关系组成
架构元素包括:节点、模块、类等
元素之间的关系有两种:静态关系和动态关系
静态关系包括:依赖、继承、实现、组合、聚合、关联
元素之间的交互则体现为动态关系
架构可以由架构文档来描述
不同的相关方(比如:开发、测试、产品经理)对系统的关注点不一样
架构文档应为不同的相关方呈现不同的架构视图
UML
UML全称为Unified Modeling Language(统一建模语言)
它可以用来描述:
某个问题领域
构思中的软件设计
描述已完成的软件实现
最重要的作用有两个:
提供了一套统一的语言来描述软件设计,减少沟通中的信息不对称。
加深对系统的理解和思考。
要注意的是,UML是有”方言“的,并没有强制一定要用什么样的方式表达某一件事。
UML图的分类
静态图
用例图:一般在需求分析阶段用于描述需求
对象图(不常用)
类图:用于详细设计阶段,描述类
组件图:一般用于概要设计阶段和详细设计阶段,描述软件各功能模块
包图(不常用)
部署图:一般用于概要设计阶段和详细设计阶段,描述系统物理上的部署
2.动态图
协作图(不常用)
序列图(又称时序图):适用于各个阶段,对业务流程的详细描述或软件的运行方式
活动图:适用于各个阶段,对业务流程的详细描述或软件的运行方式
状态图:对业务对象的状态变化描述
何时使用
需求分析阶段:用例图、活动图、时序图、状态图
概要设计阶段:部署图、时序图、活动图、组件图
详细设计阶段:类图、时序图、状态图、活动图
模型元素
静态关系
依赖:较弱的关系。在编码中一般体现为一个方法中的局部变量。如:呼吸的方法依赖空气
继承:继承父类
实现:对接口的实现
关联:关联是一种更强的依赖。在编码中一般体现为成员变量。
聚合:比关联更强的关系。多表示整体与部分的关系。
组合:比聚合更强的关系,一般组合起来的对象拥有同样的生命周期。
结语
以上!
评论