主要内容
LSP:Liskov替换原则
OCP:开放-封闭原则
SRP:单一职责原则
ISP:接口隔离原则
DIP:依赖倒置原则
敏捷设计综合示例
总结
设计质量:坏的设计
什么是坏的设计?
僵硬性(Rigidity):刚性,难以扩展
脆弱性(Fragility):易碎,难以修改
牢固性(Immobility):无法分解成可移植的组件
不必要的复杂性(Needless Repetition):Ctrl C + Ctrl V
晦涩性(Opacity):不透明,很难看清设计者的真实意图
设计质量:好的设计
什么是好的设计?
容易理解
容易修改和扩展
容易复用
容易实现与应用
简单、紧凑、经济适用
让人工作起来心情愉快的设计
设计原则是提高设计质量的基本原则
面向对象的基本设计原则
LSP:Liskov替换原则
The Liskov Substitution Principle
OCP:开放-封闭原则
The Open-Close Principle
SRP:单一职责原则
The Single Responsibility Principle
ISP:接口隔离原则
The Interface Segregation Principle
DIP:依赖倒置原则
The Dependency Inversion Principle
DIP
DIP(依赖倒置原则,The Dependency Inversion Principle)
高层模块不依赖于低层模块,二者都依赖于抽象
抽象不依赖于细节,细节依赖于抽象
针对接口编程,不要针对实现编程
又称控制反转(IoC,Inversion of Control)、依赖注入
Booch:所有结构良好的面向对象架构都具有清晰的层次定义,每个层次通过一个定义良好的、受控的接口向外提供了一组内聚的服务
传统的依赖关系
符合DIP的系统
启发式原则
“依赖于抽象”—程序中所有依赖关系都应该终止于抽象类或者接口
启发式原则:
任何变量都不应该拥有指向具体类的指针或者引用
任何类都不应该从具体类派生
任何方法都不应该改写其任何基类中已经实现的方法
常见的设计方案
这个设计存在的问题
泡泡类(Vapor Classes)
无用的抽象
上帝类(God Classes)
DIP的本质
通过抽象提取业务本质,并建立一个稳定的结构描述这个本质
对于具体的业务规则的处理是在这个本质的基础上的扩展
技术、工具、意识形态等的发展可能使业务规则不断变化,但本质不变;而DIP则帮助我们轻松的适应这些变更
合理使用任务板
燃尽图的使用
警示标记
每日站会
Sprint演示
项目财务计算
sprint回顾
总结
sprint回顾
sprint回顾是Scrum中第二重要的事件(最重要的是sprint计划会议),因为这是Scrum团队项目开发做改进的最佳时机。如果没有回顾,很可能团队会不断犯同样的错误。
回顾会议
使用白板
项目财务计算——现值(PV)
现值(Present Value,PV)
现值是一个比之前的投资回收期方法更加复杂的方法, 因为它考虑了货币的时间价值。这是很重要的,因为未来收到的钱通常比现在收到的钱具有的价值要小。
计算 PV 的公式是:
FV 是未来的价值(未来相同货币数量的价值),PV 是现值,i 是利率或者通货膨胀率,n 是利率支付的时间周期数。
项目财务计算——净现值(NPV)
净现值(NPV)
如同现值(PV)表示未来现金流或者收入的当前价值,净现值(NPV)指的是一段时间内全部收入的现值减去投资成本的现值。
通过计算,将有以下 3 种情况可供选择:
● 如果项目的 NPV 大于零,则项目应该接受。
● 如果 NPV 小于零,则项目应该拒绝。
● 如果有多个项目供选择,则选择 NPV最高的项目。
项目财务计算——投资回报率 (ROI)
项目财务计算——监控项目绩效
项目财务计算——成本绩效监控
项目财务计算——进度绩效监控
项目财务计算——项目预算预测
完工估算(EAC) = 完工预算(BAC) / 成本绩效指数(CPI)
完工尚需估算(ETC) = 完工估算(EAC) - 实际成本(AC)
完工偏差(VAC) = 完工预算(BAC) - 完工估算(EAC)