Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Patrones de Diseño II
Patrones de Diseño II
Masabel Avendaño
Microsoft Certified Professional
Agenda
Repaso
Iterator
Composite
Integración de la IU con Model-View-Controller
Observer
Command
Adapter
Resumen
Lo que vimos en la sesión anterior
Template Method
Usando el Template Method, se define una
estructura de herencia en la cual la superclase
sirve de plantilla ("Template" significa
plantilla) de los métodos en las subclases. Una
de las ventajas de este método es que evita la
repetición de código, por tanto la aparición de
errores.
Factory
Este patrón delega en una clase la
responsabilidad de creación de objetos de
otras clases.
No delega en subclases y sus métodos
pueden ser estáticos
Puede evolucionar a un Factory Method o a un
Abstract Factory.
Factory
+CreateObjectA()
+CreateObjectB()
+CreateObjectC()
Factory Method
Factory Method define una interfaz para crear
objetos, pero deja que sean las subclases
quienes decidan qué clases instanciar;
permite que una clase delegue en sus
subclases la creación de objetos.
Factory Method
Usar cuando:
Una clase no puede prever la clase de objetos que debe crear.
Una clase quiere que sean sus subclases quienes especifiquen
los objetos que ésta crea.
Las clases delegan la responsabilidad en una de entre varias
clases auxiliares, y queremos localizar concretamente en qué
subclase de auxiliar se delega.
Abstract Factory
El patrón Abstract Factory proporciona una
interfaz para crear familias de objetos
relacionados o que dependen entre sí, sin
especificar sus clases concretas.
La solución que propone coonsiste en
coordinar la creación de familias de objetos.
Establecer una forma para quitar las reglas de
cómo realizar la instanciación fuera del objeto
que está usando los objetos a crear.
Abstract Factory
Data Access Object
El acceso a los datos varía dependiendo de la
fuente de los datos. El acceso al
almacenamiento persistente, como una base
de datos, varía en gran medida dependiendo
del tipo de almacenamiento (bases de datos
relacionales, bases de datos orientadas a
objetos, ficheros planos, etc.) y de la
implementación del vendedor.
Utilizar un Data Access Object (DAO) para
abstraer y encapsular todos los accesos a la
fuente de datos. El DAO maneja la conexión
con la fuente de datos para obtener y
almacenar datos.
Data Access Object
Data Access Object -
Participantes
El BusinessObject representa los datos del cliente. Es el objeto que
requiere el acceso a la fuente de datos para obtener y almacenar datos.
Podríamos implementar un BusinessObject como un bean de sesión, un
bean de entidad o cualquier otro objeto Java, además de como un Servlet o
como un bean de apoyo.
El DataAccessObject es el objeto principal de este patrón.
DataAccessObject abstrae la implementación del acceso a datos
subyacente al BusinessObject para permitirle un acceso transparente a la
fuente de datos. El BusinessObject también delega las operaciones de
carga y almacenamiento en el DataAccessObject.
El DataSource representa la implementación de la fuente de datos. Una
fuente de datos podría ser una base de datos como un RDBMS, un
OODBMS, un repositorio XML, un fichero plano, etc. También lo pueden ser
otros sitemas (mainframes/legales), servicios (servicio B2B u oficina de
tarjetas de crédito), o algún tipo de repositorio (LDAP).
El TransferObject representa un Transfer Object utilizado para el
transporte de datos. DataAccessObject podría utilizar un Transfer Object
para devolver los datos al cliente. El DataAccessObject también podría
recibir datos desde el cliente en un Transfer Object para actualizar los datos
Refinamiento del Patrón
Data Access Object
ADO.NET 2.0 y el Modelo
Independiente del
Proveedor
El modelo de programación del
modelo independiente del
proveedor se basa en el uso
del
patrón de diseño Factory y
proporciona una única API
para
tener acceso a las bases de
datos de varios proveedores.
Uniformidad al recorrer colecciones
Iterator
El patrón Iterator nos proporciona una manera
de acceder a los elementos de un objeto
agregado de manera secuencial sin exponer
su representación subyacente. De tal manera
es independiente el tipo de agregado que
exista o la manera en que almacena sus
elementos.
Iterator
Iterator - Participantes
Iterator (AbstractIterator) define una
interfaz para acceder y recorrer los
elementos.
ConcreteIterator (Iterator) implementa la
interfaz Iterator. Mantiene la posición actual
del recorrido por el Aggregate.
Aggregate (AbstractCollection) define
una interfaz para la creación de un objeto
Iterator.
ConcreteAggregate (Collection)
implementa la interfaz de creación de
Transparencia para el manejo de jerarquías
Composite
El patrón Composite sirve para construir
objetos complejos a partir de otros más
simples y similares entre sí, gracias a la
composición recursiva y a una estructura en
forma de árbol.
(MVC)
Especifica una arquitectura de GUI amplia y de alto nivel
Los detalles exactos varían dependiendo del arquitecto y del
dominio del problema
Es uno de los patrones de diseño reconocidos más tempranamente
View Model
View Model
Negocios
(datos)
Patrones de Diseño
Subyacentes
El patrón MVC está conformado por la combinación de un
conjunto de patrones, entre los cuales encontramos:
Observer: desacopla los objetos mediante un sistema de
notificaciones
Command: encapsula las operaciones como objetos
Adapter: adapta los objetos existentes a nuevas situaciones
Strategy: desacopla algoritmos con respecto a sus clientes
Composite: trata a un conjunto de objetos como a uno solo
Decorator: asigna de manera dinámica un comportamiento a un
objeto
Factory: desacopla la creación de los objetos con respecto a sus
consumidores
Se puede optar por implementar tantos o tan pocos como se desee
Suscripciones y notificaciones
El patrón Observer
Basado en un sujeto y sus observadores
También conocido como el patrón publisher-subscriber
Es el mecanismo detrás del manejo de eventos de .NET
Click en un
botón!
Sujeto
delegado
Observador
delegado
Observador
delegado
Observador
Objetivo de este Patrón de
Diseño
Acoplamiento débil entre el sujeto y el observador
¿Por qué? Para facilitar futuros cambios o reemplazos
Ejemplo:
La vista y el controlador deberían saber muy poco el uno
del otro
delegado Controller
delegado
View
Representación de órdenes como objetos
El patrón Command
Representa a los comandos de IU como
objetos:
Public Class UIControl
Command
Sub Execute( )
…
End Sub
Objetivo de este Patrón de
Diseño
Fomenta aún más el desacoplamiento de los
componentes
Conforma una nueva capa abstracción
delegado
Lo que hemos aprendido…
[email protected]