JasonWang's Blog

Dependency Inversion Principle(依赖反转原则)

原文链接
by Robert C. Martin(Uncle Bob)

前言

这篇文章写于1996年,里边清晰而简明的介绍了“依赖反转原则”,对了解Dependency Injection很有帮助。今天看来,仍然具有很好的释疑作用。

介绍

我上一篇96年的文章谈到了 Liskov Substitution Principle(LSP)。 这个原则应用到了C++时,为使用公开(public)继承(inheritance)提供了指导。 该原则说,每一个操作一个基类的引用或者指针的函数,都应能够同样操作该基类的派生类,即使其对该派生类一无所知。这就意味着,派生类的虚成员函数必须与基类的虚成员函数保持一致,并且不应该做更多的事情。也就是说,基类中的虚成员函数必须要在派生类中,并且保证只做有用的工作。如果违背LSP原则,操作基类的引用或指针的函数将不得不检查具体对象的类型,以确保操作正确。而检查对象类型则违反了上周讲到的Open-Closed Principle(OCP)。

在此次专栏里,我们将讨论OCP与LSP结构化带来的启示。 严格使用这些原则所产生的结构,可以被一般化成一个更为基本的原则,我称之为“Dependency Inversion Principle”(DIP)。