面向对象设计模式大纲

面向对象设计模式大纲
    马上咨询

    张逸  现为深圳大眼科技有限公司的首席架构师,联合创始人  

    先后就职于中兴通讯、惠普GDCC、中软国际、ThoughtWorks等大型中外企业,任职角色为高级软件工程师,架构师,技术总监,首席咨询师。精通包括C#、Java、Ruby、Scala、Python、JavaScript等多种语言,熟练掌握面向对象思想、领域驱动设计、函数式语言、架构、大数据分析、敏捷与过程改进,并致力于大型软件企业的面向服务系统架构设计以及互联网Web系统架构设计。在ThoughtWorks期间,作为一名咨询师,主要为客户提供组织的敏捷转型、过程改进、系统架构监理、领域设计、代码质量提升等咨询工作。目前,作为公司产品的架构师,致力于商业智能产品与大数据分析平台的开发与架构设计。

    课程⽬标

    • 正确理解⾯向对象的设计思想与设计原则,剖析设计模式的本质与思想⽅法
    • 借助真实案例与最佳实践,帮助学员提⾼设计能⼒,从⽽改进开发效率和设计质量
    • 利⽤领域建模、职责驱动、扩展式设计以及代码重构,提⾼软件设计质量,实现卓越软件设计

    培训计划        

    议题⼀:卓越的软件设计思想
    软件设计原则与模式
    • 组合⽅法模式
    • DRY原则
    • 引⼊函数式思想去除重复

    案例分析:

    • 代码阅读:通过运⽤组合⽅法模式思想对代码进⾏重构,进⽽演化为Template Method模式去除重复代码
    • 邮件服务器:分析邮件服务器代码暴露的问题,在可重⽤性、代码可维护性、可扩展性等诸多⽅⾯着⼿,剖析代码坏味道。
    ⾯向对象的设计要素
    • 合理封装的要点
    • 迪⽶特法则
    • 继承与委派的区别
    • 关注点分离原则
    • 多态与抽象

    案例分析:

    • 报表系统之参数处理:了解封装的本质,明确职责的分配以及智能对象的意义,理解“信息专家”模式。
    • 电⼦商务系统之订单处理:对⾏为的封装,职责的委派⽽⾮继承的⽅式,进⽽重构到Command模式。


    议题⼆:合理的职责分配是良好设计的基础
    职责驱动设计
    • 职责的层次:包括职责层次的识别、职责层次与软件架构层次之间的关系、职责与概念、规约与实现
    • 对象的⾓⾊:⾓⾊、职责与协作是三位⼀体的关系,⾓⾊是发起职责的对象,职责则应该是对象之间的协作
    • 模块级的职责分配:如何根据职责对模块进⾏分解,了解⾼内聚、松耦合原则。

    案例分析:

    • 对邮件服务器进⾏分析,通过分辨职责层次,来改善设计。并提出需求变更,从⽽引⼊对观察者模式、策略模式、简单⼯⼚模式、调停者模式与职责链模式的对⽐与分析;
    • EISaaS的模块划分;
    职责分配遵循的原则与模式
    • 分析单⼀职责原则:分析该原则的核⼼思想,关注对象的变化点
    • 专家模式:专家模式的核⼼思想是信息的持有者是操作该信息的专家
    • ⾃治对象:分析了⾃治对象的特征,分别包括:最⼩完备,稳定空间,⾃我履⾏与独⽴进化

    案例分析:

    • 设备状态的迁移:利⽤“⾃治对象”思想逐步引⼊State模式,并结
    • 合实际需求分析标准State模式的问题,从⽽对该模式进⾏改进


    议题三:应对需求的变化,设计可扩展的软件
    如何应对需求的变化
    • 抽象的关键在于寻找多个对象(或⾏为)具有的共同特征,并对特性进⾏泛化
    • 函数式⾮凡的抽象能⼒
    • 识别变化点,对变化进⾏封装
    扩展式设计
    • 扩展式设计的过程

    案例分析:

    • 数据准备框架
    • 保单问卷调查:讲解如何从坏设计逐步重构到Visitor模式;
    分层架构的思考

    分析经典的三层架构模式与DDD推荐的四层架构模式,结合项⽬实践与依赖倒置原则,遵循⾯向对象设计原则分析分层架构模式。


    议题四:设计模式的本质
    设计模式的境界
    • 初学者:拔剑四顾⼼茫然,不知道该如何运⽤设计模式
    • 熟练者:过尤不及,为模式⽽模式,常常导致设计过度
    • 精通者:⽆招胜有招,掌握了设计模式的本质,能够恰如其分地运⽤设计模式
    设计的常见问题
    • 理论与设计⽆法有效结合
    • 过度运⽤设计模式
    • 急于编码,没有有效的设计
    设计模式的本质
    • 合理的职责分配是基础
    • 封装并抽象变化是核⼼
    • 合理运⽤⾯向对象设计思想
    • 合理运⽤⾯向对象设计原则

    案例分析: JUnit框架

    通过全⾯剖析JUnit测试框架,了解⼤师的设计艺术,展现JUnit是如何保证框架的简单、可扩展、可重⽤。内容包括:

    • JUnit的组件结构
    • JUnit的Test Case设计
    • 如何⽀持Test Result显⽰的扩展
    • JUnit中如何通过复杂的设计来简化⽤户的使⽤