OOD三个设计原则:SRP(单一职责原则)、OCP(开闭原则)、LSP(Lisko
单一职责原则(SRP : Single Response Principle) 就一个类而言,应该仅有一个引起它变化的原因。 对于何时遵循SRP有以下的考虑: 从上可以得知:变化的轴线仅当变化实际发生时才具有真正的意义。如果没有征兆,那么去应用SRP,或者任何其它原则都是不明智。 实际应用:持久化(Persistence)
描述:软件实体(类、模型、函数等等)应该是可以扩展的,但是不可修改。 遵循开闭原则设计出的模块具有两个主要的特征。它们是: 对于OCP,关键的是 抽象 在许多方面,OCP都是面向对象设计的核心所在。但实际应用中,滥用OCP原则也是错误的。正确的做法是应该仅仅对程序中呈现出频繁变化的那些部分做出抽象。拒绝不成熟的抽象和抽象本身一样重要。 Liskov替换原则(LSP) 描述:子类型(subtype)必须能够替换掉它们的基类型(base type)。 此原则是Barbara Liskov首次在1988年写下的。所以就叫做Liskov替换原则。她如此写到: LSP然我们得出一个非常重要的结论:一个模型,如果孤立的看,并不具有真正意义上的有效性。模型的有效性只能通过它的客户程序来表现。 在考虑一个特定设计是否恰当时,不能完全孤立的来看这个解决方案。必须要根据该设计的使用者所做出的合理假设来审视它。 有谁知道设计的使用者会做出什么样的合理假设呢?大多数这样的假设都很难预测。事实上,如果试图去预测所有这些假设,我们所得到的系统很可能会充满不必要的复杂性的臭味。因此,像所有其它原则一样了,通常最好的办法就是只预测那些最明显的对于LSP的违反情况,而推迟所有其它的预测,直到出现相关的脆弱性的臭味时,才去处理它们。 IS-A是关于行为的。 基于契约设计 在单元测试中指定契约 启发式规则和习惯用法 1.派生类中的退化函数 总结:OCP是OOD中很多原则的核心。如果这个原则应用的有效,应用程序就会具有更多的可维护性、可重用性以及健壮性。LSP是使OCP成为可能的主要原则之一。正是子类型的可替换性才使得使用基类类型的模块在无需修改的情况下就可以扩展。这种可替换性必须是开发人员可以隐式依赖的。因此,如果没有显式的强制基类类型的契约,那么代码就必须良好的并且明显的表达出这一点。 术语IS-A的含义过于广泛以至于不能作为子类型的定义。子类型的正确定义是“可替换性”,这里的可替换性可以通过显式或者隐式的契约来定义。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- react-native – 订阅Redux中存储中的单个属性更改
- 在Oracle PL / SQL中获取调用过程或函数的名称
- JSON.parse()和JSON.stringify()
- WebForm 获取实体类的数据,填充页面(用AJAX异步获取值,和
- XML语法学习
- flash – 如何通过html对象和/或嵌入标记中的url加载.swf?
- filteredArrayUsingPredicate在swift Array中不存在
- 来自Linkedin的Swift编程风格指南
- ruby-on-rails – 您的众包翻译管理系统建议是什么?
- Strut.xml内的属性,action属性,package属性,(一)