软件扩展性与重用性设计培训
1. 什么是好的设计以及如何预先设计实现
(1)什么是好的设计?
(2)衡量好设计的手段
(3)可扩展性(Extensibility)容易添加新的功能
(4)灵活性(Flexibility)代码修改平稳地发生
(5)可插入性(Plug ability)容易将一个类抽去-同时也可将相同接口类加入
(6)软件的变化分析-发现变化/封装变化/隔离变化
(7)软件需求的不可预测性-设计师预测式设计与过度设计
(8)软件演化式设计-敏捷的设计思想
2. 逻辑架构切割(1)技术切割范式:针对所有业务功能进行技术切割方法论
(2)技术元素的分层组织
(3)技术元素的分包组织
(4)技术元素的相似性与重叠性分析
(5)技术元素的变化性设计
(6)技术元素的性能、可靠、稳定与安全设计
(7)技术元素并行开发与开发管理组织
(8)技术元素难度复杂度与开发者能力关系
(9)动手实践:面向对象与面向方面的技术切割实践,评选最佳实践成果
3. 接口设计与解耦
(1)接口设计的基本原则
(2)接口的变化性与稳定性
(3)定义技术元素间相互调用的接口
(4)定义系统外部访问集成的接口
(5)定义框架管理的接口
(6)注入变化观察技术元素的波及面-耦合性分析
(7)技术元素职责单一性与松耦合
(8)案例分析:google的MapReduce的接口设计
(9)动手实践:类库接口设计实践,评选最佳实践成果
4. 数据库结构设计与大数据
(1)数据库设计的基本原则:适度使用范式原则
(2)实现数据库结构的弹性设计8种方案
(3)大数据设计:权衡SQL与NoSQL
(4)数据切割:分库、分区与分布
(5)数据存储文件系统的弹性设计:MySQL与淘宝TFS
(6)数据性能设计方案:对比MemCached、OceanBase与Spark
(7)数据中的知识与决策
(8)动手实践:分组实现数据库弹性设计,评选最佳实践成果
5. 公共组件设计
(1)公共组件结构切割
(2)公共组件接口设计
(3)公共组件的弹性设计
(4)公共组件与功能组件的动态耦合设计
(5)动手实践:Cache组件设计
(6)动手实践:现有系统反向工程的公共组件合理性分析
6. 框架平台设计
(1)UI框架设计
(2)功能逻辑组件集成管理框架设计
(3)数据访问框架设计
(4)数据存储框架设计
(5)案例分析:HADOOP框架剖析
(6)动手实践:现有系统反向工程的自定义框架的合理性分析
7. 非功能性设计
(1)各种质量属性设计的战术策略
(2)掌控“相互冲突的质量属性”设计的平衡点
(3)软件变化分析与预测
(4)软件变化设计策略
(5)基于设计模式的变化设计
(6)基于key-value的变化设计
(7)基于逻辑判断的变化设计
(8)高可靠性设计
(9)案例分析:SAP自我维护设计策略分析
(10)动手实践:现有系统反向工程的质量设计的合理性分析
8. 部署运行维护设计
(1)规划系统开发的配置库结构
(2)规划系统的编译方案
(3)规划系统源代码的版本方案
(4)规划系统物理文件的安装方案
(5)规划系统中各个技术元素部署方案
(6)系统集成构建方案
(7)注入敏捷思想-持续集成构建
(8)案例分析:微软的每日构建
(9)标注软件结构中的“运维点”
(10)制定“运维点”的运行维护策略
(11)软件结构中内置免疫系统
(12)动手实践:产品源代码结构、编译计划、版本计划与部署方案,评选最佳实践成果
9. 架构关键点与工程
(1)架构设计与开发效率:简化开发
(2)架构设计指导详细设计与代码编写
(3)注入敏捷的开发实践方法:TDD
(4)融合ITIL与DevOps的架构设计
(5)软件架构与人力组织结构映射
(6)基于“软件工厂”的开发模式
(7)建立企业级知识库
(8)软件动态运行维护规划
(9)动手实践:现有系统反向工程的运维设计的合理性分析
10. 架构模式与设计模式
(1)模式的场景、角色、职责
(2)模式应用误区与风险
(3)设计重构中模式应用
(4)把握模式的使用尺度-过度使用模式与适度使用模式
11. 软件设计模式的应用(Design Patterns)
(1)建筑模式与设计模式
(2)过度使用设计模式的问题
(3)设计模式如何适应变化和封装
(4)GRASP设计原则
(5)关于功能与逻辑的分离
(6)设计模式的组合应用方式
(7)Framework设计中设计模式
(8)结合案例进行分析,应用设计模式之前和应用之后的对比
(9)动手实践:学员依据案例进行设计模式实践