| 卓越软件设计的五个指标 | 
                              
                               
                                | 简单性 | 
                                
                                    - 简单设计的四个要素
 
                                    - 通过所有测试
 
                                    - 无重复代码
 
                                    - 体现设计意图
 
                                    - 较少的类、方法
 
                                    | 
                              
                               
                                | 可重用性 | 
                                 | 
                              
                               
                                | 可读性 | 
                                
                                    - 软件的成本
 
                                    - 体现设计意图
 
                                    - 体现业务价值
 
                                    - 代码的命名与格式
 
                                    | 
                              
                               
                                | 可测试性 | 
                                 | 
                              
                               
                                 可扩展性 
                                   
                                   | 
                                 | 
                              
                               
                                | 案例实践: | 
                                
                                    -  Hadoop的版本变迁看简单设计:
 
                                      通过比较两个版本的Hadoop实现,讲解如何保证设计的简单性(对Context模式的分析) 
                                    -  Email Server代码分析:
 
                                      从面向过程式代码分析设计问题,然后运用简单设计的四个要素对代码进行改进(对Observer模式与Chain 
                                      Of Responsibility模式的探讨、分析与比较) 
                                    -  权限认证系统:
 
                                      通过抽象达到可重用设计,并简化客户端调用,协作合理,形成可扩展的认证机制(对Chain 
                                      Of Responsibility、Template Method模式的探讨与分析) 
                                    | 
                              
                               
                                | 设计匠艺的提炼与修行 | 
                              
                               
                                | 职责的分配原则 | 
                                
                                    - DRY原则
 
                                    - 程序等于数据加逻辑
 
                                    - 高内聚低耦合
 
                                    - 如无必要勿增实体
 
                                    | 
                              
                               
                                | 职责的合理分配 | 
                                 | 
                              
                               
                                | 识别代码的坏味道 | 
                                
                                    - Chain Method
 
                                    - Feature Envy
 
                                    - Shotgun Surgery
 
                                    - Divergent Change
 
                                    - Large Class
 
                                    - Middle Man
 
                                    | 
                              
                               
                                | 职责分配的本质 | 
                                
                                    - 职责驱动设计
 
                                    - 时序图与职责分配
 
                                    - 如何识别对象的职责
 
                                    | 
                              
                               
                                 探索式方法 
                                   | 
                                
                                    -  方法分组
 
                                    - 观察隐藏的方法
 
                                    - 寻找变化点
 
                                    - 寻找方法和内部变量的关系
 
                                    - 寻找主要职责
 
                                     
                                    | 
                              
                               
                                | 架构层级的职责分离 | 
                                
                                    - 识别包图的坏味道
 
                                    - 包的共同复用原则
 
                                    - 如何划分组件或包
 
                                    - 架构质量属性的考虑
 
                                    | 
                              
                               
                                | 职责分离的好处 | 
                                
                                    - 高内聚松耦合
 
                                    - 稳定
 
                                    - 细粒度
 
                                    - 变化可独自演化
 
                                    - 避免类爆炸
 
                                    | 
                              
                               
                                |  案例   | 
                                
                                    -  代码坏味道识别
 
                                      提供多个代码案例,讲解如何识别代码坏味道,并针对代码坏味道进行重构,从而改善代码的设计与结构 
                                    -  Web参数处理:
 
                                      分析如何寻找对象的职责,讲解如何合理分配对象职责,了解职责分配对设计的改善 
                                    -  报表引擎
 
                                      分析如何划分系统模块 
                                      内容:双向依赖与循环依赖和包或模块的重用(对包重用原则的探讨分析) 
                                    -  培训系统
 
                                      培训系统对票处理的方式,分析职责的变化与分离(对Bridge模式的探讨与分析) 
                                    | 
                              
                               
                                | 抽象的本质 | 
                                 | 
                              
                               
                                | 抽象需要遵循的原则 | 
                                 | 
                              
                               
                                | 抽象对设计的改善 | 
                                
                                    - 抽象对设计的简化
 
                                    - 抽象能避免重复
 
                                    - 抽象保证对设计的一致性
 
                                    | 
                              
                               
                                | 扩展式设计 | 
                                
                                    - 分离职责各司其职
 
                                    - 利用抽象统一接口
 
                                    - 引用接口预留空白
 
                                    | 
                              
                               
                                |  案例实践:   | 
                                
                                    -  项目管理系统
 
                                      通过对业务模型的分析,理解抽象对于建模的重要性,从而提高设计的质量,内容包括: 
                                    
                                    -  消息队列
 
                                      通过分析JMS、MSMQ、RabbitMQ和NServiceBus的设计,理解抽象的含义,内容包括:
                                    
                                        -  抽象与接口
 
                                        -  接口隔离原则
 
                                        - 按意图设计
 
                                        - Fa?ade模式
 
                                        -  企业集成模式
 
                                        
                                    -  CIMS基于消息的分布式架构
 
                                      通过对服务的统一抽象,以及对消息处理的职责分配,建立一个协作合理的分布式架构,内容包括:
                                    
                                        -  Command模式
 
                                        - Publisher – Subscriber模式
 
                                        -  Message Bus模式
 
                                        -  Message Translator模式
 
                                        -  Lookup模式
 
                                        -  ORM
 
                                        
                                    -  订单系统
 
                                      进一步理解职责分离与抽象应对变化,逐步改善设计。内容包括: Specification模式,Simple 
                                      Factory模式,Chain Of Responsibility模式 
                                    | 
                              
                               
                                | 场景驱动设计 | 
                              
                               
                                | 场景驱动设计的6W原则 | 
                                
                                    -  Who:角色
 
                                    -  When:时序与协作
 
                                    -  Where:边界与上下文
 
                                    -  Why:价值
 
                                    -  What:功能
 
                                    -  HOW:实现
 
                                    | 
                              
                               
                                | 职责的三层图  | 
                                
                                    -  业务价值:服务层
 
                                    -  业务功能:领域层
 
                                    -  业务实现:基础设施层
 
                                    | 
                              
                               
                                |  场景驱动设计过程  | 
                                
                                    -  识别与分析场景
                                    
                                        - 场景的三个目标层次
 
                                    - 概要目标
 
                                    - 用户目标
 
                                    - 子功能
 
                                        -  场景的角色入口
 
                                        -  场景的边界与上下文
 
                                        -  业务场景的活动流程
 
                                        
                                    -  识别职责
                                    
                                        -  通过业务的三层图建立职责层级
 
                                        -  名词动词法
 
                                        -  模型分类
 
                                        
                                    -  领域建模
                                    
- 构建面向对象的虚拟世界
 
                                    - 识别现实世界:业务目标、业务价值与用户意图
 
                                    - 抽象:概念分类、统一概念、抽象模型、共性分析与可变性分析 
 
                                    - 领域驱动设计 
 
  
                                    | 
                              
                               
                                | 案例实践:多租户服务订阅系统 | 
                                根据一个真实案例,通过对需求进行分析以及编写用户故事,完整而统一地讲解了场景驱动设计过程中,如何识别场景与职责,如何进行领域建模与设计。 
                                    
                                  
                                    -  第一次迭代:租户的服务订阅,内容包括:
                                    
                                        -  合理的职责分配
 
                                        -  领域驱动设计中的实体与聚合根
 
                                        -  时序图
 
                                        - Repository模式与Factory模式辨析
 
                                        
                                    -  第二次迭代:特定用户的服务订阅,内容包括:
                                    
 
                                    - 第三次迭代:需求发生变化,需要引入服务套餐。此时应该如何更改之前的设计,使得变化对设计的影响降到最低。内容包括:
                                    
                                        -  Change Name重构
 
                                        -  Extract Interface重构
 
                                        -  Composite模式 
 
                                        
                                    -  第四次迭代:需要实现如下功能:
                                    
 
                                   
								  内容包括: 
                                      如何合理地运用面向对象设计与设计模式对以上功能进行设计: 
                                     
                                   |