Patrones de Diseño Empresariales - Principalcs.uns.edu.ar/~atrellini/ayds/downloads/Clases/14. AyDS...
-
Upload
truongminh -
Category
Documents
-
view
250 -
download
0
Transcript of Patrones de Diseño Empresariales - Principalcs.uns.edu.ar/~atrellini/ayds/downloads/Clases/14. AyDS...
23/05/2015
1
Lic. Ariel Trellini
Departamento de Ciencias e Ingeniería de la ComputaciónUniversidad Nacional del Sur
Arquitectura y Diseño de Sistemas • 2 Lic. Ariel Trellini • DCIC • UNS
Patrones de Diseño Empresariales
Llamando las cosas con un nombre
Arquitectura y Diseño de Sistemas • 3 Lic. Ariel Trellini • DCIC • UNS
Bibliografía
Patrones de Diseño Empresariales
Martin Fowlerwww.martinfowler.com
Patterns of Enterprise Application Architecture (2002)
Arquitectura y Diseño de Sistemas • 4 Lic. Ariel Trellini • DCIC • UNS
¿Qué son los Patrones de Diseño?
Patrones de Diseño Empresariales
¿Alguno puede esbozar una definición de patrón de diseño?
Cada patrón describe un problema que ocurre una y otra vez en
nuestro ambiente, y luego describe el núcleo de la solución a
aquel problema, de forma tal que dicha solución pueda utilizarse
un millón de veces más, sin hacer exactamente lo mismo dos
veces.
Christopher Alexander
Arquitectura y Diseño de Sistemas • 5 Lic. Ariel Trellini • DCIC • UNS
Tener en cuenta el contexto El punto clave de esta definición es que un patrón define el núcleo de la
solución de un problema y no la solución exacta a aplicar.
Nunca se puede aplicar a ciegas la solución provista por un patrón de diseño, siempre es necesario considerar el contexto del problema.
Conocerlos, aunque no en detalle
Patrones de Diseño Empresariales ¿Qué son los Patrones de Diseño?
CONOCIMIENTO
Requerido Opcional
Qué patrones existen Los detalles de la solución
Qué problemas resuelven Las variantes posibles
Una idea de la manera en que resuelven el problema
Arquitectura y Diseño de Sistemas • 6 Lic. Ariel Trellini • DCIC • UNS
Independencia relativa Cada patrón es relativamente independiente, pero no están aislados unos
de otros.
Ejemplo:
Class Table Inheritance Domain Model
Auto-definición Los límites entre patrones muchas veces son muy difusos, pero se intenta
que sean tan auto-definidos como se pueda.
Ayuda en la comunicación Para desarrolladores experimentados, el valor de un patrón de diseño no
está en obtener una nueva idea, sino en ayudar a comunicar la idea.
Patrones de Diseño Empresariales ¿Qué son los Patrones de Diseño?
23/05/2015
2
Arquitectura y Diseño de Sistemas • 7 Lic. Ariel Trellini • DCIC • UNS
Aplicaciones Empresariales
Patrones de Diseño Empresariales Aplicaciones Empresariales
Aplicaciones Empresariales Aplicaciones No Empresariales
Sistema de sueldos Inyección de combustible en autos
Administración de pacientes Procesadores de texto
Seguimientos postales Controladores de ascensores
Seguros Controladores de planta
Banca electrónica Switches telefónicos
Sistemas contables Sistemas operativos
Stock Compiladores
Venta electrónica Juegos
Retail
Arquitectura y Diseño de Sistemas • 8 Lic. Ariel Trellini • DCIC • UNS
Caracterísiticas
Datos Persistentes: La información persistida generalmente es el núcleo del sistema y su ciclo de vida es más amplio que el del resto de los componentes.
Gran Cantidad de Datos: Un sistema moderado contará con alrededor de 1GB de datos, organizados en decenas de millones de registros, siendo esta información la mayor parte del sistema.
Acceso Concurrente a Datos: Generalmente muchas personas acceden a los datos concurrentemente. Debido a esto, hay problemas bien determinados que deben abordarse para asegurar que los distintos usuarios pueden acceder a la información de manera confiable.
Patrones de Diseño Empresariales Aplicaciones Empresariales
Arquitectura y Diseño de Sistemas • 9 Lic. Ariel Trellini • DCIC • UNS
Caracterísiticas (cont.)
Gran Cantidad de UI: Para manejar tanta información es necesario disponer de cientos de pantallas que permitan presentar los datos de distinta forma y, eventualmente, para distintas audiencias.
Integrado con Otras Aplicaciones Empresariales: Las aplicaciones empresariales raramente viven de manera aislada; generalmente requieren integrarse con otras aplicaciones de la empresa o fuera de la misma
Lógica de Negocio Compleja: Las reglas de negocio nos caen encima y por más que intentemos darle integridad lógica, no se puede hacer mucho. Unas pocos miles de estos casos extraordinarios es lo que conduce a una “compleja ilógica de negocio” que hace que el sw de negocios sea tan complejo.
Patrones de Diseño Empresariales Aplicaciones Empresariales
Arquitectura y Diseño de Sistemas • 10 Lic. Ariel Trellini • DCIC • UNS
Separación en Capas Básica
Patrones de Diseño Empresariales Layering
• Interpretar los comandos del usuario y mostrar información al usuario. Presentación
• Tareas que la aplicación necesita realizar para cumplir con los requerimientos del negocio que resuelve la aplicación.
Dominio
• Comunicarse con otros sistemas que realizan tareas por medio de la aplicación.
Acceso a Datos
Layering a Considerar
Arquitectura y Diseño de Sistemas • 11 Lic. Ariel Trellini • DCIC • UNS
Disposición de las Capas
¿Cómo implemento una capa?
Patrones de Diseño Empresariales Layering
Presentación
Dominio
Acceso a Datos
Opción 1
Presentación
Dominio
Acceso a Datos
Opción 2
Métodos
Clases
Componentes
Layering Depende de la complejidad de la aplicación
Arquitectura y Diseño de Sistemas • 12 Lic. Ariel Trellini • DCIC • UNS
Organizando la Lógica de Dominio
Transaction Script
Domain Model
Table Module
Service Layer
Patrones de Diseño Empresariales
Presentación
Dominio
Acceso a Datos
23/05/2015
3
Arquitectura y Diseño de Sistemas • 13 Lic. Ariel Trellini • DCIC • UNS
Transaction Script
Patrones de Diseño Empresariales Organizando la Lógica de Dominio
Organiza la lógica de negocio por procedimiento, donde cada
procedimiento maneja un único request desde la capa de
presentación.
Presentación
Dominio
Acceso a Datos
Pre
sen
taci
ón
Acc
eso
a D
ato
s
Dominio
Reservar Aula
Inscribir Alumno
Calcular Promedio
Asignar Nota
Programar Clase
Un Transaction Script organiza cada una de estas transacciones de negocio (funcionalidades) en un único procedimiento, haciendo las llamadas pertinentes a la capa de acceso a datos. Cada transacción de negocio tendrá su propio TransactionScript, aunque sub-tareas comunes pueden ser aisladas en sub-procedimientos.
Arquitectura y Diseño de Sistemas • 14 Lic. Ariel Trellini • DCIC • UNS
¿Cómo Trabaja? Un Transaction Script se podría resumir en validar los datos de entrada,
consultar la bd, realizar cálculos y guardar los resultados en la bd.
Patrones de Diseño Empresariales Organizando la Lógica de Dominio Transaction Script
Presentación
Dominio
Acceso a Datos
Arquitectura y Diseño de Sistemas • 15 Lic. Ariel Trellini • DCIC • UNS
¿Dónde poner los Transaction Scripts?
Recomendación
Separar los Transaction Script tanto como podamos.
No realizar ninguna llamada desde un Transaction Script a lógica de Presentación.
Poner los Transaction Scripts en clases de una de la siguiente forma:
Tener varios TS en una única clase, donde cada clase define un área sujeto de TS relacionados. Esto es directo y la más apropiada en muchos casos. Ejemplo: NotasService, ClasesService, etc.
Tener cada TS en su propia clase utilizando el patrón Command (GoF)
Patrones de Diseño Empresariales Organizando la Lógica de Dominio Transaction Script
Una server page
Un script CGI
Un método
Una clase
Un conjunto de clases
Presentación
Dominio
Acceso a Datos
Arquitectura y Diseño de Sistemas • 16 Lic. Ariel Trellini • DCIC • UNS
¿Cuándo utilizarlo? Dada su simplicidad, es natural utilizarlo en aplicaciones que tenga poca
lógica de negocios, ya que involucra poco overhead tanto en performance como en curva de aprendizaje.
A medida que la lógica de negocio se torna más compleja, es difícil mantenerlo con un buen diseño.
Generalmente se tiene problemas con la duplicación de código. Puesto que el foco está en resolver una transacción, muchas veces se tiende a duplicar código común.
Patrones de Diseño Empresariales Organizando la Lógica de Dominio Transaction Script
Presentación
Dominio
Acceso a Datos
Arquitectura y Diseño de Sistemas • 17 Lic. Ariel Trellini • DCIC • UNS
Domain Model
Patrones de Diseño Empresariales Organizando la Lógica de Dominio
Un modelo de objetos del dominio que incorpora tanto
comportamiento como datos.
Presentación
Dominio
Acceso a Datos
Un Domain Model crea una red de objetos interconectados, donde cada objeto representa a un concepto significativo, ya sea tan grande como una corporación o tan pequeño como un ítem de una factura.
Pre
sen
taci
ón
Acc
eso
a D
ato
s
Dominio
Aula
Alumno
InscripcionMateria
Nota
ClaseCarrera
Profesor
Arquitectura y Diseño de Sistemas • 18 Lic. Ariel Trellini • DCIC • UNS
¿Cómo Trabaja?
Patrones de Diseño Empresariales Organizando la Lógica de Dominio Domain Model
Presentación
Dominio
Acceso a Datos
Data Objects
Business Rules
DomainModel
Insertar una capa entera de objetos que modelen el negocio
Muchas veces utilizamos 2 tipos de objetos para la capa de negocios: objetos que representan los datos y objetos que capturan las reglas que el negocio utiliza. Con este patrón se combinan estos dos tipos de objetos para poner los procesos de negocio cerca de los datos con los que trabaja.
23/05/2015
4
Arquitectura y Diseño de Sistemas • 19 Lic. Ariel Trellini • DCIC • UNS
Ejemplo
Patrones de Diseño Empresariales Organizando la Lógica de Dominio Domain Model
Presentación
Dominio
Acceso a Datos
Arquitectura y Diseño de Sistemas • 20 Lic. Ariel Trellini • DCIC • UNS
Diferencias entre un Domain Model y un Database Model DM mezcla datos y procesos
DM tiene atributos multivaluados
DM tiene una compleja red de asociaciones
DM usa herencia
Tipos de Domain Model Simples: Lucen muy parecidos al modelo de base de datos, normalmente
con un objeto de dominio por cada tabla de la base de datos. Puede utilizar el patrón Active Record para el acceso a datos.
Ricos: Puede lucir diferente al modelo de base de datos, incorporando herencia, strategies, otros patrones de diseño orientados a objetos [GoF] y redes complejas de pequeños objetos interconectados. Requiere utilizar el patrón Data Mapper para el acceso a datos.
Patrones de Diseño Empresariales Organizando la Lógica de Dominio Domain Model
Presentación
Dominio
Acceso a Datos
Arquitectura y Diseño de Sistemas • 21 Lic. Ariel Trellini • DCIC • UNS
¿Cuándo utilizarlo?Existen varios factores que pueden determinar el uso o no de un Domain Model:
Complejidad de comportamiento del sistema
Si tenemos reglas de negocio complicadas y cambiantes que involucran validaciones, cálculos, etc, sería preferida la utilización de un Domain Model. En cambio, si solamente se tienen chequeos de campos requeridos y un par de sumas para realizar, probablemente sea suficiente con Transaction Script.
Comodidad del equipo en el uso de objetos de domino
Aprender a diseñar y usar un Domain Model es un ejercicio significativo. Principalmente lleva práctica y coaching, pero una vez que se utiliza correctamente poca gente quiere volver a un Transaction Script para situaciones que no sean demasiado simples.
Posibilidad de utilizar un Data Mapper para el acceso a datos
En algunas circunstancias, no es posible o lleva mucho esfuerzo utilizar un Data Mapper y esto complica la utilización de Domain Model.
Patrones de Diseño Empresariales Organizando la Lógica de Dominio Domain Model
Presentación
Dominio
Acceso a Datos
Arquitectura y Diseño de Sistemas • 22 Lic. Ariel Trellini • DCIC • UNS
Table Module
Patrones de Diseño Empresariales Organizando la Lógica de Dominio
Una única instancia que maneja la lógica de dominio para todas
las filas en una tabla o vista de la base de datos.
Presentación
Dominio
Acceso a Datos
Un Table Module organiza la lógica de dominio con una clase por tabla de base de datos, y una única instancia de una clase contiene los distintos procedimientos que actuarán sobre los datos. Así se logra también agrupar los datos con el comportamiento que los utiliza.
Pre
sen
taci
ón
Acc
eso
a D
ato
s
Dominio
Aulas
Alumnos
InscripcionesMateria
Notas
ClasesInscripciones
Profesores
Arquitectura y Diseño de Sistemas • 23 Lic. Ariel Trellini • DCIC • UNS
¿Cómo Trabaja?A simple vista Table Module se parece a un objeto regular. Sin embargo, veamos
algunas características que ilustran su funcionamiento con más detalle.
Sin identidad Table Module no tiene noción de identidad de los objetos con los que
trabaja.
Ejemplo: Obtener el nombre de un alumno.
string alumnosModule.ObtenerNombre(long alumnoID)
Patrones de Diseño Empresariales Organizando la Lógica de Dominio Table Module
Si tenemos muchos alumnos, Domain Model tendrá un objeto Alumno por
cada alumno; mientras que Table Module tendrá un objeto que maneje
todos los alumnos.
Entonces… ¿en qué se diferencian Table Module con Domain Model?
Presentación
Dominio
Acceso a Datos
Arquitectura y Diseño de Sistemas • 24 Lic. Ariel Trellini • DCIC • UNS
Estructura de datos de respaldo Generalmente se usa un Table Module con una estructura de
datos de respaldo que sea orientada a tablas.
Normalmente estos datos tabulares resultan de una consulta SQL y se mantiene en un Record Set que imita a la tabla en la base de datos.
La forma de uso más común es tener una Table Module por cada tabla en la base de datos. Sin embargo, si se presentan vistas o consultas de base de datos relevantes, se puede tener un Table Module para ellas también.
Implementación Colección de métodos estáticos: Poco usada ya que siempre trabajaría
sobre la tabla entera.
Instancia:
Permite inicializar el Table Module con un record set existente (probablemente el resultado de una consulta)
Permite el uso de herencia: Se podría construir un Table Module AlumnoPosgrado que contenga comportamiento adicional al alumno regular.
Patrones de Diseño Empresariales Organizando la Lógica de Dominio Table Module
Presentación
Dominio
Acceso a Datos
23/05/2015
5
Arquitectura y Diseño de Sistemas • 25 Lic. Ariel Trellini • DCIC • UNS
Patrones de Diseño Empresariales Organizando la Lógica de Dominio Table Module
Interacción típica de las capas alrededor de un Table Module
Presentación
Dominio
Acceso a Datos
Arquitectura y Diseño de Sistemas • 26 Lic. Ariel Trellini • DCIC • UNS
Ejemplo
Patrones de Diseño Empresariales Organizando la Lógica de Dominio Table Module Presentación
Dominio
Acceso a Datos
Arquitectura y Diseño de Sistemas • 27 Lic. Ariel Trellini • DCIC • UNS
¿Cuándo utilizarlo?
Las recomendaciones ante distintos escenarios, podrían ser:
Dado que está basado en la manipulación de datos orientados a tablas, cobra mayor sentido utilizarlo cuando se está accediendo a datos tabulares usando Record Set.
Trabaja mejor que Domain Model + Active Record cuando otras partes de la aplicación están basadas en una estructura de datos orientada a tablas.
Patrones de Diseño Empresariales Organizando la Lógica de Dominio Table Module
Presentación
Dominio
Acceso a Datos
Facilidad para manejar lógica compleja
Facilidad de integración con estructuras de datos orientadas a tablasD
om
ain
Mo
del
Table
Mo
du
le
Arquitectura y Diseño de Sistemas • 28 Lic. Ariel Trellini • DCIC • UNS
En casos de alta complejidad de lógica de negocios, Domain Model es una mejor opción. Con Table Module se pierde el poder de la orientación a objetos en organizar lógica compleja: no se pueden tener relaciones entre instancias, ni polimorfismo.
Patrones de Diseño Empresariales Organizando la Lógica de Dominio Table Module
Presentación
Dominio
Acceso a Datos
Arquitectura y Diseño de Sistemas • 29 Lic. Ariel Trellini • DCIC • UNS
Service Layer
Patrones de Diseño Empresariales Organizando la Lógica de Dominio
Define el límite de una aplicación con una capa de servicios que
establecen el conjunto disponible de operaciones y coordina la
respuesta de la aplicación en cada operación.
Presentación
Dominio
Acceso a Datos
UI
Acc
eso
a D
ato
s
Dominio
Serv
ice
Laye
r
DomainLogic
Otros Sistemas
BPMs
Arquitectura y Diseño de Sistemas • 30 Lic. Ariel Trellini • DCIC • UNS
Patrones de Diseño Empresariales Organizando la Lógica de Dominio Service Layer
Razones de ejemplo para proveer una Service Layer :
Proveer una API sobre la lógica de negocio que puede ser consumida desde
distintos clientes: UI, otras aplicaciones, BPMs, etc.
Manejar transacciones a través de múltiples recursos (por ej, Tx
Distribuidas) y coordinar distintas respuestas para una operación
(workflows, lógica de interacción con otros sistemas).
Presentación
Dominio
Acceso a Datos
23/05/2015
6
Arquitectura y Diseño de Sistemas • 31 Lic. Ariel Trellini • DCIC • UNS
¿Qué se resuelve en la Service Layer? Lógica de Aplicación
Está relacionada a responsabilidades de la aplicación (envío de notificaciones, integración con otras aplicaciones, etc). También se la conoce como “lógica de workflow”. Éste es el tipo de lógica involucrado en una Service Layer.
¿Dónde poner la Lógica de Aplicación? Service Layer factoriza la lógica de aplicación en una capa separada,
promoviendo los beneficios conocidos de layering y produciendo clases de negocio puras y más reusables de aplicación en aplicación.
Desventajas de poner lógica de aplicación dentro de las clases de la lógica de dominio:
Las clases de domino son menos reutilizables entre aplicaciones
Mezclar ambos tipos de lógica en una misma clase hace más difícil reimplementar la lógica de aplicación en, por ej., una herramienta de workflows.
Patrones de Diseño Empresariales Organizando la Lógica de Dominio Service Layer
Presentación
Dominio
Acceso a Datos
Arquitectura y Diseño de Sistemas • 32 Lic. Ariel Trellini • DCIC • UNS
Remoto o No
Costo:
Tratar con distribución de objetos
Trabajo extra con Data Transfer Objects (DTOs)
Consejos
Comenzar con una Service Layer invocable localmente, cuyos métodos hablen en términos de los objetos del dominio.
Hacerla remota si fuera necesario, poniendo Remote Facades sobre la ServiceLayer, o haciendo que la Service Layer implemente interfaces remotas.
Si la aplicación tiene una Capa de Presentación web, no hay ninguna ley que diga que la lógica de negocio tiene que correr en un proceso separado. Por el contrario, se puede ahorrar esfuerzo de desarrollo y tiempo de respuesta sin sacrificar escalabilidad con una aproximación local.
Patrones de Diseño Empresariales Organizando la Lógica de Dominio Service Layer
Presentación
Dominio
Acceso a Datos
ServiceLayer
CoarseGrained
Invocación Remota
Arquitectura y Diseño de Sistemas • 33 Lic. Ariel Trellini • DCIC • UNS
Identificación de Servicios y Operaciones Las operaciones necesarias en una Service Layer están determinadas por las
necesidades de los clientes de dicha Service Layer (generalmente la UI)
Basarse en:
Modelo de casos de uso
Pantallas
Necesidades de interacción con otros sistemas
¿Cuándo utilizarlo? Más de un tipo de cliente sobre la lógica de negocio
Se haga uso de múltiples recursos transaccionales
Un único tipo de cliente (generalmente la UI).
Se trabaja con una única base de datos.
Patrones de Diseño Empresariales Organizando la Lógica de Dominio Service Layer
Presentación
Dominio
Acceso a Datos
Arquitectura y Diseño de Sistemas • 34 Lic. Ariel Trellini • DCIC • UNS
Mapeando a Bases de Datos Relacionales
Patrones de Diseño Empresariales
Presentación
Dominio
Acceso a Datos
¿Cómo se puede resolver el desajuste entre modelo de objetos y modelo relacional?
Existen distintos tipos de patrones que consideran la problemática de la persistencia de datos:
Patrones Arquitectónicos
Patrones de Comportamiento Objeto-Relacional
Patrones Estructurales Objeto-Relacional
Patrones de Mapeo de Metadatos Objeto-Relacional
Arquitectura y Diseño de Sistemas • 35 Lic. Ariel Trellini • DCIC • UNS
Patrones de Diseño Empresariales Mapeando a Bases de Datos Relacionales
Tipo de Patrón Objetivo Patrones
Patrones Arquitectónicos
¿Cómo la lógica de dominio se comunica con la base de datos?
Table Data GatewayRow Data GatewayActive RecordData Mapper
Patrones de Comportamiento Objeto-Relacional
¿Cómo realizar el manejo de los objetos (cargarlos/guardarlos)?
Unit Of WorkIdentity MapLazy Load
Patrones Estructurales Objeto-Relacional
¿Cómo mapear los conceptos de la OO a la base de datos relacional?
Identity FieldForeing Key MappingAssociation Table MappingDependent MappingEmbedded ValueSerialized LOBInheritance Patterns…Inheritance Mapper
Patrones de Mapeo de Metadatos Objeto-Relacional
¿Cómo definir declarativamente el mapeo objeto-relacional y encapsularlo, proponiendo una interfaz orientada a objetos?
Metadata MappingQuery ObjectRepository
Presentación
Dominio
Acceso a Datos
Arquitectura y Diseño de Sistemas • 36 Lic. Ariel Trellini • DCIC • UNS
PATRONES ARQUITECTONICOS
Table Data Gateway
Patrones de Diseño Empresariales Mapeando a Bases de Datos Relacionales
Un objeto que actúa como Gateway a una tabla de base de datos.
Una instancia maneja todas las filas en la tabla.
Presentación
Dominio
Acceso a Datos
23/05/2015
7
Arquitectura y Diseño de Sistemas • 37 Lic. Ariel Trellini • DCIC • UNS
¿Cómo Trabaja?
Características: Su interfaz consiste de:
Métodos find para obtener información desde la BD
Métodos de actualización: insert, update, delete
Cada método ejecuta una sentencia SQL de acuerdo a sus parámetros.
Generalmente es stateless, ya que su rol es transferir datos entre el dominio y la BD.
En las consultas, siempre retorna un conjunto de datos: Map, RecordSet, DTOs
Patrones de Diseño Empresariales Mapeando a Bases de Datos Relacionales Table Data Gateway
Presentación
Dominio
Acceso a Datos
Arquitectura y Diseño de Sistemas • 38 Lic. Ariel Trellini • DCIC • UNS
¿Cuándo Utilizarlo?
Dado que su implementación es muy sencilla, sería apropiado para aplicaciones muy pequeñas que no cuentan con una lógica de acceso a datos compleja.
Si se ha decidido utilizar Table Modules para resolver la lógica de domino. Table Data Gateway es el mejor socio para estos casos, ya que produce los record sets que requiere un Table Module.
También es apropiado para Transaction Scripts, siempre y cuando el resultset sea conveniente para el Transaction Script.
La misma interfaz sirve para utilizar sentencias SQL directas o storedprocedures.
El resto de los casos.
Patrones de Diseño Empresariales Mapeando a Bases de Datos Relacionales Table Data Gateway
Presentación
Dominio
Acceso a Datos
Arquitectura y Diseño de Sistemas • 39 Lic. Ariel Trellini • DCIC • UNS
Row Data Gateway
Patrones de Diseño Empresariales Mapeando a Bases de Datos Relacionales
Un objeto que actúa como Gateway a un único registro en una
tabla de base de datos. Hay una instancia por fila.
Presentación
Dominio
Acceso a Datos
Un Row Data Gateway permite obtener objetos que lucen como los registros de una tabla, pero pueden ser accedidos a través de las facilidades del lenguaje de programación utilizado. De esta manera, se encapsula toda la lógica específica (generalmente SQL) de acceso a datos dentro del gateway.
Arquitectura y Diseño de Sistemas • 40 Lic. Ariel Trellini • DCIC • UNS
¿Cómo Trabaja?
Imita exactamente un registro de la base de datos, de manera tal que cada columna de la tabla es un campo del objeto.
Realiza todas las conversiones necesarias entre los tipos de datos de la base de datos y los tipos del lenguaje de programación.
Trabaja particularmente bien con Transaction Script.
Métodos de búsqueda:
Métodos estáticos.
Objetos de búsqueda (buscadores).
¿Cuál es diferencia entre Row Data Gateway y Active Record? La clave está en si existe lógica de dominio en estos objetos.
Row Data Gateway Sin lógica de dominio
Active Record Con lógica de dominio
Si bien es bastante tedioso de escribir, es muy utilizado por los generadores de código basados en Metadata Mapping.
Patrones de Diseño Empresariales Mapeando a Bases de Datos Relacionales Row Data Gateway
Presentación
Dominio
Acceso a Datos
Arquitectura y Diseño de Sistemas • 41 Lic. Ariel Trellini • DCIC • UNS
Patrones de Diseño Empresariales Mapeando a Bases de Datos Relacionales Row Data Gateway
Funcionamiento del Row Data gateway
Arquitectura y Diseño de Sistemas • 42 Lic. Ariel Trellini • DCIC • UNS
¿Cuándo Utilizarlo?
Principalmente, cuando se usa Transaction Script. Así, se factoriza el código de acceso a los datos y se lo reutiliza entre distintos scripts.
No sería conveniente utilizarlo en conjunto con Domain Model. Opciones:
• Si el mapeo es simple, usar Active Record.
• Si el mapeo es más complejo, usar Data Mapper.
• Si se utiliza para aislar a los objetos de domino de la estructura de base de datos, se tendrán 3 representaciones de los datos: una en los objetos de dominio, una en los Row Data Gateways y una en la base de datos.
Patrones de Diseño Empresariales Mapeando a Bases de Datos Relacionales Row Data Gateway
Presentación
Dominio
Acceso a Datos
23/05/2015
8
Arquitectura y Diseño de Sistemas • 43 Lic. Ariel Trellini • DCIC • UNS
Active Record
Patrones de Diseño Empresariales Mapeando a Bases de Datos Relacionales
Un objeto que wrappea una fila de una tabla de la base de datos,
encapsula la lógica de acceso a datos y agrega lógica de dominio
sobre aquellos datos.
Presentación
Dominio
Acceso a Datos
Active Record utiliza la opción más obvia: pone la lógica de acceso a datos en el objeto de dominio. De esta manera, todos los objetos de dominio conocen como guardar y leer sus datos.
Arquitectura y Diseño de Sistemas • 44 Lic. Ariel Trellini • DCIC • UNS
¿Cómo Trabaja?
La esencia de un Active Record es un Domain Model en el cual las clases se corresponden bastante con la estructura de tablas de la base de datos subyacente.
Cada Active Record es responsable tanto de guardarse y cargarse en/desde la base de datos, como de cualquier lógica de dominio que actúe sobre los datos.
Típicamente tiene métodos para:
Construir una instancia del Active Record a partir de una fila de un result set SQL.
Construir una nueva instancia que luego será insertada en la base de datos.
Métodos de búsqueda estáticos para factorizar queries SQL repetitivas y retornar instancias del Active Record.
Insertar y actualizar los datos del Active Record en la base de datos.
Obtener y asignar valores a los campos del Active Record.
Implementar algunas partes de la lógica de negocio.
Patrones de Diseño Empresariales Mapeando a Bases de Datos Relacionales Active Record
Presentación
Dominio
Acceso a Datos
Arquitectura y Diseño de Sistemas • 45 Lic. Ariel Trellini • DCIC • UNS
¿Cómo Trabaja? (Cont)
Los métodos get y set pueden realizar otras funciones como, por ejemplo, convertir tipos orientados a SQL a tipos propios del lenguaje de programación.
Se diferencia de Row Data Gateway en que Active Record contiene lógica de negocio.
Puede utilizar métodos de búsqueda estáticos o puede utilizar objetos de búsqueda (finders).
Patrones de Diseño Empresariales Mapeando a Bases de Datos Relacionales Active Record
Presentación
Dominio
Acceso a Datos
Arquitectura y Diseño de Sistemas • 46 Lic. Ariel Trellini • DCIC • UNS
¿Cuándo Utilizarlo?
Es una buena elección para la lógica de dominio que no sea demasidocompleja, tales como operaciones CRUD. Validaciones basadas en los datos de un único registro también funcionan bien.
Tiene la ventaja de la simplicidad comparado con Data Mapper.
Funcionan bien solamente si los objetos Active Record se corresponden directamente con las tablas de la base de datos.
Es un buen patrón a considerar si se está usando Transaction Script y se comienzan a sufrir sus desventajas (duplicación de código, mantenimiento, etc).
Si la lógica de dominio es más compleja, se querrán usar relaciones directas a objetos, colecciones, herencia, etc; cosas que no son fáciles de resolver con Active Record.
Acopla el diseño de objetos al diseño de base de datos.
Patrones de Diseño Empresariales Mapeando a Bases de Datos Relacionales Active Record
Presentación
Dominio
Acceso a Datos
Arquitectura y Diseño de Sistemas • 47 Lic. Ariel Trellini • DCIC • UNS
Data Mapper
Patrones de Diseño Empresariales Mapeando a Bases de Datos Relacionales
Una capa de Mappers que mueven datos entre los objetos y la
base de datos manteniéndolos independientes unos de otros y del
mapper en sí mismo.
Presentación
Dominio
Acceso a Datos
Los Data Mappers separan los objetos en memoria de la base de datos. Son responsables de transferir los datos entre ambos y de mantenerlos aislados uno de otro.
Arquitectura y Diseño de Sistemas • 48 Lic. Ariel Trellini • DCIC • UNS
¿Cómo Trabaja?
Hay muchas formas de construir una capa de Data Mappers. Sin embargo, veremos ejemplos sencillos para entender la idea.
Patrones de Diseño Empresariales Mapeando a Bases de Datos Relacionales Data Mapper
Presentación
Dominio
Acceso a Datos
Recuperar datos de una base de datos.
23/05/2015
9
Arquitectura y Diseño de Sistemas • 49 Lic. Ariel Trellini • DCIC • UNS
Cantidad de Mappers
Hardcoded: Uno por cada clase de dominio o raíz de un agregado.
Metadata Mapping: Unico mapper para todas las clases. Finders agrupados por clase de dominio.
Patrones de Diseño Empresariales Mapeando a Bases de Datos Relacionales Data Mapper
Presentación
Dominio
Acceso a Datos
Actualizando datos
Arquitectura y Diseño de Sistemas • 50 Lic. Ariel Trellini • DCIC • UNS
Identidad de los objetos
Es necesario que exista en todo momento una única representación en memoria de un objeto de domino, identificada por su identidad.
Hay dos opciones:
Registry de Identity Maps
Cada clase finder mantenga su propio Identity Map, asegurando que habrá solamente una clase finder por cada entidad de negocio.
Manejo de Finders
Varias veces una clase de dominio necesita acceder a un finder de otra clase de dominio
Nunca agregar una dependencia desde un objeto de dominio al Data Mapper.
Utilizar Separated Interface, creando una interfaz con todos los métodos findersrequeridos por la clase de domino y ubicándola en el paquete de dominio.
Patrones de Diseño Empresariales Mapeando a Bases de Datos Relacionales Data Mapper
Presentación
Dominio
Acceso a Datos
Arquitectura y Diseño de Sistemas • 52 Lic. Ariel Trellini • DCIC • UNS
Mapeos Basados en Metadatos
Código explícito
Implica tener un mapper por cada objeto de negocio.
El mapeo se realiza a través de asignaciones y sentencias SQL que mantiene internamente
Metadata Mapping
Mantiene la metadata de mapeo como datos, ya sea en la misma clase de dominio o en una clase separada.
Existen distintas variantes para metadatas: XML, atributos/anotaciones, fluentinterfaces, modelos graficos.
Ejemplos
Java: JPA, Hibernate, EJB, MyBatis, TopLink
.Net: Entity Framework, Nhibernate, Linq to SQL
PHP: CakePHP, Propel, Doctrine
Android: OrmLite, SugarORM
Patrones de Diseño Empresariales Mapeando a Bases de Datos Relacionales Data Mapper
Presentación
Dominio
Acceso a Datos
Arquitectura y Diseño de Sistemas • 53 Lic. Ariel Trellini • DCIC • UNS
¿Cuándo Utilizarlo?
Cuando queremos que el esquema de base de datos y el modelo de dominio evolucionen independientemente
Cuando utilizamos Domain Model. Si bien se podría utilizar Active Record, cuando las cosas se ponen más complejas, Data Mapper toma ventaja.
Si se tiene un modelo de negocio simple.
Si no se quiere pagar el costo de una capa extra.
Si hay que construirlo desde cero.
Patrones de Diseño Empresariales Mapeando a Bases de Datos Relacionales Data Mapper
Presentación
Dominio
Acceso a Datos
Un data mapper es un monstruo complicado de construir.
Hay productos que ya resuelven la problemática, están
testeados e implementan muchos de los patrones vistos.
Arquitectura y Diseño de Sistemas • 54 Lic. Ariel Trellini • DCIC • UNS
¿Cómo trabaja? Cuando se comienza a trabajar con la BD, se crea un UoW
UoW mantiene registro de todos los objetos creados / modificados / eliminados durante la transacción de negocio.
Al finalizar la transacción de negocio, el UoW decide qué hacer:
Abrir una transacción de BD
Realizar chequeos de concurrencia (optimista)
Escribir cambios a la BD en el orden apropiado
Cerrar la transacción de BD
Patrones de Diseño Empresariales Mapeando a BD Relacionales Patrones de Comport. Objeto-Relacional
PATRONES DE COMPORTAMIENTO OBJETO-RELACIONAL
Unit Of Work
Presentación
Dominio
Acceso a Datos
Mantiene una lista de objetos afectados por una transacción de
negocio y coordina la escritura de los cambios y la resolución de
problemas de concurrencia.
Arquitectura y Diseño de Sistemas • 55 Lic. Ariel Trellini • DCIC • UNS
¿Cómo utilizarlo? Ya viene implementado en muchos ORMs:
Hibernate Session
Entity Framework Context
etc.
Construirlo desde cero es factible, aunque requeriría bastante esfuerzo.
Muchas veces se encapsula (wrappea) el UoW provisto por el ORM
Para evitar tener referencias al ORM en la capa de negocios/aplicación
Para extenderlo con el fin de agregarle features
Manejo de transacciones distribuidas (múltiples BDs)
Logging
Realizar acciones luego del cierre de la transacción de BD.
Patrones de Diseño Empresariales Mapeando a BD Relacionales Patrones de Comport. Objeto-Relacional
Presentación
Dominio
Acceso a Datos
23/05/2015
10
Arquitectura y Diseño de Sistemas • 56 Lic. Ariel Trellini • DCIC • UNS
¿Cómo trabaja? Mantiene registro de todos los objetos que han sido leídos desde la BD en
una única transacción de negocio.
Cuando se quiere obtener un objeto, primero se busca en el map por si ya está. Si no está, se busca en la BD y se lo incorpora al map.
Si se utiliza el concepto de Unit Of Work, entonces el UoW es el mejor lugar para el Identity Map.
También sirve como caché de los objetos obtenidos en una transacción de negocio.
Patrones de Diseño Empresariales Mapeando a BD Relacionales Patrones de Comport. Objeto-Relacional
Identity Map Presentación
Dominio
Acceso a Datos
Asegura que cada objeto sea cargado solamente una vez,
manteniendo cada objeto cargado en un map. Busca objetos a
través del map cuando se los referencia.
Arquitectura y Diseño de Sistemas • 57 Lic. Ariel Trellini • DCIC • UNS
¿Cómo trabaja? Lazy Load interrumpe el proceso de carga de objetos relacionados al objeto
que se quiere recuperar, dejando una marca en la estructura de objetos tal que si el dato es necesario, pueda ser cargado solamente cuando sea usado.
Alternativas de implementación: Lazy initialization, Virtual proxy, Valueholder, Ghost
¿Cuándo utilizarlo? Actualmente lo proveen por defecto muchos ORMs.
Balancear la información que se recupera en un acceso versus la cantidad de accesos que se requerirán para recuperar la información necesaria.
Principalmente se utiliza para colecciones de objetos relacionados.
Cuidado con el problema del N+1 !
Patrones de Diseño Empresariales Mapeando a BD Relacionales Patrones de Comport. Objeto-Relacional
Lazy Load Presentación
Dominio
Acceso a Datos
Un objeto que no contiene todos los datos que necesitas, pero
sabe cómo obtenerlos.
Arquitectura y Diseño de Sistemas • 58 Lic. Ariel Trellini • DCIC • UNS
¿Cómo trabaja? Elegir la clave
Claves con o sin sentido
Meaningful key: Por ejemplo, el número de documento de una persona
Meaningless key: Número aleatorio que no sería utilizado por humanos.
Claves simples o compuestas
Clave simple: Solamente usa un campo de la base de datos.
Clave compuesta: Usa más de un campo de la base de datos.
Alcance de unicidad de las claves
Únicas por tabla
Únicas por base de datos
Patrones de Diseño Empresariales Mapeando a BD Relacionales Patrones Estructurales Objeto-Relacional
PATRONES ESTRUCTURALES OBJETO-RELACIONAL
Identity Field
Presentación
Dominio
Acceso a Datos
Guarda el campo ID de la base de datos en el objeto para
mantener la identidad entre un objeto en memoria y la fila de la
base de datos
Arquitectura y Diseño de Sistemas • 59 Lic. Ariel Trellini • DCIC • UNS
¿Cómo trabaja? Elegir la clave (cont.)
Tipo y tamaño
Las operaciones más frecuentes son: igualdad y siguiente clave
Pueden tener efecto en la performance e índices de las BDs.
Generalmente se utilizan: long, GUID e int.
Representar el Identity Field en un objeto
La forma más simple de Identity Field es un campo que concuerde con el tipo de la clave en la BD
Para las claves compuestas, generalmente se utiliza una clase que las representa.
Muchas veces se factoriza la definición de la clave (junto con la operación de igualdad) en una clase de entidad base y ese comportamiento es heredado por todas las entidades del sistema.
Obtener una nueva clave
Delegar en la BD y que la auto-genere
Usar un GUID
Generar propias (max function, tabla de claves separada)
Patrones de Diseño Empresariales Mapeando a BD Relacionales Patrones Estructurales Objeto-Relacional
Presentación
Dominio
Acceso a Datos
Arquitectura y Diseño de Sistemas • 60 Lic. Ariel Trellini • DCIC • UNS
¿Cómo trabaja?
Patrones de Diseño Empresariales Mapeando a BD Relacionales Patrones Estructurales Objeto-Relacional
Foreign Key Mapping Presentación
Dominio
Acceso a Datos
Mapea una asociación entre objetos a una foreing key entre tablas
Mapeando una referencia Mapeando una colección
Arquitectura y Diseño de Sistemas • 61 Lic. Ariel Trellini • DCIC • UNS
¿Cómo trabaja?
Patrones de Diseño Empresariales Mapeando a BD Relacionales Patrones Estructurales Objeto-Relacional
Association Table Mapping Presentación
Dominio
Acceso a Datos
Guarda una asociación con una tabla con foreign keys a las tablas
que están linkedas por la asociación.
23/05/2015
11
Arquitectura y Diseño de Sistemas • 62 Lic. Ariel Trellini • DCIC • UNS
¿Cómo trabaja? El objeto dependiente:
Sólo tiene un owner
No puede haber referencias a él desde otro objeto que no sea su owner
No tiene un Identity Field
No es almacedo en el IdentityMap
No puede ser buscado directamente.
Sólo es accedido desde su owner
Generalmente es un Value Object
Patrones de Diseño Empresariales Mapeando a BD Relacionales Patrones Estructurales Objeto-Relacional
Dependent Mapping Presentación
Dominio
Acceso a Datos
Una clase tiene que realizar el mapeo de BD para una clase hija
Arquitectura y Diseño de Sistemas • 63 Lic. Ariel Trellini • DCIC • UNS
¿Cómo trabaja?
Patrones de Diseño Empresariales Mapeando a BD Relacionales Patrones Estructurales Objeto-Relacional
Embedded Value Presentación
Dominio
Acceso a Datos
Mapea un objeto en varios campos de la tabla de otro objeto
Arquitectura y Diseño de Sistemas • 64 Lic. Ariel Trellini • DCIC • UNS
¿Cómo trabaja? Tipos de serialización:
BLOB: Binary LOB
CLOB: Textual characters LOB
Se diferencia con EmbeddedValue en que está orientado estructuras de objetos más complejas.
Patrones de Diseño Empresariales Mapeando a BD Relacionales Patrones Estructurales Objeto-Relacional
Serialized LOB Presentación
Dominio
Acceso a Datos
Guarda un grafo de objetos serializándolos en un único objeto
grande (LOB), el cual se almacena en un campo de la BD.
Arquitectura y Diseño de Sistemas • 65 Lic. Ariel Trellini • DCIC • UNS
Single Table Inheritance
Patrones de Diseño Empresariales Mapeando a BD Relacionales Patrones Estructurales Objeto-Relacional
Representa una jerarquía de herencia de clases como una única
tabla que tiene columnas para todos los campos de las clases de la
jerarquía
Presentación
Dominio
Acceso a Datos
Arquitectura y Diseño de Sistemas • 66 Lic. Ariel Trellini • DCIC • UNS
¿Cómo Trabaja?
Existe una tabla que contiene todos los datos para todas las clases de la jerarquía.
Cuando se carga un objeto a memoria, se necesita conocer qué clase instanciar:
Se necesita un campo extra en la tabla que indique qué clase debiera utilizarse para esa fila.
Nombre de la clase
Código discriminador
Patrones de Diseño Empresariales Mapeando a BD Relacionales Patrones Estructurales Objeto-Relacional
Presentación
Dominio
Acceso a Datos
Arquitectura y Diseño de Sistemas • 67 Lic. Ariel Trellini • DCIC • UNS
Fortalezas y Debilidades Habrá una única tabla por la que preocuparse
No se realizan joins para recuperar información
Cualquier refactoring que eleve/baje campos de la jerarquía no requiere que se cambie la BD.
Los nombres de columnas a veces son relevantes y a veces no, lo cual puede confundir a personas que accedan directamente a la BD.
Las columnas que sólo son utilizadas por algunas subclases conducen a desperdiciar espacio.
La tabla podría terminar siendo muy grande, con muchos índices y frecuentes bloqueos, lo cual afectaría la performance.
Sólo se tiene un único namespace para los nombres de los campos, con lo cual se debe asegurar que no existan dos campos en el jerarquía con el mismo nombre… o definir una política que resuelva estas cuestiones.
Patrones de Diseño Empresariales Mapeando a BD Relacionales Patrones Estructurales Objeto-Relacional
Presentación
Dominio
Acceso a Datos
23/05/2015
12
Arquitectura y Diseño de Sistemas • 68 Lic. Ariel Trellini • DCIC • UNS
Class Table Inheritance
Patrones de Diseño Empresariales Mapeando a BD Relacionales Patrones Estructurales Objeto-Relacional
Representa una jerarquía de herencia de clases con una tabla para
cada clase
Presentación
Dominio
Acceso a Datos
Arquitectura y Diseño de Sistemas • 69 Lic. Ariel Trellini • DCIC • UNS
¿Cómo Trabaja?
Existe una tabla por clase en la jerarquía de herencia.
Los campos en la clase de domino se mapean directamente a los campos de la tabla correspondiente.
¿Cómo enlazar las filas en distintas tablas que representan a un objeto concreto de la jerarquía?
Usar un valor de clave primaria común a la jerarquía
En la superclase se asegura la unicidad de las claves
Cada tabla tiene sus propias claves primarias. Entonces, usar foreign keys en la tabla de la superclase para apuntar al resto de las filas.
El problema más desafiante es cómo recuperar los datos desde múltiples tablas de manera eficiente
Queries separadas, joins… tienen un costo alto de performance en muchos casos.
Patrones de Diseño Empresariales Mapeando a BD Relacionales Patrones Estructurales Objeto-Relacional
Presentación
Dominio
Acceso a Datos
Arquitectura y Diseño de Sistemas • 70 Lic. Ariel Trellini • DCIC • UNS
Fortalezas y Debilidades Todas las columnas son relevantes para cada fila. Por lo tanto las tablas son
fáciles de entender y no desperdician espacio.
La relación entre el modelo de dominio y la base de datos es directa.
Se necesita acceder a múltiples tablas para cargar un objeto (un join o múltiples queries, más el armado en memoria)
Cualquier refactoring que eleve/baje campos de la jerarquía causa cambios en la BD
Las tablas de los supertipos podría convertirse en un cuello de botella ya que sería accedidas con mucha más frecuencia que las tablas de las hojas de la jerarquía
La alta normalización puede hacer que sea difícil entender las queries
Patrones de Diseño Empresariales Mapeando a BD Relacionales Patrones Estructurales Objeto-Relacional
Presentación
Dominio
Acceso a Datos
Arquitectura y Diseño de Sistemas • 71 Lic. Ariel Trellini • DCIC • UNS
Concrete Table Inheritance
Patrones de Diseño Empresariales Mapeando a BD Relacionales Patrones Estructurales Objeto-Relacional
Representa una jerarquía de herencia de clases con una tabla por
clase concreta de la jerarquía
Presentación
Dominio
Acceso a Datos
Arquitectura y Diseño de Sistemas • 72 Lic. Ariel Trellini • DCIC • UNS
¿Cómo Trabaja?
Existe una tabla para cada clase concreta de la jerarquía de herencia.
Cada tabla contiene las columnas para los campos propios de la clase concreta y para los campos de todos sus ancestros. Por lo tanto, los campos de las superclases son duplicados en las tablas de sus subclases concretas.
Se necesitan claves que sean únicas para toda la jerarquía.
Existe un problema con la integridad referencial, ya que no existe la posibilidad que los clientes de la jerarquía fuercen una referencia a clases no-concretas.
Ignorar integridad referencial.
Utilizar múltiples tablas de enlace, una para cada tabla real en la BD.
Patrones de Diseño Empresariales Mapeando a BD Relacionales Patrones Estructurales Objeto-Relacional
Presentación
Dominio
Acceso a Datos
Arquitectura y Diseño de Sistemas • 73 Lic. Ariel Trellini • DCIC • UNS
Fortalezas y Debilidades Cada tabla es auto-contenida y no tiene campos no relevantes. Esto es
favorable cuando las tablas serán utilizadas también por otros sistemas que no estén usando objetos.
No se necesitan joins para leer datos.
Cada tabla es accedida solamente cuando la clase correspondiente es accedida.
Las claves primarias pueden ser difíciles de manejar.
No se pueden forzar relaciones de base de datos a clases abstractas.
Cualquier refactoring que eleve/baje campos de la jerarquía causa cambios en la BD, aunque no tantos como en Class Table Inheritance.
Si cambia un campo de una superclase, se deben modificar todas tablas que contengan dicho campo.
Una búsqueda sobre la superclase fuerza a chequear todas las tablas.
Patrones de Diseño Empresariales Mapeando a BD Relacionales Patrones Estructurales Objeto-Relacional
Presentación
Dominio
Acceso a Datos
23/05/2015
13
Arquitectura y Diseño de Sistemas • 74 Lic. Ariel Trellini • DCIC • UNS
Patrones de Diseño Empresariales Mapeando a BD Relacionales Patrones de Metadatos Objeto-Relacional
PATRONES DE MAPEO DE METADATOSOBJETO-RELACIONAL
Repository
Presentación
Dominio
Acceso a Datos
Sirve de intermediario entre la capa de dominio y la de mapeo de
base de datos, usando una interfaz símil colección para acceder a
los objetos de dominio.
Repositories
Data Mapper
Data Access Layer Un Repository media entre las capas de
dominio y de mapeo de datos, actuando como una colección de objetos de dominio en memoria.
Encapsula un conjunto de objetos homogéneos persistidos en un almacenamiento de datos, junto con las operaciones realizadas sobre ellos.
Arquitectura y Diseño de Sistemas • 75 Lic. Ariel Trellini • DCIC • UNS
¿Cómo Trabaja?
Para el código que usa al Repository, parece una simple colección en memoria de objetos de dominio.
Remplaza los métodos finder de las clases Data Mapper por una aproximación basada en especificaciones para seleccionar objetos.
No hay noción de ejecución de una query, sino más bien de satisfacción de una criterio de selección.
El destino de un Repository podría no ser una base de datos relacional. Esto permite reemplazarlos por implementaciones alternativas que, por ejemplo, faciliten la definición de tests unitarios y agilicen su ejecución.
Son un buen mecanismo para mejorar la legibilidad del código que usa extensivamente consultas.
Patrones de Diseño Empresariales Mapeando a BD Relacionales Patrones Estructurales Objeto-Relacional
Presentación
Dominio
Acceso a Datos
Arquitectura y Diseño de Sistemas • 76 Lic. Ariel Trellini • DCIC • UNS
¿Cuándo se usa? Reduce la cantidad de código necesario para tratar con la interacción con la
base de datos.
Promueve el patrón Specification (por ej., en forma de objetos de criterio) que encapsula la query a realizarse de una manera orientada a objetos.
Los clientes nunca tienen que pensar en términos de SQL, sino mas bien en términos de objetos.
Permite tener distintas alternativas de implementación a muy bajo costo (unit tests).
En sistemas muy simples que no requieran de mucha complejidad.
Patrones de Diseño Empresariales Mapeando a BD Relacionales Patrones Estructurales Objeto-Relacional
Presentación
Dominio
Acceso a Datos
Arquitectura y Diseño de Sistemas • 77 Lic. Ariel Trellini • DCIC • UNS
Web Presentation
Patrones de Diseño Empresariales
Presentación
Dominio
Acceso a Datos
Input Controller Patterns Model View Controller
Page Controller
Front Controller
View Patterns Transform View
Template View
Two Steps View
Arquitectura y Diseño de Sistemas • 78 Lic. Ariel Trellini • DCIC • UNS
Model View Controller
Patrones de Diseño Empresariales Web Presentation
Separa la interacción de la interfaz de usuario en tres roles
distintos
Presentación
Dominio
Acceso a Datos
Es uno de los patrones de diseño más conocidos , teniendo influencia desde sucración (1970) en muchos UI frameworks y en la forma de pensar sobre el diseño de interfaces de usuario.
View Controller
Model
Arquitectura y Diseño de Sistemas • 79 Lic. Ariel Trellini • DCIC • UNS
¿Cómo Trabaja?
Roles Model
Es un objeto que representa al dominio, contiene datos y comportamientodistinto a los de la UI
En su forma más OO pura, sería un objeto del Domain Model
También podría ser un Transaction Script del Dominio
View
Representa la visualización del modelo en la interfaz de usuario
Sólo conoce como mostrar la información
Controller
Toma información del request, invoca al objeto del modelo correspondiente y, en base a los resultados obtenidos, determina qué vista es la apropieda paramostrar. Luego le pasa el control a la vista, junto con los datos de respuesta.
Toma la entrada del usuario, manipula el modelo y refresca la vista apropiadamente.
Patrones de Diseño Empresariales Web Presentation Model View Controller
Presentación
Dominio
Acceso a Datos
23/05/2015
14
Arquitectura y Diseño de Sistemas • 80 Lic. Ariel Trellini • DCIC • UNS
Interacción entre el modelo, la vista y el controlador.
Patrones de Diseño Empresariales Web Presentation Model View Controller
Presentación
Dominio
Acceso a Datos
Arquitectura y Diseño de Sistemas • 81 Lic. Ariel Trellini • DCIC • UNS
Principales Separaciones Presentación del modelo
Es uno de los más importantes principios de diseño.
Generalmente tienen intereses distintos
Al desarrollar una vista, nos preocupamos por mecanismos de UI y por cómo diseñaruna buena UI.
Al trabajar con el modelo, se piensa en términos de reglas de negocio y, quizás, de interacciones con la base de datos.
Se podría querer ver la misma información del modelo de distintas formas.
Objetos no visuales son más fáciles de testear que objetos visuales.
La presentación depende del modelo pero el modelo no depende la presentación.
Controlador de la vista
No es tan importante, pero igualmente brinda beneficios. Permitiría tener másde un controlador por vista, o distintas vistas usar el mismo controlador.
Ejemplo: Soportar comportamiento de edición y visualización con una vista.
Podríamos tener 2 controladores, uno para cada caso, donde los controladores son Strategies (GoF) de la vista.
Patrones de Diseño Empresariales Web Presentation Model View Controller
Presentación
Dominio
Acceso a Datos
Arquitectura y Diseño de Sistemas • 82 Lic. Ariel Trellini • DCIC • UNS
¿Cuándo Utilizarlo?
Cuando las separaciones indicadas anteriormente (especialmente la separación de la presentación y el modelo) son útiles.
Si se tiene una aplicación muy simple donde el modelo no tiene comportamiento.
Si las tecnologías a utilizar no brindan la infraestructura necesaria.
Ejemplos Java
Spring MVC, Struts, JSF, Seam, Tapestry, etc.
.Net
ASP.NET MVC
PHP
CakePHP, Lamplighter (ex-Fuse), Symfony
Javascript
Backbone.js, Knockout.js, JavascriptMVC, Angular.js, etc.
Patrones de Diseño Empresariales Web Presentation Model View Controller
Presentación
Dominio
Acceso a Datos
Arquitectura y Diseño de Sistemas • 83 Lic. Ariel Trellini • DCIC • UNS
Page Controller
Patrones de Diseño Empresariales Web Presentation
Un objeto que maneja un request para una página o acción
de una aplicación web.
Presentación
Dominio
Acceso a Datos
Page Controller tiene un controlador para cada página lógica de la aplicación web. El controlador puede ser la página en sí misma (frecuente en ambiente server pages), o puede se un objeto separado que se corresponda con aquella página. Sin embargo, este patrón de diseño apunta a una alternativa de un path que conduce a un archivoque maneja un requerimiento.
Arquitectura y Diseño de Sistemas • 84 Lic. Ariel Trellini • DCIC • UNS
¿Cómo Trabaja?
Idea básica Un módulo (clase o lo que fuera) actúa como controlador para cada página de la
aplicación web.
En la realidad, existirá un controlador por cada acción (incluidas los eventos)
Responsabilidades Decodificar la URL y extraer cualquier dato del request que sea necesario
para realizar la acción requerida.
Crear e invocar objetos del modelo para procesar los datos de entrada. Los objetos del modelo no necesitan conocer al request.
Determinar qué vista se debe mostrar y enviarle el modelo quecorresponda.
Patrones de Diseño Empresariales Web Presentation Page Controller
Presentación
Dominio
Acceso a Datos
Arquitectura y Diseño de Sistemas • 85 Lic. Ariel Trellini • DCIC • UNS
Formas de Implementación Script
CGI script, Servlet, etc.
Script que actúa como handler y controlador
El web server le pasa el control al script, el script lleva a cabo las responsabilidades de un controlador y finalmente transfiere el control a la vista que corresponda.
Server Page
ASP, ASP.NET, PHP, JSP, etc
Generalmente combina los patrones Page Controller y Template View en un mismo archivo. Esto favorece al Template View en detrimento del Page Controller.
Para evitar scriptlets
Utilizar helpers: La server page llama, en primer lugar, al helper para que maneje la lógica. Luego el helper le retorna el control a la página o se lo transfiere a otra.
Recomendaciones
No necesita ser una única clase
Se podrían tener ambas alternativas en una misma aplicación.
Patrones de Diseño Empresariales Web Presentation Page Controller
Presentación
Dominio
Acceso a Datos
23/05/2015
15
Arquitectura y Diseño de Sistemas • 86 Lic. Ariel Trellini • DCIC • UNS
Ejemplos Página de visualización simple con un servlet Page Controller y una vista JSP
Patrones de Diseño Empresariales Web Presentation Page Controller
Presentación
Dominio
Acceso a Datos
Arquitectura y Diseño de Sistemas • 87 Lic. Ariel Trellini • DCIC • UNS
Ejemplos Usando un página JSP como un handler
Patrones de Diseño Empresariales Web Presentation Page Controller
Presentación
Dominio
Acceso a Datos
Arquitectura y Diseño de Sistemas • 88 Lic. Ariel Trellini • DCIC • UNS
¿Cuándo Utilizarlo?
Cuando mucha de la lógica del controlador es muy simple, ya que no agrega demasiado overhead.
Cuando hay mucha complejidad navegacional, sería preferible para el costo de un Front Controller.
Patrones de Diseño Empresariales Web Presentation Page Controller
Presentación
Dominio
Acceso a Datos
Arquitectura y Diseño de Sistemas • 89 Lic. Ariel Trellini • DCIC • UNS
Front Controller
Patrones de Diseño Empresariales Web Presentation
Un controller que maneja todos los request para una
aplicación web.
Presentación
Dominio
Acceso a Datos
Front Controller consolida el manejo de requests, canalizándolos a través de un único objeto handler. Este objeto lleva adelante comportamiento común (seguridad, i18n, logging, etc.) y luego despacha el request a un command para realizar el comportamiento específico.
Arquitectura y Diseño de Sistemas • 90 Lic. Ariel Trellini • DCIC • UNS
¿Cómo Trabaja?
Idea básica Un Front Controller maneja todas las llamadas a una aplicación web
Está estructurado en 2 partes: un web handler y una jerarquía de comandos.
Web Handler
Es el objeto que realmente recibe POSTs y GETs del web server
Obtiene información de la URL y del request para decidir qué tipo de acción iniciar
Delega al command correspondiente la atención del requerimiento.
Generalmente es implementado como una clase y no con una server page. No produce ninguna respuesta por sí mismo.
Comandos
Son clases y no server pages
Generalmente no necesitan conocimiento del ambiente web, aunque muchas veces se les pasa el request HTTP.
Patrones de Diseño Empresariales Web Presentation Front Controller
Presentación
Dominio
Acceso a Datos
Arquitectura y Diseño de Sistemas • 91 Lic. Ariel Trellini • DCIC • UNS
Selección del comando Estática
Parsea la URL y utiliza lógica condicional
Tiene las ventajas de la lógica explícita:
Chequeos en compilación
Flexibilidad en el formato de la URL
Dinámica
Utiliza un patrón de URL y utiliza instanciación dinámica para crear comandos.
Permite agergar nuevos comandos sin cambiar el web handler.
Implementación
Poner el nombre de la clase comando en la URL
Usar properties files / XMLs para mapear las URLs con los comandos.
Uso con Intercepting Filter Es un decorador que wrappea al web handler de un Front Controller
permitiendo construir un pipe & filter
Permite manejar autenticación, logging, i18n, etc.
Patrones de Diseño Empresariales Web Presentation Front Controller
Presentación
Dominio
Acceso a Datos
23/05/2015
16
Arquitectura y Diseño de Sistemas • 92 Lic. Ariel Trellini • DCIC • UNS
Ejemplos
Patrones de Diseño Empresariales Web Presentation Front Controller
Presentación
Dominio
Acceso a Datos
Arquitectura y Diseño de Sistemas • 93 Lic. Ariel Trellini • DCIC • UNS
¿Cuándo Utilizarlo?
Si las ventajas pagan el esfuerzo:
Sólo un Front Controller tiene que ser configurado en el web server.
Con comandos dinámicos, se podrían agregar comandos sin ningún cambio más que en la configuración.
No es necesario que los comandos sean thread-safe, ya que son creados por cada request
Permite factorizar código que, de otra forma, estaría duplicándose en las Page Controller.
Se puede mejorar el comportamiento del Front Controller, a través de decoradores para autenticación, codificación de caracteres, i18n, etc, y agergarlos a través de un archivo de configuración.
Es más complejo que un Page Controller.
Patrones de Diseño Empresariales Web Presentation Front Controller
Presentación
Dominio
Acceso a Datos
Arquitectura y Diseño de Sistemas • 94 Lic. Ariel Trellini • DCIC • UNS
Template View
Patrones de Diseño Empresariales Web Presentation
Renderiza información en HTML embebiendo markers en
una página HTML.
Presentación
Dominio
Acceso a Datos
HTML Estático + Markers Especiales = Página Web Dinámica
Arquitectura y Diseño de Sistemas • 95 Lic. Ariel Trellini • DCIC • UNS
¿Cómo Trabaja?
Idea básica Embeber markers en una página HTML cuando ésta es escrita.
La página puede ser diseñada de la manera usual, con editores WYSIWYG.
Embebiendo los markers Tags del estilo HTML
Trabajan bien con editores WYSIWYG
Con tags XML bien formados, se pueden usar herramientas de manejo de XML para editar las páginas, permitiendo que la página sea diseñada como HTML
Además de proveer un conjunto estándar de tags, muchos ambientes permitedefinir tags propios que satisfagan las necesides.
Text markers
Los editores WYSIWYG los ignoran, aunque a veces pueden meter ruido (spell checking)
La sintáxis puede ser más simple que los toscos XML / HTML
Patrones de Diseño Empresariales Web Presentation Template View
Presentación
Dominio
Acceso a Datos
Arquitectura y Diseño de Sistemas • 96 Lic. Ariel Trellini • DCIC • UNS
Scriptlets o no scriptlets Definición
Server pages (ASP, JSP, PHP) generlamente permiten embeber lógica de programación arbitraria en las páginas, llamada scriptlets.
Si bien pueden ser pragmáticos en algun sentido, conviene mantenerlos a raya, limitándonos al comportamiento estándar de un Template View.
Desventajas
Elimina la posibilidad de que los diseñadores gráficos diseñen las páginas.
La página pierde su estructura y, con ello, su capacidad de componentización (o modularización).
Podrían llegar a confundir las diferentes capas de una aplicación empresarial.
Helper objects Tienen toda la lógica de programación real.
Una página solamente lo invoca, lo cual simplifica a la página y la hace másTempalte View pura.
Es la manera de minimizar el uso de scriptlets
Permite que los diseñadores gráficos diseñen la página, mientras que los programadores se concentran en los helpers
Patrones de Diseño Empresariales Web Presentation Template View
Presentación
Dominio
Acceso a Datos
Arquitectura y Diseño de Sistemas • 97 Lic. Ariel Trellini • DCIC • UNS
Comportamiento condicional en la página Definición
Caso simple: algo debe mostrarse si se cumple una condición <IF condition=“precio > 10”> hacer algo </IF>
Desventajas
El sobreuso lleva a convertir el template en un lenguaje de programación
Esto conduce a los mismos problemas que los scriptlets.
Soluciones
Si se necesita mostrar un texto de manera condicional, mover la condición a un helper.
Si se quiere resaltar un item de una lista
Hacer que el helper genere el código markup.
Generar un tag preciso para resolver la problemática.
Patrones de Diseño Empresariales Web Presentation Template View
Presentación
Dominio
Acceso a Datos
<IF expression = "isHighSelling()"><B></IF>
<property name = "price"/>
<IF expression = "isHighSelling()"></B></IF>
<highlight condition = "isHighSelling" style = "bold">
<property name = "price"/>
</highlight>
23/05/2015
17
Arquitectura y Diseño de Sistemas • 98 Lic. Ariel Trellini • DCIC • UNS
Iteración La iteración sobre una colección presenta los mismos problemas
que el comportamiento condicional.
No se puede escapar al tag de iteración, generalmente provisto por la plataforma.
Rol del Template View Template View tiende a ser la vista en un MVC.
En muchos sistemas, sólo jugará ese rol.
En otros, generalmente más simples, podrá jugar el rol del controller y, posiblemente, el del modelo (aunque esto último es importante que se evite)
Es importante asegurar que estas responsabilidades sean manejadas por el helper, y no por la página, ya que involucran logica de programación.
Cuándo procesar Compilando la página luego que es creada
Compilando la página en su primer request
Interpretando la página en cada request.
Patrones de Diseño Empresariales Web Presentation Template View
Presentación
Dominio
Acceso a Datos
Arquitectura y Diseño de Sistemas • 99 Lic. Ariel Trellini • DCIC • UNS
Manejo de Excepciones Los errores durante la compilación/interpretación de un
Template View, generalmente no tienen red de contención.
Asegurar que la aplicación maneje estos errores.
Patrones de Diseño Empresariales Web Presentation Template View
Presentación
Dominio
Acceso a Datos
Arquitectura y Diseño de Sistemas • 100 Lic. Ariel Trellini • DCIC • UNS
Ejemplo Usando un página JSP como una Vista con un Controller Separado
Controller
Definición del helper en la vista
Helper (parcial)
Patrones de Diseño Empresariales Web Presentation Template View
Presentación
Dominio
Acceso a Datos
Arquitectura y Diseño de Sistemas • 101 Lic. Ariel Trellini • DCIC • UNS
Ejemplo (cont.) Definición de propiedad en el helper
Uso de la propiedad
Iterador
Patrones de Diseño Empresariales Web Presentation Template View
Presentación
Dominio
Acceso a Datos
Scriptlet
OK !
Arquitectura y Diseño de Sistemas • 102 Lic. Ariel Trellini • DCIC • UNS
¿Cuándo Utilizarlo?
Permite comprender el contenido de la página mirando la estructura de la página.
Esto permite que diseñadores gráficos puedan trabajar con las páginas, enfocando a los programadores a la resolución de los helpers.
La implementación más común hace muy fácil poner lógica complicada en la página, comprometiendo su mantenibilidad.
Es más difícil de testear que Transform View
Patrones de Diseño Empresariales Web Presentation Template View
Presentación
Dominio
Acceso a Datos
Arquitectura y Diseño de Sistemas • 103 Lic. Ariel Trellini • DCIC • UNS
Transform View
Patrones de Diseño Empresariales Web Presentation
Una vista que procesa datos del modelo elemento por
elemento y los transforma en HTML
Presentación
Dominio
Acceso a Datos
Usar Transform View para resolver la vista en MVC significa pensarlo como una transformación donde los datos del modelo conforman la entrada de dicha transformación y el HTML la salida.
23/05/2015
18
Arquitectura y Diseño de Sistemas • 104 Lic. Ariel Trellini • DCIC • UNS
¿Cómo Trabaja?
Idea básica Escribir un programa que recorra los datos devueltos por el dominio y los
convierta a HTML:
Atraviesa la estructura de datos del dominio
Reconoce a cada dato
Escribe la sección de HTML particular para el dato.
Diferencias con Template View La forma en la cual la vista está organizada
Template View: Orientada a la salida
Transform View: Orientada a la entrada
Patrones de Diseño Empresariales Web Presentation Transform View
Presentación
Dominio
Acceso a Datos
Arquitectura y Diseño de Sistemas • 105 Lic. Ariel Trellini • DCIC • UNS
Implementación XSLT es la más frecuente
Es un lenguaje de programación funcional
Tiene un tipo diferente de estructura: más bien que explícitamente llamar a procedimientos, XSLT reconoce elementos en los datos del modelo e invoca lastransformaciones apropiadas.
Requiere que la entrada sea un XML
Si el tipo de retorno natural de la lógica de dominio es XML o algo automáticamentetransformable a XML (por ej, objetos .NET)
Poblando un Data Transfer Object que sepa serializarse a XML.
Patrones de Diseño Empresariales Web Presentation Transform View
Presentación
Dominio
Acceso a Datos
XSL EngineXMLModel
XSLTView
HTML
Arquitectura y Diseño de Sistemas • 106 Lic. Ariel Trellini • DCIC • UNS
Ejemplo Objeto command (GoF) que oficia de controller:
Documento XML
Patrones de Diseño Empresariales Web Presentation Transform View
Presentación
Dominio
Acceso a Datos
Arquitectura y Diseño de Sistemas • 107 Lic. Ariel Trellini • DCIC • UNS
Ejemplo (cont.) View
Patrones de Diseño Empresariales Web Presentation Transform View
Presentación
Dominio
Acceso a Datos
Arquitectura y Diseño de Sistemas • 108 Lic. Ariel Trellini • DCIC • UNS
¿Cuándo Utilizarlo?
XSLT es portable a casi todas las plataformas web.
Es más simple de usar si los datos vienen como XML
Evita dos grandes problemas de Template View:
Es más fácil enfocarse solamente en la renderización de HTML, evitando meter lógica en la vista
Es más fácil ejecutar la Transform View y obtener la salida para testearla.
Si bien hay herramientas para trabajar con XSLT, no son tan sofisticadas como las existentes para Template Views.
XSLT puede ser un lenguaje difícil de aprender por su naturaleza funcional.
Patrones de Diseño Empresariales Web Presentation Transform View
Presentación
Dominio
Acceso a Datos
Arquitectura y Diseño de Sistemas • 109 Lic. Ariel Trellini • DCIC • UNS
Two Step View
Patrones de Diseño Empresariales Web Presentation
Transforma datos del dominio en HTML en dos pasos:
primero construyendo algún tipo de página lógica, y luego
renderizando la página lógica a HTML
Presentación
Dominio
Acceso a Datos
Muchas veces se quiere realizar un cambio en el look & feel de la aplicación. Two Steps View ataca este problema, separando la transformación en dos etapas: 1. Transforma los datos del modelo en
una presentación lógica sin ningún formateo específico.
2. Convierte la representación lógica con el formateo apropiado.
23/05/2015
19
Arquitectura y Diseño de Sistemas • 110 Lic. Ariel Trellini • DCIC • UNS
¿Cómo Trabaja?
Idea básica Hacer la transformación en un proceso de 2 etapas
Ensamblar la información en una estructura de pantalla lógica que sea descriptiva de los elementos de pantalla sin usar HTML
Su responsabilidad es acceder al modelo orientado al dominio (una base de datos, un modelo de dominio real o un DTO), extraer la información relevante para la pantalla, y poner dicha información en una estructura orientada a la presentación.
Dicha estructura podría incluir campos, encabezados, pie de página, tablas, selectores, etc.
Tomar la estructura orientada a la presentación y renderizarla en HTML
Conoce cada elemento de la estructura orientada a la presentación y genera el HTML correspondiente.
Patrones de Diseño Empresariales Web Presentation Two Steps View
Presentación
Dominio
Acceso a Datos
Arquitectura y Diseño de Sistemas • 111 Lic. Ariel Trellini • DCIC • UNS
¿Cómo Trabaja?
Implementaciones Two-Steps XSLT
Hay 2 XSLT style-sheets
Transforma el XML orientado al dominio en un XML orientado a la presentación
Transforma el XML orientado a la presentación a HTML
Clases
Se define la estructura orientada a la presentación como un conjunto de clases: una clase tabla, una clase fila, etc.
Etapa 1: Toma la información del dominio e instancia estas clases en una estructuraque modele una pantalla lógica.
Etapa 2: Renderiza las objeto a HTML, haciendo que cada objeto genere su HTML o teniendo un generador separado.
Patrones de Diseño Empresariales Web Presentation Two Steps View
Presentación
Dominio
Acceso a Datos
Arquitectura y Diseño de Sistemas • 112 Lic. Ariel Trellini • DCIC • UNS
¿Cuándo Utilizarlo?
Permite realizar cambios globales con mayor facilidad.
Resuelve dos situaciones particulares:
Aplicaciones web multi-apariencia: Se necesita que cada cliente pueda determinar su look & feel.
Aplicaciones web mono-apariencia: Se necesita una look & feel consistente durante toda una aplicación.
Para variaciones de multi-apariencia, donde se pueden generar dos tipos distintos de HTML: para browser y para mobile.
Si tenemos una aplicación intensiva en diseño, donde cada página se ve distinto.
Hay muy pocas herramientas para trabajar con esta alternativa.
Patrones de Diseño Empresariales Web Presentation Two Steps View
Presentación
Dominio
Acceso a Datos
Arquitectura y Diseño de Sistemas • 113 Lic. Ariel Trellini • DCIC • UNS
Application Controller
Patrones de Diseño Empresariales Web Presentation
Un punto centralizado para manejar navegación entre
pantallas y el flujo de una aplicación.
Presentación
Dominio
Acceso a Datos
Algunas aplicaciones tienen una significativa cantidad de lógica para determinar qué pantalla debe mostrarse en cada momento (como los wizards). Application Controllerataca este problema, haciéndose cargo de este tipo de lógica de flujo de pantallas.
Arquitectura y Diseño de Sistemas • 114 Lic. Ariel Trellini • DCIC • UNS
¿Cómo Trabaja?
Responsabilidades Decidir qué lógica de dominio ejecutar
Decidir la vista con la que se debe mostrar la respuesta
¿Cómo lo separo del resto de la aplicación? El Application Controller tiene dependencias con el UI engine
Accede a los datos de la sesión HTTP
Realiza un forward a una server page
Invoca métodos de una clase rich-client
El Application Controller NO tiene dependencias con el UI engine
Favorece el testeo unitario de los Application Controllers, independientementede la UI.
Se puede usar el mismo Application Controller para múltiplespresentaciones/vistas.
Patrones de Diseño Empresariales Web Presentation Application Controller
Presentación
Dominio
Acceso a Datos
Arquitectura y Diseño de Sistemas • 115 Lic. Ariel Trellini • DCIC • UNS
¿Cómo se implementa? Tanto para la funcionalidad del domino como para la vista , el Application
Controller necesita una manera de almacenar algo que pueda invocar.
El patrón Command [GoF] sería una buena elección, ya que permite mantener y ejecutar fácilmente un bloque de código.
2 colecciones
Los objetos de dominio pueden ser:
Comandos que forman parte de la capa de Application Controllers
Referencias a Transaction Scripts
Las vistas son, generalmente, server pages. Si se usan clases, un comando o un string para hacer llamadas por reflection es de gran utilidad.
Patrones de Diseño Empresariales Web Presentation Application Controller
Presentación
Dominio
Acceso a Datos
23/05/2015
20
Arquitectura y Diseño de Sistemas • 116 Lic. Ariel Trellini • DCIC • UNS
Metadatos Una manera común de pensar en la UI de una aplicación es a
través de una máquina de estados
Ciertos eventos lanzan diferentes respuestas dependiendo del estado de ciertosotros objetos clave del negocio.
Esto favorece el uso de metadatos para representar el flujo de control de máquina de estados.
Patrones de Diseño Empresariales Web Presentation Application Controller
Presentación
Dominio
Acceso a Datos
Arquitectura y Diseño de Sistemas • 117 Lic. Ariel Trellini • DCIC • UNS
Ejemplo Spring Web Flow
Patrones de Diseño Empresariales Web Presentation Application Controller
Presentación
Dominio
Acceso a Datos
Arquitectura y Diseño de Sistemas • 118 Lic. Ariel Trellini • DCIC • UNS
Ejemplo (cont) Spring Web Flow
Patrones de Diseño Empresariales Web Presentation Application Controller
Presentación
Dominio
Acceso a Datos
Arquitectura y Diseño de Sistemas • 119 Lic. Ariel Trellini • DCIC • UNS
¿Cuándo Utilizarlo?
Si tenemos un conjunto de reglas que determinan el orden en el cual las páginas serían accedidas, y diferentes vistas dependen del estado de los objetos.
Si en algún momento nos encontramos teniendo que realizar cambios similares en gran cantidad de lugares cuando el flujo de aplicación cambia.
Si la aplicación es lo suficientemente simple tal que cualquiera puede visitar cualquier pantalla sin un orden establecido.
Patrones de Diseño Empresariales Web Presentation Application Controller
Presentación
Dominio
Acceso a Datos