我要关注TOP
专注于软件研发中心的快速成长
首页 | 指南 | 快捷通道:我是

您关注的讲师:

暂无浏览...

我的足迹: 暂无浏览历史记录...
软件设计最佳实践和案例分析

演讲嘉宾刘捷 - 曾任职BEA(中国)资深软件架构师

课程费用:5800 元/人

课程简介:
大泥球,是指杂乱无章、错综复杂、邋遢不堪、随意拼贴的大堆代码。这些年来,为了对付大泥球,我们看到了很多设计原则和模式,比如SOLID、GRASP 和KISS。然而,实际情形却没多大发化,“大泥球”看起来仍然是设计软件的最常见方法。
大泥球的设计,有时是很多设计师”敏捷”的结果,自称"简单设计",其实根本就是"零设计". 主要随着以下原因,泥球越滚越大:
- 一次性代码,本来是演示代码,谁知道,却变成了产品的正式代码
- 碎片式增长,需求每天一点一点增加
- 为了让软件不出问题,我们根本不敢重构,该坏了怎么办
- Copy/paste 有问题的代码被复制到很多地方,不断蔓延
这种现象也是国内技术氛围浮躁的表现, 一般的程序员和设计师要么:
- 对于任何优秀软件设计的原则/模式完全没有概念
- 对设计原则/模式理解存在严重问题
我们大多在一线的设计师,不了解设计的精髓,但是可惜当他知道一些原则和模式后,却已经变成了管理者(项目经理,产品经理等管理岗位),不在从事设计的工作。这真是业界悲哀的事情. 正如一位大型电信软件公司技术总监所说,别看我们有1万名软件工程师,可惜我们的技术积累却不到3年。
但是这些大泥球的危害却十分严重。因为根据业界的统计数据显示,在一个软件系统从开始研发到最终消亡的整个生命周期过程中,前期的总成本仅占总代价的20~40%。绝大部分的工作重点还需要花费系统正式上线后的维护和系统的升级上。但是我们往往忽略后期的系统可维护性。同时我们对于软件可复用性重视度也不够,导致我们重复的开发,满足客户甲需求的系统,到了另外一个客户哪怕是一些简单的功能差别,我们往往必须需要重复的”烟筒式”重复建造一个新的系统,这是目前国内大多数软件企业师面临的难题...
如何解决软件设计的可维护性和可复用性,这是本课程的设置的目的。设计过程是实现这些目标中重要的保证,灵活且具有可插入性的软件设计是软件项目成功的重要保证。本课程总结了多年基于国内项目开发的实战经验,让学员体会在软件系统设计过程中如何解决以上2个难题。

课程体系结构:

课程体系结构
课程主题
内容
项目案例
6个真实项目案例
设计过程
分析如何进行设计, 权衡过程
设计价值观
不仅仅实现功能,关注设计质量属性(可维护性和复用)
设计原则
软件设计的基本原则
设计模式
常见架构/设计模式
设计建模
敏捷建模
设计最佳实践
设计的最佳实践




课程特色:
一般的书籍和培训,往往是介绍设计过程,设计原则和模式,之后再给出几个简单的在理想情况下的应用。要么是拿出最终设计来讲解,然后告诉他的设计的是多么灵活,多么的好。但是当你课程结束后,回到工作之中却发现情况是完全的不一样,这时你只有束手无策。本课程注重实战,采用案例贯穿方式完成讲解理论,让学员体验软件设计的思索,权衡,折中,选择的痛苦过程,首先提出真实项目的需求,然后学员开始动手设计,最终讲师和你一起思索,一起探讨,一起权衡,一起验证。本课程通过案例阐述设计价值观,设计原则,模式以及建模和最佳实践。


学员学习本课程应具备下列基础知识:
1)至少2年以上开发经验,经历过频繁需求变更或者系统重复开发的折磨
2) 熟悉Java/C#/C++任意一种面向对象语言或者具备面向对象编程基本概念
3) 一般软件企业的详细设计人员和初级架构师,以及资深程序员
对于怀有设计疑问和问题需要梳理解答的团队和个人,效果最佳。

主题

内容
优秀软件设计(可维护性)

内容一:什么是好的设计

- 什么是好的软件详细设计和衡量的手段
- 世界大师的观点(Robert C Martin , Peter Code,` James Shor)
- 我们现实项目的情况,随时需求的变化,我们自以为豪的设计,都逐渐变烂,变成纠缠不清的代码浆糊
- 可扩展性(Extensibility)容易添加新的功能。结合案例,通过那些手段如何实现该目标
- 灵活性(Flexibility)代码修改平稳地发生。结合案例,通过那些手段如何实现该目标
- 可插入性(Pluggability)容易将一个类抽出去,同时将另一个有同样接口的类加入进来。结合案例,通过那些手段如何实现该目标
- 分析真实项目,如何设计,给我们哪些启示,我们可以学习到什么
- 分析我们在项目之中是那些原因导致了没有实现这些目标

内容二:优秀软件设计如何实现

- 优秀设计的精髓-开闭原则和变化封装
- 可扩展性(Extensibility)/灵活性(Flexibility)/可插入性(Pluggability)的实现基本原则
- 发现和封装变化的原则
- 共性和可变性分析原理
- 结合多个案例项目进行分析,怎样发现和封装变化,如何通过具体的手段来进行适应这些变化

内容三:案例- 某省电信项目案例

- 某省电信项目,必须考虑支持多种设备
- 初始设计的问题分析
- 如何实现灵活性/可扩展性
- 设计过程和误区的分析

内容四:案例- 某省电力项目案例

- 某省电力项目,需求的演变过程对设计的影响
- 初始设计的问题分析
- 如何实现发现变化,封装变化,隔离变化

拙劣设计和重构技术

内容一:软件不可预测性

- 软件需求的不可预测性
- 预先设计的局限性
- 传统瀑布型设计的问题

案例分析,根据课程介绍的坏症状,进行重构合理的设计

内容二:敏捷设计思想---演化式设计

- 敏捷设计思想--强调通过提高团队的能力、设计的弹性和流程的灵活性来适应变化。
- 演化设计--重构带来了一种新的构设计方法,称为反思性设计(Reflective Design)。除了创建一种设计并用代码实现它之外,你现在还可以分析已有代码的设计并改善它。寻求改进的一种最好的方法是通过代码嗅觉(code smells)。
- 在详细设计之中,如何对发现问题的设计进行重构
案例分析, 根据课程介绍的坏症状,进行重构合理的设计

内容三:案例---某互联网项目系统

- 申请单管理系统
- 流程审核的改变
- 申请单类型的增加
传统设计的问题与如何通过代码进行演化

内容四:拙劣设计的坏症状和代码坏味道

- 拙劣设计概述
- 拙劣设计常见症状以及如何发现和治疗
- 在详细设计之中,如何对发现问题的设计进行重构
- 代码坏味道概述
案例分析, 根据课程介绍的坏症状,进行实际项目重构的设计

内容五 :重构到模式

- 重构概述
- 常见的重构方式
- 重构实现手段
- 重构到设计模式
- 在详细设计之中,如何对发现代码问题
案例分析-对实际项目的案例进行代码分析和重构

内容六:案例---某金融项目系统

- 缓存系统设计
- 缓存系统的原始设计问题以及原因
- 如何发现重构点
- 如何重构
- 如何保证大规模重构的正确性

软件复用设计

内容一:软件可复用性

- 软件可复用性设计概述
- 在设计之中,分析发现共同的行为的抽象和共同的机制来实现
- 系统通用服务组件的设计
- 系统的配置管理机制的设计与实现
- 系统的Cache缓存机制的设计与实现
- 系统的异常处理机制的设计与实现
- 其他常见的通用机制的设计和分析

案例分析-对某电信项目的案例进行如何复用

内容二:应用框架(Application framework)设计

- 应用框架和软件设计复用
- 框架vs.类库的不同
- 在软件详细设计时应用框架
- 如何构建自己项目的应用框架

典型案例分析:某电信项目框架的设计和实现分析

内容三:案例---某税务项目系统

- 异常系统系统设计
- 异常系统的原始设计问题以及原因
- 如何发现通用点
- 如何设计框架—分析通用点和扩展点
- 如何设计接口,方便扩展(使用模板方法)
- 框架的调整策略

设计新视角-什么才是真正的敏捷设计

内容一:代码新思维----源代码就是设计

- 传统代码认识的误区
- 设计与施工分离的误区
- 源代码就是设计
- 破窗效应和技术债务
分析真实项目代码, 认识代码的重要性.垃圾代码的危害

内容二:敏捷建模—如何真正使用UML

- UML在详细设计阶段的应用方式(4种方式)
- UML类图和顺序图,在详细设计中,如何协作进行职责分配
- UML图的是否保留和废弃
结合多个案例项目进行分析,如何正确应用UML建模,以避免过度建模以及怎样保留UML建模成果和代码的同步问题

软件设计原则和模式

内容一:软件设计模式思想和案例分析

- 设计模式概述
- 设计模式的本质论
- 设计模式如何适应变化和封装
- 为什么学习设计模式后却不能应用到真实项目?
- 滥用模式和过度设计,我们如何真正应用?
- 解决开发人员只停留在对设计模式的理论认识上,无法将设计模式思想有效地应用在软件设计过程中

结合项目实例,分析设计模式在软件详细设计时期的实际应用
结合案例进行分析, 应用设计模式之前和应用之后的对比, 从中发现这些设计模式是否真正为设计带来好处

内容二:软件设计原则和案例分析

- 设计原则概述
- 面向对象的设计基本原则
- 通用职责原则(GRASP)

结合项目实例,分析哪些设计违反了这些原则,以及如何重构

内容三:某项目案例的设计分析

项目背景
- 项目的详细设计
- 分析哪些是过度设计,滥用了设计模式
- 分析哪些设计违反了这些基本设计原则,以及如何重构
- 如何重构到模式

我读经典-向大师学习,学习什么是真正美的的设计

内容一:我读经典-设计之美

- 世界级软件大师经典的作品鉴赏
- 从大师学习到什么?
- 通过案例分析,我们和他们的差距

内容二:著名开源项目设计分析 –向大师学习

- JUNIT设计原则/模式
- Fit设计之美
- Log4J设计的思考

内容三:我读经典-代码之美
- 整洁代码之道,通过阅读代码我们学习到什么?

内容四:著名开源项目设计分析 –什么是整洁代码
- FitNess设计之美

软件设计质量属性

内容一:软件的质量属性对设计的影响

- 什么是系统质量属性,如何进行定义质量属性
- 详细设计需要考虑的质量属性
- 可维护性、可扩展性、可靠性、互操作性,系统性能,安全性定义和如何测试,以及实现策略
- 系统质量属性和设计原则和模式的关系
- 结合多个案例进行分析,通过那些手段来实现这些质量属性

内容二:案例某系统系统质量属性实现分析

- 结合某实际案例进行分析,通过那些手段来实现这些质量属性
- 系统设计的一些技巧

大型项目设计案例分析

内容一:大型项目案例分析----思考如何做设计的

案例分析
某邮政项目的基于规则引擎的应用
面向方面的编程范式和AOP技术

案例分析
某金融项目的事务管理的设计
的简单介绍和案例场景,设计的决策

案例分析
某政府项目的设计
的简单介绍和案例场景,如何做设计

技术总监 | 架构师 | 项目经理 | 测试经理 | 程序开发 | 团队管理 | 架构设计 | 开发管理 | 测试管理 | 技术实现 | 产品创新 | 移动开发

销售服务热线 400 812 8020 - CopyRight © 2008-2010 麦思博有限公司

京ICP备09001521号