架构师训练营培训第一周总结
1、架构师的主要职责是什么?如何做软件架构
(1)编写架构设计文档
(2)开发编程框架
(3)重构软件代码
(4)设计系统架构
(5)进行技术选型,解决技术应用中的问题
(6)优化系统性能
(7)模块分解与微服务架构重构
(8)保障系统安全与高可用
(9)大数据应用
(10)技术创新
(11)沟通管理
2、架构师需要具备的主要能力有哪些?
(1)编程能力
(2)基础技术掌握能力
(3)常用技术产品的理解与应用能力
(4)性能优化与分析故障的能力
(5)常用架构模式和框架的理解与应用能力
(6)建模以及设计文档的方法和能力
(7)业务理解与功能模块及非功能模块拆解能力
(8)快速学习能力
(9)沟通与领导能力
3、什么是架构?
定义:架构是软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。
(1)架构由架构元素和元素间关系组成,也就是定义所说的
(2)每个系统都有一个架构,每个系统都有相关方;架构师需要把自己的架构展示给系统相关方,通过什么展示呢?就是架构文档;那架构文档由哪些内容组成呢?就是架构试图,架构视图是展示哪些东西呢?这就要看系统相关方的关注点,关注点是哪些,你的架构文档就展示哪些架构视图,给他们提供他们想要的信息;
比如架构评审,给老板汇报,他们关注的是:功能如何实现,性能如何提升,跟其他系统的关系是什么样的,如何支撑这么多用户,未来的功能扩展如何设计,部署情况是什么样子的,不同的用户如何做隔离,整体是什么样子的;他们不关注你核心的类怎么做、核心系统有哪些组件,是宏观层面的;
具体实现的团队(产品经理、开发工程师、测试工程师、运维工程师)关注的是:关键的依赖和调用关系是什么样的,他们要去落地,所以应该要有更多的落地细节
4、什么是架构师?
架构师是对系统进行架构设计、对系统架构负责的那个人,架构师是一个角色而不是一个职位
5、如何书写架构设计文档?
前面讲了架构师需要清楚的 get 系统不同相关方对应的关注点,画出不同的架构视图,呈现给系统相关方;显然单一的视图是无法完整的表达架构的,一个系统有很多个方面、很多信息内容需要呈现出来,不同的相关方关注的信息不同;
所以需要多个架构视图,需要具备完整的视图集,几个方面的架构信息来展示架构设计:也就是 4+1 架构视图
软件架构={元素,形式,关系/约束}
(1)逻辑视图(Logical View),设计的对象模型
(2)过程视图(Process View),捕捉设计的并发和同步特征。
(3)物理视图(Physical View),描述了软件到硬件的映射,反映了部署特性。
(4)开发视图(Development View),描述了在开发环境中软件的静态组织结构。
(5)场景视图(scenarios),描述用例场景
画架构视图、书写设计文档的过程就是建立软件模型的过程
(1)什么是模型?
模型是一个系统的完整的抽象。人们对某个领域特定问题的求解及解决方案,对它们的理解和认识都蕴涵在模型中。
通常,开发一个计算机系统是为了解决某个领域特定问题,问题的求解过程,就是从领域问题到计算机系统的映射。
我的理解:模型就是对特定领域问题的系统映射,解决这个问题需要那些系统功能、有哪里参与者、需要多少系统模块、系统间的关系是什么样子的等等功能和非功能性的系统映射集;
说百了点就是按照设计文档模版,把现实世界映射为软件系统;
(2)为什么需要建模?
1)为了与他人沟通
2)为了保存软件设计的最终成果
我的理解:
第一:预先证明系统符合系统相关方预期、证明系统可以很好的运行;解决一个领域问题是需要很大成本的,先建模的好处就是在实现系统前先给大家看下我们的系统是什么样子的(功能和非功能等),项目相关方一致认可后再实现,避免实现后不符合项目相关方的期望;
也就是减少项目的实现成本、建造模型的成本远远低于建造事物的成本;比如传统行业(造飞机),为什么要先建模再造实物呢?就是这个原因
第二:方便与他人交流、组织知识沉淀
(3)如何建模?
UML(unified modeling language):统一建模语言,以图形方式描述软件
即使用 UML 构建不同的架构视图,呈现不同的关注点信息,配上关键信息描述,便就是一个架构设计文档
那么 UML 支持那些视图呢?
UML 支持静态图和动态图两类视图,总计包括 10 种
静态图:通过描述类、对象和数据结构以及它们之间存在的关系,来描述软件要素中不变的逻辑结构,包括:
1)用例图:用于描述执行者所理解的系统功能,在宏观上给出总体轮廓;
2)对象图
3)类图
4)组件图
5)包图
6)部署图
动态图:通过描绘执行流程或者实体状态变化的方式,来展示软件实体在执行过程中的变化过程,包括:
1)协作图
2)序列图/时序图:一种交互图,主要描述对象之间的动态合作关系以及合作过程的行为时间顺序,常用来描述一个用例的详细执行流程
3)活动图:带有对象边界(泳道)的流程图
4)状态图:用来描述对象、子系统、系统的生命周期
5、重要 tips
(1)要主动的去做事情,要主动你帮助别人解决问题,主动的站出来
(2)先建立深度,技术是互通的;然后再建立广度;深度对广度的影响特别大,没有深度就没有广度,把一件事先做扎实了,做通了,做精了,面对一个陌生领域也能很快抓住关键点,就能突破;所以一定要找到自己当前比较擅长的,把它扎深了,先成为高手,再成为全才。
架构师要求技术广度,知识面一定要广,想法一定要全面。
(3)本课程能得到的东西是架构方法、架构模式、关键知识点;通过课程中的例子总结模式,通过模式构建知识体系;真正的架构需要在工作中在一定场景下自己实践,不痛的场景,架构是不一样的。
(4)没有设计文档就是没有软件设计,没有软件设计就没有技术进步
特别建议:开始写代码前,先做设计,先写设计文档,写设计文档的过程就是思考的过程,画图的过程中就能把思路捋清楚,把握整体和细节,设计的过程中发现问题、解决问题,获得技术进步;如果不写设计文档,有可能只是自己认为有设计,实现起来会非常混乱;
设计文档很重要,架构图很重要,要去做建模,要去画图,要去做设计,在这过程中不断提升和成长
版权声明: 本文为 InfoQ 作者【lakers】的原创文章。
原文链接:【http://xie.infoq.cn/article/1e910e266dbc0f0b85ab6aeb3】。未经作者许可,禁止转载。
评论