4006-998-758
3000+课程任你选择
软件设计最佳实践和案例分析V1
研发学院 软件设计
刘捷

前IBM中国研发中心,BEA中国研发中心,oracle中国研发中心,阿里云,多家互联网研发中心咨询顾问。曾任软件开发工程师,高级技术专家,首席架构师等。主要负责客户项目的架构设计和项目开发,架构重构,技术支持,AI2.0时代软件研发,AI赋能研发转型,基于chatGPT大模型的开发咨询。保证项目的成功实施。参加过全省、全国多个大型的计算机应用项目。擅长AI2.0时代研发,软件架构设计与评审、高质量代码体系、单元测试、设计模式、重构(Refactor)、演进式设计(Evolutionary Design)以及降低代码的复杂度(Cyclomatic Complexity)。通过重构、重写,将代码量大幅度缩减,并且提高可读性、可扩展性、可变更性,从而大幅度降低开发成本。他热爱学习、思考与分享,曾翻译过多本技术书籍,在网站上发表过各种文章,并曾多次在技术会议和社区活动上发表演讲。最近几年带队完成了数十个AI项目,内容不仅包括深度学习、机器学习、数据挖掘等具体技术要点,也包括AI的整体发展、现状、应用、商业价值、未来方向等,涵盖内容非常丰富。完成多个深度学习实践项目,广泛应用于医疗、交通、农业、气象、银行、电信等多个领域。

查看老师详情
课程内容


课程大纲


课程主题

课程内容

第一单元  软件设计目标-灵活性/可插入性/可扩展

内容一:拥抱需求变化---设计师必须面对的

1. 不管你在何处工作,构建些什么,用何种语言,在软件开发上,一直最痛苦的事情是什么?  或者什么是你开发之中最讨厌的问题是什么?---需求变更

2. 杀死一个程序员不需要刀,只要需求变3次就好了!!

3. 软件不断变更法则:真实世界中使用的程序必须进行变更,否则它在环境中的作用就会越来越小.

4. 需求改变的态度-拒绝变化无用,积极心态面对变化

5. 而敏捷对预测未来的方式是全新的,强调通过提高团队的能力、设计的弹性和流程的灵活性来适应变化。这种思路对软件开发也是很大的冲击。

6. 软件设计的目标-灵活性,因为增加一个功能特性的成本并不单单是为这些功能编码所花费时间的成本,还应该包括特性扩展的障碍成本。现在我们遇到的最大障碍是现在系统的混乱,难以扩展。

7. 案例分析—通过案例分析需要变化的根源,以及各种情况

第二单元  如何设计才能实现灵活性

内容一:软件设计的灵活性

1. 什么是好的设计和衡量的手段,世界大师的观点(Robert C Martin , Peter Code,` James Shor)

2. 一个好的系统设计应该有如下的性质:可扩展性、灵活性、可插入性。-Peter Code [CODE99]

3. 可扩展性(Extensibility)容易添加新的功能. 结合案例,通过那些手段如何实现该目标

4. 灵活性(Flexibility)代码修改平稳地发生. 结合案例,通过那些手段如何实现该目标

5. 可插入性(Pluggability)容易将一个类抽出去,同时将另一个有同样接口的类加入进来. 结合案例,通过那些手段如何实现该目标

6. 分析真实项目,如何做的详细设计,给我们哪些启示,我们可以学习到什么

7. 分析我们在项目之中是那些原因导致了没有实现这些目标.

 

内容二:案例- 某项目认证管理模块设计案例

1. 某省移动项目,必须考虑支持多种设备厂商

2. 初始设计的问题分析

3. 应用何种模式解决问题

第三单元  灵活性设计基本原则/模式/实践

内容一:灵活设计的基本原则

1. 发现和封装变化的原则

2. 找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码交织在一起.

3. 抽象稳定接口(抽象类),针对接口编程,而不是针对实现编程

4. 分离变化维度,单一职责原则

5. 动态绑定还是静态绑定,多用组合,少用继承

6. 创建与使用分离,创建有变化也要封装

7. 结合多个案例项目进行分析,怎样发现和封装变化,如何通过具体的手段来进行适应这些变化

 

内容二:灵活性设计的最佳实践

1. 多态(polymorphism)和针对接口的编程

2. 数据驱动(Data-Driven Design)

3. 元数据驱动设计

4. 反射驱动(Meta-data or Reflective  )

5. 解释器驱动

6. 脚本引擎技术

7. 结合多个案例项目进行分析,怎样发现和封装变化,如何通过具体的手段来进行适应这些变化

 

内容三:案例---结合案例分析软件设计原则/模式

1. 某项目系统的演变,以及设计原则的应用效果,通过项目的演化分析这些核心设计原则的应用场景

2. 通过一个大型实例,传递Clean Code,设计原则等,包括DIY原则,Tell Don't Ask原则,Soild原则(Single Responsibility原则,Open Closed原则,Liskov Substitution原则,Interface   Segregation原则,Dependency Inversion原则)。

3. 案例分析-设计原则的应用

第四单元 软件设计腐化

内容一:设计腐化与技术债务

1. 设计腐化的途经

2. 总结常见的设计腐化途经,原因及克服方法

3. 技术债务概述

4. 软件债务对软件系统的危害

5. 软件债务对软件开发人员的危害

6. 技术债务与破窗效应

7. 技术债务的解决之道

8. 通过案例分析,如何解决技术债务

 

内容二:技术债务监控

1. 软件腐化监控

2. 国际著名某电信研发中心监控工具

 

内容三:软件腐化与希波克拉底宣言

1. First, Do No Harm.  首先,做到不伤害!— Hippocrates  希波克拉底

2. Proxy代理模式与软件修改方案

3. decorator模式与遗留软件修改

4. 案例分析—如果维护遗留系统而不是遗留系统变烂

 

内容四:案例- 演示系统软件腐化的过程

1. 某电信研发中心项目系统

2. 初始设计的问题分析

3. 故障单管理系统

4. 流程审核的改变

5. 故障单类型的增加

6. 传统设计的问题与如何通过代码进行演化

7. 通过该案例分析,对比有时是因为人员的设计技能导致加速软件的腐化

8. 通过该案例分析,讲师加入项目之后,将进行哪些重构

第五单元  演化式设计

内容一:演化式设计(Emergent   Design)

1. 演化式设计   Emergent Design

2. 演化设计--重构带来了一种新的构设计方法,称为反思性设计(Reflective   Design)。除了创建一种设计并用代码实现它之外,你现在还可以分析已有代码的设计并改善它。寻求改进的一种最好的方法是通过代码嗅觉(code smells).

3. 在详细设计之中,如何对发现问题的设计进行重构

4. 很多公司习惯做大量的预习设计,这被证明是风险很高的做法。好的架构和设计是演进出来的,通过这个环节了解演进式设计的方法,包括演进式设计的方法、工具、模式等内容。包括如何计划重构活动以实现架构演进,如何从设计方法、技术债务、复杂性等角度看架构演进

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

 

内容二:设计的新认识—源代码就是设计

1. 传统代码认识的误区

2. 设计与施工分离的误区

3. 源代码就是设计

4. 分析真实项目代码, 认识代码的重要性.垃圾代码的危害

 

内容三:拙劣设计的坏症状和重构

1. 拙劣设计概述

2. 拙劣设计常见症状以及如何发现和治疗

3. 在详细设计之中,如何对发现问题的设计进行重构

4. 代码坏味道概述

5. 常见的重构设计方式

6. 重构到设计模式

7. 案例分析-对实际项目的案例进行代码分析和重构

8. 案例分析,   根据课程介绍的坏症状,进行实际项目重构的设计

 

内容四:案例---某零售项目系统分析

1. 零售租赁管理系统

2. 第一版本设计和评审

3. 故障单类型的增加

4. 传统设计的问题与如何通过代码进行演化

第六单元 软件设计复用性

内容一:软件复用设计

1. 在详细设计之中,分析发现共同的行为的抽象和共同的机制来实现

2. 软件通用服务组件的设计

3. 复用已有的东西,比自己编写更容易。如果不容易,大家就不会去复用。

4. 软件复用的管理策略

5. 对象级别复用

6. 模块级别复用

7. 架构层次复用

8. 软件复用之道

9. 案例分析复用的设计之道

 

内容二:某项目案例-异常处理框架设计

1. 系统的异常处理策略

2. 设计一个通用异常处理子系统

3. 分析如何应用设计模式在该案例

4. 分析通过应用设计模式,带来了哪些好处(表现在软件的灵活性)

5. 分析如何转换为Framework

典型案例分析:该框架已经在多个大型项目之中应用

第七单元 AI辅助软件设计

第一部分: AI大模型辅助设计师提高研发效能

1. AI大模型   辅助进行前端设计-基于前端框架设计

2. AI大模型   辅助进行详细设计

3. AI大模型   辅助领域驱动设计

4. AI大模型   辅助灵活性设计-设计原则与模式

5. AI大模型辅助进行数据库设计(概念模型,逻辑模型,物理模型)

6. AI大模型支持UML建模

7. 使用AI大模型辅助绘制类图

8. 使用AI大模型辅助绘制时序图

9. AI大模型   辅助完成设计文档

10. 案例分析


返回上一级