Privacy & Cookies
Questo sito utilizza i cookies. Continuando, accetti il loro utilizzo. Per saperne di più, incluso come controllare i cookie.
Questo post fa parte di The Software Architecture Chronicles, una serie di post sull’architettura software. In essi, scrivo di ciò che ho imparato sull’Architettura del Software, di come la penso e di come uso questa conoscenza. Il contenuto di questo post potrebbe avere più senso se leggete i post precedenti di questa serie.
Nell’ultimo post, ho scritto su come si sono evoluti i linguaggi di programmazione e cosa ci dice: che si sono evoluti sempre nella direzione di fornire più modularità e incapsulamento.
Nei prossimi post, scriverò sull’evoluzione degli stili architettonici e dei pattern architettonici, quindi oggi scriverò su cos’è uno stile architettonico e cos’è un pattern architettonico.
Come molta terminologia nello sviluppo del software, questi termini non sono chiari e persone diverse gli danno un significato diverso. MSDN dice che gli stili architettonici e i pattern architettonici sono la stessa cosa, ma personalmente, preferisco pensare a questi nelle linee di ciò che è spiegato da George Fairbanks e Michael Keeling, ciò che è detto in queste risposte di stack overflow e come Wikipedia separa i due: la differenza chiave è lo scopo.
È anche importante rinforzare l’idea che gli stili architettonici, i pattern architettonici e i design pattern non si escludono a vicenda, sono complementari e tutti possono insegnarci qualcosa, anche se, come al solito, dovrebbero essere usati solo quando necessario.
Stili architettonici
Gli stili architettonici ci dicono, a grandi linee, come organizzare il nostro codice. È il più alto livello di granularità e specifica i livelli, i moduli di alto livello dell’applicazione e come questi moduli e livelli interagiscono tra loro, le relazioni tra loro. Esempi di stili architettonici:
- Component-based
- Monolithic application
- Layered
- Pipes and filters
- Event-driven
- Publish-subscribe
- Plug-in
- Client-server
- Service-oriented
Un Architectural Style può essere implementato in vari modi, con un ambiente tecnico specifico, politiche specifiche, framework o pratiche.
Modelli architettonici
Un modello è una soluzione ricorrente ad un problema ricorrente. Nel caso degli Architectural Patterns, essi risolvono i problemi relativi allo stile architettonico. Per esempio, “quali classi avremo e come interagiranno, per implementare un sistema con un insieme specifico di livelli”, o “quali moduli di alto livello avremo nella nostra architettura orientata ai servizi e come comunicheranno”, o “quanti livelli avrà la nostra architettura client-server”.
I Patterns Architetturali hanno un ampio impatto sul codice base, il più delle volte impattando l’intera applicazione sia orizzontalmente (cioè come strutturare il codice all’interno di un livello) o verticalmente (cioè come una richiesta viene processata dai livelli esterni ai livelli interni e viceversa). Esempi di modelli architettonici:
- Three-tier
- Microkernel
- Model-View-Controller
- Model-View-ViewModel
Design Patterns
I Design Patterns differiscono dagli Architectural Patterns nel loro scopo, sono più localizzati, hanno meno impatto sul codice base, hanno un impatto su una sezione specifica del codice base, per esempio:
- Come istanziare un oggetto quando sappiamo solo quale tipo deve essere istanziato a run time (forse una classe Factory?);
- Come fare in modo che un oggetto si comporti diversamente a seconda del suo stato (forse una macchina a stati, o uno Strategy Pattern?).
Conclusione
Come ho detto all’inizio di questo post, è tutta una questione di scopo:
- Uno Stile Architetturale è il design dell’applicazione al più alto livello di astrazione;
- Un Architectural Pattern è un modo per implementare uno Stile Architetturale;
- Un Design Pattern è un modo per risolvere un problema localizzato.
Inoltre, un pattern potrebbe essere usato sia come Architectural Pattern che come Design Pattern, sempre a seconda dell’ambito in cui lo usiamo, in un progetto specifico.
Fonti
2004 – Microsoft – Understanding Service-Oriented Architecture
2009 – Microsoft – Microsoft Application Architecture Guide
2010 – Stack Overflow – Qual è la differenza tra Arch. Patterns e Arch. Styles?
2014 – George Fairbanks – Architecture Patterns vs. Architectural Styles
2017 – Wikipedia – Elenco degli stili e dei pattern dell’architettura software