Def­i­n­i­tion:

Depen­dency Inver­sion Prin­ci­ple refers to a spe­cific form of decou­pling aimed at rend­ing high-level mod­ules inde­pen­dent of the low-level mod­ules’ imple­men­ta­tion details. Its prin­ci­ple states:

  • High-level mod­ules should not depend on low-level mod­ules, both should depend on abstractions.
  • Abstrac­tions should not depend upon details. Details should depend upon abstractions.

Depen­dency Inver­sion Prin­ci­ple is often talked about in con­nec­tion with Inver­sion of Con­trol or Depen­dency Injection.

Pur­pose:

Even in N-tiered appli­ca­tions you can often find tight cou­pling between the dif­fer­ent lay­ers, usu­ally from upper to lower lay­ers but not vice versa. For exam­ple, whilst your busi­ness layer might be inti­mately famil­iar with and depen­dent on your data access layer, the reverse is not true. This how­ever, still rep­re­sents a cou­pling prob­lem and it:

  • makes changes to the data access layer more dif­fi­cult as it might require changes to the busi­ness layer (rip­ple effect)
  • makes it hard to unit test the dif­fer­ent lay­ers in isolation

Depen­dency inver­sion (and decou­pling in gen­eral) allows soft­ware archi­tects to design their sys­tems with greater flex­i­bil­ity by loos­en­ing up the depen­den­cies between the dif­fer­ent lay­ers of their system.

Part­ing thoughts…

  • Cou­pling is like radi­a­tion, there are harm­less back­ground cou­pling every­where (say, the core .Net libraries!), but expo­sure to tight cou­pling across the ser­vice boundaries/between inter­con­nected mod­ules in your appli­ca­tion can be haz­ardous! With that said, with­out any cou­pling your sys­tem is as good as useless.
  • Tight cou­pling restricts a system’s abil­ity to change in an indus­try where the only con­stant is change!

Fur­ther reading:

Loosen Up – Tame Your Soft­ware Depen­den­cies For More Flex­i­ble Apps (MSDN arti­cle by James Kovac)

Robert C. Martin’s arti­cle on Depen­dency Inver­sion Principle

Design Pat­tern – Inver­sion of Con­trol and Depen­dency Injec­tion (by Shiv­prasad Koirala)

Share

One Response to “Buzzword Buster — Dependency Inversion Principle”

Leave a Reply