软件架构设计
3 模块划分最佳实践
思维框架 分层的细化 分区的引入 机制的提取 总结
【15】
思考一
划分功 能模块
为模块 定义接口
思考一
需求分块
为模块 定义接口
【16】
例子 例子
【17】
思考二
功能划分
模块分解
边界定义
思考二
功能模块 划分
逻辑模块 划分
外部接口 定义
内部接口 定义
【18】
例子 思考三:直接划分出模块
软件架构不仅注重软件本身的结构和行为,还注重其 他特性:使用、功能性、性能、弹性、重用、可理 解性、经济和技术的限制及权衡、以及美学等。
思考:哪些决策属于架构设计
影响 范围
全
不属于架构设计
局
(小心陷阱)
架构设计 (重点关心)
局
不属于架构设计
部
不属于架构设计 (有时关心)
小
大
影响程度
【9】
思考:架构决策的层次性
架构 ={结构,……} 结构 ={元素,外部可见属性,关系}
【6】
理论 告诉你
• 架构关注分解与交互 • 架构需多角度考虑
现实 告诉你
• 程序员说,架构就是要决定需要编写哪些类、使用哪些现成框架,程 序经理笑了;
• 程序经理说,架构就是模块的划分和接口的定义,系统分析员笑了; • 分析员说,架构就是为业务领域对象的关系建模,配置管理员笑了; • 配置管理员说,架构就是开发出来的、以及编译过后的软件到底是个
运行架构
• 控制流 – 进程、线程 – 中断服务程序
• 控制流组织 – 系统启动与停机 – 控制流通信 – 加锁与同步
物理架构
• 物理节点 ― PC、服务器 ― 单片机、单板机、专用机 ― 软件安装、部署、烧写 ― 系统软件选型
• 物理节点拓扑 ― 连接方式、 拓扑结构 ― 物理层(Tier ) ― 冗余考虑
啥结构,数据库工程师笑了; • 数据库工程师说,架构规定了持久化数据的结构,其他一切都不过是
对数据的操作而已,部署工程师笑了; • 部署工程师说,架构规定了软件部署到硬件的策略,用户笑了; • 用户说,架构就是决定一个个功能子系统如何划分,程序员又笑了;
——引自《软件架构设计》一书 【7】
温昱 将告诉你
用例驱动
分层
How to do it
子系统
(功能模块)
归纳
分层模式
Why to do it 功能切分
用例驱动
【32】
最佳实践
子系统
层
模块
【33】
议 程
31 训练
多个场景实例
2 划分模块的常见做法
3721式的模块划分
技术驱动的模块划分 (先分层,后……)
用例驱动的模块划分 (先识别类,后……)
3 模块划分最佳实践
思维框架 分层的细化 分区的引入 机制的提取 总结
【34】
小帖子,引发大思考
思考一:不同系统,层数一样?
• 案例: 一个7层架构分析
【35】
思考二:同一系统,层数不变?
• 你所在的公司: 投标用“市场架构”=研发用“技术架构”?
结论:分层的细化
【36】
议 程
2 划分模块的常见做法
3721式的模块划分
技术驱动的模块划分 (先分层,后……)
用例驱动的模块划分 (先识别类,后……)
3 模块划分最佳实践
思维框架 分层的细化 分区的引入 机制的提取 总结
今天,你迭代了吗?
• 复杂系统的应对之道
【43】
逻辑架构:迭代的设计思路
结构方面的切分 行为方面的约定
逻辑架构
• 职责划分 – 逻辑层(Layer) – 子系统、模块 – 关键类
• 职责间协作 – 接口 – 协作关系
数据架构
• 持久数据单元 – 文件 – 关系数据库 – 实时数据库
• 数据存储格式 – 文件格式 – 数据库Schema
开发架构 • 程序单元
– 源文件、配置文件 – 程序库、框架 – 目标单元 • 程序单元组织 – Project划分 – Project目录结构 – 编译依赖关系
用例驱动的模块划分 (先识别类,后……)
3 模块划分最佳实践
思维框架 分层的细化 分区的引入 机制的提取 总结
【39】
大师说,但你如何做
机制才是设计的灵魂所在……否 则我们就将不得不面对一群无法 相互协作的对象,它们相互推搡 着做自己的事情而毫不关心其他 对象。
Grady Booch 《面向对象分析与设计》
架构 = 重要决策集合
架构学科,是 科学? 是艺术? 是建模? 是工程? ……
【8】
RUP的定义
软件架构包含了关于以下问题的重要决策:
软件系统的组织; 选择组成系统的结构元素和它们之间的接口,以及
当这些元素相互协作时所体现的行为;
如何组合这些元素,使它们逐渐合成为更大的子系 统;
用于指导这个系统组织的架构风格:这些元素以及 它们的接口、协作和组合。
【44】
架构设计:【分】与【合】的艺术
案例:WinZip的架构设计过程
【45】
初期:引入分层架构
初期:层间关系(压缩时)
界面交互层
压缩意图
压缩进度
压缩控制层
哪个文件
字节流
原文件读写层
Bit 块等 压缩包读写层
【46】
初期:层间关系(解压缩时)
界面交互层
解压缩意图
解压缩进度
文件名及字节流 原文件读写层
用例驱动的设计过程?
Use Cases Analysis Design Source Classes Classes Code
Exec
你这么做吗?已发现哪些问题?
【30】
议 程
31 训练
多个场景实例
2 划分模块的常见做法
3721式的模块划分
技术驱动的模块划分 (先分层,后……)
用例驱动的模块划分 (先识别类,后……)
架构概念、思想
温昱
· 实战型 资深咨询顾问 · 实战型 架构培训专家 · 创立ADMEMS实践体系 · 《软件架构设计》著 者 · 《一 线 架 构 师》著 者 · 中国Softcon杰出贡献专家 · 中国CCSE杰出贡献专家
专家介绍
温昱 软件架构专家,资深咨询顾问,实战型架构培训专 家,创立ADMEMS架构实践体系。软件架构思想的传播 者和积极推动者,中国Softcon杰出贡献专家,中国CCSE 杰出贡献专家,出版了《软件架构设计》、《一线架构 师实践指南》等专著。
系统
决
client
策
切分类 决策
决 策
server
决
策
决
API层
策
决
模块
引擎层
策
决
模块
策
SPI及服务扩展
……
思考:架构决策的层次性
决策
B/S架构
决策
决策
决策
弃用PHP
选用JSP
不用ASP
决策 Framework选择 开发工具选择
技术选型类 决策
【10】
架构 = 决策过程
软企 架构力培养工程
【11】
【3】
架构 = 元素 + 交互
【4】
RDBMS例:元素 = 模块 Struts例:元素 = M-V-C
【5】
连锁超市例:元素 = 节点
Bass的定义
• 某个软件或计算机系统的软件架构是该系 统的一个或多个结构,
• 每个结构均由软件元素、这些元素的外部 可见属性、以及这些元素之间的关系组成。 ——Len Bass
温昱
· 实战型 资深咨询顾问 · 实战型 架构培训专家 · 创立ADMEMS实践体系 · 《软件架构设计》著 者 · 《一 线 架 构 师》著 者 · 中国Softcon杰出贡献专家 · 中国CCSE杰出贡献专家
议 程
31 训练
多个场景实例
2 划分模块的常见做法
3721式的模块划分
技术驱动的模块划分 (先分层,后……)
压缩控制层
Bit 块等
哪个文件
压缩包读写层ห้องสมุดไป่ตู้
下面进行
【47】
对比:“市场”架构 分层、分区、机制提取
【48】
下面进行
压缩功能(多文件源)
【49】
下面进行
包 | 接 口 图
【50】
下面进行
【51】
思维要领
【52】
谢谢!
Q&A
五顶视图帽
温昱
· 实战型 资深咨询顾问 · 实战型 架构培训专家 · 创立ADMEMS实践体系 · 《软件架构设计》著 者 · 《一 线 架 构 师》著 者 · 中国Softcon杰出贡献专家 · 中国CCSE杰出贡献专家
31 训练
多个场景实例
2 划分模块的常见做法
3721式的模块划分
技术驱动的模块划分 (先分层,后……)
用例驱动的模块划分 (先识别类,后……)
3 模块划分最佳实践
思维框架 分层的细化 分区的引入 机制的提取 总结
大著作,留下小问题
• 《代码之道》: 快速迭代有个基本前提:开发应该“深度优 先”,而不是“广度优先”。
温昱有十年系统规划、架构设计和研发管理经验,在金 融、航空、多媒体、电信、中间件平台等领域负责和参 与多个大型系统的规划、设计、开发与管理。
作为资深咨询顾问,温昱每年为企业提供架构培训600小 时、咨询400小时。已为众多知名企业提供了卓有成效的 架构培训与咨询服务。
【1】