domingo, 27 de noviembre de 2011

Estilos y Patrones de Arquitecturas

El contenido de esta entrada es un resumen de la información sobre estilos y patrones
de arquitectura de software presentados por Nenad Medvidovic en una conferencia
dictada en el marco del Máster Europeo de Ingeniería de Software de la Universidad
Politécnica de Madrid, en abril de 2011.

Estilos de Arquitectura de Software

Un "estilo" de arquitectura es un conjunto de decisiones de diseño arquitectural
que son aplicables en un contexto de desarrollo específico, restringen las decisiones
de diseño de un sistema a ese contexto y plantean como objetivo ciertas cualidades
para el sistema resultante.

  • Establecen un vocabulario común, donde se dan nombres a los componentes y conectores
    así como a los elementos de datos
  • Establecen un conjunto de reglas de configuración, como la topología del sistema
  • Definen una semántica para las reglas de composición de los elementos
  • Posibilitan el análisis de los sistemas construidos sobre el estilo

Algunos ejemplos de estilos arquitecturales:

  • Influenciados por los Lenguajes de Programación
    • Programación estructurada
    • Orientado a Objetos
  • Capas
    • Máquinas Virtuales
    • Cliente Servidor
    • n-Tier
  • Peer-to-Peer
  • Flujo de Datos
    • Batch
    • Pipes and Filters
  • Memoria Compartida
    • Blackboard
    • Rule Based
  • Interprete
  • Invocación Implícita
    • Event-based
    • Publisher-suscriber

Patrones de Arquitecturas de Software

Un Patrón de Arquitectura de Software es un conjunto de decisiones de diseño que
se pueden aplicar a un problema de diseño recurrente y que pueden parametrizarse
para diferentes contextos donde ese problema de diseño aparece.

  • Estructuras
    • Capas
    • Pipes and Filters
    • Blackboard
  • Sistemas Interactivos
    • Model-View-Controller
    • Presentation-Abstraction-Communication
  • Sistemas Distribuidos
    • Broker
    • Trader
  • Sistemas Adaptables
    • Reflection
    • Microkernel

Entonces, ¿Cuál es la diferencia entre un estilo y un patrón de Arquitectura de Software? Tal como yo lo entiendo, un patrón es una solución prediseñada para un problema que puede aplicarse en cualquier contexto donde se presente el problema. Un estilo es un modelo conceptual que define un vocabulario común. Algunas decisiones de diseño arquitectural pueden actuar al mismo tiempo como estilos y patrones.

¿Cuál es la diferencia entre un Patrón de Diseño y un Patrón Arquitectural? Un patrón arquitectural expresa un esquema de organización estructural fundamental de un sistema mientras que un patrón de diseño provee un esquema para refinar los subsistemas o componentes de un sistema y las relaciones entre ellos.