A szolgáltatáslokátor egy programtervezési minta a számítógép-programozásban. Arra használják, hogy a szolgáltatás megszerzését egy erős absztrakciójú rétegbe tegyék. Az objektumok egy központi adattárat használnak, ami kérésre megadja az igényelt szolgáltatás eléréséhez szükséges információt.http://martinfowler.com/articles/injection.html#UsingAServiceLocator Ez egy vitatott minta, vannak, akik antimintának tekintik. Előnyei A szolgáltatáslokátor futási idejű linkerként működhet. Lehetővé teszi újabb információk hozzáadását újrafordítás nélkül, sőt, egyes esetekben még újraindítani sem kell. Az alkalmazások futásidőben optimalizálhatják magukat elemek szelektív hozzáadásával és eltávolításával. Például egy szolgáltatás észlelheti, hogy van egy jobb JPG olvasó könyvtár, és megváltoztathatja eszerint a nyilvántartást. Egy könyvtár vagy szolgáltatás elemei teljesen elkülöníthetők egymástól. Közöttük egyedül a nyilvántartás jelent kapcsolatot. Hátrányai A nyilvántartásban szereplő objektumok fekete dobozok a többi objektum számára. Nehezebb a hibáik felismerése, nyomon követése, kezelése. A szolgáltatáslokátornak egykének kell lennie, ami konkurens esetekben palacknyak-effektust eredményez. Ha a szolgáltatáslokátor lehetővé teszi, hogy kívülállók injektáljanak kódot az alkalmazásba, akkor biztonsági kockázatokat is hordoz. A függőségek elrejtése futásidejű hibákká teszi azokat a fordításidejű hibákat, amelyek azt jelzik, hogy függőségek hiányoznak. A szolgáltatáslokátor a dependency injectionnel szemben megnehezíti a karbantartást, mivel nehezebb megtalálni, hogy mit tört el a módosítás. Nehezebb a tesztelés, mivel mindegyik tesztnek ugyanazzal a szolgáltatáslokátorral kell együttműködnie. Ez azonban megkerülhető, ha az alkalmazó osztályokba egy szolgáltatáslokátor interfészt injektálnak.

Jegyzetek

Források Sample code In Defense of Service Locator Game Programming Patterns: Service Locator Dependencies In Disguise Fordítás

Kategória:Programtervezési minták