Inversarea controlului

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită pe 26 mai 2021; verificările necesită 2 modificări .

Inversarea controlului (  IoC ) este un principiu important de programare orientată pe obiecte utilizat pentru a reduce cuplarea (cuplarea) în programele de calculator [1] . Este, de asemenea, o soluție de integrare arhitecturală care simplifică extinderea capabilităților sistemului, în care fluxul de control al programului este controlat de cadru [2] .

Într-un program normal, programatorul decide în ce ordine să efectueze apelurile de procedură. Dar dacă se folosește un framework , programatorul își poate plasa codul în anumite puncte de execuție (folosind callback - uri sau alte mecanisme), apoi rulează „funcția principală” a cadrului care se va ocupa de toată execuția și va apela codul programatorului atunci când este necesar. Ca urmare, există o pierdere a controlului asupra execuției codului - aceasta se numește inversare a controlului (cadru-ul controlează codul programatorului, iar nu programatorul controlează cadrul).

Inversarea controlului se întâmplă nu numai în cadre, ci și în unele biblioteci (dar de obicei bibliotecile nu creează inversarea controlului - ele oferă un set de funcții pe care programatorul trebuie să le apeleze).

Descriere

O implementare a inversării controlului aplicată managementului dependenței este injectarea dependenței [ 2 ] [ 3] .  Injecția de dependență este utilizată în multe cadre numite containere IoC.

În comparație cu tehnologiile de nivel inferior, un container IoC este un linker care colectează nu fișiere obiect , ci obiecte OOP ( instanțele de clasă ) în timpul execuției programului . Evident, pentru a implementa o astfel de idee, a fost necesar să se creeze nu numai linkerul în sine, ci și o fabrică care produce obiecte. Un analog al unui astfel de linker (desigur, mai funcțional) este un compilator , una dintre funcțiile căruia este crearea fișierelor obiect. Ideea de a lega un program în timpul rulării nu este nimic nou. Furnizarea programatorului cu instrumente de injectare a dependenței a oferit mult mai multă flexibilitate în dezvoltare și comoditate în testarea codului [4] .

Metode de implementare

Critica

Toate abordările bazate pe inversarea controlului suferă de următoarele două dezavantaje [5] :

Note

  1. Inversarea controlului cu Cadrul de Extensibilitate Gestionat (MEF) . Consultat la 6 octombrie 2016. Arhivat din original la 4 ianuarie 2017.
  2. 12 Yang , 2012 .
  3. Robert C. Martin. Clean Code: A Handbook of Agile Software Craftsmanship. - Pearson Education, 2008. - P. 157. - ISBN 978-0-13-608325-2 .
  4. Martin Fowler. Inversarea containerelor de control și modelul de injectare a dependenței . Preluat la 6 octombrie 2016. Arhivat din original la 30 mai 2020.
  5. Agha, G. și Igarashi, A. și Kobayashi, N. și Masuhara, H. și Matsuoka, S. și Shibayama, E. și Taura, K. Concurrent Objects and Beyond: Papers dedicated to Akinori Yonezawa on the Occasion of His 65 de ani. - Springer Berlin Heidelberg, 2014. - P. 433. - ISBN 9783662444719 .

Literatură

Link -uri