Localizator de servicii
Versiunea actuală a paginii nu a fost încă revizuită de colaboratori experimentați și poate diferi semnificativ de
versiunea revizuită pe 21 octombrie 2017; verificările necesită
9 modificări .
Un localizator de servicii este un model de proiectare utilizat în dezvoltarea de software pentru a încapsula procesele implicate în obținerea unui serviciu cu un strat de abstractizare puternic . Acest model folosește un registru central cunoscut sub numele de „localizare de servicii” care, atunci când este solicitat, returnează informațiile (de obicei obiecte ) necesare pentru a efectua o anumită sarcină [1] . Este de remarcat faptul că, în unele cazuri, localizatorul de servicii este de fapt un anti-pattern [2] [3] .
Beneficii
- Un „locator de servicii” poate acționa ca un simplu linker de rulare . Acest lucru vă permite să controlați codul programului în timpul rulării fără a recompila aplicația și, în unele cazuri, fără a fi nevoie să o reporniți.
- Aplicațiile se pot optimiza în timpul execuției prin adăugarea și eliminarea selectivă a elementelor din locatorul de servicii. De exemplu, o aplicație poate descoperi că are o bibliotecă mai bună pentru citirea imaginilor JPG disponibile decât cea implicită și poate modifica registrul în consecință.
- Componentele aplicației sau bibliotecile utilizate într-o aplicație pot fi complet separate . Singura relație dintre ei este înregistrată în registru.
Dezavantaje
- Relațiile dintre componentele aplicației plasate în registru ascund dependențele unor părți ale programului (le fac neevidente) și măresc complexitatea sistemului. Acest lucru face mai dificilă găsirea erorilor în aplicație și poate face ca întregul sistem să fie mai puțin fiabil.
- Registrul trebuie să fie unic, ceea ce poate deveni un blocaj pentru rularea mai multor copii ale aplicației în același timp.
- Registrul poate fi o vulnerabilitate serioasă de securitate deoarece permite persoanelor din afara (inclusiv atacatorilor) să injecteze cod într-o aplicație.
- Registrul ascunde dependențele de clasă care provoacă erori de rulare, mai degrabă decât erori de compilare, atunci când compilatorul raportează o eroare în absența dependențelor necesare.
- Registrul face codul mai dificil de întreținut (în comparație cu utilizarea injecției de dependență ) deoarece devine obscur atunci când faceți o intrare eronată în registru sau pierdeți o intrare necesară.
- Registrul face codul mai dificil de testat , deoarece toate testele trebuie să interacționeze cu aceeași clasă globală de localizare a serviciilor pentru a instala dependențe false ale clasei testate. Cu toate acestea, acest lucru este ușor de depășit prin injectarea claselor de aplicații cu o singură interfață de localizare a serviciului.
Vezi și
Note
- ↑ Inversarea containerelor de control și modelul de injectare a dependenței . Preluat la 21 octombrie 2017. Arhivat din original la 30 mai 2020. (nedefinit)
- ↑ Seemann, Mark Service Locator este un Anti- Pattern . blog.ploeh.dk . Preluat la 1 iunie 2017. Arhivat din original la 31 mai 2017.
- ↑ Hall, GML Adaptive Code prin C#: Codare agilă cu modele de design și principii SOLID. - Pearson Education, 2014. - ISBN 9780133979732 .
Link -uri