极限编程实践
完整团队 用户故事 短交付周期 验收测试 结对编码 测试驱动开发
集体所有权 持续集成 可持续的开发速度 开放的工作空间 计划游戏
简单设计 重构 隐喻
避免设计的臭味
· 僵化性 (rigidity) ——设计难以改变。
· 脆弱性(fragility)——设计易于遭到破坏。
· 顽固性(immobility)——设计难以重用。
· 粘滞性(viscosity)——难以做正确的事情。
· 不必要的复杂性(needless complexity)——过分设计。
· 不必要的重复(needless repetition)——滥用鼠标进行复制、黏贴。
· 晦涩性(opacity)——混乱的表达。
设计原则
· 单一职责原则(SRP):一个类应该只有一个发生变化的原因。
· 开放封闭原则(OCP):软件实体应该对扩展开放,对修改关闭。
· Liskov替换原则(LSP):子类型(subtype)必须能够替换掉它的基类型(base type)。
· 依赖倒置原则(DIP):a. 高层模块不应该依赖于低层模块。二者都应该依赖于抽象。b.抽象不应该依赖于细节。细节应该依赖于抽象。
· 接口隔离原则(ISP):不应该强迫客户程序依赖并未使用的方法。
· DRY:Don’t repeat yourself Principle。通过抽取公共部分放置在一个地方避免代码重复。
· 封装变化 (Encapsulate what varies)。
· 面向接口编程而不是实现(Code to an interface rather than to an implementation)。
· 优先使用组合而非继承(Favour Composition Over Inheritance)。
包和组件的设计原则
重用-发布等价原则(Reuse-Release Equivalence Principle, REP):重用的粒度就是发布的粒度。
共同重用原则(Common-Reuse Principle, CRP):一个组件中的所有类应该是共同重用的。如果重用了组件中的一个类,那么就要重用组件中的所有类。
共同封闭原则(Common-Closure Principle, CCP):组件中的所有类对于同一种性质的变化应该是共同封闭的。一个变化若对一个封闭的组件产生影响,则对该组件中的 所有类产生影响,二对于其他组件则不造成任何影响。
无环依赖原则(Acycle-Dependencies Principle, ADP):在组件的依赖关系图中不允许存在环。
稳定依赖原则(Stable-Dependencies Principle, SDP):朝着稳定的方向进行依赖。
稳定抽象原则(Stable-Abstraction Principle, SAP):组件的抽象程度应该与其稳定程度一致。