【第一周】架构方法
一、架构师
架构师是做架构设计、对系统架构负责的人。
架构师是一顶帽子,而不是一把椅子;是一个角色,而不是一个职位。
架构师的主要职责
编写架构设计文档
开发编程框架
重构软件代码
设计系统架构
进行技术选型,解决技术应用中的问题
优化系统性能
模块分解与微服务架构重构
保障系统安全与高可用
大数据应用
技术创新
沟通管理
架构师主要能力
编程能力
基础技术掌握能力
常用技术产品的理解与应用能力
性能优化与分析故障能力
常用架构模式和框架的理解与应用能力
建模以及设计文档的方法和能力
业务理解与功能模块及非功能模块拆解能力
快速学习能力
沟通与领导能力
软件架构
软件架构是有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。

软件技术的进步使得程序员不需要了解技术细节和原理就能开发出能用的软件。
让程序员关注更少的事情,有助于提高软件开发效率和质量。
二、4+1 视图模型
视图
软件架构 = {元素, 形式, 关系/约束}
单一的视图无法完整的表达架构, 因此需要具备完整的视图集。
4+1
逻辑视图(Logical View), 设计的对象模型
过程视图(Process View), 捕捉设计的并发和同步特征
物理视图(Physical View), 描述了软件到硬件的映射, 反映了部署特性
开发视图(Development View), 描述了在开发环境中软件的静态组织结构
场景视图(scenarios), 描述用力场景

逻辑视图
相关方: 客户,用户, 开发安组织管理者
视角: 系统的功能元素, 以及他们接口, 职责, 交互
主要元素:系统,子系统,功能模块, 子功能模块,接口
用途: 开发组织划分, 成本/进度的评估

开发视图
相关方: 开发人员, 测试人员
视角: 系统如何开发实现
主要元素:描述系统的层,分区,包,框架, 系统通用服务,系统业务服务, 类和接口,系统平台和相关基础框架。
用途:指导开发组织设计和开发实现

物理视图
相关方: 系统集成商, 系统运维人员。
视角: 系统逻辑组件到物理节点的物理部署和节点之间的物理网络配置。
主要元素: 物理节点以及节点的通信。

过程视图
相关方: 性能优化, 开发相关人员
视角: 系统运行时线程、进程的情况。
主要元素:系统进程、线程以及处理队列等。

场景视图
相关方: 用户,设计和开发人员。
视角:概括了架构上最重要的场景及其非功能性需求,通过这些场景的实现,阐明了架构的广度或众多架构元素运行的方式。

三、软件建模语言
模型
模型是一个系统的完整抽象。人们对摸个领域特定问题的求解及解决方案,对他们的裂解和认识都蕴含在模型中。
通常,开发一个计算机系统是为了解决某个领域特定问题, 问题的求解过程,就是领域问题到计算机系统的映射。

建造软件模型的目的
为了与他人沟通
为了保存软件设计的最终成果
前提: 除非模型比代码更说明问题
何时画图
讨论交流时
最终设计文档
只保留少量的,重要的图
避免涉及过多内容和实现细节
何处画图
白板
绘图工具,如: Visio, Aastah
draw.io
UML
Unified Modeling Language 统一建模语言
以图形方式描述软件的概念
可用来描述:
某个问题领域
构思中的软件设计
描述已经完成的软件实现
静态图: 通过描述类、对象和数据结构以及他们之间存在的关系,来描述软件要素中不变的逻辑结构。
用例图(Use Case Diagrams)
对象图(Object Diagrams)
类图(Class Diagrams)
组件图(Component Diagrams)
包图(Package Diagrams)
部署图(Deployment Diagrams)
动态图: 通过描绘执行流程或者实体状态变化的方式, 来展示软件实体在执行过程中的变化过程
协作图(Collaboration Diagrams)
时序图(Sequence Diagrams)
活动图(Activity Diagrams)
状态图(State Diagrams)
通用模型元素
可以在图中使用的概念

模型元素之间的链接关系:
关联(association): 链接(connect)模型元素及链接(link)实例
依赖(dependency): 表示一个元素以某种方式依赖于另一种元素
泛化(generalization): 表示一般与特殊的关系, 即一般元素是特殊关系的泛化
聚合(aggregation): 表示整体与部分的关系

用例图:
用于描述系统的功能需求。在宏观上给出模型的总体轮廓。通过对典型用例的分析, 使开发者能够有效地了解用户的需求。

创建用力模型的工作包括: 定义系统、确定执行者和用例、描述用例、定义用例间的关系、确认模型。
用例图描述了系统的功能需求, 从执行者的角度来理解系统,用于捕获系统的需求,规划和控制项目,描述了系统外部的执行者和系统提供的用例之间的某种联系。
使用(Use):一个用例使用另一个用例
拓展(Extend):通过向被兔展的用例添加动作来拓展用例。

类图

属性: 可见性 属性名: 类型=缺省值{约束特性}
可见性:
public(+)
private(-)
protected(#)
默认(未声明)
操作: 可见性 操作名(参数表): 返回类型{约束特性}

包图:
将许多类集合成一个更高层次的单位,形成一个高内聚、低耦合的类的集合,降低系统的复杂性。

UML 中的消息:

时序图:用来描述对象间动态的交互行为,着重体现对象间消息传递的时间顺序。
两个轴:
水平轴表示一组对象
垂直轴表示时间

活动图:描述了系统中各种活动的执行顺序。
模型元素: 活动、转移、对象、信号、泳道等
状态图: 描述一个特定对象的所有可能的状态及其引起的状态转移的事件。一个状态图包括一系列的状态以及状态之间的转移。

合作图:用于描述相互合作的对象间的交互关系和链接关系。
时序图着重体现交互的时间顺序,合作图则着重体现交互对象间的静态链接关系。

组件图:系统中遵从一组接口且提供其实现的物理的、可替换的部分。

部署图: 描述系统硬件的物理拓扑结构以及在此结构上执行的软件, 即系统运行时刻的结构。

评论