软件设计

1 软件设计目标——灵活性/可插入性/可扩展性

1.不管你在何处工作,构建些什么,用何种语言,在软件开发上,一直最痛苦的事情是什么?或者什么是你开发之中最讨厌的问题?——需求变更
2.杀死一个程序员不需要刀,只要需求变3次就好
3.软件不断变更法则:真实世界中使用的程序必须进行变更,否则它在环境中的作用就会越来越小
4.需求改变的态度——拒绝变化无用,积极心态面对变化
5.而敏捷对预测未来的方式是全新的,强调通过提高团队的能力、设计的弹性和流程的灵活性来适应变化。这种思路对软件开发也是很大的冲击。
6.软件设计的目标——灵活性,因为增加一个功能特性的成本并不单单是为这些功能编码所花费时间的成本,还应该包括特性扩展的障碍成本。现在我们遇到的最大障碍是现在的系统混乱,难以扩展。
7.案例分析——通过案例分析需要变化的根源,以及各种情况

2 如何设计才能实现灵活性

2.1 软件设计的灵活性

1.什么是好的设计和衡量的手段,世界大师的观点(Robert C. Martin, Peter Code, James Shor)
2.一个好的系统设计应该有如下的性质:可扩展性、灵活性、可插入性——Peter Code [CODE99]
3.可扩展性(Extensibility)容易添加新的功能。结合案例,通过哪些手段如何实现该目标
4.灵活性(Flexibility)代码修改平稳地发送。结合案例,通过哪些手段如何实现该目标
5.可插入性(Pluggability)容易将一个雷抽出去,同时将另一个有同样接口的类加入进来,结合案例,通过哪些手段实现该目标
6.分析真实项目,如何做详细设计,给我们哪些启示,我们可以学到什么
7.分析我们项目之中,是哪些原因导致了没有实现这些目标

2.2 案例——某项目认证管理模块设计案例

1.某省移动项目,必须考虑支持多种设备厂商
2.初始设计的问题分析
3.应用何种模式解决问题

3 灵活性设计基本原则/模式/实践

3.1 灵活设计的基本原则

1.发现和封装变化的原则
2.找出应用中可能需要变化之处,把它们独立出来,不要和那些需要变化的代码交织在一起
3.抽象稳定接口(抽象类),针对接口编程,而不是针对实现编程
4.分离变化维度,单一职责原则
5.动态绑定还是静态绑定,多用组合,少用继承
6.创建与使用分离,创建有变化也要封装
7.结合多个案例项目进行分析,怎样发现和封装变化,如何通过具体的手段来适应这些变化

3.2 灵活性设计的最佳实践

1.多态(polymorphism)和针对接口编程
2.数据驱动(Data-Driven Design)
3.元数据驱动设计
4.反射驱动(Meta-data or Reflective)
5.解释器驱动
6.脚本引擎技术
7.结合多个案例项目进行分析,怎样发现和封装变化,如何通过具体的手段来适应这些变化

3.3 案例——结合案例分析软件设计原则/模式

1.某项目系统的演变,以及设计原则的应用效果,通过项目的演化,分析这些核心设计原则的应用场景
2.通过一个大型实例,传递Clean Code,设计原则等,包括DRY原则,Tell Don’t Ask原则,Solid原则(Single Responsibility, Open Closed, Liskov Substitution, Interface Segregation, Dependency Inversion)
3.案例分析——设计原则的应用

4 软件设计腐化

4.1 设计腐化与技术债务

1.设计腐化的途径
2.总结常见的设计腐化途径、原因及克服方法
3.技术债务概述
4.技术债务对软件系统的危害
5.技术债务对软件开发人员的危害
6.技术债务与破窗效应
7.技术债务的解决之道
8.通过案例分析,如何解决技术债务

4.2 技术债务监控

1.软件腐化监控
2.国际著名某电信研发中心监控工具

4.3 软件腐化与希波克拉底宣言

1. First, Do No Harm. 首先,做到不伤害!——Hippocrates
2. Proxy代码模式与软件修改方案
3. Decorator模式与遗留软件修改
4. 案例分析——维护遗留系统而不是遗留系统变烂

4.4 案例——演示系统软件腐化的过程

1.某电信研发中心项目系统
2.初始设计的问题分析
3.故障单管理系统
4.流程审核的改变
5.故障单类型的增加
6.传统设计的问题与如何通过代码进行演化
7.通过案例分析,对比有时是因为人员的设计技能导致加速软件的付腐化
8.通过案例分析,进行哪些重构

5 演化式设计

5.1 演化式设计(Emergent Design)

1.演化式设计 Emergent Design
2.演化式设计——重构带来了一种新的设计方法,称为反思性设计(Reflective Design)。除了创建一种设计并用代码实现它之外,你现在还可以分析已有代码的设计并改善它。寻求改进的一种最好的方法是通过代码嗅觉(code smells)
3.在详细设计之中,如何对发现问题的设计进行重构
4很多公司习惯做大量的预习设计,这被证明是风险很高的做法。好的架构和设计是演化出来的,通过这个环节了解演进式设计的方法,包括演进式设计的方法、工具、模式等内容。包括如何计划重构活动以实现架构演进,如何从设计方法、技术债务、复杂性等角度来看演进架构
5.案例分析,根据课程介绍的坏症状,进行重构合理的设计

5.2 设计的新认识——源代码就是设计

1.传统代码认识的误区
2.设计与施工分离的误区
3.源代码就是设计
4.分析真实代码项目,认识代码的重要性、垃圾代码的危害

5.3 劣设计的坏症状和重构

1.拙劣设计概述
2.拙劣设计常见症状以及如何发现和治疗
3.在详细设计之中,如何对发现问题的设计进行重构
4.代码坏味道概述
5.常见的重构设计模式
6.重构到设计模式
7.案例分析——对实际项目的案例进行代码分析和重构
8.案例分析——根据课程介绍的坏症状,进行实际项目重构的设计

5.4 案例——某零售项目系统分析

1.零售租赁管理系统
2.第一版本设计和评审
3.故障单类型的增加
4.传统设计的问题与如何通过代码进行演化

6 关注人——设计师与技能的思考

6.1 设计师与设计技能

1.某研发团队5年前引入敏捷的失败教训——能力比方法重要,但改变方法比改变能力简单多了
2.无论什么道什么术,什么方法或思想,离开了人都是虚妄。优秀的设计来自优秀的设计师,因此应该首先是尊重个体的主动和创造性,提高个体工作技能,而不是应用了一种流程,消灭了个体的活力。首先关注人,才能真敏捷。
3.案例分析,某研发中心引入敏捷的实战分析,什么才是真正的敏捷

6.2 设计师能力模型

1.设计能力金字塔
2.软件设计价值观
3.软件设计原则
4.软件设计模式
5.软件设计最佳实践
6.通过某研发中心的设计师能力模型分析,设计能力提升计划

7 软件设计复用性

7.1 软件复用设计

1.在详细设计之中,分析发现共同的行为的抽象和共同的机制来实现
2.软件通用服务组件的设计
3.复用已有的东西,比自己编写更容易。如果不容易,大家就不会去复用
4.软件复用的管理策略
5.对象级别复用
6.模块级别复用
7.架构层次复用
8.软件复用之道
9.案例分析复用的设计之道

7.2 某电信项目案例——异常处理框架设计

1.系统的异常处理策略
2.设计一个通用异常处理子系统
3.分析如何应用设计模式
4分析通过应用设计模式,带来了哪些好处(表现在软件的灵活性)
5.分析如何转换为框架
典型案例分析:该框架已经在多个大型项目之中应用

8 软件设计案例分析

1.某电信核心系统设计最佳实践和案例分析
2.某电力系统设计最佳实践和案例分析
3.某web互联网电子商务系统设计最佳实践和案例分析
4.某税务系统设计最佳实践和案例分析
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容

  • 1.引言 1.1 编写目的 1.2 项目背景 1.2 项目概要 总体要求 2.1 系统功能概述 2.2 系统功能要...
    华__阅读 16,470评论 0 9
  • 1. 软件设计目标 帮助其它人 ,做与软件相关的决策时,指导法则就是判断能够提供什么样的帮助。一个人写出优秀软件的...
    漠然阅读 882评论 0 4
  • “Design is there to enable you to keep changing the softw...
    _张晓龙_阅读 12,449评论 3 50
  • 指绘小组带上
    就这样NO阅读 364评论 14 7
  • Day 1 到达雅典 机场门口就可以打车,也可以搭乘X96巴士到Edem或Alimos码头,票价6欧。如果提前到达...
    Risa蕙阅读 669评论 0 2