`
nathan09
  • 浏览: 155430 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

【读书笔记】AgilePPP——敏捷设计

 
阅读更多

敏捷设计

•全局视图和软件一起演化
•设计尽可能适合当前系统,关注当前系统结构
•增量地演化出系统最佳架构和设计
•设计和架构过程是持续不断进行的
•从根本上讲,源代码就是设计
•敏捷设计是一个过程,不是一个事件,是一个持续的应用原则、模式以及实践来改进软件结构和可读性的过程
•敏捷设计步骤
–遵循敏捷实践去发现问题
–应用设计原则去诊断问题
–应用适当模式去解决问题

设计臭味

•设计臭味
–僵化性(rigidity)——连锁改动
–脆弱性(fragility)——耦合、易遭破坏
–顽固性(immobility)——难以重用
–粘滞性(viscosity)——难以做正确的事情
–不必要的复杂性(needlesscomplexity)——过度设计
–不必要的重复(needlessrepetition)——忽略抽象
–晦涩性(opacity)——难以理解

SRP(单一职责原则)

•内聚性
–一个模块的组成元素之间的功能相关性
•SRP
–一个类应该只有一个发生变化的原因,及一个类应该只有一个职责
•职责
–发生变化的原因
–需求变化反应为职责的变化
•软件设计,就是要发现职责,并把它们相互分离

OCP(开放-封闭原则)

•封闭是建立在抽象的基础之上的
•只受一次愚弄
•刺激变化:测试驱动、快速交付
•正确判断各种变化的可能
•一直等到变化发生时才采取行动
•OCP是面向对象设计的核心所在
•拒绝不成熟的抽象和抽象本身一样重要
•OCP背后的主要机制是抽象和多态
•有经验的设计人员希望自己对用户和应用领域很了解,能够以此来判断各种变化的可能性。然后,他可以让设计对于最有可能发生的变化遵循OCP原则

LSP(Liskov替换原则)

•子类型必须能够替换掉它们的基类型,替换后,程序的行为功能不变
•一个自相容的设计未必就和所有的用户程序相容
•一个模型的有效性只能通过它的客户程序来表现
•在考虑一个特定设计是否恰当时,不能完全孤立的来看这个解决方案,必须根据该设计的使用者所作出的合理假设来审视它(这些合理的假设常常以断言的形式出现在为基类编写的单元测试中)
•违反LSP往往是很微妙的

基于契约的设计

•LSP清楚的指出,OOD中的IS-A关系是就行为方式而言的,行为方式是可以进行合理假设的,是客户程序所依赖的。
•使用基于契约的设计可以使LSP明确化
•基于契约的设计
–在重新声明派生类的例程中,只能使用相等或更弱的前置条件,只能使用相等或更强的后置条件
–若违反了这条原则,则必定违反LSP原则
•为每个方法的注释添加前置和后置条件
•通过单元测试来指定契约

DIP(依赖倒置原则)

•DIP
–高层模块不应该依赖底层模块,二者都应该依赖于抽象
–抽象不应该依赖于细节。细节应该依赖于抽象
•框架设计的核心原则
•DIP解析
–高层模块即客户端或使用方,底层模块即服务端
–应由使用方提出所需的接口,由服务方来实现这些接口的具体功能
–因此软件开发的过程应该是自上而下的
•抽象接口归客户端所有

ISP(接口隔离原则)

•不应该强迫客户程序依赖它们并不使用的方法/接口。
•分离客户就是分离接口。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics