自20世纪80年代末模式思想引入软件设计领域以来,软件模式已经从新颖的概念发展为各种应用程序的基础,程序设计中离开设计模式几乎不可想象.
软件设计人员在学习了大量的设计模式和面向对象原则之后,仍然开发难以维护,难以扩展, 难以复用的程序.
学习模式之后,不能正确的应用, 和滥用模式(过度设计)是目前面临的2大难题.该课程是针对这2个问题而开设的.
本课程注重实战,与其他的仍然沿用20年前的模式目录方式逐一讲述每一模式的结构,目的,适应性等的培训和图书不同.
它不单单以讲述模式本身为目的, 而是借助真实项目案例,展示如何在实际开发之中正确的选择和运用模式,同时还介绍了重构和面向对象基本原理.
本课程以实战案例为主线,不尚空谈. 主要从2种视角进行:.
第一是从重构的角度入手, 首先安排具体问题,让学员根据自己的理解和方式进行设计(可以预先应用模式),
然后大家一起对设计结果进行分析,指出不”和谐”的地方,通过逐步重构的方式运用模式. 而不是把最完美的答案一下子放到学员的面前,让你佩服.每一个案例都有应用模式前的设计,应用之后的设计.并且分析为什么运用,而不是过度设计.
并且可以安排学员自己的项目代码或者设计作为课程案例进行分析和重构.
第二是从阅读名人经典代码的角度入手, 我们看看世界级的OO大师他们的代码是怎样运用设计模式,
类似我们的欣赏唐诗宋词一样.首先思考面临同样的问题, 我们会如何设计,然而对比那些大师们又是如何设计的,
比对设计结果分析到底有多少差别,从差距之中,我们学习和提高技能.
|
培训目标:
|
本课程主要包含以下几个方面的内容:
- 实战案例分析:几个现实的项目案例,分析如何进行设计,设计支持如何考虑的,
然后如何通过逐步重构进行设计的, 而不是开始就给你一个完美的结果, 使你佩服.
- 大师的经典作品的鉴赏:分析经典的世界大师的作品, 展示这些超级大牛人的设计
- 重构技术:软件并不是在一开始就可以设计的完美无缺的,因此可以通过先进行实际的开发,然后通过对代码不断的重构进行改善(即所谓的OO),重构是实现优秀设计的一种重要的手段,设计模式往往是重构的目标.
- 设计模式:结合案例进行分析,为什么使用设计模式,使用之后的效果是怎样的,
而不是靠所谓的艺术感而进行设计的
- 面向对象的设计原则:通过案例进行分析,10多个面向对象设计原则是如何真正应用在项目之中的.
- 常见设计的坏症状: 介绍目前我们在日常开发之中的常见的垃圾设计的经典坏症状,以及如何进行重构.
- 持续集成和代码评审:目前业界的代码质量检查工具(PMD, CheckStlye,
FindBugs)和持续集成技术.
|
|
培训内容:
|
软件设计模式概述 |
1. 面向对象设计的本质和职责分配
2. 面向过程设计功能分解
3. 面向对象基本思想(继承,封装,多态,委托)
4. 为什么学习设计模式和分析为什么真正需要OO, 经过重构成模式后,为我们带来那些好处(系统灵活性) |
案例- Log管理子系统的设计 |
1. 介绍项目需求情况,进行设计
2. 通过重构逐步实现设计模式
3. 本案例学习对象基本思想(继承, 多态)
4. 本案例学习设计模式基本原则(面向接口编程和优先使用委托)
5. 分析通过应用设计模式,带来了哪些好处(表现在软件的灵活性)
6. 学习设计模式(Factory Method, Template Method,
Composite, Chain of Responsibility ) |
拙劣设计的坏症状 |
1. 拙劣设计概述
2. 优秀设计的评判标准
3. 拙劣设计症状分析----低级篇
4. 拙劣设计症状分析----中级篇
5. 拙劣设计症状分析----高级篇
6. 可以根据客户现在的项目作为案例进行现场分析,找出相应的代码坏味道 |
Socket Server framework框架设计 |
1. 介绍项目需求情况,进行设计
2. framework概述和框架vs.类库
3. 框架的实现方式
4. 框架的开发过程
5. 框架的开发技术(通用点vs.扩展点/设计模式/白盒vs黑盒vs灰盒)
6. 通过重构逐步实现设计模式
7. 本案例学习设计模式基本原则(发现变化,然后封装) |
重构技术 |
1. 重构概述
2. 重构到设计模式(常见的不是OO的症状)
3. 案例分析, 根据课程介绍的坏症状,进行重构到对象 |
设计模式原则与策略 |
1. 设计模式基本原则
2. 封装变化的原则
3. 共性和可变性分析原理
4. 分析矩阵
5. 共性和可变性分析与设计模式 |
案例- DB Connection Pool系统 |
1. 介绍项目需求情况,进行设计
2. 展示需求变更对设计的影响
3. 通过重构逐步实现设计的可维护, 可重用
4. 学习设计模式( Observer Proxy, Chain of Responsibility
) |
案例- Cache系统设计 |
1. cache系统是经常使用的, 通过分析cache系统的设计学习设计模式的应用
2. 学习怎样设计模块化系统
3. 学习定义模块接口和相关原则
4. 系统可扩展性,如何通过模式实现
5. 学习设计模式的应用(Observer/Proxy/Singleton/Strategy等) |
案例- Junit系统设计鉴赏 |
1. JUnit是一个优秀的Java单元测试框架,由两位世界级软件大师Erich
Gamma 和 Kent Beck共同开发完成。由于JUnit是两位世界级大师的作品,所以值得鉴赏.
2. 本案例将介绍在开发JUnit的过程中是怎样应用设计模式的。
3. 介绍面向对象的基本原则的应用(开闭原则/里氏代换原则/依赖倒转原则/迪米特法则)
学习设计模式(Command/Composite/Template Method/
Adapter/Observer/Decorate ) |
案例- 鉴赏薪水支付管理系统 |
1. 本案例是著名OO大师 Robert C.Martin的作品
2. 本案例原C++版本, 讲师调整为基于J2ee Web应用系统, 并且进行了部分优化,
基于J2EE框架进行构建
3. 从最初的需求进行分析,到系统的设计,最后到编码实现该案例,全程进行面向对象的分析,建模,设计和最终的开发实现.
4. 通过案例学习(Command , ActiveObject,Strategy,
Fa?ade, Mediator,Singleton,NullObject模式)
5. 通过案例学习常见的错误设计
6. 通过案例学习重构到模式 |
案例- 鉴赏其他大师经典作品(根据时间待定) |
1. Martin Flow的重构案例-MOVIE
2. Ward Cunningham- Fit测试框架
3. Joshua Kerievsky HtmlParse案例(部分内容) |
|
|
讲师资质:
|
-
UML软件工程组织技术专家。
-
火龙果软件工程技术中心 技术顾问、资深讲师。
-
从事过10年以上相关实际工作,曾在著名IT企业就职,具备丰富的实践经验。
-
在多个大中型项目中成功实施了相关的工程技术实践,具备真实有效的能力,而不仅仅是“名气”。
-
具备深厚的理论功底,进行过专业系统化研究与学习。
-
丰富的授课经验,为多家大型企业授课,获得了客户的高度评价。
-
丰富的咨询经验,为多家企业客户咨询。
-
能够结合学员的需求,有效地讲授理论和实践经验,并带领学员进行具体的实践演练。
|
|
|