Patrones en .

NET

Page 1 of 18

Buscar

El sitio de Angel "Java" L

ajlopez
Temas · · · · · · · · · · · · ·

| Temas | Cursos | Proyectos | Blog | Blog en Inglés | Blog no técnico | Contacto | English Versio

Todos Programación Java .Net XML UML/UP Visual Basic PHP Webmasters Internet Oracle Emprender Matemáticas

Patrones en .NET
Cursos de Diseño Grafico Encuentra La Mejor Escuela Para Ti. 20+ Cursos de Diseño Grafico! Diseño Interior Cultiva tus Habilidades Artísticas. Estudia Diseño Interior - Aquí. Art.Schools.com Cree su página web Simple, rápido y profesional Su página web en 10 minutos www.WebSelf.net

Código fuente usado en el artículo

Cuando construimos una pieza de software, desde un pequeño utilitario, hasta un sistema comp estamos encarando un trabajo de análisis, diseño y desarrollo. Esa actividad puede realizarse en individualmente. En muchas situaciones, hemos notado que la implementación de una solución, diseño o de programación, es similar a otra que hemos adoptado en el pasado. También suele su descubrimos, más adelante, que la solución adoptada para un problema en particular, sea opaca solución no contemplada inicialmente. Cuantas veces nos "despertamos" a una nueva alternativa implementación, al ver el código o el esquema de la solución de otro producto. Es común encont pistas e ideas interesantes en los artículos y libros que vamos consultando.

Siendo la creación de software, una actividad humana que se viene desarrollando desde hace dé extraño que hayan surgido esquemas de soluciones a problemas planteados anteriormente. Y, a "crisis del sofware", (el siempre presente problema de generar soluciones en tiempo y costo), es incentivado la aparición de metodologías de análisis, de diseño, de implementación, y de manejo

En el agitado mundo de estas metodologías (reflejo de los perpetuos cambios a los que nos tiene acostumbrada nuestra profesión), a fines del siglo pasado, surge el concepto de "Patterns" (patr preferido dejar el título en inglés, pues es al que nos hemos acostumbrado en estas latitudes. Ve artículo, qué son estos patterns, y cómo se pueden aplicar en .NET, la nueva tecnología de Micro sorpresas nos depara (desde la ansiada herencia, hasta la máquina virtual base de todo, pasand de clases comunes).

Un pequeño ejemplo

El patrón resulta ser una solución a un problema, que se puede aplicar muchas veces, en distinta Veamos un caso en particular.

Supongamos que tenemos una clase SistemaDeFacturacion, que concentra la actividad de gener Queremos que el resto del sistema, interactúe con una sola instancia de esta clase, porque es im nosotros no generar recursos duplicados, y controlar el acceso a los mismos. ¿Cómo podemos co resultado?

http://www.ajlopez.net/ArticuloMuestra.php?Id=342

5/6/2011

De aquí.NET Page 2 of 18 Podemos escribir el código: public class SistemaDeFacturacion { //NOTA: Sólo para aplicaciones de un thread private static SistemaDeFacturacion _Instancia = null. esta actividad se dedica a constr extraño que comparta vocabulario y conceptos..Patrones en .net/ArticuloMuestra. el concepto de patrón de diseño. participar de alguna medida. ya en 1977: "Cada pattern describe un problema que ocurre una y otra vez en nuestro entorno. d núcleo de la solución a ese problema. Pero al fin. y en las re especialistas. es impo la historia de su desarrollo. el término "software architecture" era ya usado normalmente. estuvo los algoritmos. que para entender realmente una parte del conocimiento humano. } return _Instancia. realmente disfruté mucho leyéndolo). la necesidad de los siguientes párrafos. Ya había habido algún antecendente ilustre. Esto nos permite entender las motivaciones para su aparición. A fines de los ochenta. usaremos mismos principios para expresar un pattern. de tal manera. Aún hoy es la referencia sobre algunos de esos temas. Y hasta quizás. otras funciones de Sistema de Facturacion } Siempre he pensado. elecciones. desarrollo. } //. e arquitectura (la de construcción de edificios). Christopher Alexander es el arquitecto que primero estudió el concepto de pattern. se puede aplicar a la inge software. mostró ciertas soluciones específica ejemplo.php?Id=342 5/6/2011 . así co dificultades. y falsos caminos tomados.ajlopez. sino en otra actividad. Algunas otras publicacione tratado otros aspectos. no nace en el software. sin que tenga que ser la misma cada vez" El escribía acerca de patterns en la arquitectura. como el conocido "The Art of Computer Programmin Donald Knuth. de las prácticas habituales en la construcción de sistemas. Expresaremos nuestra solución en términos de objetos e interfaces. El escribió. private SistemaDeFacturacion() {} public static SistemaDeFacturacion GetInstancia() { if (_Instancia==null) { _Instancia = new SistemaDeFacturacion (). Algo de historia Curiosamente. en lugar de usar p espacios y edificios. una especie de gu enciclopedia. iba naciendo la idea de un manual para arquitectos de sistemas. pero lo que describe.. en el context construcción de edificios y comunidades. que podemos usar esa solución un millón d en el tiempo. El libro seminal de Coplien "Advanced C++: Programming Styles and Idi mi poder un ejemplar. Su intento de catalogar el conocimiento acumulado sobre la programación. una que permitía construir una clase String (tan necesaria en un lenguaje que derivaba http://www. y además. Como la nuestra.

Vlissides. se le ha asignado una denominación que permite que los e tema. la banda de los cuatro).El nombre: Este elemento. soluciones que ya se habían aplicado en problemas notablemente en la propia librería base del lenguaje (como el caso del notify en Object. el elemento planteado arriba. . Johnson. que alguien podría pensar que es intrascendente. se comienzan a describir patrones. un patrón nos soluciona un tema de espacio (como el Fl http://www. todo patrón nace de un problema a solucionar. http://www. Pero la elección seguramente recaerá en el patrón que mejor se adapte al co particular del problema que tengamos entre manos. en software. en la de desarrollo en Smalltalk (más que un lenguaje o una tecnología. pero es el más conocido). donde menciona que un pattern. los "trade-off". "Object Oriented Patter comunicaciones de la asociación ACM (Association for Computer Machinery. hemos encontrado una cita de Alexander. la moneda pago es el espacio y el tiempo. En general. Según "GoF" un patrón tendrá entonces.El problema: acá se explica el problema original. al ordenar un patrón bajo un nombre. uno de los problemas que tuvieron un nombre apropiado para cada patrón que catalogaron. puedan conversar usando un diccionario común. cuatro elementos esenciales: . Helm. Más arriba. En un escrito de 1992. que cada uno es en real solución a un problema. A cada patrón popular. "no free lunch".org presentar el uso de patrones en las etapas de análisis y diseño. "Design Patterns". tratan de enumerar el conocimiento acumulado sobre e libro (también en mi biblioteca. .NET Page 3 of 18 el concepto de string como tipo primitivo no existía). que aceptar al adoptar el mismo. desde su columna en "The Smalltalk Report". El mítico Kent Beck tuvo la idea de difundir el trabajo de Alexander. . uno de esos libros a salvar de un incendio.acm. subtitu "Elementos de software orientado a objetos reusable". y realmente se lo merece. preludio actuales Observer). Por otra rama.php?Id=342 5/6/2011 .Las consecuencias: son los resultados de aplicar el patrón. Según "GoF". y hasta nos ayud mismos. son los que t trabajo algo monumental. un ambie objetos). Pete trabaja en esos tiempos en coleccionar patrones. en nuestro estudio de los patrones. por el orden y la claridad y extensión de su exposición ¿Qué es un Design Pattern? Pero basta ya de introducción histórica. se ha convertido en un escrit los estudiosos. y en una lista de 23 patterns. de una forma eficiente. Hasta puede que un mismo problema rea soluciones parecidas. o clases y estructuras que se han encontrado inflexibles a la hora de implemen primero. de hacer un catálogo de los patrones de diseño que hasta ese momen aparecido. correspondientes a dos patrones (muchas veces pasa esto con el Abstract el Factory Method). compromisos. Como dicen los americanos. A veces. o trivial. sino que provee una descripción abstra enumeración de elementos y sus relaciones. entre la comunidad smalltalker.La solución: nos encontraremos. en 1995. Puede describir desde detalle como algoritmos. Nos permite un mayor grado de abstracc permite comunicarnos con nuestros colegas. Resaltemos que la solución que un patrón d necesariamente es detallada al nivel de implementación. es "la sol problema". Estos au conocidos afectuosamente como "GoF" (la "Gang of Four". ha prob fundamental. Pero es con el trabajo de Gamma. cuando el tema se pone maduro.Patrones en . y su contexto. para solucionar el problema planteado. construir un lenguaje compartido. pasemos a describir qué es un patrón de diseño (que no clase de patrón existente. no hay almuerzos grat forma hay que pagar lo que aparece especialmente barato.ajlopez. tan alej del software.net/ArticuloMuestra. junto con el Rey Past como los "Elementos de Historia de las Matemáticas" de Bourbaki).

("Alsa Known As") del patrón. entender la descripción algo más abstracta del patrón genérico. o simplemente para engrosar el catálogo. cuando aparezca.NET Page 4 of 18 costa de una mayor complejidad en otra punta de nuestro desarrollo. adoptado en el libro de Gamm Nombre del patrón y clasificación Cada patrón tiene un nombre.php?Id=342 5/6/2011 . El "GoF" los clasifica en creac estructurales y de conducta. en este artículo daremos noc misma. ha sido des esencia del patrón. Aplicación En qué situaciones puede ser aplicado un patrón. pero en su tiempo.net/ArticuloMuestra. Los primeros autores les dieron un nombre que no siempre Estos otros nombres pueden ser enumerados en la descripción del patrón. Partipantes La lista de las clases y objetos que participan del patrón de diseño. para poder describirlo en un nivel mayor de abstracción. una jus como "¿qué problema de diseño trata de abordar?" Otros nombres O el A. Intención Nada se da en la nada. para describir un patrón. El trabajo del catalogador. esta parte describe un escenario: un problema en particular que aparece. Más sobre esta clasificación más adelante. Cada patrón tiene una intención. y una categoría a la que pertenece. Lenguaje Unificado de Mod no se necesita entender al detalle esta notación. Se adopta un diagrama basado originariamente en la Modeling Technique").K. destacan que clasificados. Estructura La parte más conocida. siempre son patrones que ya se han aplicado exitosamente con anterioridad. se verá respaldado por aplicaciones anteriores. una razón.Patrones en . Pueden darse ejemplos de malos diseños. No se caso de un patrón creado de la nada.A. Describiendo un Pattern He aquí algunos un formato consistente. Cada patrón que literatura. sino en un contexto. Pero también notemos. que los catálogos de patrones que han aparecido. hoy se usa UML ("Unified Modeling Language". Motivación Más que la intención. Ahora menos usado. luego del nombre. y aprovechar así su ámbitos y contextos parecidos. Hay algo a esta altura del artículo para destacar: vemos que un patrón siempre tiene un problem solución. y las responsabilidades que t http://www. los patrones h en distintos proyectos y tecnologías.ajlopez. que beneficiarse de la aplicación de este patrón en particular.

http://www. Podemos nombrar acá al WebRequ que nos devuelve un objeto de distintas clases. y los clasifican en las cate Agreguemos un resumen de los patrones que encontraron en cada una. En general. tratan de ocultar las clases y métodos concretos de creació que al variar su implementación. Patrones relacionados Ya hemos apuntado que un patrón es una solución a un problema. Usos conocidos Un patrón no es tal. ligadas.net/ArticuloMuestra. y comienzan a aparecer las implementaciones . Código de ejemplo Los buenos de la "GoF". en Sm C++. Puede que haya problemas p tengan más de una solución. si no ha sido ya empleado en algún caso real. dependiendo de lo que le aportemos como parám ejecución. Implementación Esta es la parte que más puede variar. Se trata de explicar acá cuáles son las similitudes y (no menos importante) las dif patrones relacionados. porque para cada patrón puede haber varias posibles implementaciones. siempre nos dan código de ejemplo de cada patrón.php?Id=342 5/6/2011 .Patrones en .ajlopez. por ejemplo. diferentes implementaciones según la tecnología adoptada. se concentran en los patrones de diseño.NET de aplicación de estos patrones. Han aparecido luego libros con patrones aplicados a Java. Patrones Creacionales ("Creational Patterns") Abstraen el proceso de instanciación. por ejemplo. Nos ayudan a independizar a un sis sus objetos son creados. y que compromisos se asumen. Veremos puede haber sutiles diferencias entre una implementación y otra. al lengua implementación. no se vea afectado el resto del sistema.NET Page 5 of 18 Colaboraciones Descripción de cómo los participantes colaborar para llevar a cabo sus responsabilidades en el p Consecuencias Explica cómo el patrón cumple con sus objetivos. Clasificación de Patrones Gamma y sus colaboradores. Se debe incluir por lo menos conocidos de difentes ámbitos.Net. De ahí que muchos patrones estén relacionados entre sí: como el c y del Adapter. incluso. Es común encontrar "competencia" entre estos patrones: hay más de un patrón a adoptar ante u Hay varios ejemplos en .

en lugar de usar subclases. De Conducta : ("Behavioral Patterns") Más que describir objetos o clases. pero subclases implementar la creación en concreto. conseguimos otras instancias de ese objeto. Frec describen las colaboraciones entre distintos elementos. Encontramos en . eficientemente. http://www. para conseguir un objetivo. que es la esperada por algún cli Bridge: Desacopla una abstracción de su implementación en concreto. El clásico ejemplo es el de una clase A cada Nodo no importa si es un NodoCompuesto o uno simple. De esa manera. para facilitar el uso del subsistema.net/ArticuloMuestra. Luego. Composite: Compone objetos en una estructura de árbol. donde los objetos compuestos se trat similar a los objetos simples. Flyweight: Permite compartir objetos. una forma de recorrer una lista o afectar a este elemento. que permite agrupar varios objetos como si fuera tratar al objeto compuesto de una forma similar al simple. Proxy: Provee un subrogado a otro objeto.NET una aplicaci patrón en el XmlDocument. Prototype: Mediante una instancia prototípica. Singleton: Nos consigue dar un solo objeto de la clase.ajlopez. Como muest tenemos los Enumerator. para formar estructuras Podemos nombrar al clásico patrón Composite. podemos cambiar implementación. como en el Abstract Factory. en cualquier momento de la aplicación. Adapter: Permite convertir una interface de una clase. o la abstracción. Es una in nivel. Builder: Separa la construcción de un objeto complejo.NET Page 6 of 18 Abstract Factory: Nos da una interface para crear objetos de alguna familia. en otra. sin cambiar la otra. Decorator: Agrega responsabilidad a un objeto dinámicamente. Estructurales : ("Structural Patterns") Se ocupan de cómo clases y objetos se agrupan.Patrones en . sin repetirlos en el sistema. que implementan el patrón Iterator. para controlar el acceso al mismo.php?Id=342 5/6/2011 . sino la comunicación entre ellos. e proceso de construcción puede crear diferentes resultados. de su representación. Factory Method: Se define una interface para crear objetos. sin especificar la c concreto. dándonos una alternativa a la e una clase. Facade: Provee una interface unificada a un conjunto de funciones de un subsistema.

el libro mencionado da un detalle exhaustivo. que sea el punto de e sistema externo. State: Permite a un objeto cambiar su conducta cuando cambia su estado interno. Problema ¿Cómo hacer que la instancia de un objeto sea accesible globalmente. Contexto En algunas situaciones. entre un objetos y otros que están interesados en de nuevo. Command: Encapsula el requerimiento a un objeto.NET Page 7 of 18 Chain of Responsability: Nos desacopla el enviador de un mensaje. sin expo estructura interna.NE El patrón Singleton Habíamos mostrado un ejemplo de patrón. poder restaurarlo más adelante. simulando qu clase. junto con su intérp Iterator: Nos da un modo de acceder a los elementos de un objeto colección o similar. y que sea única? http://www. desde el punto de vista de . Por ejemplo. qued en subclases. de su receptor. Visitor: Nos permite recorrer una estructura (un árbol.php?Id=342 5/6/2011 . También podría ser un objeto que represente al Sistema Contable. Para cada uno de estos.Patrones en . Eso se consigue pasando requerimiento por la cadena de objetos hasta llegar al encargado de atenderlo.net/ArticuloMuestra. algunos de estos patrones. Ahora describámoslo de forma má que se habitúa en la literatura. Analicemos entonces. permitiend varios objetos que tengan la oportunidad de manejar el requerimiento. Template Method: Define el esqueleto de una operación. necesitamos que algunos datos sean accesibles desde el resto del sistem necesitamos que esos datos sean únicos. llamado Singleton. incluyendo código de ejem implementaciones conocidas. permite capturar su estad ejemplo. Strategy: Define una familia de algoritmos.ajlopez. por ejemplo). aplicando una operación a elemento. Mediator: Permite la interacción de varios objetos. y los hace intercambiables. más en detalle. un objeto que abstraiga lo que es el Siste actual. sin caer en el acople entre los mismos. sin generar acoples fuertes en esas relacione Memento: Sin necesitar entrar en la estructura interna de un objeto. cuyas operaciones más básicas. permitiendo incluso el "undo" de la operaci Interpreter: Construye una representación de la gramática de un lenguaje. Observer: Define una relación uno a muchos.

Hacer que la clase provea una instancia de sí misma. para evitar la creación de otros objetos. y pueden ser accedidas desde cualq del sistema.NET Page 8 of 18 Fuerzas Consideremos las fuerzas que intervienen en las posibles soluciones. pueda crear una instancia. Contiene una propiedad estática (el sub que es un método de clase. esa variable reside en la espacio de nombre raíz. El signo "-" en el constructor. un objeto de la mi Según la notación UML el número 1 en la esquina superior derecha. o Visual C lenguajes. . debemos tener control de la creación de las instanci Habrá que implementar algún mecanismo para que no cualquiera pueda crear una instancia.net/ArticuloMuestra. Esto consigue que nadie ap propia clase. Implementación Public Class Singleton Private Shared mInstance As Singleton Private mTime As String ' Constructor privado Private Sub New() mTime = Now. como Visual Basic 6. .ToLongTimeString MsgBox("Objeto Singleton Creado en New") End Sub Public Shared Function GetInstance() As Singleton If mInstance Is Nothing Then mInstance = New Singleton() http://www. pero no el d única. mas que de instancia).Patrones en . Esto puede solucionar el requerimiento de que sea visible globalmente. Hay otros lenguajes que no tienen el concepto de variable global.Permitir que otros objetos obtengan esa instancia.Si necesitamos que la instancia sea única.php?Id=342 5/6/2011 . que retorna un Singleton. El diagrama UML correspondiente es muy simple: Este diagrama UML muestra que Singleton es una clase. Solución El patrón Singleton proporciona la siguiente solución: .Hay lenguajes que soportan la existencia de variables globales.ajlopez. mediante la llamada a un método de la clas . lo señala como privado. indica que solamente habrá de esta clase.Declarar el constructor como privado. .

puede tener alguna arista sutil. catalogando con Sub New.Patrones en . que resuelve ese problema. pidan el GetInstance. usando un objeto Mutex: Public Class Singleton Private Shared mInstance As Singleton Private Shared mMutex As New System. La que no es evidente. creando dos Este es un ejemplo mejorado. su parte.Threading.ToLongTimeString MsgBox("Objeto Singleton Creado en New") End Sub Public Shared Function GetInstance() As Singleton mMutex.net/ArticuloMuestra. que no es parte del patrón original: deferimos la cr objeto hasta el momento que alguien pide la instancia. en este ejem no contempla la posibilidad de dos "threads" (hilos de ejecución) que. Si así sucediera. y hagan cada uno un "new". al mismo tiempo.php?Id=342 5/6/2011 .WaitOne() If mInstance Is Nothing Then mInstance = New Singleton() End If mMutex. Esto puede tener sus razones: tal vez no toda la información sobre cómo crear el objeto. hasta el momento apropiado.NET. Conseguimos que el constructor no pueda usarse desde otra parte del sistema. Notemos un detalle en esta implementación.Mutex() Private mTime As String ' Constructor privado Private Sub New() mTime = Now.ajlopez. Como toda implementación.ReleaseMutex() Return mInstance End Function Public Function GetTime() As String Return mTime End Function End Class http://www. Notamos que el método GetInstance está marcado com siendo entonces un método de la clase.NET Page 9 of 18 End If Return mInstance End Function Public Function GetTime() As String Return mTime End Function End Class Esta es una implementación en VB. podría suceder que estos dos hilos de ejecución. encuentre en "Nothing" a la instancia interna. por primera vez.

esta vez en C#.Windows. } } return instance. public sealed class Singleton { private static volatile Singleton instance.Patrones en . private static object syncRoot = new Object(). } } } El patrón Observer Examinemos este patrón.ajlopez.net/ArticuloMuestra. } } } En algunas situaciones.NET Page 10 of 18 Veamos otra implementación.Show("Nuevo Singleton"). private Singleton2(){} public static Singleton Instance { get { return instance. private Singleton() { System. nos basta implementar la creación de la única instancia. en la inicializaci variables estáticas.php?Id=342 5/6/2011 .Forms. y su implementación en . http://www.MessageBox. } public static Singleton GetInstance { get { if (instance == null) { lock(syncRoot) { if (instance == null) instance = new Singleton().NET. public sealed class Singleton2 { private static readonly Singleton2 instance = new Singleton().

es que el objeto que cambia.php?Id=342 5/6/2011 . si adoptamos la llamada directa. podemos encapsular su estado y la implementación de su co Esto permite reusarlo en otras aplicaciones. T interesados en observar. al adoptar un esquema menos directo.Patrones en . Porque el acoplamiento dependiente que se cr reúso y complica los cambios futuros en las relaciones. A veces. La necesidad de evitar esa dependencia se torna importante. la colaboración es altamente objetos intervinientes conocen sus interfaces de antemano. http://www. Por otra parte.net/ArticuloMuestra.ajlopez. Problema ¿Cómo podemos notificar a otros objetos que el estado de un objeto determinado cambió. de la forma de mostrarlo (la vista). que podemos evitar. de forma natural. Un cambio en la vista. si tenemos una nueva vista. la llamada directa puede ser el método más rápido de avisar los cambios. sin que éste necesaria que conocer a los primeros. mantiene una lista de objetos interesados en enterarse de los cambios. podríaa afectar entonces a la programac modelo. Por otra parte. que permite separ que estamos manejando. Habrá los efectos sobre la performance de la aplicación. En otras situaciones. deben implementar una interface Observer. llame directamente a los objetos interesados una dependencia entre ellos. tendremos que modificar el código del modelo. algunos objeto estarán interesados en los cambios que se ejecuten en otro determinado. que avisa de sus cambios. Solución El patrón de Observer. Pero un objeto no es un ente aisla que deba colaborar con otros para cumplir con una tarea. sin de clases son? Fuerzas que intervienen Una posible solución. La vista (un control en un formular puede que esté interesada en conocer cuándo cambia el modelo subyacente. Este es el caso del patrón Model-View-Controller.NET Page 11 of 18 Contexto Siempre que pensamos en objetos.

NET.NET Page 12 of 18 En el diagrama. que más pueden cambiar.Keys unObservador.Registrar m_Observadores.DesRegistra m_Observadores. la Subject.Patrones en .Add(eo.Remove(ew) End Sub Public Function Procesar() Dim ProcesarTiempo As DateTime = DateTime.php?Id=342 5/6/2011 . que implementan todos los objetos que quier observados.ajlopez.Notificar(ProcesarTiempo) Next End Function End Class http://www.net/ArticuloMuestra. eo) End Sub Public Sub DesRegistrar(ByRef ew As Observador) Implements Sujeto. nos independizamos de las clases en concreto. sin afectar el esquema adoptado. es la siguiente: Public Interface Observador Sub Notificar(ByRef obj As Object) End Interface Public Interface Sujeto Sub Registrar(ByRef eo As Observador) Sub DesRegistrar(ByRef eo As Observador) End Interface Public Class SujetoConcreto : Implements Sujeto Dim m_Observadores As New Hashtable() Public Sub Registrar(ByRef eo As Observador) Implements Sujeto. Al aplicar estas interfaces.UtcNow Dim unObservador As Observador For Each unObservador In m_Observadores. Una implementación de este patrón en VB. aparece otra interface.

y delegados.WriteLine("EscuchadorDos procesa " & obj) End Sub End Class Pero resulta algo notable. que en . y escuchadores ("handlers") para esos eventos.Notificar Console. ha publicado sus ideas y sugerencias sob los enlaces al final del artículo.NET es más flexible objeto puede escuchar un evento. apela al uso de eventos.php?Id=342 5/6/2011 .NET Page 13 of 18 Public Class EscuchadorUno : Implements Observador Sub Notificar(ByRef obj As Object) Implements Observador.Patrones en . La siguiente solución. pero la implementación . Public Class Articulo Delegate Sub DelegadoCambiaPrecio(ByVal unPrecio As Object) Public Event CambiaPrecio As DelegadoCambiaPrecio Dim _cambiaPrecio As Object Public WriteOnly Property Precio() Set(ByVal value As Object) _cambiaPrecio = value RaiseEvent CambiaPrecio(_cambiaPrecio) End Set End Property End Class Public Class ArticuloObservador Public Sub Notify(ByVal unObjecto As Object) Console. construída desde un punto de vista distinto. que ha n capacidad de definir eventos. encontraremos mayor información.WriteLine("El nuevo precio es:" & unObjecto) End Sub End Class Otros tipos de patrones Microsoft. reconociendo la importancia de los patrones. Esa capacidad ya presente de alguna forma en Visual Basic "normal". Algo que podemos destacar a clasificación.WriteLine("EscuchadorUno procesa " & obj) End Sub End Class Public Class EscuchadorDos : Implements Observador Sub Notificar(ByRef obj As Object) Implements Observador.net/ArticuloMuestra. Veamos su marco de patrones: http://www. tengamos otra forma de implementar el patrón.ajlopez.NET.Notificar Console.

Estamos desarrollando un sistema empresarial. especialmente en los últimos años. que contem distintas formas de acceder a los datos. especifica sus responsabilidades. y por último. donde queremos manejar la información de pres los clientes de la empresa. Necesitamos conocer los precios internos. mientras que las columnas son "puntos de vista" de la solución. en los siguientes párrafos. Comentemos un ejemplo del sitio de Microsoft. e incluye regla organizar las relaciones entre ellos". según este esquema. tene inventario de los productos. las filas representan niveles progresivos de abstracción: arquitectura. no significa que sea al que se manejan. que aplica un patrón que es m por los desarrolladores.Patrones en . es entonces: "Un patrón que expresa un esquema de organización estructural fundamental para un sistema d Provee un conjunto predefinido de subsistemas. hay más que "design patterns": los hay también de arquitectura implementación. diseño e implementación. infraestructura. armar el presupuesto. Niveles de abstracción Si bien la mayor parte de los patrones tiene su aplicación directa en código.ajlopez. Discutamos un ejemplo y su patrón. los distintos m visualizar el resultado. pero que nos sirve para presentar un patrón co arquitectura: el patrón de capas. instalación. y contemplar los datos e historia del cliente que pide el presupuesto información debe estar disponible para ser consultada por la web. por ejemplo. Un patrón de arquitectura.NET Page 14 of 18 Según Microsoft.php?Id=342 5/6/2011 . http://www. según Buschmann. Así planteado. y provenir de distintas fuentes Querríamos organizar la arquitectura del sistema para que sea flexible. y las formas de procesarlos .net/ArticuloMuestra. es un especificación muy general. perspectivas co datos. aplicación. Entonces.

podemos encontrar: Contexto Estamos trabajando en un sistema grande y complejo. http://www. que tanta veces hemos encontrado (hasta se u arquitectura de redes.net/ArticuloMuestra.ajlopez.php?Id=342 5/6/2011 . Problema Cómo estructurar la información para soportar los requerimientos de mantenimiento.Patrones en . Y queremos manejar la complejidad via la descomposición.NET Page 15 of 18 Podemos tomar la decisión de separar la aplicación según este esquema: Esta solución termina aplicando el patrón Layers. donde el modelo ISO se basa justamente en dividir el trabajo en las capa transporte. Cada capa debe ocuparse de un nivel del problema poca cohesión con las demás. Formalizando la definición del patrón. y robustez. reusabilida escalabilidad. Solución Componer la solución en una serie de capas. aplicación y otras).

y se lo entrega al sistema B). En definitiva. pocos sistemas viven en solitario. negocio y datos.com se comentan más de 60 patrones descubiertos. y éste a su vez. suficientemente general para aplicarse en otras situaciones. La prueba ácida.net/ArticuloMuestra. en distintas plataformas. debe tener los mínimos efectos en el resto aplicación. podría ser: al cambiar las fuentes bases de datos usadas). debería alterar en poco lo las otras capas. de distintos fabricantes. Patrones de Canal http://www. las capas que elegimos armar son las de presentación. Cada vez más es la regl con aplicaciones disímiles.integrationpatterns. que está totalm desconectado del sistema empresarial. los patrones acuden a la ayuda. En el sitio www. haya sido comprado a un proveedor de IT. Y es un patrón de arquitectura: nos da una base para el fundamento estructural de una aplicació Patrones de Integración En el mundo actual de la informática. la l procedimientos remotos (ahora en . no se comunica con el sitio web de la com De nuevo. y el uso de sistema mensajería.ajlopez. Y si el día de mañana q incorporar una capa de presentación distinta (como un sistema de atención automática por teléf IVR). el cambiar la implementación de una capa.NET tenemos Web Services y Remoting).NET Page 16 of 18 Este patrón tiene consecuencias no evidentes: el cambio en una capa. que ayu de armar soluciones que integren a los sistemas empresariales. o patrones de integración. poco debería afectar a la capa de presentación. H comenzado a surgir los llamados "integration patterns". Si bien en este ejemplo. no debería alterar a las otras capas ya desarrolladas. como en el ejemplo de de redes. Entre los temas cubiertos.Patrones en . como en los problemas de diseño y de arquitectura. en nuestro ejemplo original. se en Estilos de integración Cuáles son las formas de comunicar sistemas: desde el viejo truco del archivo compartido (el sis información en un archivo. y que no se conecta Puede ser que el CRM de la empresa. hasta la base de datos compartida.php?Id=342 5/6/2011 .

ajlopez. que esperamos tratar en próximos artículos. como el Strategy o el Decorator.Aplicación de patrones de integración. cuando separamos la lógic podemos aplicar tanto los patrones de diseño como de arquitectura. O el mensaje tipo Respuesta.Diseño de una capa de abstracción de datos . en base a condiciones de la red (por ejemplo. al implementar una c abstracción de datos.php?Id=342 5/6/2011 . aprovechar lo ya probado.microsoft. Y cuando interviene la capa de presentación. o Web. Desde el mensaje tipo comando (similar al patrón Command). En el código completo del artículo. el tema patrones inunda todas las etapas del análisis. para construir una aplicación con distintas interfaces . donde las aplicaciones interesadas se suscriben a un canal de informac aplicación produce. En la capa de negocios. En el ámbito local. desde su origen hasta su destino? De nuevo aparecen como el Filtro de Mensajes. Lagash Consulting de Argentina. en clases factoría. Por ejemplo. Es un tema apasionante. hasta el mensaje tipo Co pasando por el mensaje tipo Documento. Esperamos en próximos artículos. han desarrollado. encarar temas como: . es común. la conocida separación entre Modelo y Vista. Por ejemplo. donde la comunicación es de una aplicación a otr versus el canal-suscripto.microsoft.com/patterns http://msdn. Todas estas formas de m construcción ya han sido implementadas en sistemas de mensajería. ya sea un formulario Windows.Separación del Modelo de la Vista. diseño y desarrollo. donde el cambio puede afectar más a los demás elementos del sistema. el Modelo. y han surgido patrones de Patrones de Ruteo Cómo se pueden encaminar los mensajes. para balanceo de carga en los servidores destinos). Patrones de Construcción de Mensajes Cuáles son los métodos de construcción de mensajes.com/practices http://www. el canal punto-a-punto. Es intel armar una solución. que en definitiva. para poder ada ptarnos a las mo las reglas de proceso.Patrones en .net/ArticuloMuestra. son los datos que viajan canales. para comunicar aplicaciones disímiles Como vemos. Es p ya estemos aplicando alguno de los mencionados. Enlaces http://www. que s establecer la conexión con el servidor de datos. encontraremo este tipo. se pue esta forma.NET Page 17 of 18 Describen los patrones adoptados en la implementación de canales: los medios de comunicación emplean. en base a estos patrones. el MBI (Microsoft Business Patrones en Capas. podemos reusarlo desde distintas vistas. que permite clasificar los mensajes de un canal. en múltiples ocasiones. adoptar patrones de conducta. encapsular los cambios de la base SQL adoptada. o el Ruteador Dinám establece a qué destino se envía un mensaje. Conclusión Cuando desarrollamos aplicaciones distribuidas (o aunque no lo sean.

Pattern Languages. con implementaciones de los 23 patrones. Vlissides. Principal Temas Proyectos Contáctenos Copyright © 2002-2007 Angel J Lopez.NET UML Distilled. Addison Wesley. Helm. metodologías y desarrollo orientado a http://patterndigest. http://c2.com/ Descripción de patrones. noticias y foros del tema. el marco que plantea Microsoft de cla ejemplos de su uso. Lecturas Design Patterns.com El sitio de Martín Fowler.php?Id=342 5/6/2011 . contiene una introducción patrones.com/ppr/index. St aplicando los patrones de Gamma en . Fischer. http://hillside. donde se describen los patrones.html Portland Pattern Repository. un resumen sobre UML. http://www. y novedades. páginas sobre patrones en general.edu/~schmidt/patterns. con información sobre patrones.ajlopez. Johnson.wustl. Addison-Wesley. Slater.com Excelente colección de patrones de integración. http://www. el libro de base sobre lo diseño. and Frameworks.dofactory.NET Page 18 of 18 Las páginas de Microsoft. Martín Fowler.html Design Patterns. desde hace años dedicados a las mejores prácticas del uso de patrones http://www. http://www.integrationpatterns.com Un catálogo con los patrones del libro de "GoF".net/patterns/ Patterns Home Page.Patrones en . Wrox. de Gamma.net/ArticuloMuestra. en C# http://www.martinfowler.cs. Todos los derechos reservados. Profesional Design Patterns in VB.NET: Building Adaptable Applications. la página de Douglas Schmidt sobre patro lenguajes de patrones.

Sign up to vote on this title
UsefulNot useful