依赖倒置原则

依赖倒置原则(DIP)

别说谁变了你拦得住时间么 提交于 2019-11-30 03:17:16
1. 定义 (1)高层模块不应依赖于低层模块,两者都应该依赖于抽象。 (2)抽象不应该依赖于细节,细节应该依赖于抽象。 为什么是“倒置”这个词? 这是由于许多传统的软件开发方法,比如结构化分析和设计,总是倾向于创建一些高层依赖于低层模块、策略依赖于细节的软件结构。 实际上这些方法的目的之一就是要定义程序层次结构,该层次结构描述了高层模块怎样调用低层模块。 一个设计良好的面向对象的程序,其依赖于程序结构相对于传统的过程式方法设计的通常结构而言就是被“倒置”了。 高层模块包含了一个应用程序中的重要的策略选择和业务模块。正是这些高层模块才使得其所在的应用程序区别于其他。然而,如果这些高层模块依赖于低层模块,那么低层模块的改动就会直接影响到高层模块,从而迫使它们依次做出改动。 这种情况是非常荒谬的,本应该高层的策略设置模块去影响低层的细节实现模块。包含高层业务规则的模块应该优先并独立于包含实现细节的模块。无论如何高层模块都不应该依赖于低层模块。 2. 层次化 所有结构良好的面向对象架构都具有清晰的层次定义,每个层次通过一个定义良好的、受控的接口向外提供一组内聚的服务。 高层Policy使用低层的Mechanism,而Mechanism使用了更细节的Utility。这看起来似乎是正确的,然而存在一个隐伏的错误特征: Policy对于其下一直到Utility的改动都是敏感的

面向对象设计原则

[亡魂溺海] 提交于 2019-11-28 05:28:57
在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员经理根据7条原则来开发程序,从而提高软件开发效率、节约软件开发成本和维护成本。 1. 开闭原则(Open Closed Principle, OCP) 软件实体应该对扩展开放,对修改关闭。 这里的软件实体包括以下几个部分: 1) 项目中划分出的模块 2) 类与接口 3) 方法 开闭原则的含义是:当应用的需求改变时,在不修改软件实体的源代码的前提下,可以扩展模块的功能,使其满足新的需求。 1.1 作用 开闭原则是面向对象程序设计的终极目标,它使软件实体拥有一定的适应性和了灵活性的同事具备稳定性和延续性。具体来说,其作用如下: (1) 对软件测试的影响 软件遵守开闭原则的话,软件测试时只需要对扩展的代码进行测试就可以了,因为原有的测试代码仍然能够正常原型。 (2) 可以提高代码的可复用性 粒度越小,被复用的可能性就约到;在面对对象的程序设计中,更具原子核抽象编程可以提高代码的可服用性。 (3) 可以提高软件的可维护性 遵守开闭原则的软件,其稳定性高和延续性强,从而抑郁扩展和维护。 1.2 实现方法 可以通过“抽象约束、封装变化”来实现开闭原则,即通过接口或者抽象类为软件实体定义一个相对稳定的抽象层,而将相同的可变因素封装在相同的具体实现类中。 因为抽象灵活性好,实用性广,只要抽象的合理