架构师训练营第一周学习总结
什么是软件架构
a. 一个软件系统的架构由架构元素(服务器,子系统,组件,模块,类)和架构元素之间的关系组成
i. 元素间的关系可分为静态关系和动态关系
1) 动态关系:元素之间如何交互,如何互相调用
2) 静态关系:继承、实现、依赖、关联、聚合、组合
b. 架构元素及架构元素间的关系是通过架构文档来表现的
c. 架构师的输出产物是架构文档,架构文档是给相关方看的
d. 架构视图组成了架构文档
e. 通过架构视图反映了架构的元素和元素之间的关系
f. 架构视图反映了相关方的关注点
g. 架构是为了满足相关方的利益诉求
4+1 视图模型
a. 4+1 视图模型的理念是一个系统,从不同的维度组织起来,面向不同的相关方
b. 逻辑视图
i. 描述软件功能逻辑,由哪些模块组成,模块中包含哪些类,其依赖关系如何
ii. UML 中展现逻辑视图的图
1) 类图
2) 对象图
3) 状态图
4) 时序图
5) 协作图
c. 开发视图
i. 包括系统架构层面的层次划分,包的管理,依赖的系统与第三方程序包
ii. UML 中展现开发视图的图
1) 组件图
2) 包图
d. 过程视图
i. 描述系统运行期进程、线程、对象实例,以及与此相关的并发、同步、通信等问题
ii. UML 中展现过程视图的图
1) 活动图
e. 物理视图
i. 描述系统如何安装部署在服务器上,以及不同服务器之间的如何关联、通信
ii. UML 中展现物理视图的图
1) 部署图
f. 场景视图
i. 针对具体用例场景,将其他四个视图关联起来,一方面从业务角度描述功能流程如何完成,一方面从软件角度描述相关组成部分如何互相依赖、调用
ii. UML 中展现场景视图的图
1) 用例图
软件建模
a. 什么是模型
i. 模型就是一个系统的完整抽象
ii. 架构师在头脑中要能有系统运行的时候有那些服务器,子系统,模块,类,以及他们之间的关系是怎样的,将这些元素画出来,就形成了系统的模型和设计
b. 建造软件模型的目的
i. 方便沟通交流
ii. 帮助设计思考
c. UML 图常用的有七种
i. 静态图 - 描述软件要素中不变的逻辑结构及他们之间的关系
1) 用例图
2) 类图
3) 组件图
4) 部署图
ii. 动态图 - 描绘执行流程或状态变化
1) 序列图
2) 活动图
3) 状态图
d. 静态图
i. 模型元素之间的关联关系
1) 关联,聚合,组合在 Java 中都用实例变量实现
2) 依赖在 Java 中体现为方法参数,局部变量
3) 关联的两个类一般是平等的,聚合,组合表示拥有关系,依赖表示使用关系
4) 组合与聚合都是整体与部分之间的关系,其中
a) 聚合中,整体与部分可分离,有各自生命周期
b) 组合中整体与部分是强关系,不可分割,生命周期一致
c) 聚合中,多个整体可以共享同一个部分
d) 组合中,多个整体不能共享同一个部分
e) 组合与聚合要看具体上下文,同样的两个类可能在不同上下文是不同关系
5) 关系强烈程度
a) 组合>聚合>关联>依赖
6) 一般场景下可以不区分组合,聚合,关联,可以都用关联表示
7) 继承和实现用三角箭头,依赖、关联、聚合、组合用普通箭头
8) 实现用虚线,依赖用虚线,其余都是实线
ii. 用例图
1) 用于描述系统功能需求
2) actor 可以是一个角色,也可以是其他系统
3) 用例中的功能可以使用,扩展其他功能
4) 一个用例图的元素数量维持在十多个,不要太大。图后面要配文字说明
5) 用例图如有必要可以逐渐向下细分,用多个用例图表达功能。精华程度取决于接收者
6) 用例建模主要在需求分析阶段
iii. 类图
1) 类图和对象图能够建立专业领域的计算机系统对象模型
2) 类之间使用六种关联关系
3) 类图主要在详细设计阶段进行设计
iv. 组件图
1) 显示代码本身的逻辑结构,它描述系统中存在的软构建(如 jar,dll 等)以及他们之间的依赖关系
2) 组件可以是物理组件(一个 jar 包)也可以是逻辑组件(拆分为模块,一个 jar 包含多个模块),粒度通常是一个人能负责一个组件的开发
3) 组件图描述组件之间的静态关系,主要是依赖关系。组件之间的动态关系可以用组件时序图画
4) 组件之间也可以是六种关联关系,通常是依赖或关联关系
5) 组件图通常在概要设计阶段设计
v. 部署图
1) 部署图描述系统最终部署情况,如需要部署多少台服务器,关键组件部署在哪些服务器上
2) 部署图主要在概要设计阶段设计,是架构师画的第一个图
e. 动态图
i. UML 中的消息
1) 简单消息,表示控制流,描述一个控制如何从一个对象传递到另一个对象
2) 同步消息,用操作调用实现,操作的执行者在操作执行完并回送一个简单消息后再继续执行
a) 类之间的调用一定是同步的
3) 异步消息,发送者发送消息后就立即继续执行
a) 服务器之间、系统之间可以发送异步消息
ii. 时序图
1) 描述参与者之间动态的调用关系,参与者之间通过发送消息进行互动
2) 参与者可以是角色、服务器、子系统、组件等、类等
3) 消息在类层面是方法名称,在服务器、组件等是一个文字描述
4) 时序图在需求分析、概要设计、详细设计阶段都可以使用
iii. 活动图
1) 活动图描述过程逻辑和业务流程
2) 实心圆表示开始,空心圆表示结束
3) 泳道描述完成活动的对象,并聚合一组活动
4) 活动图可以在需求分析(描述业务流程)、概要设计(描述子系统、模块之间的执行流程)、详细设计阶段设计(描述方法内部流程)
iv. 状态图
1) 状态图展示单个对象生命周期的状态变迁
2) 状态图在需求分析(业务对象的状态)、详细设计阶段(将业务对象状态的文字描述变为枚举值)设计
v. 合作图
1) 合作图可以用时序图产生,合作图就是没有时序的时序图
f. 其他
i. 学习 UML 图要关注什么情况下用哪种图
版权声明: 本文为 InfoQ 作者【阿德】的原创文章。
原文链接:【http://xie.infoq.cn/article/59b3f0907ff052035b8a774f0】。文章转载请联系作者。
评论