6.1 Decomposizione

Nonostante la varietà di criteri, il compito principale nello sviluppo di sistemi di grandi dimensioni è il compito di ridurre la complessità del sistema . Per ridurre la complessità, non è stata ancora inventata nient'altro che la divisione in parti.

A volte, per semplicità, questo è chiamato il principio del "divide et impera", ma, dal punto di vista dell'architetto del software, si parla di scomposizione gerarchica .

Un sistema complesso deve essere costruito da un piccolo numero di sottosistemi più semplici, ognuno dei quali, a sua volta, è costruito da parti più piccole, e così via fino a quando le parti più piccole sono abbastanza semplici da essere direttamente comprese e create.

Decomposizione

La grande novità è che questa soluzione non è solo l'unica conosciuta, ma anche universale. Oltre a ridurre la complessità, fornisce contemporaneamente flessibilità di sistema , buona scalabilità e maggiore resilienza duplicando le parti critiche.

Di conseguenza, quando si tratta di costruire l'architettura del programma, creare la sua struttura, ciò significa scomporre il programma in sottosistemi, servizi, livelli, subroutine e moduli funzionali e organizzare la loro interazione tra loro e con il mondo esterno.

E la cosa più preziosa qui è questa: più i sottosistemi sono indipendenti, più sicuro è concentrarsi sullo sviluppo di ciascuno di essi separatamente in un determinato momento e non preoccuparsi di tutte le altre parti.

6.2 Vantaggi dell'architettura modulare

L'uso del principio della scomposizione gerarchica ti consente di eliminare il caos in migliaia di classi del tuo codice. Ricordi che il tuo codice è suddiviso in pacchetti (pacchetto) e sottopacchetti? Questa è una delle espressioni per la scomposizione gerarchica.

Il tuo programma si trasforma da un mucchio di classi in un insieme di librerie e moduli che interagiscono tra loro secondo regole ben definite e semplici. Questo, a sua volta, ti consente di controllarne la complessità e ti dà anche l'opportunità di ottenere tutti i vantaggi che di solito sono associati al concetto di buona architettura.

Ecco i più basilari:

  • Scalabilità : la capacità di espandere il sistema e aumentarne le prestazioni aggiungendo nuovi moduli.
  • Manutenibilità : la modifica di un modulo non richiede la modifica di altri moduli.
  • Scambiabilità dei moduli (Swappability) - il modulo può essere facilmente sostituito con un altro.
  • Unit Testing – Un'unità può essere separata da tutte le altre e testata/riparata .
  • Riutilizzabilità : il modulo può essere riutilizzato in altri programmi e altri ambienti.
  • Manutenzione : un programma suddiviso in moduli è più facile da capire e mantenere.

Si può dire che spezzare un problema complesso in semplici frammenti è l'obiettivo di tutte le tecniche di progettazione . E il termine "architettura" nella maggior parte dei casi si riferisce semplicemente al risultato di tale divisione più "alcune decisioni di progettazione che, una volta adottate, sono difficili da modificare" (Martin Fowler "Architecture of Enterprise Software Applications").

Pertanto, la maggior parte delle definizioni in una forma o nell'altra si riducono a quanto segue:

" L'architettura identifica i componenti principali del sistema e il modo in cui interagiscono. È anche la scelta di tali decisioni che vengono interpretate come fondamentali e non soggette a modifiche in futuro ".

" L'architettura è l'organizzazione di un sistema, incarnata nei suoi componenti, nel loro rapporto tra loro e con l'ambiente. Un sistema è un insieme di componenti combinati per svolgere una funzione specifica ."

Pertanto, una buona architettura è, prima di tutto, un'architettura modulare/a blocchi . Per ottenere una buona architettura, devi sapere come scomporre correttamente il sistema. Ciò significa che è necessario capire quale scomposizione è considerata “corretta” e come è meglio eseguirla.