Stili architettonici vs. Patterns architettonici vs. Design Patterns

X

Privacy & Cookies

Questo sito utilizza i cookies. Continuando, accetti il loro utilizzo. Per saperne di più, incluso come controllare i cookie.

Ho capito!

Pubblicità

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

Annunci

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *