Service Locator
Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från
versionen som granskades den 21 oktober 2017; kontroller kräver
9 redigeringar .
En service locator är ett designmönster som används i mjukvaruutveckling för att kapsla in de processer som är involverade i att erhålla en tjänst med ett starkt abstraktionsskikt . Detta mönster använder ett centralt register känt som en "tjänstlokalisator" som, när det efterfrågas, returnerar den information (vanligtvis objekt ) som behövs för att utföra en specifik uppgift [1] . Det är värt att notera att tjänstelokaliseringen i vissa fall faktiskt är ett antimönster [2] [3] .
Fördelar
- En "service locator" kan fungera som en enkel körtidslänkare . Detta gör att du kan kontrollera programkoden under körning utan att kompilera om programmet, och i vissa fall utan att behöva starta om den.
- Applikationer kan optimera sig själva under körning genom att selektivt lägga till och ta bort element från tjänstelokaliseringen. Till exempel kan ett program upptäcka att det har ett bättre bibliotek för att läsa tillgängliga JPG- bilder än standard, och ändra registret därefter.
- Applikationskomponenter eller bibliotek som används i en applikation kan separeras helt . Det enda förhållandet mellan dem registreras i registret.
Nackdelar
- Relationer mellan applikationskomponenter placerade i registret döljer beroenden för delar av programmet (gör dem icke-uppenbara) och ökar systemets komplexitet. Detta gör det svårare att hitta buggar i applikationen och kan göra det övergripande systemet mindre tillförlitligt.
- Registret måste vara unikt, vilket kan bli en flaskhals för att köra flera kopior av programmet samtidigt.
- Registret kan vara en allvarlig säkerhetsrisk eftersom det tillåter utomstående (inklusive angripare) att injicera kod i en applikation.
- Registret döljer klassberoenden som orsakar körtidsfel, snarare än kompileringsfel, när kompilatorn rapporterar ett fel i frånvaro av nödvändiga beroenden.
- Registret gör koden svårare att underhålla (jämfört med att använda beroendeinjektion ) eftersom den blir otydlig när du gör en felaktig registerpost eller missar en nödvändig post.
- Registret gör koden svårare att testa eftersom alla tester måste interagera med samma globala tjänstelokaliseringsklass för att installera falska beroenden av klassen som testas. Detta kan dock enkelt övervinnas genom att injicera applikationsklasser med ett enda tjänstelokaliseringsgränssnitt.
Se även
Anteckningar
- ↑ Inversion av kontrollbehållare och beroendeinjektionsmönstret . Hämtad 21 oktober 2017. Arkiverad från originalet 30 maj 2020. (obestämd)
- ↑ Seemann, Mark Service Locator är ett antimönster . blog.ploeh.dk . Hämtad 1 juni 2017. Arkiverad från originalet 31 maj 2017.
- ↑ Hall, GML Adaptive Code via C#: Agil kodning med designmönster och SOLID-principer. - Pearson Education, 2014. - ISBN 9780133979732 .
Länkar