6.1 Descompunere

În ciuda varietății de criterii, sarcina principală în dezvoltarea sistemelor mari este sarcina de a reduce complexitatea sistemului . Pentru a reduce complexitatea, nu a fost încă inventat altceva decât divizarea în părți.

Uneori, pentru simplitate, acesta se numește principiul „împărți și cuceri”, dar, din punctul de vedere al arhitectului software, vorbim despre descompunerea ierarhică .

Un sistem complex trebuie construit dintr-un număr mic de subsisteme mai simple, fiecare dintre acestea, la rândul său, este construit din părți mai mici și așa mai departe până când cele mai mici părți sunt suficient de simple pentru a fi înțelese și create direct.

Descompunere

Vestea grozavă este că această soluție nu este doar singura cunoscută, ci și universală. Pe lângă reducerea complexității, oferă simultan flexibilitate sistemului , scalabilitate bună și rezistență sporită prin duplicarea părților critice.

În consecință, atunci când vine vorba de construirea arhitecturii programului, crearea structurii acestuia, aceasta înseamnă descompunerea programului în subsisteme, servicii, straturi, subrutine și module funcționale și organizarea interacțiunii acestora între ele și lumea exterioară.

Și cel mai valoros lucru aici este următorul: cu cât subsistemele sunt mai independente, cu atât mai sigur este să vă concentrați asupra dezvoltării fiecăruia dintre ele separat la un anumit moment în timp și să nu vă faceți griji pentru toate celelalte părți.

6.2 Beneficiile arhitecturii modulare

Utilizarea principiului descompunerii ierarhice vă permite să scăpați de haos în mii de clase de cod. Îți amintești că codul tău este împărțit în pachete (pachet) și subpachete? Aceasta este una dintre expresiile pentru descompunerea ierarhică.

Programul tău se transformă dintr-o grămadă de clase într-un set de biblioteci și module care interacționează între ele conform unor reguli simple și bine definite. Acest lucru, la rândul său, vă permite să controlați complexitatea acesteia și, de asemenea, vă oferă posibilitatea de a obține toate beneficiile care sunt de obicei asociate conceptului de arhitectură bună.

Iată cele mai de bază:

  • Scalabilitate - capacitatea de a extinde sistemul și de a crește performanța acestuia prin adăugarea de noi module.
  • Mentenabilitatea - schimbarea unui modul nu necesită schimbarea altor module.
  • Schimbabilitatea modulelor (Swappability) - modulul poate fi înlocuit cu ușurință cu altul.
  • Testarea unității – O unitate poate fi detașată de toate celelalte și testată/reparată .
  • Reutilizabilitate - modulul poate fi reutilizat în alte programe și alte medii.
  • Întreținere - un program care este împărțit în module este mai ușor de înțeles și întreținut.

Se poate spune că împărțirea unei probleme complexe în fragmente simple este scopul tuturor tehnicilor de proiectare . Iar termenul „arhitectură” în majoritatea cazurilor se referă pur și simplu la rezultatul unei astfel de diviziuni plus „unele decizii de proiectare care, odată adoptate, sunt greu de schimbat” (Martin Fowler „Arhitectura aplicațiilor software pentru întreprinderi”).

Prin urmare, majoritatea definițiilor într-o formă sau alta se rezumă la următoarele:

Arhitectura identifică principalele componente ale sistemului și modul în care acestea interacționează. De asemenea, alegerea unor astfel de decizii este interpretată ca fiind fundamentală și nu poate fi modificată în viitor .”

Arhitectura este organizarea unui sistem, întruchipată în componentele sale, relația acestora între ele și cu mediul. Un sistem este un set de componente combinate pentru a îndeplini o anumită funcție.

Astfel, o arhitectură bună este, în primul rând, o arhitectură modulară/bloc . Pentru a obține o arhitectură bună, trebuie să știți cum să descompuneți corect sistemul. Aceasta înseamnă că este necesar să înțelegeți care descompunere este considerată „corectă” și cum este cel mai bine să o efectuați.