제이온

[Hatékony Java] 5. fejezet: Ne adj meg erőforrásokat, hanem függőségi injektálást használj

  • Írás nyelve: Koreai
  • Országkód: Minden országcountry-flag
  • Informatika

Létrehozva: 2024-04-28

Létrehozva: 2024-04-28 13:39

Ha egy osztály belsőleg egy vagy több erőforrásra támaszkodik, és ezek az erőforrások befolyásolják az osztály működését, akkor a szingletont és a statikus segédprogram osztályokat nem szabad használni.


Az osztálynak nem szabad közvetlenül létrehoznia ezeket az erőforrásokat, ehelyett célszerű azokat a konstruktornak átadni. A függőségi injektálás révén javítható az osztály rugalmassága, újrafelhasználhatósága és tesztelhetősége.


Példa

Statikus segédprogram osztály használatának példája

Ez a segédprogram osztály feltételezi, hogy csak egy szótárat használ. A valóságban azonban a szótárak nyelv szerint vannak elkülönítve, sőt, speciális szavakhoz külön szótár is létezhet.


Szingletton osztály használatának példája


A szingletton osztály is csak egy szótár használatát feltételezi, így a fentiekben említett hátrányok itt is érvényesek.


Megoldás 1 - A final kulcsszó eltávolítása a mezőből


A statikus segédprogram osztály vagy a szingletton osztály dictionary mezőjéből eltávolítható a final kulcsszó, és lehetővé tehető, hogy kívülről másik szótárra cseréljék. Ez a módszer azonban nem túl praktikus, és több szálú környezetben szinkronizálási problémákat okozhat.


Megoldás 2 - Függőségi injektálás használata


A fenti példákból látható, hogy a statikus osztályoknak és a szingletton osztályoknak nem szabad belső erőforrásoktól függeniük. Vagyis a belső erőforrásokat kívülről kell beállítani.


A függőségi injektálást használó osztályok a final kulcsszónak köszönhetően garantálják a változatlanságot, és több erőforrás-példányt is támogatnak. A függőségi injektálás nem csak a konstruktorban, hanem statikus gyárakban és építőkben is alkalmazható.


A függőségi injektálás során nem csak az erőforrás maga adható át, hanem az erőforrás-gyár is. A gyár egy olyan objektum, amely minden híváskor egy adott típusú példányt hoz létre. Ezt a módszert gyármetódus mintának nevezik, és a Java 8-ban a Supplier<T> tökéletes példa rá.



Általában korlátozott helyettesítő karakter típusokat használnak a gyár típusparaméterének korlátozására. Ezzel a módszerrel az ügyfél bármilyen olyan típust átadhat a gyárnak, amely a megadott típus alatti altípus.


A függőségi injektálás növeli a rugalmasságot és a tesztelhetőséget, de nagyon sok függőséggel rendelkező projektekben jelentős költséggel járhat. Ilyen esetekben a függőségi injektáló keretrendszerek (Dagger, Guice, Spring stb.) használata csökkentheti a költségeket.


Forrás

Hozzászólások0