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

15 篇文章 0 订阅
9 篇文章 0 订阅

敏捷设计

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

设计臭味

•设计臭味
–僵化性(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(接口隔离原则)

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值