Dependency inversion principle

From CSSEMediaWiki
(Difference between revisions)
Jump to: navigation, search
Line 13: Line 13:
  
 
File "Streams": Both high and low level code is written to meet the "stream" interface.
 
File "Streams": Both high and low level code is written to meet the "stream" interface.
 +
 +
==See Also==
 +
*[[Design by contract]]
 +
*[[Program to the interface not the implementation]]

Revision as of 04:06, 6 October 2008

As stated by Bob Martin:

"High level modules should not depend upon low level modules. Both should depend upon abstractions. Abstractions should not depend upon details. Details should depend upon abstractions."

The Dependency inversion principle states that high level modules should not depend on low level modules; both (high and low level) modules should depend on abstractions.

It is common in software development to write some low level modules that provide some useful functionality. These modules are then used by the high level modules. This means that the high level modules depend on the low level modules. The Dependency inversion principle states that both high and low level modules should depend on the same, general abstractions, thus inverting the dependency direction.

An advantage of this is that hard to simulate low level functions do not need to be written before high level functions are tested. This allows for a top-down approach for design and development.

Dependancy Inversion Principle.jpg

Typical Example

File "Streams": Both high and low level code is written to meet the "stream" interface.

See Also

Personal tools