Arquitectura de Sistemes d'Informació

Al seu excel·lent llibre [FOW], Fowler documenta una sèrie de patrons arquitectònics (o patrons de disseny arquitectònics, com més us agradi) per al desenvolupament de Sistemes d’Informació. L’obra és una gran guia de referència per a arquitectures que molts ja aplicaven anteriorment però que pocs havien documentat i estableix, molt acuradament, un llenguatge comú (gràcies a l’ús de patrons) per a referir-nos a aquestes arquitectures. Aquest article documenta unes quantes arquitectures típiques en termes dels patrons de Fowler per tal de donar una visió ràpida amb alguns exemples concrets sobre com es combinen i interactuen els patrons que Fowler documenta.

Arquitectura en 3 capes

La pròpia arquitectura en 3 capes és documentada com a patró arquitectònic per alguns autors (incloent-nos-hi, i perdonin que em citi a mi mateix, nosaltres a [UOC-EPOO]). Aquesta arquitectura proposa separar el sistema en 3 capes cadascuna de les quals treballi a un nivell d’abstracció diferent:
  • Capa de Presentació: El seu nivell d’abstracció és el dels elements d’interfície gràfica d’usuari (pantalles, botons, etc.)
  • Capa de Domini: El seu nivell d’abstracció és el dels conceptes del sistema i les seves responsabilitats les d’implementar les regles de negoci.
  • Capa de Serveis tècnics: El seu nivell d’abstracció és el de la plataforma (sistema operatiu, fitxers, etc.) i les seves responsabilitats les d’aïllar en la mesura del possible la capa de domini dels elements de la plataforma.
Val a dir que les dependències entre capes en una arquitectura en 3 capes d’un sistema d’informació no és exactament la que caldria esperar del patró capes tal com el documenta [POSA], ja que la Capa de Domini (típicament dibuixada entre les de Presentació i Serveis tècnics) treballa, en realitat, a un nivell d’abstracció superior a les altres dues. Però aquesta és matèria per a un altre article.

El patró controlador

Per a establir una separació més estricta entre les capes que formen una arquitectura en 3 capes, és convenient aïllar al màxim possible els components de cada capa. Una forma d’aconseguir això és mitjançant el patró Controlador de Larman (documentat [LAR]). Aquest patró ens indica que el responsable de rebre una petició en una determinada capa sigui un controlador: Un objecte que té com a única responsabilitat, justament la de capturar peticions a la seva capa. Larman, que proposa els controladors només per a la Capa de Domini, ens els indica de dos tipus:
  • Controlador de façana: Només n'hi ha un per a tota la capa i controla totes les peticions a la capa
  • Controlador de cas d'ús: N'hi ha un per cas d'ús (i una instància per cada execució d'un cas d'ús) i cada un controla totes les peticions a la capa que es donin dins el mateix cas d'ús.
El patró controlador permet que la Capa de Presentació no s’acobli a un número excessiu de components de la Capa de Domini i que aquesta, al seu torn, no s’acobli a un número excessiu de components de la capa de Serveis Tècnics. Malgrat que Fowler no el fa servir (tot i parlar de Service Layer, que s’hi assembla), considero que és un patró molt útil. És especialment interessant el fet que aquest patró ens permet separar la interfície de la implementació dels serveis tècnics i invertir les dependències entre aquestes dues capes. Aquests dos resultats són interessants si atenem als principis de disseny de Robert C. Martin entre d’altres (vegeu el Principi d'Inversió de Dependències (DIP) i el Principi de Segregació d'Interfícies (ISP) que són dos dels interessants articles que podeu trobar a ObjectMentor.

Les estrelles convidades: Els patrons de Fowler

Algunes arquitectures típiques

A continuació faig una presentació d’algunes de les arquitectures més populars avui en dia (sobretot en entorns web) i les situo en termes dels patrons documentats per Fowler. Per a cada una, faré servir un exemple de tecnologia en voga avui en dia que la fa servir.

ADO.Net: Table Module + Record Set + Table Data Gateway

En breu, més…

Ruby on Rails: Domain Model + Active Record

En breu, més…

Hibernate / JPA: Domain Model + Data Mapper

En breu, més…

Arquitectures basades en Transaction Script

En breu, més…

Referències

blog comments powered by Disqus