Miért jobb a setter és a konstruktor injection tesztek szempontjából?

0 értékelés
62 megtekintés
Cort3zz (4 pont) kérdezte Jan 22.
Krisz szerkesztett Jan 22.
Sziasztok!
A videókban volt róla szó, hogy majd el lesz mondva, miért jobbak ezek az injectionok, viszont nem találtam róla utána semmi infót. Melyik részben lett elmondva? Ha nem lett elmondva, akkor le tudná írni valaki nekem?
Köszönöm!
Norbi

1 Válasz

0 értékelés
Krisz Guru (1,938 pont) válaszolta meg Jan 22.
Krisz kiválasztva Jan 26.
 
Legjobb válasz

Szia!

 A field injection kódolás szempontjából egyszerűbb a másik kettőnél, és gyors prototípus készítésnél optimális is. De ellene megy az ajánlott irányelveknek, és van pár hátulütője.

 Az irányelv az, hogy minden szükséges függőséget, ami nélkül nem működik az adott osztály, konstruktorból illik injektáltatni. Minden opcionális függőséget pedig setter alapon szokás. 

 A Field injection hátulütői például, hogy:

  • Ha egyszer beállították a függőséget, azon már nem tudsz változtatni
  • Nem tudod validálni az injektált függőséget. Nem tudsz hozzá kódot írni ha kell, hogy eldöntsd, hogy minden rendben van-e az adott függőséggel.
  • Reflection nélkül nem példányosíthatóak az osztályaid amikor unit tesztelsz. Ráadásul nem kell külön library, amikor egy objektumot mockolsz.
  • A DI containerre való szoros ráutaltság, ami kívülről rejtetté teszi a függőségeidet
  • Végül csak egy mellék info: ha túl sok függőségre van szüksége egy osztálynak, akkor ha konstruktor alapon adsz át függőségeket, ezt észre fogod venni könnyen a paraméterek számából. Ha field injectiont használsz, könnyen elkényelmesedsz és átadsz annyi függőséget, amennyit nem szégyellsz. Ez ellene megy a "Single Responsibility" irányelvnek, miszerint egy adott osztálynak logikailag lehetőleg egy feladat megoldására kell törekednie.

 Későbbi Spring Boot kurzuson lesz róla szó.

...