张逸 现為(wèi)深圳大眼科(kē)技有(yǒu)限公司的首席架构师,联合创始人
先后就职于中兴通讯、惠普GDCC、中软國(guó)际、ThoughtWorks等大型中外企业,任职角色為(wèi)高级软件工程师,架构师,技术总监,首席咨询师。精通包括C#、Java、Ruby、Scala、Python、JavaScript等多(duō)种语言,熟练掌握面向对象思想、领域驱动设计、函数式语言、架构、大数据分(fēn)析、敏捷与过程改进,并致力于大型软件企业的面向服務(wù)系统架构设计以及互联网Web系统架构设计。在ThoughtWorks期间,作為(wèi)一名咨询师,主要為(wèi)客户提供组织的敏捷转型、过程改进、系统架构监理(lǐ)、领域设计、代码质量提升等咨询工作。目前,作為(wèi)公司产品的架构师,致力于商(shāng)业智能(néng)产品与大数据分(fēn)析平台的开发与架构设计。
课程⽬标
- 正确理(lǐ)解⾯向对象的设计思想与设计原则,剖析设计模式的本质与思想⽅法
- 借助真实案例与最佳实践,帮助學(xué)员提⾼设计能(néng)⼒,从⽽改进开发效率和设计质量
- 利⽤领域建模、职责驱动、扩展式设计以及代码重构,提⾼软件设计质量,实现卓越软件设计
培训计划
议题⼀:卓越的软件设计思想 |
软件设计原则与模式 |
案例分(fēn)析: - 代码阅读:通过运⽤组合⽅法模式思想对代码进⾏重构,进⽽演化為(wèi)Template Method模式去除重复代码
- 邮件服務(wù)器:分(fēn)析邮件服務(wù)器代码暴露的问题,在可(kě)重⽤性、代码可(kě)维护性、可(kě)扩展性等诸多(duō)⽅⾯着⼿,剖析代码坏味道。
|
⾯向对象的设计要素 |
- 合理(lǐ)封装的要点
- 迪⽶特法则
- 继承与委派的區(qū)别
- 关注点分(fēn)离原则
- 多(duō)态与抽象
案例分(fēn)析: - 报表系统之参数处理(lǐ):了解封装的本质,明确职责的分(fēn)配以及智能(néng)对象的意义,理(lǐ)解“信息专家”模式。
- 電(diàn)⼦商(shāng)務(wù)系统之订单处理(lǐ):对⾏為(wèi)的封装,职责的委派⽽⾮继承的⽅式,进⽽重构到Command模式。
|
议题⼆:合理(lǐ)的职责分(fēn)配是良好设计的基础 |
职责驱动设计 |
- 职责的层次:包括职责层次的识别、职责层次与软件架构层次之间的关系、职责与概念、规约与实现
- 对象的⾓⾊:⾓⾊、职责与协作是三位⼀體(tǐ)的关系,⾓⾊是发起职责的对象,职责则应该是对象之间的协作
- 模块级的职责分(fēn)配:如何根据职责对模块进⾏分(fēn)解,了解⾼内聚、松耦合原则。
案例分(fēn)析: - 对邮件服務(wù)器进⾏分(fēn)析,通过分(fēn)辨职责层次,来改善设计。并提出需求变更,从⽽引⼊对观察者模式、策略模式、简单⼯⼚模式、调停者模式与职责链模式的对⽐与分(fēn)析;
- EISaaS的模块划分(fēn);
|
职责分(fēn)配遵循的原则与模式 |
- 分(fēn)析单⼀职责原则:分(fēn)析该原则的核⼼思想,关注对象的变化点
- 专家模式:专家模式的核⼼思想是信息的持有(yǒu)者是操作该信息的专家
- ⾃治对象:分(fēn)析了⾃治对象的特征,分(fēn)别包括:最⼩完备,稳定空间,⾃我履⾏与独⽴进化
案例分(fēn)析: - 设备状态的迁移:利⽤“⾃治对象”思想逐步引⼊State模式,并结
- 合实际需求分(fēn)析标准State模式的问题,从⽽对该模式进⾏改进
|
议题三:应对需求的变化,设计可(kě)扩展的软件 |
如何应对需求的变化 |
- 抽象的关键在于寻找多(duō)个对象(或⾏為(wèi))具有(yǒu)的共同特征,并对特性进⾏泛化
- 函数式⾮凡的抽象能(néng)⼒
- 识别变化点,对变化进⾏封装
|
扩展式设计 |
案例分(fēn)析: - 数据准备框架
- 保单问卷调查:讲解如何从坏设计逐步重构到Visitor模式;
|
分(fēn)层架构的思考 |
分(fēn)析经典的三层架构模式与DDD推荐的四层架构模式,结合项⽬实践与依赖倒置原则,遵循⾯向对象设计原则分(fēn)析分(fēn)层架构模式。 |
议题四:设计模式的本质 |
设计模式的境界 |
- 初學(xué)者:拔剑四顾⼼茫然,不知道该如何运⽤设计模式
- 熟练者:过尤不及,為(wèi)模式⽽模式,常常导致设计过度
- 精通者:⽆招胜有(yǒu)招,掌握了设计模式的本质,能(néng)够恰如其分(fēn)地运⽤设计模式
|
设计的常见问题 |
- 理(lǐ)论与设计⽆法有(yǒu)效结合
- 过度运⽤设计模式
- 急于编码,没有(yǒu)有(yǒu)效的设计
|
设计模式的本质 |
- 合理(lǐ)的职责分(fēn)配是基础
- 封装并抽象变化是核⼼
- 合理(lǐ)运⽤⾯向对象设计思想
- 合理(lǐ)运⽤⾯向对象设计原则
案例分(fēn)析: JUnit框架 通过全⾯剖析JUnit测试框架,了解⼤师的设计艺术,展现JUnit是如何保证框架的简单、可(kě)扩展、可(kě)重⽤。内容包括: - JUnit的组件结构
- JUnit的Test Case设计
- 如何⽀持Test Result显⽰的扩展
- JUnit中如何通过复杂的设计来简化⽤户的使⽤
|