Patrones de Diseño II

37
Ricardo D. Masabel Avendaño Microsoft Certified Professional

description

PAtrones de Diseño

Transcript of Patrones de Diseño II

Page 1: Patrones de Diseño II

Ricardo D. Masabel AvendañoMicrosoft Certified Professional

Page 2: Patrones de Diseño II

AgendaRepasoIteratorCompositeIntegración de la IU con Model-View-

ControllerObserverCommandAdapterResumen

Page 3: Patrones de Diseño II

Lo que vimos en la sesión anterior

Page 4: Patrones de Diseño II

Template MethodUsando 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.

Page 5: Patrones de Diseño II

FactoryEste 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.

+CreateObjectA()+CreateObjectB()+CreateObjectC()

Factory

Page 6: Patrones de Diseño II

Factory MethodFactory 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.

Page 7: Patrones de Diseño II

Factory MethodUsar 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.

Page 8: Patrones de Diseño II

Abstract FactoryEl 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.

Page 9: Patrones de Diseño II

Abstract Factory

Page 10: Patrones de Diseño II

Data Access ObjectEl 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.

Page 11: Patrones de Diseño II

Data Access Object

Page 12: Patrones de Diseño II

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 en la fuente de datos.

Page 13: Patrones de Diseño II

Refinamiento del PatrónData Access Object

Page 14: Patrones de Diseño II

ADO.NET 2.0 y el Modelo Independiente del ProveedorEl modelo de programación El modelo de programación

del del

modelo independiente delmodelo independiente del

proveedor se basa en el uso proveedor se basa en el uso deldel

patrón de diseño patrón de diseño FactoryFactory y y

proporciona una única API proporciona una única API parapara

tener acceso a las bases detener acceso a las bases de

datos de varios proveedores. datos de varios proveedores.

Page 15: Patrones de Diseño II

Uniformidad al recorrer colecciones

Page 16: Patrones de Diseño II

IteratorEl 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.

Page 17: Patrones de Diseño II

Iterator

Page 18: Patrones de Diseño II

Iterator - ParticipantesIterator  (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 Iterators para retornar una instancia del ConcreteIterator adecuado.

Page 19: Patrones de Diseño II

Transparencia para el manejo de jerarquías

Page 20: Patrones de Diseño II

CompositeEl 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.

Esto simplifica el tratamiento de los objetos creados, ya que al poseer todos ellos una interfaz común, se tratan todos de la misma manera.

Page 21: Patrones de Diseño II

Composite

Page 22: Patrones de Diseño II

CompositeComponent   (DrawingElement) Declara las interfaces

para los objetos en la composición. Implementa el comportamiento predeterminado para la interfaz común a todas las clases, según sea necesario. Declara una interfaz para acceder y administrar los componentes hijos. Optionalmente define una interfaz para acceder al padre del componente en la estructura recursiva, y la implementa si es necesario.

Leaf   (PrimitiveElement) Representa los objetos simples en la composición . Un leaf no tiene hijos. Define el comportamiento para los objetos primitivos en la composición.

Composite   (CompositeElement) Defines el comportamiento para los elementos que tienen hijos. Almacena los componentes hijos. Implementa operaciones relacionadas con los hijos en la interfaz Component.

Client  (CompositeApp) Manipula los objetos de la composición a través de la interfaz Component.

Page 23: Patrones de Diseño II

Desacoplamiento entre datos y presentación

Page 24: Patrones de Diseño II

Model-View-ControllerModel-View-Controller (MVC) es un patrón

de arquitectura de software que separa los datos de una aplicación, la interfaz de usuario, y la lógica de control en tres componentes distintos. El patrón MVC se ve frecuentemente en aplicaciones web, donde la vista es la página HTML, el control es el código que provee de datos dinámicos a la página, y el modelo contiene clases representativas de la aplicación (como el mensaje de un foro, un miembro registrado, etc.)

Page 25: Patrones de Diseño II

Model-View-Controller (MVC)MVC = diseño sofisticado y flexible para las GUIs 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

Controller

View

View

Model

Model

Negocios(datos)

Procesa la entrada del usuario y actualiza el View y el Model de manera adecuada

Page 26: Patrones de Diseño II

Patrones de Diseño SubyacentesEl 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

Page 27: Patrones de Diseño II

Suscripciones y notificaciones

Page 28: Patrones de Diseño II

El patrón ObserverBasado 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

Sujeto

Observador

Observador

Observador

delegado

delegado

delegado

Click en un botón!

Page 29: Patrones de Diseño II

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

Controller

View

delegado

delegado

Page 30: Patrones de Diseño II

Representación de órdenes como objetos

Page 31: Patrones de Diseño II

El patrón CommandRepresenta a los comandos de IU como objetos:

Public Class UIControl

Public Sub Lookup(...) . . . End Sub

Public Class UIControl

Public Sub Lookup(...) . . . End Sub

Command

Sub Execute( ) …End Sub

Page 32: Patrones de Diseño II

Objetivo de este Patrón de Diseño

Fomenta aún más el desacoplamiento de los componentes

Conforma una nueva capa abstracción

Provee un framework para soportar el comportamiento dinámico:

Nos permite crear IUs sensibles al entorno intercambiando los objetos Command

Agregar estado a los objetos Command para soportar operaciones de Deshacer y Rehacer

Page 33: Patrones de Diseño II

Flexibilidad entre clases no compatibles

Page 34: Patrones de Diseño II

¡Advertencia!Hay que tener un poco más de sutileza para implementar este patrón

Para hacerlo correctamente, se necesita aplicar además el patrón Adapter

Public Class UIControl

Public Sub SomeHandler(...) . . . End Sub

Public Class UIControl

Public Sub SomeHandler(...) . . . End Sub

Command

Sub Execute( ) …End Sub

delegado

Adapter

Page 35: Patrones de Diseño II

Lo que hemos aprendido…

Page 36: Patrones de Diseño II