Skip to content

Dependency Inversion Principle

Miért?
A pontszerű tesztelésnek az osztályok elszigeteltsége a feltétele. Az elszigeteltség akkor lép fel, amikor az osztályoknak már nincsenek függőségeik implementációktól – sem futásidőben, sem fordításidőben. A konkrét függőségeket tehát a lehető legkésőbb kellene eldönteni. Lehetőleg futásidőben.

A Dependency Inversion Principle (DIP) is egy SOLID elv. A következőket mondja:
  • A high level osztályoknak nem szabad függniük a low level osztályoktól, hanem mindkettő interfészektől függjön.
  • Az interfészeknek nem szabad részletektől függniük, hanem a részleteknek kell az interfészektől.

Amennyiben egy high level osztály közvetlenül használ fel egy low level osztályt, akkor kettejük közt egy erős csatolás (coupling) keletkezik. Legkésőbb akkor ütközünk nehézségekbe, amikor megpróbáljuk tesztelni a high level osztályt. Ebből az okból a high level osztálynak egy interfésztől kell függnie, amit aztán a low level osztály implementál. Így a unit tesztnél a low level osztályt egy mockup helyetesítheti.

Három lehetőség mutatkozik arra, hogy az invertált absztrakt függőséget egy konkért objektummal a futásidőben feloldjuk:

  • konstruktor paraméter segítségével „kézzel”
  • Egy Inversion of Control Container (IoC Container) használatával, mint amilyen a Castle Windsor
  • Dependency Lookup

A sárga fokozaton egyelőre a függőséget a konstruktor paraméterében „fecskendezzük be”. Az elején ez a legegyszerűbb megoldás és egy csomó osztálynál egészen jól működik. Később a zöld fokozaton egy IoC konténert és dependency lookup-ot használunk majd.

Published inElvek