Está en la página 1de 46

UNIVERSIDADE DA CORUA Departamento de Tecnoloxas da Informacin e as Comunicacins (TIC)

Introduccin al Diseo con Patrones

Paula Montoto Castelao pmontoto@udc.es Noviembre 2008

[Basado en la charla de Juan Raposo Santiago, curso 2007/08 (http://www.tic.udc.es/~jrs)]

ndice Introduccin Tipos de patrones Descripcin de patrones Caso de estudio: diseo de una aplicacin Web bancaria Unas palabras finales Referencias

Noviembre 2008

Introduccin al Diseo con Patrones

Introduccin (1) Disear software orientado a objetos es difcil. Disear software reusable orientado a objetos es todava ms difcil. Es difcil que un diseador inexperto sea capaz de hacer un buen diseo.
Conoce los principios bsicos de la orientacin a objetos (herencia, polimorfismo, etc.) y un lenguaje orientado a objetos. Pero no sabe cmo usar esos conocimientos de manera eficaz.

Sin embargo, un diseador experto es capaz de hacer buenos diseos.


Reutiliza soluciones de diseo que les han funcionado bien en el pasado para resolver problemas similares.

Noviembre 2008

Introduccin al Diseo con Patrones

Introduccin (2)
La orientacin a objetos propugna no reinventar la rueda en la pura codificacin respecto de la resolucin de problemas.
Por qu, entonces, reinventarla para el ataque genrico a problemas comunes de anlisis, diseo e implementacin?

Debe existir alguna forma de comunicar al resto de los ingenieros los resultados encontrados tras mucho esfuerzo por algunos de ellos. Se necesita, al fin, algn esquema de documentacin que permita tal comunicacin.
La mera documentacin de lneas de cdigo resulta insuficiente, pues nicamente fomenta el uso de la tcnica de copiar y pegar. El tipo de los problemas y soluciones a documentar es muy variado
Programacin/anlisis/arquitectura/gestin/...

Se necesita un formato de documentacin nico que ane conceptualmente estos distintos tipos.

Noviembre 2008

Introduccin al Diseo con Patrones

Introduccin (3) Un patrn es una solucin a un problema de diseo no trivial que es:
Efectiva: ha sido vlido para resolver el problema en diseos pasados. Reusable: la solucin es la misma para problemas similares.

Un catlogo de patrones es un medio para comunicar la experiencia de forma efectiva, reduciendo lo que se conoce como curva de aprendizaje del diseo.
Coleccin de patrones organizados que incluye:
Descripcin completa de cada uno de los patrones Modos de acceso a la coleccin de patrones.
Correspondencia entre un problema real y un patrn (o conjunto de patrones).

Noviembre 2008

Introduccin al Diseo con Patrones

Introduccin (4) Eric Gamma, Richard Helm, Ralph Johnson y John Vlissides publicaron el primer catlogo de patrones en el mbito del software en 1994.
Design Patterns: Elements of Reusable Object-Oriented Software. Tambin conocido como GoF (Gang of Four). Y desde entonces, se han publicado muchos otros catlogos. Fue la primera vez que se document el conocimiento que usaban los expertos para resolver problemas de diseo. Se inspiraron en el trabajo de Christopher Alexander, que haba documentado patrones en el mbito de la arquitectura.
Cada patrn describe un problema que ocurre una y otra vez en nuestro entorno, para describir despus el ncleo de la solucin a ese problema, de tal manera que esa solucin pueda ser usada ms de un milln de veces sin hacerlo siquiera dos veces de la misma forma.
Christopher Alexander

Noviembre 2008

Introduccin al Diseo con Patrones

Introduccin (y 5)
Contexto Problema Solucin

Esencia: establecer parejas Problema Solucin.


El contexto explica bajo qu circunstancias la solucin es aplicable al problema. El contexto resalta una serie de factores que deben ser abordados por una solucin til al problema.

Ventajas del diseo con patrones:


Permiten reusar soluciones probadas. Facilitan la comunicacin entre diseadores.
Establecen un marco de referencia: terminologa, justificacin. Los patrones tienen nombres estndar.

Facilitan el aprendizaje al diseador inexperto.


Noviembre 2008 Introduccin al Diseo con Patrones 7

Aportaciones de los Patrones de Diseo


Permiten identificar a los objetos apropiados de una manera mucho ms sencilla.
En la programacin orientada a objetos resulta complicado descomponer el sistema en objetos (encapsulacin, granularidad, dependencias, flexibilidad, reusabilidad, etc.).

Permiten determinar la granularidad de los objetos. Ayudan a especificar las interfaces, identificando los elementos clave en las interfaces y las relaciones existentes entre distintas interfaces. Facilitan la especificacin de la implementaciones. Ayudan a reutilizar cdigo, facilitando la decisin entre "herencia o composicin" (favorece la composicin sobre la herencia y hace uso de la delegacin). Relacionan estructuras en tiempo de compilacin y en tiempo de ejecucin. Permiten hacer un diseo preparado para el cambio.

Noviembre 2008

Introduccin al Diseo con Patrones

Tipos de patrones (1) Existen patrones para las distintas actividades que hay que realizar en un proyecto (anlisis, diseo, implementacin, etc.)
Este seminario se centra en los relativos al diseo.

Existen patrones independientes del dominio y otros especficos a un dominio concreto.


Ej.: Los patrones del GoF son independientes del dominio. Ej.: Los patrones publicados en http://java.sun.com/blueprints/patterns/index.html son aplicables al desarrollo de aplicaciones empresariales (persistencia, tecnologas Web, etc.) con Java EE (la plataforma empresarial de Java)

Noviembre 2008

Introduccin al Diseo con Patrones

Tipos de patrones (2) Pattern-Oriented Software Architecture: A System of Patterns (F. Buschmann, R. Meunier, H. Rohnert, P. Sommerlad, M. Stal, 1996).
Tambin conocido como The POSA Book. Fue el primer libro en hacer una clasificacin de patrones:
Patrones arquitectnicos [Diseo]. Patrones de diseo [Diseo]. Idiomas [Implementacin].

Patrones arquitectnicos:
Aconsejan la arquitectura global que debe seguir una aplicacin. Ej.: El patrn Model-View-Controller (MVC) aconseja la arquitectura global que debe tener una aplicacin interactiva.

Noviembre 2008

Introduccin al Diseo con Patrones

10

Tipos de patrones (y 3) Patrones de diseo:


Explican cmo resolver un problema concreto de diseo. El patrn Data Access Object (DAO) permite abstraer y encapsular los accesos a un repositorio de datos (ej.: BD relacional, BD orientada a objetos, ficheros planos, etc.)

Idiomas:
Explican cmo resolver un problema particular de implementacin con una tecnologa concreta. Ej.: Cmo comparar objetos correctamente en Java? Correcta redefinicin de equals() y hashCode().

Noviembre 2008

Introduccin al Diseo con Patrones

11

Descripcin de patrones Cada catlogo de patrones utiliza una plantilla para describir sus patrones.
No existen plantillas estndar.

Ejemplo: plantilla para patrones de diseo [GoF]


Nombre y clasificacin.
Creacin, estructura o comportamiento.

Intencin.
Descripcin de lo que se pretende conseguir con el patrn.

Tambin Conocido Como.


Otros nombres del mismo patrn.

Motivacin.
Escenario que presenta un problema de diseo. Solucin para el escenario utilizando el patrn.

Aplicabilidad.
Situaciones en las cuales se puede aplicar el patrn.

Noviembre 2008

Introduccin al Diseo con Patrones

12

Descripcin de Patrones (2)


Estructura.
Descripcin grfica de los comportamientos, acciones y relaciones de los objetos que participan en el patrn
Diagrama de clases. Diagrama de colaboracin.

Participantes.
Clases y objetos participantes que componen el patrn. Responsabilidades.

Colaboraciones entre participantes.


Relaciones e interacciones entre los participantes de un patrn.

Consecuencias.
Ventajas e inconvenientes que pueden derivarse del uso del patrn.

Implementacin.
Tcnicas y peligros que pueden presentarse al implementar el patrn.

Noviembre 2008

Introduccin al Diseo con Patrones

13

Descripcin de Patrones (y 3)
Cdigo de ejemplo.
Planteamiento de cdigo prctico referido a un ejemplo (o ejemplos) suficientemente representativo del uso del patrn.

Usos conocidos.
Ejemplos del patrn en sistemas reales.

Patrones relacionados.
Referencias a otros patrones que bien son directamente utilizados por el descrito o bien representan soluciones complementarias o suplementarias del mismo.

Noviembre 2008

Introduccin al Diseo con Patrones

14

Clasificacin de Patrones (GoF 1) Clasificacin de los patrones de diseo segn su propsito.


Patrones de creacin:
Abstraen la forma en la que se crean los objetos, permitiendo tratar las clases a crear de forma genrica, dejando para ms tarde la decisin de qu clases crear o cmo crearlas. Prototype, Singleton, Factory Method, Abstract Factory, ...

Patrones estructurales:
Se ocupan de cmo se utilizan clases y objetos para componer estructuras de mayor tamao.
Lo fundamental son las relaciones de uso entre los objetos, y, stas estn determinadas por las interfaces que soportan los objetos. Estudian cmo se relacionan los objetos en tiempo de ejecucin y sirven para disear las interconexiones entre los objetos.

Composite, Proxy, Facade, Decorator, ...

Noviembre 2008

Introduccin al Diseo con Patrones

15

Clasificacin de Patrones (GoF y 2) Clasificacin de los patrones de diseo segn su propsito.


Patrones de comportamiento:
Se refieren a los algoritmos y a la asignacin de responsabilidades entre objetos.
Los patrones de comportamiento estudian las relaciones entre llamadas entre los diferentes objetos, normalmente ligados con la dimensin temporal.

Chain of Responsability, State, Strategy, Visitor, Observer, Template Method, Memento, ...

Noviembre 2008

Introduccin al Diseo con Patrones

16

Antipatrones
Los patrones ofrecen una forma de resolver un problema tpico; los antipatrones muestran formas de enfrentarse a problemas con consecuencias negativas conocidas. Los antipatrones se basan en la idea de que puede resultar ms fcil detectar a priori fallos en el desarrollo del proyecto que elegir el camino correcto, o lo que es lo mismo, descartar las alternativas incorrectas nos puede ayudar a la eleccin de la mejor alternativa. Al documentar los antipatrones, adems de los patrones de diseo, se dan argumentos a los diseadores de sistemas para no escoger malos caminos, partiendo de documentacin disponible en lugar de simplemente la intuicin. Ejemplo tpico: The Blob (clases gigantes).

Noviembre 2008

Introduccin al Diseo con Patrones

17

Caso de estudio: Diseo de una aplicacin Web bancaria (1) Caso de estudio: MiniBank.
Un sencillo ejemplo de una aplicacin Web bancaria.

Cules son los objetivos?


Ver ejemplos de patrones aplicados a un caso.
Patrones arquitectnicos: MVC. Patrones de diseo: Transfer Object, DAO, Factory, Facade y Command.

Obtener una visin global de los principios bsicos de diseo de una aplicacin Web con Java EE y Apache Struts. Lo ms importante: captar la idea de lo que significa disear con patrones.

Cules no son los objetivos?


Estudiar el diseo completo de MiniBank. Obtener una visin detallada de los principios bsicos de diseo de una aplicacin Web con Java EE y Apache Struts.
Noviembre 2008 Introduccin al Diseo con Patrones 18

Caso de estudio: Diseo de una aplicacin Web bancaria (2) Casos de uso implementados en MiniBank

Crear una cuenta bancaria.


Datos de una cuenta: identificador de la cuenta, identificador del usuario, balance. El identificador de la cuenta se genera automticamente.

Buscar una cuenta a partir de su identificador. Aadir una cantidad de dinero a una cuenta. Retirar una cantidad de dinero de una cuenta. Buscar todas las cuentas de un usuario. Eliminar una cuenta. Hacer una transferencia de dinero de una cuenta a otra. Buscar todas las operaciones que se han hecho sobre una cuenta entre dos fechas.
Datos de una operacin: identificador de la operacin, identificador de la cuenta, fecha, tipo (aadir/retirar), cantidad de dinero.

Noviembre 2008

Introduccin al Diseo con Patrones

19

Caso de estudio: Diseo de una aplicacin Web bancaria (3) MiniBank: bsqueda de una cuenta a partir de su identificador

Noviembre 2008

Introduccin al Diseo con Patrones

20

Caso de estudio: Diseo de una aplicacin Web bancaria (4) MiniBank: aadir dinero a una cuenta

Noviembre 2008

Introduccin al Diseo con Patrones

21

Caso de estudio: Diseo de una aplicacin Web bancaria (5) Objetos del dominio
User 1 1..n Account - accountIdentifier : Long - userIdentifier : Long - balance : double 1 0..n -

AccountOperation accountOperationIdentifier : Long accountIdentifier : Long date : java.util.Calendar type : byte amount : double

NOTA:
Un objeto del dominio es uno que corresponde a un concepto del mundo real.

Noviembre 2008

Introduccin al Diseo con Patrones

22

Caso de estudio: Diseo de una aplicacin Web bancaria (6) Arquitectura global de la aplicacin

Problema
Deseamos que haya una separacin entre la interfaz de usuario y la lgica de negocio.
Interfaz de usuario: las clases y/o artefactos que reciben los eventos del usuario y generan las respuestas visuales. Lgica de negocio: las clases que implementan los casos de uso de manera independiente de la interfaz de usuario.

Ventajas
Si se decide cambiar de tipo de interfaz de usuario en un futuro, la lgica de negocio se puede reutilizar.
La lgica de negocio es independiente de la interfaz de usuario.

Se favorece la separacin de roles en el equipo de desarrollo.


Personas que desarrollan la interfaz de usuario. Personas que desarrollan la lgica de negocio.
Noviembre 2008 Introduccin al Diseo con Patrones 23

Caso de estudio: Diseo de una aplicacin Web bancaria (7) Arquitectura global de la aplicacin

Solucin
Patrn Model-View-Controller (MVC) Estructurar el software en 3 capas.
Modelo: lgica de negocio Vista (interfaz de usuario): las clases y/o artefactos que generan las repuestas visuales Controlador (interfaz de usuario): las clases que reciben los eventos del usuario, invocan al modelo, y finalmente a la vista.

(5) (1)

MiniBank Vista (4) Controlador (2) Modelo Servidor de aplicaciones Web JavaEE (ej.: Apache Tomcat) (3) BD

Navegador

Noviembre 2008

Introduccin al Diseo con Patrones

24

Caso de estudio: Diseo de una aplicacin Web bancaria (8) Diseo de la capa modelo - Problemas

Problema 1: Cmo representar el estado de los objetos del dominio (persistentes)? Problema 2: Cmo implementar la persistencia de los objetos del dominio de forma independiente del repositorio de datos (BD relacional, BD orientada a objetos, etc.)? Problema 3: Cmo proporcionar una vista sencilla de la capa modelo a la capa controlador?

Noviembre 2008

Introduccin al Diseo con Patrones

25

Caso de estudio: Diseo de una aplicacin Web bancaria (9) Diseo de la capa modelo Solucin al problema 1 Ejemplo para el caso de los datos de una cuenta bancaria
< < Interfac e> > S eria lizable (from io)

A cc o untV O - ac countIdentifier : Long - us erIdenti fier : Long - balanc e : double + + + + + + A c countV O(ac countIdentifier : Long, userIdentifier : Long, balanc e : double) getA c countIdentifier() : Long getUs erIdentifier() : Long getB alanc e() : double setB alanc e(newB alance : double) : void toS tring() : S tring

Noviembre 2008

Introduccin al Diseo con Patrones

26

Caso de estudio: Diseo de una aplicacin Web bancaria (10) Diseo de la capa modelo Solucin al problema 1

Patrn Transfer Object (TO).


Anteriormente conocido como Value Object (VO). Representa estado/valor. Atributos privados => estado. Mtodos get para acceder a los atributos. Mtodos set para los atributos modificables. Quizs un mtodo toString para imprimir el estado.
til para depuracin y pruebas de unidad.

Implementa java.io.Serializable si se precisa enviar por la red. Fuente: http://java.sun.com/blueprints/patterns/index.html

Noviembre 2008

Introduccin al Diseo con Patrones

27

Caso de estudio: Diseo de una aplicacin Web bancaria (11) Diseo de la capa modelo Solucin al problema 2 Ejemplo para el caso de los datos de una cuenta bancaria
S QLA c c ountDA OFac tory << s tatic >> - daoClas s : Clas s - S QLA c c ountDA OFactory () < < s tatic > > + getDA O() : S QLA c c ountDA O < <ins tantiate> > < <us e> > ConfigurationP aram eters M anager (from c onfiguration)

<< Interfac e> > S QLA cc ountDA O + + + + + + c reate(c onnec tion : Connec tion, ac c ountV O : A c c ountV O) : A c c ountV O ex is ts (c onnec tion : Connec tion, ac c ountIdentifier : Long) : boolean find(c onnec tion : Connec tion, ac countIdentifier : Long) : A c c ountV O findB y Us erIdentifier(c onnec tion : Connec tion, us erIdentifier : Long, s tartIndex : int, c ount : int) : Lis t update(c onnec tion : Connec tion, ac c ountV O : A c c ountV O) : void rem ove(c onnec tion : Connec tion, ac c ountIdentifier : Long) : void

Implementaciones particulares

Noviembre 2008

Introduccin al Diseo con Patrones

28

Caso de estudio: Diseo de una aplicacin Web bancaria (12) Diseo de la capa modelo Solucin al problema 2 Recuperacin de los datos de una cuenta a partir de su identificador
/* Get a connection. */ Connection connection = ... /* Get dao. */ SQLAccountDAO dao = SQLAccountDAOFactory.getDAO(); /* * Get the AccountVO corresponding to accountIdentifier * 12345. */ Long accountIdentifier = new Long(12345); AccountVO accountVO = dao.find(connection, accountIdentifier);

Noviembre 2008

Introduccin al Diseo con Patrones

29

Caso de estudio: Diseo de una aplicacin Web bancaria (13) Diseo de la capa modelo Solucin al problema 2

Patrn Data Access Object (DAO).


Ejemplo: SQLAccountDAO. Define una interfaz con operaciones para insertar, borrar, actualizar y recuperar los objetos persistentes de un tipo. La interfaz oculta el tipo de repositorio de datos.
Por motivos de sencillez, la interfaz SQLAccountDAO deja claro en su nombre (prefijo SQL) que las implementaciones trabajarn contra una BD relacional (porque las operaciones reciben un objeto java.sql.Connection). An as, oculta la base de datos relacional concreta que se use (Oracle, SQL Server, PostgreSQL, MySQL, etc.) , que para ciertos aspectos pueden usar dialectos de SQL diferentes (ej.: generacin de identificadores numricos).

Se proporcionan tantas implementaciones de la interfaz como repositorios de datos distintos se quieran soportar. Fuente: http://java.sun.com/blueprints/patterns/index.html
Es un caso particular del patrn Strategy [GoF].

Noviembre 2008

Introduccin al Diseo con Patrones

30

Caso de estudio: Diseo de una aplicacin Web bancaria (14) Diseo de la capa modelo Solucin al problema 2

Patrn Factory.
Ejemplo: SQLAccountDAOFactory. Permite crear objetos de una misma familia (implementan la misma interfaz) sin que el cdigo dependa de los nombres concretos de las clases. SQLAccountDAOFactory
getDAO() Lee de la configuracin (mediante ConfigurationParametersManager) cul es nombre de la clase concreta que implementa SQLAccountDAO. Usando la API de Java (java.lang.Class) carga la clase en memoria y crea una instancia. Si se decide cambiar de base de datos, slo es preciso crear una nueva implementacin de SQLAccountDAO (en caso de que no sea posible dar una implementacin genrica) y modificar el fichero de configuracin.
Plug-n-play

Fuente: GoF
Noviembre 2008 Introduccin al Diseo con Patrones 31

Caso de estudio: Diseo de una aplicacin Web bancaria (15) Diseo de la capa modelo Solucin al problema 3

A c c ountFac adeDelegateFac tory < < static> > - delegateClass : Class < < static> > + getDelegate() : A c c ountFac adeDelegate

< < us e> >

ConfigurationP aram eters M anager (from configuration)

<< ins tantiate> >

<< Interface> > A cc ountFa c adeDelegate + + + + + + + + createA c count(ac countV O : A cc ountV O) : A c c ountV O findA c c ount(ac c ountIdentifier : Long) : A c c ountV O addToA c count(ac countIdentifier : Long, am ount : double) : void withdrawFrom A c count(ac countIdentifier : Long, am ont : double) : void findA c c ounts B y UserIdentifier(userIdentifier : Long, s tartIndex : int, c ount : int) : A c countChunk V O rem oveA cc ount(acc ountIdentifier : Long) : void transfer(sourceA c countIdentifier : Long, des tinationA c c ountIdentifier : Long, am ount : double) : void findA c c ountOperationsB y Date(ac c ountIdentifier : Long, startDate : Calendar, endDate : Calendar, s tartIndex : int, c ount : int) : A c countOperationChunk V O

Implementaciones particulares

Noviembre 2008

Introduccin al Diseo con Patrones

32

Caso de estudio: Diseo de una aplicacin Web bancaria (16) Diseo de la capa modelo Solucin al problema 3

Patrn Facade.
Define una interfaz de alto nivel que simplifica el uso de un subsistema. Fuentes: GoF. En el caso de la capa modelo: Session Facade + Business Delegate (http://java.sun.com/blueprints/patterns/index.html ) Una fachada representa un conjunto de casos de uso lgicamente relacionados. Cada operacin corresponde a un caso de uso. La declaracin de las operaciones oculta la tecnologa usada en su implementacin. Puede usarse una factora para crear instancias.
Permite seleccionar implementaciones alternativas.

Noviembre 2008

Introduccin al Diseo con Patrones

33

Caso de estudio: Diseo de una aplicacin Web bancaria (17) Diseo de la capa modelo Solucin al problema 3

Patrn Facade (cont)


En el caso de MiniBank, slo hay una fachada (AccountFacadeDelegate). En una aplicacin real normalmente hay ms de una fachada. Ej.: si amplisemos MiniBank para contemplar la consulta del catlogo de productos que vende el banco, podramos tener un ProductCatalogFacade (que ofrece operaciones para: encontrar productos por identificador, categora, palabras clave, etc.; recuperar todas las categoras, etc.).

Noviembre 2008

Introduccin al Diseo con Patrones

34

Caso de estudio: Diseo de una aplicacin Web bancaria (18) Diseo de la capa modelo Solucin al problema 3
Implementacin de addToAccount

:AccountFacadeDelegate 1: addToAccount 1.1: getDAO 1.2: find 1.3: update 1.4: getDAO 1.5: create

:SQLAccountDAOFactory

:SQLAccountDAO

:SQLAccountOperationDAOFactory

:SQLAccountOperationDAO

Noviembre 2008

Introduccin al Diseo con Patrones

35

Caso de estudio: Diseo de una aplicacin Web bancaria (19) Diseo de la capa modelo Solucin al problema 3
Implementacin de addToAccount (cont)
<< Get connection >> << Start transaction >> /* Find account. */ SQLAccountDAO accountDAO = SQLAccountDAOFactory.getDAO(); AccountVO accountVO = accountDAO.find(connection, accountIdentifier); /* Set new balance. */ double currentBalance = accountVO.getBalance(); double newBalance = currentBalance + amount; accountVO.setBalance(newBalance); accountDAO.update(connection, accountVO); /* Register account operation. */ SQLAccountOperationDAO accountOperationDAO = SQLAccountOperationDAOFactory.getDAO(); AccountOperationVO accountOperationVO = new AccountOperationVO(new Long(-1), accountIdentifier, Calendar.getInstance(), ADD_OPERATION, amount); accountOperationDAO.create(connection, accountOperationVO); << Commit transaction >> << Close connection >> Noviembre 2008 Introduccin al Diseo con Patrones 36

Caso de estudio: Diseo de una aplicacin Web bancaria (20) Diseo de la capas controlador y vista en MiniBank

Capa vista.
JavaServer Pages.
Una pgina JSP permite generar el markup (en este caso, HTML) que se le va a enviar al navegador (un formulario, el resultado de un caso de uso, etc.).

Las libreras de tags JSP estndar y la de HTML de Struts.


Con estas libreras y una buena arquitectura MVC, no se requieren conocimientos de programacin para crear las pginas JSP (slo conocimientos de HTML y de los tags de estas dos libreras). Aplicacin del Patrn View Helper (Core J2EE Patterns).

Capa controlador
Apache Struts.
Proporciona un framework para implementar la capa controlador de la aplicacin Web. Proporciona la mencionada librera de tags de HTML (capa vista).

Noviembre 2008

Introduccin al Diseo con Patrones

37

Caso de estudio: Diseo de una aplicacin Web bancaria (21) Diseo de la capa controlador

Diferencia entre un framework y una librera


Librera:
Conjunto de clases a las que el desarrollador invoca directamente (normalmente a un subconjunto de ellas, las que definen la API de la librera). El cdigo de la aplicacin invoca a la librera

Framework:
Conjunto de clases que implementan de manera parcial la arquitectura de una aplicacin (o parte de la arquitectura).
Implementan una coleccin de patrones.

Para completar la arquitectura, el desarrollador tiene que implementar algunas interfaces y/o extender algunas clases abstractas. El framework invoca al cdigo de la aplicacin Tambin suelen tener una parte que acta como librera.

Noviembre 2008

Introduccin al Diseo con Patrones

38

Caso de estudio: Diseo de una aplicacin Web bancaria (22) Diseo de la capa controlador

Struts RequestProcessor # actions : Map + process


0..n

Action + execute

FindAccountsAction

TransferAction

...

MiniBank

Noviembre 2008

Introduccin al Diseo con Patrones

39

Caso de estudio: Diseo de una aplicacin Web bancaria (23) Diseo de la capa controlador

El anterior esquema corresponde a una aplicacin del patrn Command.


Fuente: GoF

RequestProcessor
Recibe una peticin HTTP. Invoca al mtodo execute de la accin correspondiente (todas extienden de Action), cuya implementacin:
Accede a los parmetros de la peticin HTTP (ej.: los campos de un formulario). Invoca una operacin de la fachada del modelo. Selecciona una pgina JSP para generar la respuesta y le pasa el resultado de la operacin.

Pasa el control a la pgina JSP seleccionada por la accin.


La pgina JSP genera la respuesta.

Noviembre 2008

Introduccin al Diseo con Patrones

40

Caso de estudio: Diseo de una aplicacin Web bancaria (24) Ejecucin de un caso de uso
:FindAccounts.jspx 1: clic en el enlace Find accounts 2: clic en el botn Find :RequestProcessor

:FindAccountsAction

:AccountFacadeDelegateFactory

:AccountFacadeDelegate

:AccountDetails.jspx

2.1: execute

2.1.1: getDelegate 2.1.2: findAccount 2.1.3: foward

View Noviembre 2008

Controller

Model

View 41

Introduccin al Diseo con Patrones

Caso de estudio: Diseo de una aplicacin Web bancaria (25) Ejemplo de pgina JSP (capa vista): AccountDetails.jspx
<table xmlns="http://www.w3.org/1999/xhtml" xmlns:jsp="http://java.sun.com/JSP/Page" xmlns:fmt="http://java.sun.com/jsp/jstl/fmt" xmlns:c="http://java.sun.com/jsp/jstl/core" class="accountDetails"> <jsp:output omit-xml-declaration="true"/> <tr> <th><fmt:message key="AccountAttributes.accountIdentifier"/></th> <td><c:out value="${requestScope.account.accountIdentifier}"/></td> </tr> <tr> <th><fmt:message key="AccountAttributes.userIdentifier"/></th> <td><c:out value="${requestScope.account.userIdentifier}"/></td> </tr> <tr> <th><fmt:message key="AccountAttributes.balance"/></th> <td><fmt:formatNumber value="${requestScope.account.balance}"/></td> </tr> </table> Noviembre 2008 Introduccin al Diseo con Patrones 42

Caso de estudio: Diseo de una aplicacin Web bancaria (y 26) Resumen del mtodo de diseo seguido en MiniBank

Modelo:
Un TO por cada objeto persistente. Un DAO (+ factora) por cada objeto persistente. Definir fachadas (+ factoras) del modelo.
Cada fachada agrupa a un conjunto de casos de uso relacionados.

Controlador:
Una accin (comando) por cada caso de uso.

Vista:
Por cada caso de uso: una pgina JSP para el formulario de entrada y/o una pgina JSP para generar la salida.

Noviembre 2008

Introduccin al Diseo con Patrones

43

Unas palabras finales Disear con patrones NO ES


Aplico todos los patrones que yo s en el diseo de mi software.

Disear con patrones ES


Resuelvo cada problema de diseo que me surge con un patrn apropiado.

OJO, un uso excesivo de patrones fcilmente terminar en una arquitectura excesivamente compleja.
Hay que aplicar patrones para resolver problemas de verdad y no problemas filosficos. Principio KISS (Keep It Simple Stupid, Keep It Short and Simple, ).
Recomienda el desarrollo empleando partes sencillas y comprensibles, rechazando lo enrevesado e innecesario en el desarrollo de sistemas complejos en ingeniera.
Noviembre 2008 Introduccin al Diseo con Patrones 44

Referencias (1)
Libros:
E. Gamma, R. Helm, R. Johnson, J. Vlissides, Design Patterns: Elements of Reusable Object-Oriented Software, Addisson-Wesley, 1994 J. Crupi, D. Alur, D. Malks, Core J2EE Patterns, 2nd edition, Prentice Hall, 2003 F. Buschmann, R. Meunier, H. Rohnert, P. Sommerlad, M. Stal, Pattern-Oriented Software Architecture: A System of Patterns, Wiley & Sons, 1996 J. W. Cooper, Java Design Patterns: A Tutorial, AddisonWesley, 2000 M. Grand, Patterns in Java: Catalogue of Reusable Design Patterns Illustrated with UML - Vol 1, Wiley & Sons, 2002

Sitios Web:
http://hillside.net/patterns http://java.sun.com/blueprints/patterns/index.html
Noviembre 2008 Introduccin al Diseo con Patrones 45

Referencias (y 2) Asignaturas en la Facultad de Informtica de la UDC.


Diseo de Sistemas Informticos:
http://www.lfcia.org/dsi 4 Ingeniera Informtica. Se centra en los patrones del GoF. Transparencias y cdigo disponibles.

Integracin de Sistemas:
http://www.tic.udc.es/~fbellas/teaching/is-2007-2008 5 Ingeniera Informtica. Se centra en el diseo e implementacin de aplicaciones empresariales con Java EE. Transparencias y cdigo disponibles.

Transparencias de esta charla disponibles en la pgina de la asignatura PFC

Noviembre 2008

Introduccin al Diseo con Patrones

46

También podría gustarte