Cos'è l’architettura?
02 Sep 2022 - Giulio Vian - ~3 minuti
Le definizioni sono importanti e quando sento usare il termine architettura in riferimento a classi e pattern di programmazione interni ad un programma mi trovo in difficoltà. Probabilmente è un mio problema, così son andato a vedere cosa si dice in letteratura e non siamo in una situazione esaltante.
Martin Fowler in Software Architecture Guide (martinfowler.com) menziona due approcci:
the shared understanding that the expert developers have of the system design
e
Architecture is about the important stuff. Whatever that is
non esattamente una definizione precisa (Aristotele dove sei?).
In origine
Vediamo se l’origine del termine e gli usi comuni ci vengono in aiuto. La prima definizione che troviamo nel vocabolario Treccani è
L’arte di formare, attraverso mezzi tecnico-costruttivi, spazî fruibili ai fini dei bisogni umani: edifici, autostrade, ponti o altre opere di ingegneria, giardini e anche monumenti (obelischi, colonne onorarie, ecc.), considerati nella loro funzione spaziale.
In senso figurato è la
Composizione, struttura, modo con cui sono congegnate e distribuite le varie parti di un organismo o di un’opera
A mio parere emergono alcuni elementi importanti: l’aspetto spaziale (qui e là, sopra e sotto) e quindi le relazioni tra parti (proporzioni, armonie, sequenze e forze).
Quando parliamo di architettura pensiamo anzitutto ad un edificio e a come si colloca nello spazio immediatamente circostante. Non pensiamo certo all’arredamento, che guarda caso indichiamo con progettazione d’interni (interior design), o a come siano affrescati i muri, né agli impianti. Tutte queste cose non sono l’architettura dell’edificio bensì ne sono dirette.
Non si tratta di una metafora secondaria, perché in informatica abbiamo scelto di usare questo vocabolario invece di un altro, che so una metafora biologica, per cui parleremmo di organi, sistemi e organismi.
È utile domandarci, allora, quale sia l’equivalente di una struttura muraria in informatica.
In pratica
A mio avviso l’equivalente del muro è il confine di un processo, se vogliamo essere precisi la transizione tra user mode e kernel mode. Quando il mio programma si connette ad un database, chiama una API (syscall) per aprire la connessione con un altra macchina; se il database è un file local, il processo dovrà comunque passare dal kernel per aprirlo. Ogni comunicazione significativa, che sia locale alla macchina o distribuita sulla rete, passa sempre dal kernel.
Potremmo quindi dare un criterio molto semplice:
architettura è la descrizione delle interazioni tra due o più processi.
In sintesi
A mio avviso parlare di architettura per quanto avviene all’interno di un processo è quantomeno improprio. Il termine architettura si applica quando descriviamo la distribuzione di un sistema e le sue dipendenze.
Voi che ne pensate?