Architectural Styles and Patterns

La specifica di un Architettura Software passa attraverso l’analisi dei requisiti funzionali e non funzionali che il sistema dovrà soddisfare.

Una volta raggiunto una sufficiente analisi (in modo classico o sfruttando un approccio Agile come, ad esempio, DAD), è possibile definire l’(Intentional) Architecture che costituirà l’ossatura del software che andremo a realizzare.

In tale definizione, il sistema viene scomposto in elementi più semplici, a differente granularità, che permettono di catturare molti dei requisiti qualitativi e consentono di valutare più approfonditamente l’effort afferente. Tale attività viene effettuata dal Software Architect (nelle varie accezioni) che suddivide la descrizione in Viste e sfrutta gli Stili (Style) e i Pattern Architetturali per illustrare le proprie scelte.

Ecco, abbiamo incontrato due elementi che spesso creano confusione: che differenza c’è tra un Architectural Style ed un Architectural Pattern?

Diciamo subito che spesso entrambi vengono usati in modo intercambiabile, quasi come sinonimi, esattamente come accade spesso per Design ed Architettura di un sistema. In alcuni casi ci troviamo difronte anche ad una (in)volontaria omonima (Layer Pattern e Pattern Style).

Vediamo due delle definizioni tratte da Software Architecture: Foundations, Theory, and Practice:

An Architectural Pattern is a named collection of architectural design decisions that…

… are applicable to a recurring design problem parameterized to account for different software development contexts in which that problem appears.

An Architectural Style is a named collection of architectural design decisions that

… (1) are applicable in a given development context, (2) constrain architectural design decisions that are specific to a particular system within that context, and (3) elicit beneficial qualities in each resulting system.

Probabilmente dalla semplice lettura delle due definizioni non è così immediate estrarre le relative differenze. Ma se si analizza bene il testo si vede che il punto di partenza è differente: in pratica l’Architectural Pattern è pensato per risolvere un problema ben noto applicato allo specifico contesto, mentre l’Architectural Style è pensato per modellare il sistema al fine di raggiungere determinati elementi qualitativi.

Utilizzando una definizione pseudo-matematica, potremmo definirli come:

  • Architecture pattern: {problem, context} => architecture approach
  • Architecture style: architecture approach

Esiste inoltre una differenziazione nell’utilizzo dei Pattern e degli Stili all’interno delle Viste architetturali che chiarisce maggiormente le relative differente. All’interno delle Viste vengono utilizzati gli Stili che tipicamente afferiscono a tre categorie:

  1. Module styles
  2. Component-and-connector (C&C) styles
  3. Allocation styles

a ogni categoria appertengono una serie di stili, così come rappresentato nella figura seguente (tratta da Documenting Software Architectures, Views and Beyond)

architectural styles

Architectural Styles

Facciamo un esempio concreto.

Abbiamo il nostro sistema Vesuvius e vogliamo creare la Design View, in cui definiamo come il nostro sistema si scompone in moduli (per la differenza tra moduli e componenti rimando allo specifico post).

Immaginiamo di aver identificato alcuni moduli primari di Vesuvius, ma che, per ogni modulo, volgiamo descrivere la sua organizzazione interna, rappresentando i sotto-moduli che lo compongono e le relazioni tra essi.

In tal caso potremmo pensare di applicare il Decomposition Style che prevede la scomposizione in moduli secondo la regola dell’is-part-of:

decomposistion style

Decomposition Style

Ecco, in questo caso non abbiamo un Pattern che può assolvere al compito! Allo stesso modo nel Design che specializza l’Architettura, per la parte presentation potremmo optare per il Pattern MVC.

Volendo chiudere il discorso, possiamo affermare che:

  • Uno Stile Architetturale è utilizzato per descrivere l’organizzazione concettuale del sistema, evidenziato come esso sarà creato e come assolve alle specifiche funzioni;
  • Un Pattern Architetturale è, al contrario, è una soluzione completa per risolvere praticamente una specifica problematica afferente al sistema.

In tale ottica, come anche evidenziato dalla “formulazione matematica, un Pattern Architetturale è più legato allo specifico dominio e alla specifica tecnologia, mentre uno stile è più generico e facilmente utilizzabile in combinazione con altri stili.

Un ulteriore esempio: il pattern Broker specializza lo stile Publisher/Subscriber, ma lo stesso viene fatto dell’ESB.

Possiamo affermare che, tipicamente, usiamo gli stili e i pattern in combinazioni con due specifiche fasi di progettazione:

  • Definizione dell’Architettura -> Stili
  • Definizione del Design -> Pattern

agileiot logo  ac2 logodac dac dacdac dac psmii psmii safe cal1 less certazure fundamentals
mvp reconnect

Free Joomla templates by Ltheme