12
Patrones de Diseño Sumario A lo largo de esta serie de artículos haremos un repaso de los principales patrones de diseño de software y veremos cómo llevar a cabo su implementación con Visual Basic .NET Veremos qué son los patrones de diseño y cuáles son los patrones de diseño básicos, patrones que aparecen con una gran frecuencia en la práctica. La presentación de cada patrón irá acompañado de una explicación teórica y de una visión práctica, en la que se verá su aplicación con un lenguaje de programación, lo que nos permitirá apreciar mejor su potencial Índice de contenido Patrones de Diseño o Introducción o Patrones de diseño: concepto y disciplina o Los orígenes de los patrones de diseño o Clasificación de los patrones de diseño o El patrón Interfaz o El patrón Delegación o Patrones de creación: Singleton . Arriba Introducción El movimiento de los patrones de diseño se encuentra actualmente en auge. Todos los meses surgen nuevas publicaciones escritas. artículos digitales y comunidades en la web que tratan sobre esta disciplina. Además, al tratarse de un campo relacionado con la fase de diseño del software, éste es independiente del lenguaje de programación empleado. Los patrones de diseño pueden ser aplicados en lenguajes tan dispares como Java, C++, PHP, Visual Basic, C#, etc. Un ejemplo de la importancia que están tomando los patrones de diseño de software lo representa el hecho de que la metodología de desarrollo METRICA 3, de la Administración General del Estado, incorpora una tarea dedicada a la identificación de patrones (DSI 2.2: Identificación de Mecanismos Genéricos de Diseño). Arriba Patrones de diseño: concepto y disciplina Los patrones de diseño de software son soluciones reutilizables de problemas recurrentes que aparecen durante el proceso de diseño de software orientado a objetos. ¿Por qué surgen los patrones de diseño? Por la necesidad de transmitir la experiencia. Lo que diferencia a un programador brillante y experto de un programador igualmente brillante pero inexperto es la experiencia. Conforme un programador gana experiencia, éste reconoce el parecido entre los nuevos problemas que van surgiendo y los problemas que ya ha resuelto con anterioridad. Incluso cuando tiene más experiencia, es capaz de reconocer que las soluciones a estos problemas siguen patrones recurrentes. Con el conocimiento de estos patrones, los programadores expertos son capaces de identificar las situaciones en las que éstos tienen aplicación, y utilizarlos sin tener que detenerse para analizar el problema y vislumbrar diferentes estrategias de resolución. No obstante, que un programador haya descubierto un determinado patrón no implica que sea capaz de expresar su conocimiento a otros programadores. Aquí es donde aparece la disciplina de

Patrones de diseño

Embed Size (px)

Citation preview

Page 1: Patrones de diseño

Patrones de Disentildeo

Sumario

A lo largo de esta serie de artiacuteculos haremos un repaso de los principales patrones de disentildeo de software y veremos coacutemo llevar a cabo su implementacioacuten con Visual Basic NET Veremos queacute son los patrones de disentildeo y cuaacuteles son los patrones de disentildeo baacutesicos patrones que aparecen con una gran frecuencia en la praacutectica La presentacioacuten de cada patroacuten iraacute acompantildeado de una explicacioacuten teoacuterica y de una visioacuten praacutectica en la que se veraacute su aplicacioacuten con un lenguaje de programacioacuten lo que nos permitiraacute apreciar mejor su potencial

Iacutendice de contenido

Patrones de Disentildeo

o Introduccioacuten

o Patrones de disentildeo concepto y disciplina

o Los oriacutegenes de los patrones de disentildeo

o Clasificacioacuten de los patrones de disentildeo

o El patroacuten Interfaz

o El patroacuten Delegacioacuten

o Patrones de creacioacuten Singleton

Arriba

Introduccioacuten El movimiento de los patrones de disentildeo se encuentra actualmente en auge Todos los meses surgen nuevas publicaciones escritas artiacuteculos digitales y comunidades en la web que tratan sobre esta disciplina Ademaacutes al tratarse de un campo relacionado con la fase de disentildeo del software eacuteste es independiente del lenguaje de programacioacuten empleado Los patrones de disentildeo pueden ser aplicados en lenguajes tan dispares como Java C++ PHP Visual Basic C etc Un ejemplo de la importancia que estaacuten tomando los patrones de disentildeo de software lo representa el hecho de que la metodologiacutea de desarrollo METRICA 3 de la Administracioacuten General del Estado incorpora una tarea dedicada a la identificacioacuten de patrones (DSI 22 Identificacioacuten de Mecanismos Geneacutericos de Disentildeo)

Arriba

Patrones de disentildeo concepto y disciplina Los patrones de disentildeo de software son soluciones reutilizables de problemas recurrentes que aparecen durante el proceso de disentildeo de software orientado a objetos iquestPor queacute surgen los patrones de disentildeo Por la necesidad de transmitir la experiencia Lo que diferencia a un programador brillante y experto de un programador igualmente brillante pero inexperto es la experiencia Conforme un programador gana experiencia eacuteste reconoce el parecido entre los nuevos problemas que van surgiendo y los problemas que ya ha resuelto con anterioridad Incluso cuando tiene maacutes experiencia es capaz de reconocer que las soluciones a estos problemas siguen patrones recurrentes Con el conocimiento de estos patrones los programadores expertos son capaces de identificar las situaciones en las que eacutestos tienen aplicacioacuten y utilizarlos sin tener que detenerse para analizar el problema y vislumbrar diferentes estrategias de resolucioacuten No obstante que un programador haya descubierto un determinado patroacuten no implica que sea capaz de expresar su conocimiento a otros programadores Aquiacute es donde aparece la disciplina de

los patrones de disentildeo Esta disciplina establece una especie de especificacioacuten para documentar los patrones de disentildeo de software orientado a objetos Seguacuten esta especificacioacuten todo patroacuten de disentildeo debe ir acompantildeado de Nombre del patroacuten Gracias a eacuteste nombre podremos identificar al patroacuten y referimos al mismo cuando discutamos con otros disentildeadores durante la fase de disentildeo Sinopsis Breve resumen que nos indica la esencia de la solucioacuten proporcionada por el patroacuten Es de gran utilidad para los programadores expertos que no conocen el nombre del patroacuten De esta forma se les indica lo que eacuteste hace Contexto Descripcioacuten detallada del problema recurrente que el patroacuten viene a solucionar Solucioacuten Contiene una descripcioacuten detallada del patroacuten y viene acompantildeada de un diagrama de clases UML que refleja graacuteficamente esta solucioacuten Ejemplo de aplicacioacuten La descripcioacuten del patroacuten siempre seraacute maacutes rica si va acompantildeada de un ejemplo practico No obstante a lo largo de esta serie de artiacuteculos no emplearemos este formato de documentacioacuten que aunque exhaustivo podriacutea resultar difiacutecil de seguir

Arriba

Los oriacutegenes de los patrones de disentildeo Antes de entrar en materia veremos de forma muy breve los oriacutegenes de los patrones de disentildeo de software El concepto de patroacuten de disentildeo procede del campo de la arquitectura Los trabajos del arquitecto Christopher Alexander (veacutease referencia [1] del cuadro Bibliografiacutea recomendada) publicados a finales de la deacutecada de los 70 postulaban la existencia de patrones repetitivos en las soluciones adoptadas en planeamiento urbaniacutestico y construccioacuten Estas ideas eran susceptibles de ser aplicadas a otras disciplinas entre ellas la de la Ingenieriacutea del Software Asiacute en el antildeo 1987 los archiconocidos WCunningham y Kent Beck (padre de la metodologiacutea Extreme Programming) utilizaron algunas de las ideas de Alexander para identificar una serie de patrones en la construccioacuten de interfaces de usuario (veacutease referencia [2] del cuadro Bibliografiacutea recomendada) Estos patrones se emplearon en el lenguaje SmallTalk (uno de los pioneros de los lenguajes orientados a objetos puros) y dieron lugar al conocidiacutesimo patroacuten ModeloVistaControlador En el antildeo 1994 Gamma Helm Vlissides y Jhonson (grupo de autores conocido como el Gof o pandilla de los cuatro) publicaron el libro que es considerado la Biblia de los patrones de disentildeo (veacutease referencia [3] del cuadro Bibliografiacutea recomendada) Este libro popularizoacute la idea de los patrones de disentildeo e introdujo la clasificacioacuten de patrones de disentildeo maacutes extendida en la actualidad A partir de este momento se produjo la explosioacuten del fenoacutemeno de los patrones de disentildeo Se han desarrollado patrones aplicables a diferentes niveles de la loacutegica de la aplicacioacuten como persistencia mensajeriacutea presentacioacuten etc El uacuteltimo movimiento parece ser el de los patrones para la creacioacuten de aplicaciones empresariales que tratan de cubrir todos los aspectos de un sistema empresarial En este sentido cabe destacar los trabajos de Martin Fowler(veacutease referencia [4] del cuadro Bibliografiacutea recomendada) o las publicaciones de Sun(veacutease referencia [5] del cuadro Bibliografiacutea recomendada) y Microsoft (veacutease referencia [6] del cuadro Bibliografiacutea recomendada) para mostrar coacutemo construir aplicaciones empresariales con sus plataformas de desarrollo Paralelamente al concepto de patroacuten ha ido surgiendo el concepto de Antipatroacuten Se basa en la idea de que con frecuencia resulta maacutes faacutecil aprender de los errores por lo que se trata de catalogar los errores maacutes frecuentes de anaacutelisis disentildeo y programacioacuten

Arriba Clasificacioacuten de los patrones de disentildeo Los patrones de disentildeo variacutean tanto en su granularidad como en su nivel de abstraccioacuten Puesto que existen numerosos patrones de disentildeo eacutestos se clasifican en categoriacuteas lo que facilita su aprendizaje y permite referirse a patrones similares mediante la familia a la que pertenecen En la obra del Gof(veacutease referencia [3] del cuadro Bibliografiacutea recomendada) se proponen las siguientes categoriacuteas Patrones de creacioacuten Esta categoriacutea agrupa a los patrones que proporcionan guiacuteas de coacutemo construir objetos cuando su creacioacuten implique la toma de una decisioacuten Esta decisioacuten puede ser baacutesicamente elegir queacute subclase dentro de una jerarquiacutea de herencia instanciar y queacute clase tiene la responsabilidad de su creacioacuten Patrones estructurales Los patrones de esta categoriacutea describen mecanismos geneacutericos para organizar diferentes clases de objetos entre siacute Patrones de comportamiento Estos patrones se utilizan para organizar gestionar y combinar el comportamiento de diferentes objetos A esta clasificacioacuten Mark Grand en su obra Patterns in Java (veacutease referencia [7] del cuadro Bibliografiacutea recomendada) antildeade la categoriacutea de Patrones fundamentales Seguacuten este autor esta categoriacutea engloba a patrones que aparecen con mucha frecuencia en el resto de patrones de mayor complejidad Comenzaremos nuestro repaso de los principales patrones de disentildeo por dos patrones de esta categoriacutea el patroacuten Interfaz y el patroacuten Delegacioacuten

Arriba

El patroacuten Interfaz Este patroacuten praacutecticamente aparece en el resto de patrones de disentildeo que vamos a ver a lo largo de esta serie de artiacuteculos por lo que con eacutel nos vamos a detener un poco maacutes Se utiliza cuando deseamos que una clase que hace uso de los servicios proporcionados por otras clases permanezca independiente de estas iquestQueacute ventajas obtenemos con ello Reduce el acoplamiento entre clases y evita la propagacioacuten de cambios iquestY coacutemo podemos implementar este patroacuten A traveacutes de la utilizacioacuten de interfaces Una interfaz define un contrato que deben cumplir una serie de clases independientemente de los detalles internos de implementacioacuten de cada una de eacutestas Se trata por tanto de un tipo especial de herencia denominado de interfaz Mediante la aplicacioacuten de este patroacuten de disentildeo podemos independizar una clase de otra que le presta servicios haciendo que no tenga una referencia a la clase que ofrece el servicio sino a la interfaz que define el contrato del servicio a prestar iquestCoacutemo podemos implementar este patroacuten de disentildeo con Visual Basic NET En VBNET podemos definir una interfaz de la siguiente manera Listado 01 - Interfaz definida en VBNET ------------------------------------------- Public Interface IEducado Sub diHola() Sub diAdios() End Interface -------------------------------------------

Diagrama de clases UML del patroacuten Interfaz

Esta interfaz define un comportamiento que podraacuten heredar otras clases a traveacutes de la herencia de interfaz En el listado 1 tenemos dos implementaciones de esta interfaz con VBNET En dicho ejemplo tenemos una interfaz IEducado que obliga a que todas las clases que la implementen tengan meacutetodos de saludo y despedida impresos por consola En el En el listado 2 vemos como la clase Educadolngles implementa estos meacutetodos en ingleacutes mientras que la clase EducadoEspantildeol los implementa en espantildeol Listado 02 - Clases que utilizan la interfaz IEducado ------------------------------------------- Public Class EducadoIngles Implements IEducado Friend Sub Hola() Implements IEducadodiHola ConsoleWriteLine(Hello) End Sub Friend Sub Adios() Implements IEducadodiAdios ConsoleWriteLine(Bye) End Sub End Class ------------------------------------------- Public Class EducadoEspantildeol Implements IEducado Friend Sub Hola() Implements IEducadodiHola ConsoleWriteLine(Hola) End Sub Friend Sub Adios() Implements IEducadodiAdios ConsoleWriteLine(Adios) End Sub End Class ------------------------------------------- Listado 03 - Forma baacutesica de utilizr el Interfaz IEducado ------------------------------------------- Public Sub ProbarInterfazFormaUno() Instanciar una clase DimoEnEspantildeol As New EducadoEspantildeol() definicion de la interfaz asignando una clase a la interfaz DimiMuyEduado As IEducado = oEnEspantildeol usando la interfaz iMuyEduadodiHola() iMuyEduadodiAdios() ------------------------------ asignar otra clase a la interfaz Instanciar una clase

DimoEnIngles As New EducadoIngles() asignar la clase a la interfaz iMuyEduado = oEnIngles usando la interfaz iMuyEduadodiHola() iMuyEduadodiAdios() ---------------- iMuyEduado = Nothing oEnEspantildeol = Nothing oEnIngles = Nothing End Sub ------------------------------------------- Supongamos que tenemos una clase encargada de interactuar con el usuario en un entorno de liacutenea de comandos saludaacutendolo al iniciar la sesioacuten y despidieacutendose al terminar Podemos independizar nuestra clase del idioma empleado haciendo que tenga una referencia a la interfaz educado Listado 04 - Clase que implementa la interfaz en el constructor ------------------------------------------- ------------------------------------------- Public Class HaceUsoInterfazEducado Dim iMuyEduado As IEducado Public Sub New(ByValUnObjetoIdioma As Object) definicion de la interfaz asignando una clase a la interfaz ctypeespor [Option Strict ON] iMuyEduado = CType(UnObjetoIdioma IEducado) End Sub Public Sub diHola() iMuyEduadodiHola() End Sub Public Sub diAdios() iMuyEduadodiAdios() End Sub End Class ------------------------------------------- En funcioacuten del idioma seleccionado por el usuario esta clase recibiraacute en su constructor una implementacioacuten u otra sin necesidad de modificar la clase que hace uso de los servicios ofrecidos por esta interfaz Es maacutes podemos seguir antildeadiendo soporte de nuevos idiomas creando nuevas implementaciones de la interfaz Listado 05 - Funcioacuten que utiliza la clase anterior [HaceUsoInterfazEducado] ------------------------------------------- Public Sub ProbarInterfazFormaDos() Instanciar una clase en funcioacuten del idioma a utilizar DimoEnEspantildeol As New EducadoEspantildeol() instanciar la clase que usa el interfaz DimoIEducado As New HaceUsoInterfazEducado(oEnEspantildeol) oIEducadodiHola() oIEducadodiAdios()

oIEducado = Nothing oEnEspantildeol = Nothing End Sub ------------------------------------------- Otros lenguajes maacutes antiguos como C++ o Visual Basic carecen de interfaces En su lugar ofrecen otra construccioacuten las clases abstractas tambieacuten presentes en Java y C En C++ una clase es abstracta cuando tiene uno de sus meacutetodos virtual El modificador virtual es similar al modificador abstract de Java y otros lenguajes En C++ definiriacuteamos el contrato de nuestra interfaz con una clase abstracta (que puede ser pura si todos sus meacutetodos son abstractos) y cada una de las implementaciones de la interfaz seriacutean clases que heredariacutean de eacutesta Incluso las uacuteltimas versiones de Visual Basic (5 y 6) antes de su sustitucioacuten por Visual Basic NET permitiacutean la definicioacuten de clases abstractas Para tal fin habiacutea que crear un moacutedulo de clase con el asistente visual del lenguaje y dar el valor PublicNoCreatable a la propiedad Instancing del moacutedulo Esto haciacutea que no se pudiese utilizar ni el operador new ni la funcioacuten CreateObject para obtener instancias de la clase Un moacutedulo podiacutea implementar esta interfaz mediante el uso de la palabra reservada implements

Arriba

El patroacuten Delegacioacuten La delegacioacuten consiste en un medio de extender y reutilizar la funcionalidad de una clase mediante la creacioacuten de otra clase que se la proporcione Todos los lenguajes orientados a objetos proporcionan mecanismos para implementar este patroacuten pues basta con antildeadir una nueva referencia a la clase que consume el servicio

Diagrama de clases UML del patroacuten Delegacioacuten

La importancia del patroacuten Delegacioacuten radica en que nos proporciona un mecanismo para decidir cuaacutendo debemos hacer que una clase herede de otra o cuando antildeadirle una referencia para utilizar sus servicios En nuestro ejemplo de la clase educada parece claro que hay que utilizar delegacioacuten Muchas veces la decisioacuten nos la da el sentido comuacuten (la regla de es un) mientras que otras veces habraacute que hacer un anaacutelisis del nuacutemero de herencias posibles En nuestro ejemplo antildeadiendo una referencia a la interfaz IEducado soacutelo crearemos una clase que consuma sus servicios mientras que si optamos por el mecanismo de la herencia tendriacuteamos que crear dos subclases una de EducadoIngles y otra de EducadoEspantildeol Ademaacutes conforme fuese creciendo el nuacutemero de implementaciones de IEducado habriacutea que ir aumentando el nuacutemero de herencias El listado siguiente se muestra la codificacioacuten en VBNET de este patroacuten Listado 06 - Patroacuten delegacioacuten (extracto del listado 4) ------------------------------------------- PublicClassHaceUsoInterfazEducado DimiMuyEduado As IEducado El coacutedigo completo de la clase esta en el listado 04 EndClass -------------------------------------------

Arriba

Patrones de creacioacuten Singleton

Una vez introducidos dos de los patrones de disentildeo fundamentales Interfaz y Delegacioacuten veremos un patroacuten del tipo creacional muy frecuente en la praacutectica el patroacuten de disentildeo Singleton Este patroacuten se utiliza cuando queremos garantizar que de una determinada clase soacutelo existe una instancia De esta forma todos los objetos que hagan uso de esa clase utilizaraacuten la misma instancia iquestCuaacutendo suele ser necesario aplicar un Singleton Cuando nos encontramos con clases que deben encargarse de gestionar un recurso bien sea externo (las conexiones a una base de datos por ejemplo) bien sea interno (informacioacuten de configuracioacuten global a nivel de sistema informacioacuten uacutenica para el contexto de la aplicacioacuten etc)

Gestor de conexiones con el patroacuten Singleton

iquestCoacutemo se implementa un Singleton En primer lugar se debe impedir que los clientes construyan instancias de la clase que se desea hacer Singleton Para ello lo normal es hacer su constructor privado Ademaacutes se debe hacer que dicha clase contenga una referencia estaacutetica a la uacutenica instancia de esa propia clase que puede existir En el mundo de la orientacioacuten a objetos se denomina estaacuteticas a aquellas propiedades y meacutetodos que son comunes de una clase y por tanto compartidas por todas sus instancias Por uacuteltimo se debe antildeadir al Singleton un meacutetodo puacuteblico y estaacutetico que devuelva la uacutenica referencia existente de esa clase En el listado siguiente vemos coacutemo implementar un Singleton en Visual BasicNET Listado 07 - Patroacuten de creacioacuten Singleton ------------------------------------------- PublicClassSingleton Variable que contiene la referencia a ESTA clase Private Shared m_Instance As Singleton = Nothing constructor privado Private Sub New() o hacer nada End Sub meacutetodo estaacutetico permite obtener la referencia de la clase siempre se devuelve la misma referencia Public Shared ReadOnly Property Instance() As Singleton Get If m_Instance Is Nothing Then m_Instance = New Singleton() End If Return m_Instance End Get End Property

EndClass ------------------------------------------- El patroacuten Singleton Asegura que solo se cree una instancia de la clase y provee un punto global de acceso a esta En el siguiente ejemplo crearemos una clase que inicialice y retorne un objeto conexioacuten si no existe y si ya existen que nos retorne la instancia existente El ejemplo estaacute escrito por Enriquillo Mantildeoacuten y lo encontre el dia 22122004 en la paacutegina siguiente httpwwwmicrosoftcomspanishmsdncomunidadmtjnetvoicesart151asp Listado 08 - Patroacuten de creacioacuten Singleton ------------------------------------------- Implementacioacuten del Patroacuten Singleton PublicClassConexion Objeto que contendraacute la instancia compartida Private Shared m_objConexion As Conexion Privatem_FechaCreacion As String El Mutex es una clase que proporciona NET FrameWork Con ella evitaremos que en un ambiente multithread se cree alguacuten tipo de conflicto Private Shared m_Mutex As New SystemThreadingMutex Private Sub New() m_FechaCreacion = DateTimeNowToString End Sub Este meacutetodo eliminaraacute la instancia ya existente Public Shared Sub KillInstance() m_objConexion = Nothing End Sub Este seraacute el meacutetodo que proporcionara el acceso A la instancia existente si no existe creara unanueva (meacutetodo Singleton) Public Shared Function GetInstance() As Conexion m_MutexWaitOne() If m_objConexion Is Nothing Then m_objConexion = New Conexion End If m_MutexReleaseMutex() Return m_objConexion EndFunction Propiedad que presenta la fecha y hora en que Fue creada la instancia PublicReadOnlyPropertyFechaCreada() As String Get Return m_FechaCreacion End Get End Property End Class ------------------------------------------- La implementacioacuten para probar nuestra clase es bastante sencilla para instanciarla

Listado 09 - Patroacuten de creacioacuten instanciarla ------------------------------------------- Try Dim objConexion As SingletonConexion objConexion = SingletonConexionGetInstance TextBox1Text amp= Instancia Creada el + objConexionFechaCreadaampvbCrLf Catch ex As Exception MessageBoxShow(exMessage) End Try ------------------------------------------- Y para inicializarla Listado 10 - Patroacuten de creacioacuten inicializarla ------------------------------------------- Try SingletonConexionKillInstance() TextBox1Text amp= InstanciaEliminada---- ampvbCrLf Catch ex As Exception MessageBoxShow(exMessage) End Try -------------------------------------------

Arriba

Para Saber Mas [1] A Pattern Language Towns Buildings Construction Christopher Alexander 1977 [2] Using Patterns Languages for Object-Oriented Programs Ward Cunningham Kent Beck 1987 [3] Desing Patterns Elements of Reusable Object Oriented Software Gamma Helm Vlissides y Jonson 1994 [4] Patterns Of Enterprise Application Architecture Martiacuten Fowler [5] Java Blueprints httpjavasuncomblueprintspatternscataloghtm [6] NET Enterprise Patterns httpmsdnmicrosoftcomarchitecturepatterns [7] Patterns in Java A Catalog of Reusable Design Patterns Illustrated with UML Mark Grand [8] Te Server Side En esta web encontraremos una seccion dedicada a patrones de disentildeo wwwtheserversidecom

Arriba

Referencia bibliograacutefica Este documento esta COPIADO en su totalidad de un articulo escrito por Aacutelvaro Zabala Ordoacutentildeez y fue publicado en la revista Soacutelo Programadores num 113 con el tiacutetulo Patrones de Disentildeo Un curso practico [I] El articulo original muestra ejemplos en varios lenguajes En esta COPIA los he sustituido por ejemplos escritos exclusivamente en Visual Basic NET y ademaacutes he modificado la redaccioacuten de los paacuterrafos que haciacutean referencia a los ejemplos en otros lenguajes al objeto de darle una coherencia al texto final

Usted aprenderaacute a Aplicar meacutetodos probados para crear adaptables confiables y

eficientes NET y aplicaciones de cliente inteligente Resolver problemas de programacioacuten complejos con los patrones de

disentildeo estaacutendar de la industria Entregar el coacutedigo libre de errores con el desarrollo basado en pruebas

en Visual Studio Cree capas arquitecturas de reutilizacioacuten y evitar la superposicioacuten

funcional Aplicar las mejores praacutecticas para el disentildeo de la clase mejor Simplificar y automatizar las tareas repetitivas

Beneficios del curso El conocimiento de la NET y las bibliotecas no es suficiente para desarrollar aplicaciones robustas patrones de disentildeo probado y las mejores praacutecticas extraiacutedas de la sabiduriacutea de los expertos que ayuda en la creacioacuten de aplicaciones sobre una base soacutelida Este curso proporciona los conocimientos necesarios para resolver los problemas del mundo real de desarrollo de software y ofrecer aplicaciones raacutepida y fiable iquestQuieacuten debe asistir arquitectos programadores y cualquier sistema de desarrollo NET experiencia de programacioacuten a nivel de curso 419 programacioacuten de C o Curso 503 Visual Basic de programacioacuten para NET se supone Manos a la formacioacuten Ganas experiencia en la implementacioacuten NET mejores praacutecticas y patrones de disentildeo Ejercicios completado en VB o C incluyen

La conciliacioacuten de diversos problemas de procesamiento con el patroacuten Estrategia

La simplificacioacuten de un sistema complejo con el patroacuten Fachada La explotacioacuten de Microsoft Entity Framework para acceso a datos y

actualizaciones Creacioacuten de un modelo de objetos de dominio de Negocios Construccioacuten de casos de prueba automatizado Estructuracioacuten de un interfaz de usuario comprobable con el patroacuten

Modelo Vista Controlador La captura y reutilizacioacuten de las pruebas dentro de Visual Studio

Contenido del curso 511

Introduccioacuten Codificacioacuten de las mejores praacutecticas Simplificacioacuten de software con patrones de disentildeo

Simplificacioacuten de programacioacuten complejos con probada patrones de disentildeo La aplicacioacuten de interfaces simples a complejos algoritmos

La unificacioacuten de interfaces de subsistemas para facilitar su uso y reutilizacioacuten

Aplicacioacuten del modelo de fachada Variando la funcionalidad mediante la programacioacuten de interfaces

Fechas del curso

Asistir a eventos destacoacute en persona o en liacutenea con LearningTreeAnyWareTM

Feb 8 hasta 11 Reston VA inscribirse

5to al 8vo 04 Toronto inscribirse

19 a 22 ab Boston (Waltham) inscribirse

04 26ta al 29o Nueva York inscribirse

10 al 13 mayo Los Angelesinscribirse

10 al 13 mayo Ottawa inscribirse

17 al 20 mayo Rockville MD inscribirse

Mayo 24-27 Chicago (Schaumburg) inscribirse

31 mayo a 3 junio Reston VA inscribirse

07 al 10 junio Nueva York inscribirse

Para inscripciones AnyWare por favor regiacutestrese al menos 10 diacuteas antes del inicio del curso Maacutes fechas y lugares En las instalaciones y Formacioacuten personalizada Llevar este o cualquier otro aacuterbol curso de aprendizaje a su ubicacioacuten o la han personalizado para su organizacioacuten Matriacutecula

$ 2890 Norma de matriacutecula

Matriacutecula con un Plan de Ahorro

$ 1700 Premium-Pass

1733 doacutelares Pasaporte de formacioacuten

$ 2250 Vale 10-Pack

$ 2573 Gobierno de descuento

$ 2600 Antiguos Alumnos de descuento de Oro

Alumni Gold Discount

Mejorar la adaptabilidad y la flexibilidad de su aplicacioacuten Explotar el patroacuten Estrategia

Ampliacioacuten de la conducta objeto de forma dinaacutemica El aumento de la funcionalidad sin afectar al coacutedigo existente Composicioacuten de objetos con el patroacuten Decorador

El logro de reutilizacioacuten y flexibilidad La eliminacioacuten de la duplicacioacuten de coacutedigo al esbozar las bases de un

algoritmo Empleando el modelo de plantilla Meacutetodo

Interfaz clases incompatibles La transformacioacuten de una interfaz para agregar valor a coacutedigo

existente Aprovechar el modelo del adaptador

La aplicacioacuten de teacutecnicas de desarrollo basado en pruebas Automatizar las pruebas unitarias

Acortar los ciclos de desarrollo de pruebas automatizadas Mejora de la calidad con una cobertura consistente de pruebas La eliminacioacuten de los errores de regresioacuten con las pruebas

reutilizables La integracioacuten de las pruebas y la codificacioacuten

La aplicacioacuten de la prueba praacutectica de programacioacuten de sesiones para conducir el disentildeo del coacutedigo

Generar retroalimentacioacuten inmediata luz verde para el aumento de la calidad del coacutedigo y los cortos ciclos de desarrollo de funciones

Organizar coordinar y ejecutar los casos de prueba con Visual Studio Arquitectura de una aplicacioacuten de capas Disentildeo de la arquitectura de aplicaciones

Capas arquitecturas de reutilizacioacuten durabilidad y capacidad de ampliacioacuten

Acceso a datos de la capa de negocio La disociacioacuten de creacioacuten de objetos con el patroacuten de la faacutebrica Preservar la identidad del objeto con el patroacuten de identidad Mapa

Programacioacuten niveles de la aplicacioacuten Estructuracioacuten de un cliente Web o de aplicaciones ricas con el

patroacuten Observer Organizador rico estado-aplicaciones con el modelo de Estado Reestructuracioacuten de las tablas de la base de datos sin afectar el

coacutedigo de la aplicacioacuten Modelado de un aacuterea de negocio

Libertador ricos Business Object modelos de las estructuras de base de datos utilizando el patroacuten de modelo de dominio

Cartografiacutea ricos Business Objects a las tablas de base de datos con el patroacuten Data Mapper

El colapso de las jerarquiacuteas de objetos de negocio con el patroacuten de herencia Mapper

La explotacioacuten de la programacioacuten declarativa en Microsoft Entity Framework para implementar clases de datos de cartografiacutea

Attend your first course and you will receive a personalized Alumni Gold Discount card entitling you to save as much as $320 on each course you take within the following 12 months

Alumni Gold Discount Attend your first course and you will receive a personalized Alumni Gold Discount card entitling you to save as much as $320 on each course you take within the following 12 months

Federal State and Local Government Federal State and Local Government employees can take advantage of government discount pricing for Learning Tree Courses

Federal State and Local Government Federal State and Local Government employees can take advantage of government discount pricing for Learning Tree Courses

Training Vouchers With Vouchers any members of your team can attend any Learning Tree Course anytime Available in 5- and 10-Course Packs or larger each Voucher is valid for 12 months and is used in lieu of the tuition for any Learning Tree Public Course

Training Vouchers With Vouchers any members of your team can attend any Learning Tree Course anytime Available in 5- and 10-Course Packs or larger each Voucher is valid for 12 months and is

La aplicacioacuten de Buenas Praacutecticas La organizacioacuten y la aplicacioacuten de la loacutegica de negocio

La aplicacioacuten de los patrones de dominio de la loacutegica en el nivel medio

Ampliacioacuten de tipos de entidad con clases parciales La manipulacioacuten de los grupos de entidades con las clases de loacutegica

de negocio Las mejores praacutecticas en el disentildeo de clase

Proteccioacuten contra la rigidez con el Abierto de Principio Cerrado La extraccioacuten de las nuevas clases con el Principio de Responsabilidad

Individual El uso eficaz de la herencia

Automatizar tareas repetitivas Facilitar los datos de coacutedigo de acceso

La reduccioacuten de la base de datos de coacutedigo de acceso mediante la explotacioacuten de la entidad de navegacioacuten Propiedades

La eliminacioacuten de coacutedigo de actualizacioacuten de base de datos con el cambio de entidad de seguimiento Mejorar el coacutedigo de aplicacioacuten

Automatizacioacuten de revisiones de disentildeo con FxCop y Visual Studio Anaacutelisis

La eliminacioacuten de la duplicacioacuten de coacutedigo a traveacutes de la refactorizacioacuten para los patrones de disentildeo

ltltVolver a Visual Studio y NET Listado de cursos Cursos relacionados

Construyendo Aplicaciones Web con ASPNET y Ajax - Curso 506 ASPNET WebForms Integral Introduccioacuten - Curso 512 Construyendo Aplicaciones Web con ASPNET MVC - Curso 977 NET 4 Programacioacuten - Curso 2620 WPF y Silverlight Introduccioacuten - Curso 975 Servicios Web NET Introduccioacuten - Curso 2601 De programacioacuten C extendido Caracteriacutesticas - Curso 973 Programacioacuten de aplicaciones con SharePoint 2010 - NET Curso 2615 Windows Azure - Curso 2602

used in lieu of the tuition for any Learning Tree Public Course

Training Passport As a Training Passport holder one person can take as many as three hands-on courses in 12 months for as little as $1733 per course Only $5200 - save as much as 45

Training Passport As a Training Passport holder one person can take as many as three hands-on courses in 12 months for as little as $1733 per course Only $5200 - save as much as 45

Premium Pass The NEW Premium Pass gives you more time to take more courses while saving more money Take 4 courses within 24 months for as little as $1700 per course mdash at a price of only $6790 you can SAVE as much as 45 per course

Premium Pass The NEW Premium Pass gives you more time to take more courses while saving more money Take 4 courses within 24 months for as little as $1700 per course mdash at a price of only $6790 you can SAVE as much as 45 per course

Page 2: Patrones de diseño

los patrones de disentildeo Esta disciplina establece una especie de especificacioacuten para documentar los patrones de disentildeo de software orientado a objetos Seguacuten esta especificacioacuten todo patroacuten de disentildeo debe ir acompantildeado de Nombre del patroacuten Gracias a eacuteste nombre podremos identificar al patroacuten y referimos al mismo cuando discutamos con otros disentildeadores durante la fase de disentildeo Sinopsis Breve resumen que nos indica la esencia de la solucioacuten proporcionada por el patroacuten Es de gran utilidad para los programadores expertos que no conocen el nombre del patroacuten De esta forma se les indica lo que eacuteste hace Contexto Descripcioacuten detallada del problema recurrente que el patroacuten viene a solucionar Solucioacuten Contiene una descripcioacuten detallada del patroacuten y viene acompantildeada de un diagrama de clases UML que refleja graacuteficamente esta solucioacuten Ejemplo de aplicacioacuten La descripcioacuten del patroacuten siempre seraacute maacutes rica si va acompantildeada de un ejemplo practico No obstante a lo largo de esta serie de artiacuteculos no emplearemos este formato de documentacioacuten que aunque exhaustivo podriacutea resultar difiacutecil de seguir

Arriba

Los oriacutegenes de los patrones de disentildeo Antes de entrar en materia veremos de forma muy breve los oriacutegenes de los patrones de disentildeo de software El concepto de patroacuten de disentildeo procede del campo de la arquitectura Los trabajos del arquitecto Christopher Alexander (veacutease referencia [1] del cuadro Bibliografiacutea recomendada) publicados a finales de la deacutecada de los 70 postulaban la existencia de patrones repetitivos en las soluciones adoptadas en planeamiento urbaniacutestico y construccioacuten Estas ideas eran susceptibles de ser aplicadas a otras disciplinas entre ellas la de la Ingenieriacutea del Software Asiacute en el antildeo 1987 los archiconocidos WCunningham y Kent Beck (padre de la metodologiacutea Extreme Programming) utilizaron algunas de las ideas de Alexander para identificar una serie de patrones en la construccioacuten de interfaces de usuario (veacutease referencia [2] del cuadro Bibliografiacutea recomendada) Estos patrones se emplearon en el lenguaje SmallTalk (uno de los pioneros de los lenguajes orientados a objetos puros) y dieron lugar al conocidiacutesimo patroacuten ModeloVistaControlador En el antildeo 1994 Gamma Helm Vlissides y Jhonson (grupo de autores conocido como el Gof o pandilla de los cuatro) publicaron el libro que es considerado la Biblia de los patrones de disentildeo (veacutease referencia [3] del cuadro Bibliografiacutea recomendada) Este libro popularizoacute la idea de los patrones de disentildeo e introdujo la clasificacioacuten de patrones de disentildeo maacutes extendida en la actualidad A partir de este momento se produjo la explosioacuten del fenoacutemeno de los patrones de disentildeo Se han desarrollado patrones aplicables a diferentes niveles de la loacutegica de la aplicacioacuten como persistencia mensajeriacutea presentacioacuten etc El uacuteltimo movimiento parece ser el de los patrones para la creacioacuten de aplicaciones empresariales que tratan de cubrir todos los aspectos de un sistema empresarial En este sentido cabe destacar los trabajos de Martin Fowler(veacutease referencia [4] del cuadro Bibliografiacutea recomendada) o las publicaciones de Sun(veacutease referencia [5] del cuadro Bibliografiacutea recomendada) y Microsoft (veacutease referencia [6] del cuadro Bibliografiacutea recomendada) para mostrar coacutemo construir aplicaciones empresariales con sus plataformas de desarrollo Paralelamente al concepto de patroacuten ha ido surgiendo el concepto de Antipatroacuten Se basa en la idea de que con frecuencia resulta maacutes faacutecil aprender de los errores por lo que se trata de catalogar los errores maacutes frecuentes de anaacutelisis disentildeo y programacioacuten

Arriba Clasificacioacuten de los patrones de disentildeo Los patrones de disentildeo variacutean tanto en su granularidad como en su nivel de abstraccioacuten Puesto que existen numerosos patrones de disentildeo eacutestos se clasifican en categoriacuteas lo que facilita su aprendizaje y permite referirse a patrones similares mediante la familia a la que pertenecen En la obra del Gof(veacutease referencia [3] del cuadro Bibliografiacutea recomendada) se proponen las siguientes categoriacuteas Patrones de creacioacuten Esta categoriacutea agrupa a los patrones que proporcionan guiacuteas de coacutemo construir objetos cuando su creacioacuten implique la toma de una decisioacuten Esta decisioacuten puede ser baacutesicamente elegir queacute subclase dentro de una jerarquiacutea de herencia instanciar y queacute clase tiene la responsabilidad de su creacioacuten Patrones estructurales Los patrones de esta categoriacutea describen mecanismos geneacutericos para organizar diferentes clases de objetos entre siacute Patrones de comportamiento Estos patrones se utilizan para organizar gestionar y combinar el comportamiento de diferentes objetos A esta clasificacioacuten Mark Grand en su obra Patterns in Java (veacutease referencia [7] del cuadro Bibliografiacutea recomendada) antildeade la categoriacutea de Patrones fundamentales Seguacuten este autor esta categoriacutea engloba a patrones que aparecen con mucha frecuencia en el resto de patrones de mayor complejidad Comenzaremos nuestro repaso de los principales patrones de disentildeo por dos patrones de esta categoriacutea el patroacuten Interfaz y el patroacuten Delegacioacuten

Arriba

El patroacuten Interfaz Este patroacuten praacutecticamente aparece en el resto de patrones de disentildeo que vamos a ver a lo largo de esta serie de artiacuteculos por lo que con eacutel nos vamos a detener un poco maacutes Se utiliza cuando deseamos que una clase que hace uso de los servicios proporcionados por otras clases permanezca independiente de estas iquestQueacute ventajas obtenemos con ello Reduce el acoplamiento entre clases y evita la propagacioacuten de cambios iquestY coacutemo podemos implementar este patroacuten A traveacutes de la utilizacioacuten de interfaces Una interfaz define un contrato que deben cumplir una serie de clases independientemente de los detalles internos de implementacioacuten de cada una de eacutestas Se trata por tanto de un tipo especial de herencia denominado de interfaz Mediante la aplicacioacuten de este patroacuten de disentildeo podemos independizar una clase de otra que le presta servicios haciendo que no tenga una referencia a la clase que ofrece el servicio sino a la interfaz que define el contrato del servicio a prestar iquestCoacutemo podemos implementar este patroacuten de disentildeo con Visual Basic NET En VBNET podemos definir una interfaz de la siguiente manera Listado 01 - Interfaz definida en VBNET ------------------------------------------- Public Interface IEducado Sub diHola() Sub diAdios() End Interface -------------------------------------------

Diagrama de clases UML del patroacuten Interfaz

Esta interfaz define un comportamiento que podraacuten heredar otras clases a traveacutes de la herencia de interfaz En el listado 1 tenemos dos implementaciones de esta interfaz con VBNET En dicho ejemplo tenemos una interfaz IEducado que obliga a que todas las clases que la implementen tengan meacutetodos de saludo y despedida impresos por consola En el En el listado 2 vemos como la clase Educadolngles implementa estos meacutetodos en ingleacutes mientras que la clase EducadoEspantildeol los implementa en espantildeol Listado 02 - Clases que utilizan la interfaz IEducado ------------------------------------------- Public Class EducadoIngles Implements IEducado Friend Sub Hola() Implements IEducadodiHola ConsoleWriteLine(Hello) End Sub Friend Sub Adios() Implements IEducadodiAdios ConsoleWriteLine(Bye) End Sub End Class ------------------------------------------- Public Class EducadoEspantildeol Implements IEducado Friend Sub Hola() Implements IEducadodiHola ConsoleWriteLine(Hola) End Sub Friend Sub Adios() Implements IEducadodiAdios ConsoleWriteLine(Adios) End Sub End Class ------------------------------------------- Listado 03 - Forma baacutesica de utilizr el Interfaz IEducado ------------------------------------------- Public Sub ProbarInterfazFormaUno() Instanciar una clase DimoEnEspantildeol As New EducadoEspantildeol() definicion de la interfaz asignando una clase a la interfaz DimiMuyEduado As IEducado = oEnEspantildeol usando la interfaz iMuyEduadodiHola() iMuyEduadodiAdios() ------------------------------ asignar otra clase a la interfaz Instanciar una clase

DimoEnIngles As New EducadoIngles() asignar la clase a la interfaz iMuyEduado = oEnIngles usando la interfaz iMuyEduadodiHola() iMuyEduadodiAdios() ---------------- iMuyEduado = Nothing oEnEspantildeol = Nothing oEnIngles = Nothing End Sub ------------------------------------------- Supongamos que tenemos una clase encargada de interactuar con el usuario en un entorno de liacutenea de comandos saludaacutendolo al iniciar la sesioacuten y despidieacutendose al terminar Podemos independizar nuestra clase del idioma empleado haciendo que tenga una referencia a la interfaz educado Listado 04 - Clase que implementa la interfaz en el constructor ------------------------------------------- ------------------------------------------- Public Class HaceUsoInterfazEducado Dim iMuyEduado As IEducado Public Sub New(ByValUnObjetoIdioma As Object) definicion de la interfaz asignando una clase a la interfaz ctypeespor [Option Strict ON] iMuyEduado = CType(UnObjetoIdioma IEducado) End Sub Public Sub diHola() iMuyEduadodiHola() End Sub Public Sub diAdios() iMuyEduadodiAdios() End Sub End Class ------------------------------------------- En funcioacuten del idioma seleccionado por el usuario esta clase recibiraacute en su constructor una implementacioacuten u otra sin necesidad de modificar la clase que hace uso de los servicios ofrecidos por esta interfaz Es maacutes podemos seguir antildeadiendo soporte de nuevos idiomas creando nuevas implementaciones de la interfaz Listado 05 - Funcioacuten que utiliza la clase anterior [HaceUsoInterfazEducado] ------------------------------------------- Public Sub ProbarInterfazFormaDos() Instanciar una clase en funcioacuten del idioma a utilizar DimoEnEspantildeol As New EducadoEspantildeol() instanciar la clase que usa el interfaz DimoIEducado As New HaceUsoInterfazEducado(oEnEspantildeol) oIEducadodiHola() oIEducadodiAdios()

oIEducado = Nothing oEnEspantildeol = Nothing End Sub ------------------------------------------- Otros lenguajes maacutes antiguos como C++ o Visual Basic carecen de interfaces En su lugar ofrecen otra construccioacuten las clases abstractas tambieacuten presentes en Java y C En C++ una clase es abstracta cuando tiene uno de sus meacutetodos virtual El modificador virtual es similar al modificador abstract de Java y otros lenguajes En C++ definiriacuteamos el contrato de nuestra interfaz con una clase abstracta (que puede ser pura si todos sus meacutetodos son abstractos) y cada una de las implementaciones de la interfaz seriacutean clases que heredariacutean de eacutesta Incluso las uacuteltimas versiones de Visual Basic (5 y 6) antes de su sustitucioacuten por Visual Basic NET permitiacutean la definicioacuten de clases abstractas Para tal fin habiacutea que crear un moacutedulo de clase con el asistente visual del lenguaje y dar el valor PublicNoCreatable a la propiedad Instancing del moacutedulo Esto haciacutea que no se pudiese utilizar ni el operador new ni la funcioacuten CreateObject para obtener instancias de la clase Un moacutedulo podiacutea implementar esta interfaz mediante el uso de la palabra reservada implements

Arriba

El patroacuten Delegacioacuten La delegacioacuten consiste en un medio de extender y reutilizar la funcionalidad de una clase mediante la creacioacuten de otra clase que se la proporcione Todos los lenguajes orientados a objetos proporcionan mecanismos para implementar este patroacuten pues basta con antildeadir una nueva referencia a la clase que consume el servicio

Diagrama de clases UML del patroacuten Delegacioacuten

La importancia del patroacuten Delegacioacuten radica en que nos proporciona un mecanismo para decidir cuaacutendo debemos hacer que una clase herede de otra o cuando antildeadirle una referencia para utilizar sus servicios En nuestro ejemplo de la clase educada parece claro que hay que utilizar delegacioacuten Muchas veces la decisioacuten nos la da el sentido comuacuten (la regla de es un) mientras que otras veces habraacute que hacer un anaacutelisis del nuacutemero de herencias posibles En nuestro ejemplo antildeadiendo una referencia a la interfaz IEducado soacutelo crearemos una clase que consuma sus servicios mientras que si optamos por el mecanismo de la herencia tendriacuteamos que crear dos subclases una de EducadoIngles y otra de EducadoEspantildeol Ademaacutes conforme fuese creciendo el nuacutemero de implementaciones de IEducado habriacutea que ir aumentando el nuacutemero de herencias El listado siguiente se muestra la codificacioacuten en VBNET de este patroacuten Listado 06 - Patroacuten delegacioacuten (extracto del listado 4) ------------------------------------------- PublicClassHaceUsoInterfazEducado DimiMuyEduado As IEducado El coacutedigo completo de la clase esta en el listado 04 EndClass -------------------------------------------

Arriba

Patrones de creacioacuten Singleton

Una vez introducidos dos de los patrones de disentildeo fundamentales Interfaz y Delegacioacuten veremos un patroacuten del tipo creacional muy frecuente en la praacutectica el patroacuten de disentildeo Singleton Este patroacuten se utiliza cuando queremos garantizar que de una determinada clase soacutelo existe una instancia De esta forma todos los objetos que hagan uso de esa clase utilizaraacuten la misma instancia iquestCuaacutendo suele ser necesario aplicar un Singleton Cuando nos encontramos con clases que deben encargarse de gestionar un recurso bien sea externo (las conexiones a una base de datos por ejemplo) bien sea interno (informacioacuten de configuracioacuten global a nivel de sistema informacioacuten uacutenica para el contexto de la aplicacioacuten etc)

Gestor de conexiones con el patroacuten Singleton

iquestCoacutemo se implementa un Singleton En primer lugar se debe impedir que los clientes construyan instancias de la clase que se desea hacer Singleton Para ello lo normal es hacer su constructor privado Ademaacutes se debe hacer que dicha clase contenga una referencia estaacutetica a la uacutenica instancia de esa propia clase que puede existir En el mundo de la orientacioacuten a objetos se denomina estaacuteticas a aquellas propiedades y meacutetodos que son comunes de una clase y por tanto compartidas por todas sus instancias Por uacuteltimo se debe antildeadir al Singleton un meacutetodo puacuteblico y estaacutetico que devuelva la uacutenica referencia existente de esa clase En el listado siguiente vemos coacutemo implementar un Singleton en Visual BasicNET Listado 07 - Patroacuten de creacioacuten Singleton ------------------------------------------- PublicClassSingleton Variable que contiene la referencia a ESTA clase Private Shared m_Instance As Singleton = Nothing constructor privado Private Sub New() o hacer nada End Sub meacutetodo estaacutetico permite obtener la referencia de la clase siempre se devuelve la misma referencia Public Shared ReadOnly Property Instance() As Singleton Get If m_Instance Is Nothing Then m_Instance = New Singleton() End If Return m_Instance End Get End Property

EndClass ------------------------------------------- El patroacuten Singleton Asegura que solo se cree una instancia de la clase y provee un punto global de acceso a esta En el siguiente ejemplo crearemos una clase que inicialice y retorne un objeto conexioacuten si no existe y si ya existen que nos retorne la instancia existente El ejemplo estaacute escrito por Enriquillo Mantildeoacuten y lo encontre el dia 22122004 en la paacutegina siguiente httpwwwmicrosoftcomspanishmsdncomunidadmtjnetvoicesart151asp Listado 08 - Patroacuten de creacioacuten Singleton ------------------------------------------- Implementacioacuten del Patroacuten Singleton PublicClassConexion Objeto que contendraacute la instancia compartida Private Shared m_objConexion As Conexion Privatem_FechaCreacion As String El Mutex es una clase que proporciona NET FrameWork Con ella evitaremos que en un ambiente multithread se cree alguacuten tipo de conflicto Private Shared m_Mutex As New SystemThreadingMutex Private Sub New() m_FechaCreacion = DateTimeNowToString End Sub Este meacutetodo eliminaraacute la instancia ya existente Public Shared Sub KillInstance() m_objConexion = Nothing End Sub Este seraacute el meacutetodo que proporcionara el acceso A la instancia existente si no existe creara unanueva (meacutetodo Singleton) Public Shared Function GetInstance() As Conexion m_MutexWaitOne() If m_objConexion Is Nothing Then m_objConexion = New Conexion End If m_MutexReleaseMutex() Return m_objConexion EndFunction Propiedad que presenta la fecha y hora en que Fue creada la instancia PublicReadOnlyPropertyFechaCreada() As String Get Return m_FechaCreacion End Get End Property End Class ------------------------------------------- La implementacioacuten para probar nuestra clase es bastante sencilla para instanciarla

Listado 09 - Patroacuten de creacioacuten instanciarla ------------------------------------------- Try Dim objConexion As SingletonConexion objConexion = SingletonConexionGetInstance TextBox1Text amp= Instancia Creada el + objConexionFechaCreadaampvbCrLf Catch ex As Exception MessageBoxShow(exMessage) End Try ------------------------------------------- Y para inicializarla Listado 10 - Patroacuten de creacioacuten inicializarla ------------------------------------------- Try SingletonConexionKillInstance() TextBox1Text amp= InstanciaEliminada---- ampvbCrLf Catch ex As Exception MessageBoxShow(exMessage) End Try -------------------------------------------

Arriba

Para Saber Mas [1] A Pattern Language Towns Buildings Construction Christopher Alexander 1977 [2] Using Patterns Languages for Object-Oriented Programs Ward Cunningham Kent Beck 1987 [3] Desing Patterns Elements of Reusable Object Oriented Software Gamma Helm Vlissides y Jonson 1994 [4] Patterns Of Enterprise Application Architecture Martiacuten Fowler [5] Java Blueprints httpjavasuncomblueprintspatternscataloghtm [6] NET Enterprise Patterns httpmsdnmicrosoftcomarchitecturepatterns [7] Patterns in Java A Catalog of Reusable Design Patterns Illustrated with UML Mark Grand [8] Te Server Side En esta web encontraremos una seccion dedicada a patrones de disentildeo wwwtheserversidecom

Arriba

Referencia bibliograacutefica Este documento esta COPIADO en su totalidad de un articulo escrito por Aacutelvaro Zabala Ordoacutentildeez y fue publicado en la revista Soacutelo Programadores num 113 con el tiacutetulo Patrones de Disentildeo Un curso practico [I] El articulo original muestra ejemplos en varios lenguajes En esta COPIA los he sustituido por ejemplos escritos exclusivamente en Visual Basic NET y ademaacutes he modificado la redaccioacuten de los paacuterrafos que haciacutean referencia a los ejemplos en otros lenguajes al objeto de darle una coherencia al texto final

Usted aprenderaacute a Aplicar meacutetodos probados para crear adaptables confiables y

eficientes NET y aplicaciones de cliente inteligente Resolver problemas de programacioacuten complejos con los patrones de

disentildeo estaacutendar de la industria Entregar el coacutedigo libre de errores con el desarrollo basado en pruebas

en Visual Studio Cree capas arquitecturas de reutilizacioacuten y evitar la superposicioacuten

funcional Aplicar las mejores praacutecticas para el disentildeo de la clase mejor Simplificar y automatizar las tareas repetitivas

Beneficios del curso El conocimiento de la NET y las bibliotecas no es suficiente para desarrollar aplicaciones robustas patrones de disentildeo probado y las mejores praacutecticas extraiacutedas de la sabiduriacutea de los expertos que ayuda en la creacioacuten de aplicaciones sobre una base soacutelida Este curso proporciona los conocimientos necesarios para resolver los problemas del mundo real de desarrollo de software y ofrecer aplicaciones raacutepida y fiable iquestQuieacuten debe asistir arquitectos programadores y cualquier sistema de desarrollo NET experiencia de programacioacuten a nivel de curso 419 programacioacuten de C o Curso 503 Visual Basic de programacioacuten para NET se supone Manos a la formacioacuten Ganas experiencia en la implementacioacuten NET mejores praacutecticas y patrones de disentildeo Ejercicios completado en VB o C incluyen

La conciliacioacuten de diversos problemas de procesamiento con el patroacuten Estrategia

La simplificacioacuten de un sistema complejo con el patroacuten Fachada La explotacioacuten de Microsoft Entity Framework para acceso a datos y

actualizaciones Creacioacuten de un modelo de objetos de dominio de Negocios Construccioacuten de casos de prueba automatizado Estructuracioacuten de un interfaz de usuario comprobable con el patroacuten

Modelo Vista Controlador La captura y reutilizacioacuten de las pruebas dentro de Visual Studio

Contenido del curso 511

Introduccioacuten Codificacioacuten de las mejores praacutecticas Simplificacioacuten de software con patrones de disentildeo

Simplificacioacuten de programacioacuten complejos con probada patrones de disentildeo La aplicacioacuten de interfaces simples a complejos algoritmos

La unificacioacuten de interfaces de subsistemas para facilitar su uso y reutilizacioacuten

Aplicacioacuten del modelo de fachada Variando la funcionalidad mediante la programacioacuten de interfaces

Fechas del curso

Asistir a eventos destacoacute en persona o en liacutenea con LearningTreeAnyWareTM

Feb 8 hasta 11 Reston VA inscribirse

5to al 8vo 04 Toronto inscribirse

19 a 22 ab Boston (Waltham) inscribirse

04 26ta al 29o Nueva York inscribirse

10 al 13 mayo Los Angelesinscribirse

10 al 13 mayo Ottawa inscribirse

17 al 20 mayo Rockville MD inscribirse

Mayo 24-27 Chicago (Schaumburg) inscribirse

31 mayo a 3 junio Reston VA inscribirse

07 al 10 junio Nueva York inscribirse

Para inscripciones AnyWare por favor regiacutestrese al menos 10 diacuteas antes del inicio del curso Maacutes fechas y lugares En las instalaciones y Formacioacuten personalizada Llevar este o cualquier otro aacuterbol curso de aprendizaje a su ubicacioacuten o la han personalizado para su organizacioacuten Matriacutecula

$ 2890 Norma de matriacutecula

Matriacutecula con un Plan de Ahorro

$ 1700 Premium-Pass

1733 doacutelares Pasaporte de formacioacuten

$ 2250 Vale 10-Pack

$ 2573 Gobierno de descuento

$ 2600 Antiguos Alumnos de descuento de Oro

Alumni Gold Discount

Mejorar la adaptabilidad y la flexibilidad de su aplicacioacuten Explotar el patroacuten Estrategia

Ampliacioacuten de la conducta objeto de forma dinaacutemica El aumento de la funcionalidad sin afectar al coacutedigo existente Composicioacuten de objetos con el patroacuten Decorador

El logro de reutilizacioacuten y flexibilidad La eliminacioacuten de la duplicacioacuten de coacutedigo al esbozar las bases de un

algoritmo Empleando el modelo de plantilla Meacutetodo

Interfaz clases incompatibles La transformacioacuten de una interfaz para agregar valor a coacutedigo

existente Aprovechar el modelo del adaptador

La aplicacioacuten de teacutecnicas de desarrollo basado en pruebas Automatizar las pruebas unitarias

Acortar los ciclos de desarrollo de pruebas automatizadas Mejora de la calidad con una cobertura consistente de pruebas La eliminacioacuten de los errores de regresioacuten con las pruebas

reutilizables La integracioacuten de las pruebas y la codificacioacuten

La aplicacioacuten de la prueba praacutectica de programacioacuten de sesiones para conducir el disentildeo del coacutedigo

Generar retroalimentacioacuten inmediata luz verde para el aumento de la calidad del coacutedigo y los cortos ciclos de desarrollo de funciones

Organizar coordinar y ejecutar los casos de prueba con Visual Studio Arquitectura de una aplicacioacuten de capas Disentildeo de la arquitectura de aplicaciones

Capas arquitecturas de reutilizacioacuten durabilidad y capacidad de ampliacioacuten

Acceso a datos de la capa de negocio La disociacioacuten de creacioacuten de objetos con el patroacuten de la faacutebrica Preservar la identidad del objeto con el patroacuten de identidad Mapa

Programacioacuten niveles de la aplicacioacuten Estructuracioacuten de un cliente Web o de aplicaciones ricas con el

patroacuten Observer Organizador rico estado-aplicaciones con el modelo de Estado Reestructuracioacuten de las tablas de la base de datos sin afectar el

coacutedigo de la aplicacioacuten Modelado de un aacuterea de negocio

Libertador ricos Business Object modelos de las estructuras de base de datos utilizando el patroacuten de modelo de dominio

Cartografiacutea ricos Business Objects a las tablas de base de datos con el patroacuten Data Mapper

El colapso de las jerarquiacuteas de objetos de negocio con el patroacuten de herencia Mapper

La explotacioacuten de la programacioacuten declarativa en Microsoft Entity Framework para implementar clases de datos de cartografiacutea

Attend your first course and you will receive a personalized Alumni Gold Discount card entitling you to save as much as $320 on each course you take within the following 12 months

Alumni Gold Discount Attend your first course and you will receive a personalized Alumni Gold Discount card entitling you to save as much as $320 on each course you take within the following 12 months

Federal State and Local Government Federal State and Local Government employees can take advantage of government discount pricing for Learning Tree Courses

Federal State and Local Government Federal State and Local Government employees can take advantage of government discount pricing for Learning Tree Courses

Training Vouchers With Vouchers any members of your team can attend any Learning Tree Course anytime Available in 5- and 10-Course Packs or larger each Voucher is valid for 12 months and is used in lieu of the tuition for any Learning Tree Public Course

Training Vouchers With Vouchers any members of your team can attend any Learning Tree Course anytime Available in 5- and 10-Course Packs or larger each Voucher is valid for 12 months and is

La aplicacioacuten de Buenas Praacutecticas La organizacioacuten y la aplicacioacuten de la loacutegica de negocio

La aplicacioacuten de los patrones de dominio de la loacutegica en el nivel medio

Ampliacioacuten de tipos de entidad con clases parciales La manipulacioacuten de los grupos de entidades con las clases de loacutegica

de negocio Las mejores praacutecticas en el disentildeo de clase

Proteccioacuten contra la rigidez con el Abierto de Principio Cerrado La extraccioacuten de las nuevas clases con el Principio de Responsabilidad

Individual El uso eficaz de la herencia

Automatizar tareas repetitivas Facilitar los datos de coacutedigo de acceso

La reduccioacuten de la base de datos de coacutedigo de acceso mediante la explotacioacuten de la entidad de navegacioacuten Propiedades

La eliminacioacuten de coacutedigo de actualizacioacuten de base de datos con el cambio de entidad de seguimiento Mejorar el coacutedigo de aplicacioacuten

Automatizacioacuten de revisiones de disentildeo con FxCop y Visual Studio Anaacutelisis

La eliminacioacuten de la duplicacioacuten de coacutedigo a traveacutes de la refactorizacioacuten para los patrones de disentildeo

ltltVolver a Visual Studio y NET Listado de cursos Cursos relacionados

Construyendo Aplicaciones Web con ASPNET y Ajax - Curso 506 ASPNET WebForms Integral Introduccioacuten - Curso 512 Construyendo Aplicaciones Web con ASPNET MVC - Curso 977 NET 4 Programacioacuten - Curso 2620 WPF y Silverlight Introduccioacuten - Curso 975 Servicios Web NET Introduccioacuten - Curso 2601 De programacioacuten C extendido Caracteriacutesticas - Curso 973 Programacioacuten de aplicaciones con SharePoint 2010 - NET Curso 2615 Windows Azure - Curso 2602

used in lieu of the tuition for any Learning Tree Public Course

Training Passport As a Training Passport holder one person can take as many as three hands-on courses in 12 months for as little as $1733 per course Only $5200 - save as much as 45

Training Passport As a Training Passport holder one person can take as many as three hands-on courses in 12 months for as little as $1733 per course Only $5200 - save as much as 45

Premium Pass The NEW Premium Pass gives you more time to take more courses while saving more money Take 4 courses within 24 months for as little as $1700 per course mdash at a price of only $6790 you can SAVE as much as 45 per course

Premium Pass The NEW Premium Pass gives you more time to take more courses while saving more money Take 4 courses within 24 months for as little as $1700 per course mdash at a price of only $6790 you can SAVE as much as 45 per course

Page 3: Patrones de diseño

Arriba Clasificacioacuten de los patrones de disentildeo Los patrones de disentildeo variacutean tanto en su granularidad como en su nivel de abstraccioacuten Puesto que existen numerosos patrones de disentildeo eacutestos se clasifican en categoriacuteas lo que facilita su aprendizaje y permite referirse a patrones similares mediante la familia a la que pertenecen En la obra del Gof(veacutease referencia [3] del cuadro Bibliografiacutea recomendada) se proponen las siguientes categoriacuteas Patrones de creacioacuten Esta categoriacutea agrupa a los patrones que proporcionan guiacuteas de coacutemo construir objetos cuando su creacioacuten implique la toma de una decisioacuten Esta decisioacuten puede ser baacutesicamente elegir queacute subclase dentro de una jerarquiacutea de herencia instanciar y queacute clase tiene la responsabilidad de su creacioacuten Patrones estructurales Los patrones de esta categoriacutea describen mecanismos geneacutericos para organizar diferentes clases de objetos entre siacute Patrones de comportamiento Estos patrones se utilizan para organizar gestionar y combinar el comportamiento de diferentes objetos A esta clasificacioacuten Mark Grand en su obra Patterns in Java (veacutease referencia [7] del cuadro Bibliografiacutea recomendada) antildeade la categoriacutea de Patrones fundamentales Seguacuten este autor esta categoriacutea engloba a patrones que aparecen con mucha frecuencia en el resto de patrones de mayor complejidad Comenzaremos nuestro repaso de los principales patrones de disentildeo por dos patrones de esta categoriacutea el patroacuten Interfaz y el patroacuten Delegacioacuten

Arriba

El patroacuten Interfaz Este patroacuten praacutecticamente aparece en el resto de patrones de disentildeo que vamos a ver a lo largo de esta serie de artiacuteculos por lo que con eacutel nos vamos a detener un poco maacutes Se utiliza cuando deseamos que una clase que hace uso de los servicios proporcionados por otras clases permanezca independiente de estas iquestQueacute ventajas obtenemos con ello Reduce el acoplamiento entre clases y evita la propagacioacuten de cambios iquestY coacutemo podemos implementar este patroacuten A traveacutes de la utilizacioacuten de interfaces Una interfaz define un contrato que deben cumplir una serie de clases independientemente de los detalles internos de implementacioacuten de cada una de eacutestas Se trata por tanto de un tipo especial de herencia denominado de interfaz Mediante la aplicacioacuten de este patroacuten de disentildeo podemos independizar una clase de otra que le presta servicios haciendo que no tenga una referencia a la clase que ofrece el servicio sino a la interfaz que define el contrato del servicio a prestar iquestCoacutemo podemos implementar este patroacuten de disentildeo con Visual Basic NET En VBNET podemos definir una interfaz de la siguiente manera Listado 01 - Interfaz definida en VBNET ------------------------------------------- Public Interface IEducado Sub diHola() Sub diAdios() End Interface -------------------------------------------

Diagrama de clases UML del patroacuten Interfaz

Esta interfaz define un comportamiento que podraacuten heredar otras clases a traveacutes de la herencia de interfaz En el listado 1 tenemos dos implementaciones de esta interfaz con VBNET En dicho ejemplo tenemos una interfaz IEducado que obliga a que todas las clases que la implementen tengan meacutetodos de saludo y despedida impresos por consola En el En el listado 2 vemos como la clase Educadolngles implementa estos meacutetodos en ingleacutes mientras que la clase EducadoEspantildeol los implementa en espantildeol Listado 02 - Clases que utilizan la interfaz IEducado ------------------------------------------- Public Class EducadoIngles Implements IEducado Friend Sub Hola() Implements IEducadodiHola ConsoleWriteLine(Hello) End Sub Friend Sub Adios() Implements IEducadodiAdios ConsoleWriteLine(Bye) End Sub End Class ------------------------------------------- Public Class EducadoEspantildeol Implements IEducado Friend Sub Hola() Implements IEducadodiHola ConsoleWriteLine(Hola) End Sub Friend Sub Adios() Implements IEducadodiAdios ConsoleWriteLine(Adios) End Sub End Class ------------------------------------------- Listado 03 - Forma baacutesica de utilizr el Interfaz IEducado ------------------------------------------- Public Sub ProbarInterfazFormaUno() Instanciar una clase DimoEnEspantildeol As New EducadoEspantildeol() definicion de la interfaz asignando una clase a la interfaz DimiMuyEduado As IEducado = oEnEspantildeol usando la interfaz iMuyEduadodiHola() iMuyEduadodiAdios() ------------------------------ asignar otra clase a la interfaz Instanciar una clase

DimoEnIngles As New EducadoIngles() asignar la clase a la interfaz iMuyEduado = oEnIngles usando la interfaz iMuyEduadodiHola() iMuyEduadodiAdios() ---------------- iMuyEduado = Nothing oEnEspantildeol = Nothing oEnIngles = Nothing End Sub ------------------------------------------- Supongamos que tenemos una clase encargada de interactuar con el usuario en un entorno de liacutenea de comandos saludaacutendolo al iniciar la sesioacuten y despidieacutendose al terminar Podemos independizar nuestra clase del idioma empleado haciendo que tenga una referencia a la interfaz educado Listado 04 - Clase que implementa la interfaz en el constructor ------------------------------------------- ------------------------------------------- Public Class HaceUsoInterfazEducado Dim iMuyEduado As IEducado Public Sub New(ByValUnObjetoIdioma As Object) definicion de la interfaz asignando una clase a la interfaz ctypeespor [Option Strict ON] iMuyEduado = CType(UnObjetoIdioma IEducado) End Sub Public Sub diHola() iMuyEduadodiHola() End Sub Public Sub diAdios() iMuyEduadodiAdios() End Sub End Class ------------------------------------------- En funcioacuten del idioma seleccionado por el usuario esta clase recibiraacute en su constructor una implementacioacuten u otra sin necesidad de modificar la clase que hace uso de los servicios ofrecidos por esta interfaz Es maacutes podemos seguir antildeadiendo soporte de nuevos idiomas creando nuevas implementaciones de la interfaz Listado 05 - Funcioacuten que utiliza la clase anterior [HaceUsoInterfazEducado] ------------------------------------------- Public Sub ProbarInterfazFormaDos() Instanciar una clase en funcioacuten del idioma a utilizar DimoEnEspantildeol As New EducadoEspantildeol() instanciar la clase que usa el interfaz DimoIEducado As New HaceUsoInterfazEducado(oEnEspantildeol) oIEducadodiHola() oIEducadodiAdios()

oIEducado = Nothing oEnEspantildeol = Nothing End Sub ------------------------------------------- Otros lenguajes maacutes antiguos como C++ o Visual Basic carecen de interfaces En su lugar ofrecen otra construccioacuten las clases abstractas tambieacuten presentes en Java y C En C++ una clase es abstracta cuando tiene uno de sus meacutetodos virtual El modificador virtual es similar al modificador abstract de Java y otros lenguajes En C++ definiriacuteamos el contrato de nuestra interfaz con una clase abstracta (que puede ser pura si todos sus meacutetodos son abstractos) y cada una de las implementaciones de la interfaz seriacutean clases que heredariacutean de eacutesta Incluso las uacuteltimas versiones de Visual Basic (5 y 6) antes de su sustitucioacuten por Visual Basic NET permitiacutean la definicioacuten de clases abstractas Para tal fin habiacutea que crear un moacutedulo de clase con el asistente visual del lenguaje y dar el valor PublicNoCreatable a la propiedad Instancing del moacutedulo Esto haciacutea que no se pudiese utilizar ni el operador new ni la funcioacuten CreateObject para obtener instancias de la clase Un moacutedulo podiacutea implementar esta interfaz mediante el uso de la palabra reservada implements

Arriba

El patroacuten Delegacioacuten La delegacioacuten consiste en un medio de extender y reutilizar la funcionalidad de una clase mediante la creacioacuten de otra clase que se la proporcione Todos los lenguajes orientados a objetos proporcionan mecanismos para implementar este patroacuten pues basta con antildeadir una nueva referencia a la clase que consume el servicio

Diagrama de clases UML del patroacuten Delegacioacuten

La importancia del patroacuten Delegacioacuten radica en que nos proporciona un mecanismo para decidir cuaacutendo debemos hacer que una clase herede de otra o cuando antildeadirle una referencia para utilizar sus servicios En nuestro ejemplo de la clase educada parece claro que hay que utilizar delegacioacuten Muchas veces la decisioacuten nos la da el sentido comuacuten (la regla de es un) mientras que otras veces habraacute que hacer un anaacutelisis del nuacutemero de herencias posibles En nuestro ejemplo antildeadiendo una referencia a la interfaz IEducado soacutelo crearemos una clase que consuma sus servicios mientras que si optamos por el mecanismo de la herencia tendriacuteamos que crear dos subclases una de EducadoIngles y otra de EducadoEspantildeol Ademaacutes conforme fuese creciendo el nuacutemero de implementaciones de IEducado habriacutea que ir aumentando el nuacutemero de herencias El listado siguiente se muestra la codificacioacuten en VBNET de este patroacuten Listado 06 - Patroacuten delegacioacuten (extracto del listado 4) ------------------------------------------- PublicClassHaceUsoInterfazEducado DimiMuyEduado As IEducado El coacutedigo completo de la clase esta en el listado 04 EndClass -------------------------------------------

Arriba

Patrones de creacioacuten Singleton

Una vez introducidos dos de los patrones de disentildeo fundamentales Interfaz y Delegacioacuten veremos un patroacuten del tipo creacional muy frecuente en la praacutectica el patroacuten de disentildeo Singleton Este patroacuten se utiliza cuando queremos garantizar que de una determinada clase soacutelo existe una instancia De esta forma todos los objetos que hagan uso de esa clase utilizaraacuten la misma instancia iquestCuaacutendo suele ser necesario aplicar un Singleton Cuando nos encontramos con clases que deben encargarse de gestionar un recurso bien sea externo (las conexiones a una base de datos por ejemplo) bien sea interno (informacioacuten de configuracioacuten global a nivel de sistema informacioacuten uacutenica para el contexto de la aplicacioacuten etc)

Gestor de conexiones con el patroacuten Singleton

iquestCoacutemo se implementa un Singleton En primer lugar se debe impedir que los clientes construyan instancias de la clase que se desea hacer Singleton Para ello lo normal es hacer su constructor privado Ademaacutes se debe hacer que dicha clase contenga una referencia estaacutetica a la uacutenica instancia de esa propia clase que puede existir En el mundo de la orientacioacuten a objetos se denomina estaacuteticas a aquellas propiedades y meacutetodos que son comunes de una clase y por tanto compartidas por todas sus instancias Por uacuteltimo se debe antildeadir al Singleton un meacutetodo puacuteblico y estaacutetico que devuelva la uacutenica referencia existente de esa clase En el listado siguiente vemos coacutemo implementar un Singleton en Visual BasicNET Listado 07 - Patroacuten de creacioacuten Singleton ------------------------------------------- PublicClassSingleton Variable que contiene la referencia a ESTA clase Private Shared m_Instance As Singleton = Nothing constructor privado Private Sub New() o hacer nada End Sub meacutetodo estaacutetico permite obtener la referencia de la clase siempre se devuelve la misma referencia Public Shared ReadOnly Property Instance() As Singleton Get If m_Instance Is Nothing Then m_Instance = New Singleton() End If Return m_Instance End Get End Property

EndClass ------------------------------------------- El patroacuten Singleton Asegura que solo se cree una instancia de la clase y provee un punto global de acceso a esta En el siguiente ejemplo crearemos una clase que inicialice y retorne un objeto conexioacuten si no existe y si ya existen que nos retorne la instancia existente El ejemplo estaacute escrito por Enriquillo Mantildeoacuten y lo encontre el dia 22122004 en la paacutegina siguiente httpwwwmicrosoftcomspanishmsdncomunidadmtjnetvoicesart151asp Listado 08 - Patroacuten de creacioacuten Singleton ------------------------------------------- Implementacioacuten del Patroacuten Singleton PublicClassConexion Objeto que contendraacute la instancia compartida Private Shared m_objConexion As Conexion Privatem_FechaCreacion As String El Mutex es una clase que proporciona NET FrameWork Con ella evitaremos que en un ambiente multithread se cree alguacuten tipo de conflicto Private Shared m_Mutex As New SystemThreadingMutex Private Sub New() m_FechaCreacion = DateTimeNowToString End Sub Este meacutetodo eliminaraacute la instancia ya existente Public Shared Sub KillInstance() m_objConexion = Nothing End Sub Este seraacute el meacutetodo que proporcionara el acceso A la instancia existente si no existe creara unanueva (meacutetodo Singleton) Public Shared Function GetInstance() As Conexion m_MutexWaitOne() If m_objConexion Is Nothing Then m_objConexion = New Conexion End If m_MutexReleaseMutex() Return m_objConexion EndFunction Propiedad que presenta la fecha y hora en que Fue creada la instancia PublicReadOnlyPropertyFechaCreada() As String Get Return m_FechaCreacion End Get End Property End Class ------------------------------------------- La implementacioacuten para probar nuestra clase es bastante sencilla para instanciarla

Listado 09 - Patroacuten de creacioacuten instanciarla ------------------------------------------- Try Dim objConexion As SingletonConexion objConexion = SingletonConexionGetInstance TextBox1Text amp= Instancia Creada el + objConexionFechaCreadaampvbCrLf Catch ex As Exception MessageBoxShow(exMessage) End Try ------------------------------------------- Y para inicializarla Listado 10 - Patroacuten de creacioacuten inicializarla ------------------------------------------- Try SingletonConexionKillInstance() TextBox1Text amp= InstanciaEliminada---- ampvbCrLf Catch ex As Exception MessageBoxShow(exMessage) End Try -------------------------------------------

Arriba

Para Saber Mas [1] A Pattern Language Towns Buildings Construction Christopher Alexander 1977 [2] Using Patterns Languages for Object-Oriented Programs Ward Cunningham Kent Beck 1987 [3] Desing Patterns Elements of Reusable Object Oriented Software Gamma Helm Vlissides y Jonson 1994 [4] Patterns Of Enterprise Application Architecture Martiacuten Fowler [5] Java Blueprints httpjavasuncomblueprintspatternscataloghtm [6] NET Enterprise Patterns httpmsdnmicrosoftcomarchitecturepatterns [7] Patterns in Java A Catalog of Reusable Design Patterns Illustrated with UML Mark Grand [8] Te Server Side En esta web encontraremos una seccion dedicada a patrones de disentildeo wwwtheserversidecom

Arriba

Referencia bibliograacutefica Este documento esta COPIADO en su totalidad de un articulo escrito por Aacutelvaro Zabala Ordoacutentildeez y fue publicado en la revista Soacutelo Programadores num 113 con el tiacutetulo Patrones de Disentildeo Un curso practico [I] El articulo original muestra ejemplos en varios lenguajes En esta COPIA los he sustituido por ejemplos escritos exclusivamente en Visual Basic NET y ademaacutes he modificado la redaccioacuten de los paacuterrafos que haciacutean referencia a los ejemplos en otros lenguajes al objeto de darle una coherencia al texto final

Usted aprenderaacute a Aplicar meacutetodos probados para crear adaptables confiables y

eficientes NET y aplicaciones de cliente inteligente Resolver problemas de programacioacuten complejos con los patrones de

disentildeo estaacutendar de la industria Entregar el coacutedigo libre de errores con el desarrollo basado en pruebas

en Visual Studio Cree capas arquitecturas de reutilizacioacuten y evitar la superposicioacuten

funcional Aplicar las mejores praacutecticas para el disentildeo de la clase mejor Simplificar y automatizar las tareas repetitivas

Beneficios del curso El conocimiento de la NET y las bibliotecas no es suficiente para desarrollar aplicaciones robustas patrones de disentildeo probado y las mejores praacutecticas extraiacutedas de la sabiduriacutea de los expertos que ayuda en la creacioacuten de aplicaciones sobre una base soacutelida Este curso proporciona los conocimientos necesarios para resolver los problemas del mundo real de desarrollo de software y ofrecer aplicaciones raacutepida y fiable iquestQuieacuten debe asistir arquitectos programadores y cualquier sistema de desarrollo NET experiencia de programacioacuten a nivel de curso 419 programacioacuten de C o Curso 503 Visual Basic de programacioacuten para NET se supone Manos a la formacioacuten Ganas experiencia en la implementacioacuten NET mejores praacutecticas y patrones de disentildeo Ejercicios completado en VB o C incluyen

La conciliacioacuten de diversos problemas de procesamiento con el patroacuten Estrategia

La simplificacioacuten de un sistema complejo con el patroacuten Fachada La explotacioacuten de Microsoft Entity Framework para acceso a datos y

actualizaciones Creacioacuten de un modelo de objetos de dominio de Negocios Construccioacuten de casos de prueba automatizado Estructuracioacuten de un interfaz de usuario comprobable con el patroacuten

Modelo Vista Controlador La captura y reutilizacioacuten de las pruebas dentro de Visual Studio

Contenido del curso 511

Introduccioacuten Codificacioacuten de las mejores praacutecticas Simplificacioacuten de software con patrones de disentildeo

Simplificacioacuten de programacioacuten complejos con probada patrones de disentildeo La aplicacioacuten de interfaces simples a complejos algoritmos

La unificacioacuten de interfaces de subsistemas para facilitar su uso y reutilizacioacuten

Aplicacioacuten del modelo de fachada Variando la funcionalidad mediante la programacioacuten de interfaces

Fechas del curso

Asistir a eventos destacoacute en persona o en liacutenea con LearningTreeAnyWareTM

Feb 8 hasta 11 Reston VA inscribirse

5to al 8vo 04 Toronto inscribirse

19 a 22 ab Boston (Waltham) inscribirse

04 26ta al 29o Nueva York inscribirse

10 al 13 mayo Los Angelesinscribirse

10 al 13 mayo Ottawa inscribirse

17 al 20 mayo Rockville MD inscribirse

Mayo 24-27 Chicago (Schaumburg) inscribirse

31 mayo a 3 junio Reston VA inscribirse

07 al 10 junio Nueva York inscribirse

Para inscripciones AnyWare por favor regiacutestrese al menos 10 diacuteas antes del inicio del curso Maacutes fechas y lugares En las instalaciones y Formacioacuten personalizada Llevar este o cualquier otro aacuterbol curso de aprendizaje a su ubicacioacuten o la han personalizado para su organizacioacuten Matriacutecula

$ 2890 Norma de matriacutecula

Matriacutecula con un Plan de Ahorro

$ 1700 Premium-Pass

1733 doacutelares Pasaporte de formacioacuten

$ 2250 Vale 10-Pack

$ 2573 Gobierno de descuento

$ 2600 Antiguos Alumnos de descuento de Oro

Alumni Gold Discount

Mejorar la adaptabilidad y la flexibilidad de su aplicacioacuten Explotar el patroacuten Estrategia

Ampliacioacuten de la conducta objeto de forma dinaacutemica El aumento de la funcionalidad sin afectar al coacutedigo existente Composicioacuten de objetos con el patroacuten Decorador

El logro de reutilizacioacuten y flexibilidad La eliminacioacuten de la duplicacioacuten de coacutedigo al esbozar las bases de un

algoritmo Empleando el modelo de plantilla Meacutetodo

Interfaz clases incompatibles La transformacioacuten de una interfaz para agregar valor a coacutedigo

existente Aprovechar el modelo del adaptador

La aplicacioacuten de teacutecnicas de desarrollo basado en pruebas Automatizar las pruebas unitarias

Acortar los ciclos de desarrollo de pruebas automatizadas Mejora de la calidad con una cobertura consistente de pruebas La eliminacioacuten de los errores de regresioacuten con las pruebas

reutilizables La integracioacuten de las pruebas y la codificacioacuten

La aplicacioacuten de la prueba praacutectica de programacioacuten de sesiones para conducir el disentildeo del coacutedigo

Generar retroalimentacioacuten inmediata luz verde para el aumento de la calidad del coacutedigo y los cortos ciclos de desarrollo de funciones

Organizar coordinar y ejecutar los casos de prueba con Visual Studio Arquitectura de una aplicacioacuten de capas Disentildeo de la arquitectura de aplicaciones

Capas arquitecturas de reutilizacioacuten durabilidad y capacidad de ampliacioacuten

Acceso a datos de la capa de negocio La disociacioacuten de creacioacuten de objetos con el patroacuten de la faacutebrica Preservar la identidad del objeto con el patroacuten de identidad Mapa

Programacioacuten niveles de la aplicacioacuten Estructuracioacuten de un cliente Web o de aplicaciones ricas con el

patroacuten Observer Organizador rico estado-aplicaciones con el modelo de Estado Reestructuracioacuten de las tablas de la base de datos sin afectar el

coacutedigo de la aplicacioacuten Modelado de un aacuterea de negocio

Libertador ricos Business Object modelos de las estructuras de base de datos utilizando el patroacuten de modelo de dominio

Cartografiacutea ricos Business Objects a las tablas de base de datos con el patroacuten Data Mapper

El colapso de las jerarquiacuteas de objetos de negocio con el patroacuten de herencia Mapper

La explotacioacuten de la programacioacuten declarativa en Microsoft Entity Framework para implementar clases de datos de cartografiacutea

Attend your first course and you will receive a personalized Alumni Gold Discount card entitling you to save as much as $320 on each course you take within the following 12 months

Alumni Gold Discount Attend your first course and you will receive a personalized Alumni Gold Discount card entitling you to save as much as $320 on each course you take within the following 12 months

Federal State and Local Government Federal State and Local Government employees can take advantage of government discount pricing for Learning Tree Courses

Federal State and Local Government Federal State and Local Government employees can take advantage of government discount pricing for Learning Tree Courses

Training Vouchers With Vouchers any members of your team can attend any Learning Tree Course anytime Available in 5- and 10-Course Packs or larger each Voucher is valid for 12 months and is used in lieu of the tuition for any Learning Tree Public Course

Training Vouchers With Vouchers any members of your team can attend any Learning Tree Course anytime Available in 5- and 10-Course Packs or larger each Voucher is valid for 12 months and is

La aplicacioacuten de Buenas Praacutecticas La organizacioacuten y la aplicacioacuten de la loacutegica de negocio

La aplicacioacuten de los patrones de dominio de la loacutegica en el nivel medio

Ampliacioacuten de tipos de entidad con clases parciales La manipulacioacuten de los grupos de entidades con las clases de loacutegica

de negocio Las mejores praacutecticas en el disentildeo de clase

Proteccioacuten contra la rigidez con el Abierto de Principio Cerrado La extraccioacuten de las nuevas clases con el Principio de Responsabilidad

Individual El uso eficaz de la herencia

Automatizar tareas repetitivas Facilitar los datos de coacutedigo de acceso

La reduccioacuten de la base de datos de coacutedigo de acceso mediante la explotacioacuten de la entidad de navegacioacuten Propiedades

La eliminacioacuten de coacutedigo de actualizacioacuten de base de datos con el cambio de entidad de seguimiento Mejorar el coacutedigo de aplicacioacuten

Automatizacioacuten de revisiones de disentildeo con FxCop y Visual Studio Anaacutelisis

La eliminacioacuten de la duplicacioacuten de coacutedigo a traveacutes de la refactorizacioacuten para los patrones de disentildeo

ltltVolver a Visual Studio y NET Listado de cursos Cursos relacionados

Construyendo Aplicaciones Web con ASPNET y Ajax - Curso 506 ASPNET WebForms Integral Introduccioacuten - Curso 512 Construyendo Aplicaciones Web con ASPNET MVC - Curso 977 NET 4 Programacioacuten - Curso 2620 WPF y Silverlight Introduccioacuten - Curso 975 Servicios Web NET Introduccioacuten - Curso 2601 De programacioacuten C extendido Caracteriacutesticas - Curso 973 Programacioacuten de aplicaciones con SharePoint 2010 - NET Curso 2615 Windows Azure - Curso 2602

used in lieu of the tuition for any Learning Tree Public Course

Training Passport As a Training Passport holder one person can take as many as three hands-on courses in 12 months for as little as $1733 per course Only $5200 - save as much as 45

Training Passport As a Training Passport holder one person can take as many as three hands-on courses in 12 months for as little as $1733 per course Only $5200 - save as much as 45

Premium Pass The NEW Premium Pass gives you more time to take more courses while saving more money Take 4 courses within 24 months for as little as $1700 per course mdash at a price of only $6790 you can SAVE as much as 45 per course

Premium Pass The NEW Premium Pass gives you more time to take more courses while saving more money Take 4 courses within 24 months for as little as $1700 per course mdash at a price of only $6790 you can SAVE as much as 45 per course

Page 4: Patrones de diseño

Diagrama de clases UML del patroacuten Interfaz

Esta interfaz define un comportamiento que podraacuten heredar otras clases a traveacutes de la herencia de interfaz En el listado 1 tenemos dos implementaciones de esta interfaz con VBNET En dicho ejemplo tenemos una interfaz IEducado que obliga a que todas las clases que la implementen tengan meacutetodos de saludo y despedida impresos por consola En el En el listado 2 vemos como la clase Educadolngles implementa estos meacutetodos en ingleacutes mientras que la clase EducadoEspantildeol los implementa en espantildeol Listado 02 - Clases que utilizan la interfaz IEducado ------------------------------------------- Public Class EducadoIngles Implements IEducado Friend Sub Hola() Implements IEducadodiHola ConsoleWriteLine(Hello) End Sub Friend Sub Adios() Implements IEducadodiAdios ConsoleWriteLine(Bye) End Sub End Class ------------------------------------------- Public Class EducadoEspantildeol Implements IEducado Friend Sub Hola() Implements IEducadodiHola ConsoleWriteLine(Hola) End Sub Friend Sub Adios() Implements IEducadodiAdios ConsoleWriteLine(Adios) End Sub End Class ------------------------------------------- Listado 03 - Forma baacutesica de utilizr el Interfaz IEducado ------------------------------------------- Public Sub ProbarInterfazFormaUno() Instanciar una clase DimoEnEspantildeol As New EducadoEspantildeol() definicion de la interfaz asignando una clase a la interfaz DimiMuyEduado As IEducado = oEnEspantildeol usando la interfaz iMuyEduadodiHola() iMuyEduadodiAdios() ------------------------------ asignar otra clase a la interfaz Instanciar una clase

DimoEnIngles As New EducadoIngles() asignar la clase a la interfaz iMuyEduado = oEnIngles usando la interfaz iMuyEduadodiHola() iMuyEduadodiAdios() ---------------- iMuyEduado = Nothing oEnEspantildeol = Nothing oEnIngles = Nothing End Sub ------------------------------------------- Supongamos que tenemos una clase encargada de interactuar con el usuario en un entorno de liacutenea de comandos saludaacutendolo al iniciar la sesioacuten y despidieacutendose al terminar Podemos independizar nuestra clase del idioma empleado haciendo que tenga una referencia a la interfaz educado Listado 04 - Clase que implementa la interfaz en el constructor ------------------------------------------- ------------------------------------------- Public Class HaceUsoInterfazEducado Dim iMuyEduado As IEducado Public Sub New(ByValUnObjetoIdioma As Object) definicion de la interfaz asignando una clase a la interfaz ctypeespor [Option Strict ON] iMuyEduado = CType(UnObjetoIdioma IEducado) End Sub Public Sub diHola() iMuyEduadodiHola() End Sub Public Sub diAdios() iMuyEduadodiAdios() End Sub End Class ------------------------------------------- En funcioacuten del idioma seleccionado por el usuario esta clase recibiraacute en su constructor una implementacioacuten u otra sin necesidad de modificar la clase que hace uso de los servicios ofrecidos por esta interfaz Es maacutes podemos seguir antildeadiendo soporte de nuevos idiomas creando nuevas implementaciones de la interfaz Listado 05 - Funcioacuten que utiliza la clase anterior [HaceUsoInterfazEducado] ------------------------------------------- Public Sub ProbarInterfazFormaDos() Instanciar una clase en funcioacuten del idioma a utilizar DimoEnEspantildeol As New EducadoEspantildeol() instanciar la clase que usa el interfaz DimoIEducado As New HaceUsoInterfazEducado(oEnEspantildeol) oIEducadodiHola() oIEducadodiAdios()

oIEducado = Nothing oEnEspantildeol = Nothing End Sub ------------------------------------------- Otros lenguajes maacutes antiguos como C++ o Visual Basic carecen de interfaces En su lugar ofrecen otra construccioacuten las clases abstractas tambieacuten presentes en Java y C En C++ una clase es abstracta cuando tiene uno de sus meacutetodos virtual El modificador virtual es similar al modificador abstract de Java y otros lenguajes En C++ definiriacuteamos el contrato de nuestra interfaz con una clase abstracta (que puede ser pura si todos sus meacutetodos son abstractos) y cada una de las implementaciones de la interfaz seriacutean clases que heredariacutean de eacutesta Incluso las uacuteltimas versiones de Visual Basic (5 y 6) antes de su sustitucioacuten por Visual Basic NET permitiacutean la definicioacuten de clases abstractas Para tal fin habiacutea que crear un moacutedulo de clase con el asistente visual del lenguaje y dar el valor PublicNoCreatable a la propiedad Instancing del moacutedulo Esto haciacutea que no se pudiese utilizar ni el operador new ni la funcioacuten CreateObject para obtener instancias de la clase Un moacutedulo podiacutea implementar esta interfaz mediante el uso de la palabra reservada implements

Arriba

El patroacuten Delegacioacuten La delegacioacuten consiste en un medio de extender y reutilizar la funcionalidad de una clase mediante la creacioacuten de otra clase que se la proporcione Todos los lenguajes orientados a objetos proporcionan mecanismos para implementar este patroacuten pues basta con antildeadir una nueva referencia a la clase que consume el servicio

Diagrama de clases UML del patroacuten Delegacioacuten

La importancia del patroacuten Delegacioacuten radica en que nos proporciona un mecanismo para decidir cuaacutendo debemos hacer que una clase herede de otra o cuando antildeadirle una referencia para utilizar sus servicios En nuestro ejemplo de la clase educada parece claro que hay que utilizar delegacioacuten Muchas veces la decisioacuten nos la da el sentido comuacuten (la regla de es un) mientras que otras veces habraacute que hacer un anaacutelisis del nuacutemero de herencias posibles En nuestro ejemplo antildeadiendo una referencia a la interfaz IEducado soacutelo crearemos una clase que consuma sus servicios mientras que si optamos por el mecanismo de la herencia tendriacuteamos que crear dos subclases una de EducadoIngles y otra de EducadoEspantildeol Ademaacutes conforme fuese creciendo el nuacutemero de implementaciones de IEducado habriacutea que ir aumentando el nuacutemero de herencias El listado siguiente se muestra la codificacioacuten en VBNET de este patroacuten Listado 06 - Patroacuten delegacioacuten (extracto del listado 4) ------------------------------------------- PublicClassHaceUsoInterfazEducado DimiMuyEduado As IEducado El coacutedigo completo de la clase esta en el listado 04 EndClass -------------------------------------------

Arriba

Patrones de creacioacuten Singleton

Una vez introducidos dos de los patrones de disentildeo fundamentales Interfaz y Delegacioacuten veremos un patroacuten del tipo creacional muy frecuente en la praacutectica el patroacuten de disentildeo Singleton Este patroacuten se utiliza cuando queremos garantizar que de una determinada clase soacutelo existe una instancia De esta forma todos los objetos que hagan uso de esa clase utilizaraacuten la misma instancia iquestCuaacutendo suele ser necesario aplicar un Singleton Cuando nos encontramos con clases que deben encargarse de gestionar un recurso bien sea externo (las conexiones a una base de datos por ejemplo) bien sea interno (informacioacuten de configuracioacuten global a nivel de sistema informacioacuten uacutenica para el contexto de la aplicacioacuten etc)

Gestor de conexiones con el patroacuten Singleton

iquestCoacutemo se implementa un Singleton En primer lugar se debe impedir que los clientes construyan instancias de la clase que se desea hacer Singleton Para ello lo normal es hacer su constructor privado Ademaacutes se debe hacer que dicha clase contenga una referencia estaacutetica a la uacutenica instancia de esa propia clase que puede existir En el mundo de la orientacioacuten a objetos se denomina estaacuteticas a aquellas propiedades y meacutetodos que son comunes de una clase y por tanto compartidas por todas sus instancias Por uacuteltimo se debe antildeadir al Singleton un meacutetodo puacuteblico y estaacutetico que devuelva la uacutenica referencia existente de esa clase En el listado siguiente vemos coacutemo implementar un Singleton en Visual BasicNET Listado 07 - Patroacuten de creacioacuten Singleton ------------------------------------------- PublicClassSingleton Variable que contiene la referencia a ESTA clase Private Shared m_Instance As Singleton = Nothing constructor privado Private Sub New() o hacer nada End Sub meacutetodo estaacutetico permite obtener la referencia de la clase siempre se devuelve la misma referencia Public Shared ReadOnly Property Instance() As Singleton Get If m_Instance Is Nothing Then m_Instance = New Singleton() End If Return m_Instance End Get End Property

EndClass ------------------------------------------- El patroacuten Singleton Asegura que solo se cree una instancia de la clase y provee un punto global de acceso a esta En el siguiente ejemplo crearemos una clase que inicialice y retorne un objeto conexioacuten si no existe y si ya existen que nos retorne la instancia existente El ejemplo estaacute escrito por Enriquillo Mantildeoacuten y lo encontre el dia 22122004 en la paacutegina siguiente httpwwwmicrosoftcomspanishmsdncomunidadmtjnetvoicesart151asp Listado 08 - Patroacuten de creacioacuten Singleton ------------------------------------------- Implementacioacuten del Patroacuten Singleton PublicClassConexion Objeto que contendraacute la instancia compartida Private Shared m_objConexion As Conexion Privatem_FechaCreacion As String El Mutex es una clase que proporciona NET FrameWork Con ella evitaremos que en un ambiente multithread se cree alguacuten tipo de conflicto Private Shared m_Mutex As New SystemThreadingMutex Private Sub New() m_FechaCreacion = DateTimeNowToString End Sub Este meacutetodo eliminaraacute la instancia ya existente Public Shared Sub KillInstance() m_objConexion = Nothing End Sub Este seraacute el meacutetodo que proporcionara el acceso A la instancia existente si no existe creara unanueva (meacutetodo Singleton) Public Shared Function GetInstance() As Conexion m_MutexWaitOne() If m_objConexion Is Nothing Then m_objConexion = New Conexion End If m_MutexReleaseMutex() Return m_objConexion EndFunction Propiedad que presenta la fecha y hora en que Fue creada la instancia PublicReadOnlyPropertyFechaCreada() As String Get Return m_FechaCreacion End Get End Property End Class ------------------------------------------- La implementacioacuten para probar nuestra clase es bastante sencilla para instanciarla

Listado 09 - Patroacuten de creacioacuten instanciarla ------------------------------------------- Try Dim objConexion As SingletonConexion objConexion = SingletonConexionGetInstance TextBox1Text amp= Instancia Creada el + objConexionFechaCreadaampvbCrLf Catch ex As Exception MessageBoxShow(exMessage) End Try ------------------------------------------- Y para inicializarla Listado 10 - Patroacuten de creacioacuten inicializarla ------------------------------------------- Try SingletonConexionKillInstance() TextBox1Text amp= InstanciaEliminada---- ampvbCrLf Catch ex As Exception MessageBoxShow(exMessage) End Try -------------------------------------------

Arriba

Para Saber Mas [1] A Pattern Language Towns Buildings Construction Christopher Alexander 1977 [2] Using Patterns Languages for Object-Oriented Programs Ward Cunningham Kent Beck 1987 [3] Desing Patterns Elements of Reusable Object Oriented Software Gamma Helm Vlissides y Jonson 1994 [4] Patterns Of Enterprise Application Architecture Martiacuten Fowler [5] Java Blueprints httpjavasuncomblueprintspatternscataloghtm [6] NET Enterprise Patterns httpmsdnmicrosoftcomarchitecturepatterns [7] Patterns in Java A Catalog of Reusable Design Patterns Illustrated with UML Mark Grand [8] Te Server Side En esta web encontraremos una seccion dedicada a patrones de disentildeo wwwtheserversidecom

Arriba

Referencia bibliograacutefica Este documento esta COPIADO en su totalidad de un articulo escrito por Aacutelvaro Zabala Ordoacutentildeez y fue publicado en la revista Soacutelo Programadores num 113 con el tiacutetulo Patrones de Disentildeo Un curso practico [I] El articulo original muestra ejemplos en varios lenguajes En esta COPIA los he sustituido por ejemplos escritos exclusivamente en Visual Basic NET y ademaacutes he modificado la redaccioacuten de los paacuterrafos que haciacutean referencia a los ejemplos en otros lenguajes al objeto de darle una coherencia al texto final

Usted aprenderaacute a Aplicar meacutetodos probados para crear adaptables confiables y

eficientes NET y aplicaciones de cliente inteligente Resolver problemas de programacioacuten complejos con los patrones de

disentildeo estaacutendar de la industria Entregar el coacutedigo libre de errores con el desarrollo basado en pruebas

en Visual Studio Cree capas arquitecturas de reutilizacioacuten y evitar la superposicioacuten

funcional Aplicar las mejores praacutecticas para el disentildeo de la clase mejor Simplificar y automatizar las tareas repetitivas

Beneficios del curso El conocimiento de la NET y las bibliotecas no es suficiente para desarrollar aplicaciones robustas patrones de disentildeo probado y las mejores praacutecticas extraiacutedas de la sabiduriacutea de los expertos que ayuda en la creacioacuten de aplicaciones sobre una base soacutelida Este curso proporciona los conocimientos necesarios para resolver los problemas del mundo real de desarrollo de software y ofrecer aplicaciones raacutepida y fiable iquestQuieacuten debe asistir arquitectos programadores y cualquier sistema de desarrollo NET experiencia de programacioacuten a nivel de curso 419 programacioacuten de C o Curso 503 Visual Basic de programacioacuten para NET se supone Manos a la formacioacuten Ganas experiencia en la implementacioacuten NET mejores praacutecticas y patrones de disentildeo Ejercicios completado en VB o C incluyen

La conciliacioacuten de diversos problemas de procesamiento con el patroacuten Estrategia

La simplificacioacuten de un sistema complejo con el patroacuten Fachada La explotacioacuten de Microsoft Entity Framework para acceso a datos y

actualizaciones Creacioacuten de un modelo de objetos de dominio de Negocios Construccioacuten de casos de prueba automatizado Estructuracioacuten de un interfaz de usuario comprobable con el patroacuten

Modelo Vista Controlador La captura y reutilizacioacuten de las pruebas dentro de Visual Studio

Contenido del curso 511

Introduccioacuten Codificacioacuten de las mejores praacutecticas Simplificacioacuten de software con patrones de disentildeo

Simplificacioacuten de programacioacuten complejos con probada patrones de disentildeo La aplicacioacuten de interfaces simples a complejos algoritmos

La unificacioacuten de interfaces de subsistemas para facilitar su uso y reutilizacioacuten

Aplicacioacuten del modelo de fachada Variando la funcionalidad mediante la programacioacuten de interfaces

Fechas del curso

Asistir a eventos destacoacute en persona o en liacutenea con LearningTreeAnyWareTM

Feb 8 hasta 11 Reston VA inscribirse

5to al 8vo 04 Toronto inscribirse

19 a 22 ab Boston (Waltham) inscribirse

04 26ta al 29o Nueva York inscribirse

10 al 13 mayo Los Angelesinscribirse

10 al 13 mayo Ottawa inscribirse

17 al 20 mayo Rockville MD inscribirse

Mayo 24-27 Chicago (Schaumburg) inscribirse

31 mayo a 3 junio Reston VA inscribirse

07 al 10 junio Nueva York inscribirse

Para inscripciones AnyWare por favor regiacutestrese al menos 10 diacuteas antes del inicio del curso Maacutes fechas y lugares En las instalaciones y Formacioacuten personalizada Llevar este o cualquier otro aacuterbol curso de aprendizaje a su ubicacioacuten o la han personalizado para su organizacioacuten Matriacutecula

$ 2890 Norma de matriacutecula

Matriacutecula con un Plan de Ahorro

$ 1700 Premium-Pass

1733 doacutelares Pasaporte de formacioacuten

$ 2250 Vale 10-Pack

$ 2573 Gobierno de descuento

$ 2600 Antiguos Alumnos de descuento de Oro

Alumni Gold Discount

Mejorar la adaptabilidad y la flexibilidad de su aplicacioacuten Explotar el patroacuten Estrategia

Ampliacioacuten de la conducta objeto de forma dinaacutemica El aumento de la funcionalidad sin afectar al coacutedigo existente Composicioacuten de objetos con el patroacuten Decorador

El logro de reutilizacioacuten y flexibilidad La eliminacioacuten de la duplicacioacuten de coacutedigo al esbozar las bases de un

algoritmo Empleando el modelo de plantilla Meacutetodo

Interfaz clases incompatibles La transformacioacuten de una interfaz para agregar valor a coacutedigo

existente Aprovechar el modelo del adaptador

La aplicacioacuten de teacutecnicas de desarrollo basado en pruebas Automatizar las pruebas unitarias

Acortar los ciclos de desarrollo de pruebas automatizadas Mejora de la calidad con una cobertura consistente de pruebas La eliminacioacuten de los errores de regresioacuten con las pruebas

reutilizables La integracioacuten de las pruebas y la codificacioacuten

La aplicacioacuten de la prueba praacutectica de programacioacuten de sesiones para conducir el disentildeo del coacutedigo

Generar retroalimentacioacuten inmediata luz verde para el aumento de la calidad del coacutedigo y los cortos ciclos de desarrollo de funciones

Organizar coordinar y ejecutar los casos de prueba con Visual Studio Arquitectura de una aplicacioacuten de capas Disentildeo de la arquitectura de aplicaciones

Capas arquitecturas de reutilizacioacuten durabilidad y capacidad de ampliacioacuten

Acceso a datos de la capa de negocio La disociacioacuten de creacioacuten de objetos con el patroacuten de la faacutebrica Preservar la identidad del objeto con el patroacuten de identidad Mapa

Programacioacuten niveles de la aplicacioacuten Estructuracioacuten de un cliente Web o de aplicaciones ricas con el

patroacuten Observer Organizador rico estado-aplicaciones con el modelo de Estado Reestructuracioacuten de las tablas de la base de datos sin afectar el

coacutedigo de la aplicacioacuten Modelado de un aacuterea de negocio

Libertador ricos Business Object modelos de las estructuras de base de datos utilizando el patroacuten de modelo de dominio

Cartografiacutea ricos Business Objects a las tablas de base de datos con el patroacuten Data Mapper

El colapso de las jerarquiacuteas de objetos de negocio con el patroacuten de herencia Mapper

La explotacioacuten de la programacioacuten declarativa en Microsoft Entity Framework para implementar clases de datos de cartografiacutea

Attend your first course and you will receive a personalized Alumni Gold Discount card entitling you to save as much as $320 on each course you take within the following 12 months

Alumni Gold Discount Attend your first course and you will receive a personalized Alumni Gold Discount card entitling you to save as much as $320 on each course you take within the following 12 months

Federal State and Local Government Federal State and Local Government employees can take advantage of government discount pricing for Learning Tree Courses

Federal State and Local Government Federal State and Local Government employees can take advantage of government discount pricing for Learning Tree Courses

Training Vouchers With Vouchers any members of your team can attend any Learning Tree Course anytime Available in 5- and 10-Course Packs or larger each Voucher is valid for 12 months and is used in lieu of the tuition for any Learning Tree Public Course

Training Vouchers With Vouchers any members of your team can attend any Learning Tree Course anytime Available in 5- and 10-Course Packs or larger each Voucher is valid for 12 months and is

La aplicacioacuten de Buenas Praacutecticas La organizacioacuten y la aplicacioacuten de la loacutegica de negocio

La aplicacioacuten de los patrones de dominio de la loacutegica en el nivel medio

Ampliacioacuten de tipos de entidad con clases parciales La manipulacioacuten de los grupos de entidades con las clases de loacutegica

de negocio Las mejores praacutecticas en el disentildeo de clase

Proteccioacuten contra la rigidez con el Abierto de Principio Cerrado La extraccioacuten de las nuevas clases con el Principio de Responsabilidad

Individual El uso eficaz de la herencia

Automatizar tareas repetitivas Facilitar los datos de coacutedigo de acceso

La reduccioacuten de la base de datos de coacutedigo de acceso mediante la explotacioacuten de la entidad de navegacioacuten Propiedades

La eliminacioacuten de coacutedigo de actualizacioacuten de base de datos con el cambio de entidad de seguimiento Mejorar el coacutedigo de aplicacioacuten

Automatizacioacuten de revisiones de disentildeo con FxCop y Visual Studio Anaacutelisis

La eliminacioacuten de la duplicacioacuten de coacutedigo a traveacutes de la refactorizacioacuten para los patrones de disentildeo

ltltVolver a Visual Studio y NET Listado de cursos Cursos relacionados

Construyendo Aplicaciones Web con ASPNET y Ajax - Curso 506 ASPNET WebForms Integral Introduccioacuten - Curso 512 Construyendo Aplicaciones Web con ASPNET MVC - Curso 977 NET 4 Programacioacuten - Curso 2620 WPF y Silverlight Introduccioacuten - Curso 975 Servicios Web NET Introduccioacuten - Curso 2601 De programacioacuten C extendido Caracteriacutesticas - Curso 973 Programacioacuten de aplicaciones con SharePoint 2010 - NET Curso 2615 Windows Azure - Curso 2602

used in lieu of the tuition for any Learning Tree Public Course

Training Passport As a Training Passport holder one person can take as many as three hands-on courses in 12 months for as little as $1733 per course Only $5200 - save as much as 45

Training Passport As a Training Passport holder one person can take as many as three hands-on courses in 12 months for as little as $1733 per course Only $5200 - save as much as 45

Premium Pass The NEW Premium Pass gives you more time to take more courses while saving more money Take 4 courses within 24 months for as little as $1700 per course mdash at a price of only $6790 you can SAVE as much as 45 per course

Premium Pass The NEW Premium Pass gives you more time to take more courses while saving more money Take 4 courses within 24 months for as little as $1700 per course mdash at a price of only $6790 you can SAVE as much as 45 per course

Page 5: Patrones de diseño

DimoEnIngles As New EducadoIngles() asignar la clase a la interfaz iMuyEduado = oEnIngles usando la interfaz iMuyEduadodiHola() iMuyEduadodiAdios() ---------------- iMuyEduado = Nothing oEnEspantildeol = Nothing oEnIngles = Nothing End Sub ------------------------------------------- Supongamos que tenemos una clase encargada de interactuar con el usuario en un entorno de liacutenea de comandos saludaacutendolo al iniciar la sesioacuten y despidieacutendose al terminar Podemos independizar nuestra clase del idioma empleado haciendo que tenga una referencia a la interfaz educado Listado 04 - Clase que implementa la interfaz en el constructor ------------------------------------------- ------------------------------------------- Public Class HaceUsoInterfazEducado Dim iMuyEduado As IEducado Public Sub New(ByValUnObjetoIdioma As Object) definicion de la interfaz asignando una clase a la interfaz ctypeespor [Option Strict ON] iMuyEduado = CType(UnObjetoIdioma IEducado) End Sub Public Sub diHola() iMuyEduadodiHola() End Sub Public Sub diAdios() iMuyEduadodiAdios() End Sub End Class ------------------------------------------- En funcioacuten del idioma seleccionado por el usuario esta clase recibiraacute en su constructor una implementacioacuten u otra sin necesidad de modificar la clase que hace uso de los servicios ofrecidos por esta interfaz Es maacutes podemos seguir antildeadiendo soporte de nuevos idiomas creando nuevas implementaciones de la interfaz Listado 05 - Funcioacuten que utiliza la clase anterior [HaceUsoInterfazEducado] ------------------------------------------- Public Sub ProbarInterfazFormaDos() Instanciar una clase en funcioacuten del idioma a utilizar DimoEnEspantildeol As New EducadoEspantildeol() instanciar la clase que usa el interfaz DimoIEducado As New HaceUsoInterfazEducado(oEnEspantildeol) oIEducadodiHola() oIEducadodiAdios()

oIEducado = Nothing oEnEspantildeol = Nothing End Sub ------------------------------------------- Otros lenguajes maacutes antiguos como C++ o Visual Basic carecen de interfaces En su lugar ofrecen otra construccioacuten las clases abstractas tambieacuten presentes en Java y C En C++ una clase es abstracta cuando tiene uno de sus meacutetodos virtual El modificador virtual es similar al modificador abstract de Java y otros lenguajes En C++ definiriacuteamos el contrato de nuestra interfaz con una clase abstracta (que puede ser pura si todos sus meacutetodos son abstractos) y cada una de las implementaciones de la interfaz seriacutean clases que heredariacutean de eacutesta Incluso las uacuteltimas versiones de Visual Basic (5 y 6) antes de su sustitucioacuten por Visual Basic NET permitiacutean la definicioacuten de clases abstractas Para tal fin habiacutea que crear un moacutedulo de clase con el asistente visual del lenguaje y dar el valor PublicNoCreatable a la propiedad Instancing del moacutedulo Esto haciacutea que no se pudiese utilizar ni el operador new ni la funcioacuten CreateObject para obtener instancias de la clase Un moacutedulo podiacutea implementar esta interfaz mediante el uso de la palabra reservada implements

Arriba

El patroacuten Delegacioacuten La delegacioacuten consiste en un medio de extender y reutilizar la funcionalidad de una clase mediante la creacioacuten de otra clase que se la proporcione Todos los lenguajes orientados a objetos proporcionan mecanismos para implementar este patroacuten pues basta con antildeadir una nueva referencia a la clase que consume el servicio

Diagrama de clases UML del patroacuten Delegacioacuten

La importancia del patroacuten Delegacioacuten radica en que nos proporciona un mecanismo para decidir cuaacutendo debemos hacer que una clase herede de otra o cuando antildeadirle una referencia para utilizar sus servicios En nuestro ejemplo de la clase educada parece claro que hay que utilizar delegacioacuten Muchas veces la decisioacuten nos la da el sentido comuacuten (la regla de es un) mientras que otras veces habraacute que hacer un anaacutelisis del nuacutemero de herencias posibles En nuestro ejemplo antildeadiendo una referencia a la interfaz IEducado soacutelo crearemos una clase que consuma sus servicios mientras que si optamos por el mecanismo de la herencia tendriacuteamos que crear dos subclases una de EducadoIngles y otra de EducadoEspantildeol Ademaacutes conforme fuese creciendo el nuacutemero de implementaciones de IEducado habriacutea que ir aumentando el nuacutemero de herencias El listado siguiente se muestra la codificacioacuten en VBNET de este patroacuten Listado 06 - Patroacuten delegacioacuten (extracto del listado 4) ------------------------------------------- PublicClassHaceUsoInterfazEducado DimiMuyEduado As IEducado El coacutedigo completo de la clase esta en el listado 04 EndClass -------------------------------------------

Arriba

Patrones de creacioacuten Singleton

Una vez introducidos dos de los patrones de disentildeo fundamentales Interfaz y Delegacioacuten veremos un patroacuten del tipo creacional muy frecuente en la praacutectica el patroacuten de disentildeo Singleton Este patroacuten se utiliza cuando queremos garantizar que de una determinada clase soacutelo existe una instancia De esta forma todos los objetos que hagan uso de esa clase utilizaraacuten la misma instancia iquestCuaacutendo suele ser necesario aplicar un Singleton Cuando nos encontramos con clases que deben encargarse de gestionar un recurso bien sea externo (las conexiones a una base de datos por ejemplo) bien sea interno (informacioacuten de configuracioacuten global a nivel de sistema informacioacuten uacutenica para el contexto de la aplicacioacuten etc)

Gestor de conexiones con el patroacuten Singleton

iquestCoacutemo se implementa un Singleton En primer lugar se debe impedir que los clientes construyan instancias de la clase que se desea hacer Singleton Para ello lo normal es hacer su constructor privado Ademaacutes se debe hacer que dicha clase contenga una referencia estaacutetica a la uacutenica instancia de esa propia clase que puede existir En el mundo de la orientacioacuten a objetos se denomina estaacuteticas a aquellas propiedades y meacutetodos que son comunes de una clase y por tanto compartidas por todas sus instancias Por uacuteltimo se debe antildeadir al Singleton un meacutetodo puacuteblico y estaacutetico que devuelva la uacutenica referencia existente de esa clase En el listado siguiente vemos coacutemo implementar un Singleton en Visual BasicNET Listado 07 - Patroacuten de creacioacuten Singleton ------------------------------------------- PublicClassSingleton Variable que contiene la referencia a ESTA clase Private Shared m_Instance As Singleton = Nothing constructor privado Private Sub New() o hacer nada End Sub meacutetodo estaacutetico permite obtener la referencia de la clase siempre se devuelve la misma referencia Public Shared ReadOnly Property Instance() As Singleton Get If m_Instance Is Nothing Then m_Instance = New Singleton() End If Return m_Instance End Get End Property

EndClass ------------------------------------------- El patroacuten Singleton Asegura que solo se cree una instancia de la clase y provee un punto global de acceso a esta En el siguiente ejemplo crearemos una clase que inicialice y retorne un objeto conexioacuten si no existe y si ya existen que nos retorne la instancia existente El ejemplo estaacute escrito por Enriquillo Mantildeoacuten y lo encontre el dia 22122004 en la paacutegina siguiente httpwwwmicrosoftcomspanishmsdncomunidadmtjnetvoicesart151asp Listado 08 - Patroacuten de creacioacuten Singleton ------------------------------------------- Implementacioacuten del Patroacuten Singleton PublicClassConexion Objeto que contendraacute la instancia compartida Private Shared m_objConexion As Conexion Privatem_FechaCreacion As String El Mutex es una clase que proporciona NET FrameWork Con ella evitaremos que en un ambiente multithread se cree alguacuten tipo de conflicto Private Shared m_Mutex As New SystemThreadingMutex Private Sub New() m_FechaCreacion = DateTimeNowToString End Sub Este meacutetodo eliminaraacute la instancia ya existente Public Shared Sub KillInstance() m_objConexion = Nothing End Sub Este seraacute el meacutetodo que proporcionara el acceso A la instancia existente si no existe creara unanueva (meacutetodo Singleton) Public Shared Function GetInstance() As Conexion m_MutexWaitOne() If m_objConexion Is Nothing Then m_objConexion = New Conexion End If m_MutexReleaseMutex() Return m_objConexion EndFunction Propiedad que presenta la fecha y hora en que Fue creada la instancia PublicReadOnlyPropertyFechaCreada() As String Get Return m_FechaCreacion End Get End Property End Class ------------------------------------------- La implementacioacuten para probar nuestra clase es bastante sencilla para instanciarla

Listado 09 - Patroacuten de creacioacuten instanciarla ------------------------------------------- Try Dim objConexion As SingletonConexion objConexion = SingletonConexionGetInstance TextBox1Text amp= Instancia Creada el + objConexionFechaCreadaampvbCrLf Catch ex As Exception MessageBoxShow(exMessage) End Try ------------------------------------------- Y para inicializarla Listado 10 - Patroacuten de creacioacuten inicializarla ------------------------------------------- Try SingletonConexionKillInstance() TextBox1Text amp= InstanciaEliminada---- ampvbCrLf Catch ex As Exception MessageBoxShow(exMessage) End Try -------------------------------------------

Arriba

Para Saber Mas [1] A Pattern Language Towns Buildings Construction Christopher Alexander 1977 [2] Using Patterns Languages for Object-Oriented Programs Ward Cunningham Kent Beck 1987 [3] Desing Patterns Elements of Reusable Object Oriented Software Gamma Helm Vlissides y Jonson 1994 [4] Patterns Of Enterprise Application Architecture Martiacuten Fowler [5] Java Blueprints httpjavasuncomblueprintspatternscataloghtm [6] NET Enterprise Patterns httpmsdnmicrosoftcomarchitecturepatterns [7] Patterns in Java A Catalog of Reusable Design Patterns Illustrated with UML Mark Grand [8] Te Server Side En esta web encontraremos una seccion dedicada a patrones de disentildeo wwwtheserversidecom

Arriba

Referencia bibliograacutefica Este documento esta COPIADO en su totalidad de un articulo escrito por Aacutelvaro Zabala Ordoacutentildeez y fue publicado en la revista Soacutelo Programadores num 113 con el tiacutetulo Patrones de Disentildeo Un curso practico [I] El articulo original muestra ejemplos en varios lenguajes En esta COPIA los he sustituido por ejemplos escritos exclusivamente en Visual Basic NET y ademaacutes he modificado la redaccioacuten de los paacuterrafos que haciacutean referencia a los ejemplos en otros lenguajes al objeto de darle una coherencia al texto final

Usted aprenderaacute a Aplicar meacutetodos probados para crear adaptables confiables y

eficientes NET y aplicaciones de cliente inteligente Resolver problemas de programacioacuten complejos con los patrones de

disentildeo estaacutendar de la industria Entregar el coacutedigo libre de errores con el desarrollo basado en pruebas

en Visual Studio Cree capas arquitecturas de reutilizacioacuten y evitar la superposicioacuten

funcional Aplicar las mejores praacutecticas para el disentildeo de la clase mejor Simplificar y automatizar las tareas repetitivas

Beneficios del curso El conocimiento de la NET y las bibliotecas no es suficiente para desarrollar aplicaciones robustas patrones de disentildeo probado y las mejores praacutecticas extraiacutedas de la sabiduriacutea de los expertos que ayuda en la creacioacuten de aplicaciones sobre una base soacutelida Este curso proporciona los conocimientos necesarios para resolver los problemas del mundo real de desarrollo de software y ofrecer aplicaciones raacutepida y fiable iquestQuieacuten debe asistir arquitectos programadores y cualquier sistema de desarrollo NET experiencia de programacioacuten a nivel de curso 419 programacioacuten de C o Curso 503 Visual Basic de programacioacuten para NET se supone Manos a la formacioacuten Ganas experiencia en la implementacioacuten NET mejores praacutecticas y patrones de disentildeo Ejercicios completado en VB o C incluyen

La conciliacioacuten de diversos problemas de procesamiento con el patroacuten Estrategia

La simplificacioacuten de un sistema complejo con el patroacuten Fachada La explotacioacuten de Microsoft Entity Framework para acceso a datos y

actualizaciones Creacioacuten de un modelo de objetos de dominio de Negocios Construccioacuten de casos de prueba automatizado Estructuracioacuten de un interfaz de usuario comprobable con el patroacuten

Modelo Vista Controlador La captura y reutilizacioacuten de las pruebas dentro de Visual Studio

Contenido del curso 511

Introduccioacuten Codificacioacuten de las mejores praacutecticas Simplificacioacuten de software con patrones de disentildeo

Simplificacioacuten de programacioacuten complejos con probada patrones de disentildeo La aplicacioacuten de interfaces simples a complejos algoritmos

La unificacioacuten de interfaces de subsistemas para facilitar su uso y reutilizacioacuten

Aplicacioacuten del modelo de fachada Variando la funcionalidad mediante la programacioacuten de interfaces

Fechas del curso

Asistir a eventos destacoacute en persona o en liacutenea con LearningTreeAnyWareTM

Feb 8 hasta 11 Reston VA inscribirse

5to al 8vo 04 Toronto inscribirse

19 a 22 ab Boston (Waltham) inscribirse

04 26ta al 29o Nueva York inscribirse

10 al 13 mayo Los Angelesinscribirse

10 al 13 mayo Ottawa inscribirse

17 al 20 mayo Rockville MD inscribirse

Mayo 24-27 Chicago (Schaumburg) inscribirse

31 mayo a 3 junio Reston VA inscribirse

07 al 10 junio Nueva York inscribirse

Para inscripciones AnyWare por favor regiacutestrese al menos 10 diacuteas antes del inicio del curso Maacutes fechas y lugares En las instalaciones y Formacioacuten personalizada Llevar este o cualquier otro aacuterbol curso de aprendizaje a su ubicacioacuten o la han personalizado para su organizacioacuten Matriacutecula

$ 2890 Norma de matriacutecula

Matriacutecula con un Plan de Ahorro

$ 1700 Premium-Pass

1733 doacutelares Pasaporte de formacioacuten

$ 2250 Vale 10-Pack

$ 2573 Gobierno de descuento

$ 2600 Antiguos Alumnos de descuento de Oro

Alumni Gold Discount

Mejorar la adaptabilidad y la flexibilidad de su aplicacioacuten Explotar el patroacuten Estrategia

Ampliacioacuten de la conducta objeto de forma dinaacutemica El aumento de la funcionalidad sin afectar al coacutedigo existente Composicioacuten de objetos con el patroacuten Decorador

El logro de reutilizacioacuten y flexibilidad La eliminacioacuten de la duplicacioacuten de coacutedigo al esbozar las bases de un

algoritmo Empleando el modelo de plantilla Meacutetodo

Interfaz clases incompatibles La transformacioacuten de una interfaz para agregar valor a coacutedigo

existente Aprovechar el modelo del adaptador

La aplicacioacuten de teacutecnicas de desarrollo basado en pruebas Automatizar las pruebas unitarias

Acortar los ciclos de desarrollo de pruebas automatizadas Mejora de la calidad con una cobertura consistente de pruebas La eliminacioacuten de los errores de regresioacuten con las pruebas

reutilizables La integracioacuten de las pruebas y la codificacioacuten

La aplicacioacuten de la prueba praacutectica de programacioacuten de sesiones para conducir el disentildeo del coacutedigo

Generar retroalimentacioacuten inmediata luz verde para el aumento de la calidad del coacutedigo y los cortos ciclos de desarrollo de funciones

Organizar coordinar y ejecutar los casos de prueba con Visual Studio Arquitectura de una aplicacioacuten de capas Disentildeo de la arquitectura de aplicaciones

Capas arquitecturas de reutilizacioacuten durabilidad y capacidad de ampliacioacuten

Acceso a datos de la capa de negocio La disociacioacuten de creacioacuten de objetos con el patroacuten de la faacutebrica Preservar la identidad del objeto con el patroacuten de identidad Mapa

Programacioacuten niveles de la aplicacioacuten Estructuracioacuten de un cliente Web o de aplicaciones ricas con el

patroacuten Observer Organizador rico estado-aplicaciones con el modelo de Estado Reestructuracioacuten de las tablas de la base de datos sin afectar el

coacutedigo de la aplicacioacuten Modelado de un aacuterea de negocio

Libertador ricos Business Object modelos de las estructuras de base de datos utilizando el patroacuten de modelo de dominio

Cartografiacutea ricos Business Objects a las tablas de base de datos con el patroacuten Data Mapper

El colapso de las jerarquiacuteas de objetos de negocio con el patroacuten de herencia Mapper

La explotacioacuten de la programacioacuten declarativa en Microsoft Entity Framework para implementar clases de datos de cartografiacutea

Attend your first course and you will receive a personalized Alumni Gold Discount card entitling you to save as much as $320 on each course you take within the following 12 months

Alumni Gold Discount Attend your first course and you will receive a personalized Alumni Gold Discount card entitling you to save as much as $320 on each course you take within the following 12 months

Federal State and Local Government Federal State and Local Government employees can take advantage of government discount pricing for Learning Tree Courses

Federal State and Local Government Federal State and Local Government employees can take advantage of government discount pricing for Learning Tree Courses

Training Vouchers With Vouchers any members of your team can attend any Learning Tree Course anytime Available in 5- and 10-Course Packs or larger each Voucher is valid for 12 months and is used in lieu of the tuition for any Learning Tree Public Course

Training Vouchers With Vouchers any members of your team can attend any Learning Tree Course anytime Available in 5- and 10-Course Packs or larger each Voucher is valid for 12 months and is

La aplicacioacuten de Buenas Praacutecticas La organizacioacuten y la aplicacioacuten de la loacutegica de negocio

La aplicacioacuten de los patrones de dominio de la loacutegica en el nivel medio

Ampliacioacuten de tipos de entidad con clases parciales La manipulacioacuten de los grupos de entidades con las clases de loacutegica

de negocio Las mejores praacutecticas en el disentildeo de clase

Proteccioacuten contra la rigidez con el Abierto de Principio Cerrado La extraccioacuten de las nuevas clases con el Principio de Responsabilidad

Individual El uso eficaz de la herencia

Automatizar tareas repetitivas Facilitar los datos de coacutedigo de acceso

La reduccioacuten de la base de datos de coacutedigo de acceso mediante la explotacioacuten de la entidad de navegacioacuten Propiedades

La eliminacioacuten de coacutedigo de actualizacioacuten de base de datos con el cambio de entidad de seguimiento Mejorar el coacutedigo de aplicacioacuten

Automatizacioacuten de revisiones de disentildeo con FxCop y Visual Studio Anaacutelisis

La eliminacioacuten de la duplicacioacuten de coacutedigo a traveacutes de la refactorizacioacuten para los patrones de disentildeo

ltltVolver a Visual Studio y NET Listado de cursos Cursos relacionados

Construyendo Aplicaciones Web con ASPNET y Ajax - Curso 506 ASPNET WebForms Integral Introduccioacuten - Curso 512 Construyendo Aplicaciones Web con ASPNET MVC - Curso 977 NET 4 Programacioacuten - Curso 2620 WPF y Silverlight Introduccioacuten - Curso 975 Servicios Web NET Introduccioacuten - Curso 2601 De programacioacuten C extendido Caracteriacutesticas - Curso 973 Programacioacuten de aplicaciones con SharePoint 2010 - NET Curso 2615 Windows Azure - Curso 2602

used in lieu of the tuition for any Learning Tree Public Course

Training Passport As a Training Passport holder one person can take as many as three hands-on courses in 12 months for as little as $1733 per course Only $5200 - save as much as 45

Training Passport As a Training Passport holder one person can take as many as three hands-on courses in 12 months for as little as $1733 per course Only $5200 - save as much as 45

Premium Pass The NEW Premium Pass gives you more time to take more courses while saving more money Take 4 courses within 24 months for as little as $1700 per course mdash at a price of only $6790 you can SAVE as much as 45 per course

Premium Pass The NEW Premium Pass gives you more time to take more courses while saving more money Take 4 courses within 24 months for as little as $1700 per course mdash at a price of only $6790 you can SAVE as much as 45 per course

Page 6: Patrones de diseño

oIEducado = Nothing oEnEspantildeol = Nothing End Sub ------------------------------------------- Otros lenguajes maacutes antiguos como C++ o Visual Basic carecen de interfaces En su lugar ofrecen otra construccioacuten las clases abstractas tambieacuten presentes en Java y C En C++ una clase es abstracta cuando tiene uno de sus meacutetodos virtual El modificador virtual es similar al modificador abstract de Java y otros lenguajes En C++ definiriacuteamos el contrato de nuestra interfaz con una clase abstracta (que puede ser pura si todos sus meacutetodos son abstractos) y cada una de las implementaciones de la interfaz seriacutean clases que heredariacutean de eacutesta Incluso las uacuteltimas versiones de Visual Basic (5 y 6) antes de su sustitucioacuten por Visual Basic NET permitiacutean la definicioacuten de clases abstractas Para tal fin habiacutea que crear un moacutedulo de clase con el asistente visual del lenguaje y dar el valor PublicNoCreatable a la propiedad Instancing del moacutedulo Esto haciacutea que no se pudiese utilizar ni el operador new ni la funcioacuten CreateObject para obtener instancias de la clase Un moacutedulo podiacutea implementar esta interfaz mediante el uso de la palabra reservada implements

Arriba

El patroacuten Delegacioacuten La delegacioacuten consiste en un medio de extender y reutilizar la funcionalidad de una clase mediante la creacioacuten de otra clase que se la proporcione Todos los lenguajes orientados a objetos proporcionan mecanismos para implementar este patroacuten pues basta con antildeadir una nueva referencia a la clase que consume el servicio

Diagrama de clases UML del patroacuten Delegacioacuten

La importancia del patroacuten Delegacioacuten radica en que nos proporciona un mecanismo para decidir cuaacutendo debemos hacer que una clase herede de otra o cuando antildeadirle una referencia para utilizar sus servicios En nuestro ejemplo de la clase educada parece claro que hay que utilizar delegacioacuten Muchas veces la decisioacuten nos la da el sentido comuacuten (la regla de es un) mientras que otras veces habraacute que hacer un anaacutelisis del nuacutemero de herencias posibles En nuestro ejemplo antildeadiendo una referencia a la interfaz IEducado soacutelo crearemos una clase que consuma sus servicios mientras que si optamos por el mecanismo de la herencia tendriacuteamos que crear dos subclases una de EducadoIngles y otra de EducadoEspantildeol Ademaacutes conforme fuese creciendo el nuacutemero de implementaciones de IEducado habriacutea que ir aumentando el nuacutemero de herencias El listado siguiente se muestra la codificacioacuten en VBNET de este patroacuten Listado 06 - Patroacuten delegacioacuten (extracto del listado 4) ------------------------------------------- PublicClassHaceUsoInterfazEducado DimiMuyEduado As IEducado El coacutedigo completo de la clase esta en el listado 04 EndClass -------------------------------------------

Arriba

Patrones de creacioacuten Singleton

Una vez introducidos dos de los patrones de disentildeo fundamentales Interfaz y Delegacioacuten veremos un patroacuten del tipo creacional muy frecuente en la praacutectica el patroacuten de disentildeo Singleton Este patroacuten se utiliza cuando queremos garantizar que de una determinada clase soacutelo existe una instancia De esta forma todos los objetos que hagan uso de esa clase utilizaraacuten la misma instancia iquestCuaacutendo suele ser necesario aplicar un Singleton Cuando nos encontramos con clases que deben encargarse de gestionar un recurso bien sea externo (las conexiones a una base de datos por ejemplo) bien sea interno (informacioacuten de configuracioacuten global a nivel de sistema informacioacuten uacutenica para el contexto de la aplicacioacuten etc)

Gestor de conexiones con el patroacuten Singleton

iquestCoacutemo se implementa un Singleton En primer lugar se debe impedir que los clientes construyan instancias de la clase que se desea hacer Singleton Para ello lo normal es hacer su constructor privado Ademaacutes se debe hacer que dicha clase contenga una referencia estaacutetica a la uacutenica instancia de esa propia clase que puede existir En el mundo de la orientacioacuten a objetos se denomina estaacuteticas a aquellas propiedades y meacutetodos que son comunes de una clase y por tanto compartidas por todas sus instancias Por uacuteltimo se debe antildeadir al Singleton un meacutetodo puacuteblico y estaacutetico que devuelva la uacutenica referencia existente de esa clase En el listado siguiente vemos coacutemo implementar un Singleton en Visual BasicNET Listado 07 - Patroacuten de creacioacuten Singleton ------------------------------------------- PublicClassSingleton Variable que contiene la referencia a ESTA clase Private Shared m_Instance As Singleton = Nothing constructor privado Private Sub New() o hacer nada End Sub meacutetodo estaacutetico permite obtener la referencia de la clase siempre se devuelve la misma referencia Public Shared ReadOnly Property Instance() As Singleton Get If m_Instance Is Nothing Then m_Instance = New Singleton() End If Return m_Instance End Get End Property

EndClass ------------------------------------------- El patroacuten Singleton Asegura que solo se cree una instancia de la clase y provee un punto global de acceso a esta En el siguiente ejemplo crearemos una clase que inicialice y retorne un objeto conexioacuten si no existe y si ya existen que nos retorne la instancia existente El ejemplo estaacute escrito por Enriquillo Mantildeoacuten y lo encontre el dia 22122004 en la paacutegina siguiente httpwwwmicrosoftcomspanishmsdncomunidadmtjnetvoicesart151asp Listado 08 - Patroacuten de creacioacuten Singleton ------------------------------------------- Implementacioacuten del Patroacuten Singleton PublicClassConexion Objeto que contendraacute la instancia compartida Private Shared m_objConexion As Conexion Privatem_FechaCreacion As String El Mutex es una clase que proporciona NET FrameWork Con ella evitaremos que en un ambiente multithread se cree alguacuten tipo de conflicto Private Shared m_Mutex As New SystemThreadingMutex Private Sub New() m_FechaCreacion = DateTimeNowToString End Sub Este meacutetodo eliminaraacute la instancia ya existente Public Shared Sub KillInstance() m_objConexion = Nothing End Sub Este seraacute el meacutetodo que proporcionara el acceso A la instancia existente si no existe creara unanueva (meacutetodo Singleton) Public Shared Function GetInstance() As Conexion m_MutexWaitOne() If m_objConexion Is Nothing Then m_objConexion = New Conexion End If m_MutexReleaseMutex() Return m_objConexion EndFunction Propiedad que presenta la fecha y hora en que Fue creada la instancia PublicReadOnlyPropertyFechaCreada() As String Get Return m_FechaCreacion End Get End Property End Class ------------------------------------------- La implementacioacuten para probar nuestra clase es bastante sencilla para instanciarla

Listado 09 - Patroacuten de creacioacuten instanciarla ------------------------------------------- Try Dim objConexion As SingletonConexion objConexion = SingletonConexionGetInstance TextBox1Text amp= Instancia Creada el + objConexionFechaCreadaampvbCrLf Catch ex As Exception MessageBoxShow(exMessage) End Try ------------------------------------------- Y para inicializarla Listado 10 - Patroacuten de creacioacuten inicializarla ------------------------------------------- Try SingletonConexionKillInstance() TextBox1Text amp= InstanciaEliminada---- ampvbCrLf Catch ex As Exception MessageBoxShow(exMessage) End Try -------------------------------------------

Arriba

Para Saber Mas [1] A Pattern Language Towns Buildings Construction Christopher Alexander 1977 [2] Using Patterns Languages for Object-Oriented Programs Ward Cunningham Kent Beck 1987 [3] Desing Patterns Elements of Reusable Object Oriented Software Gamma Helm Vlissides y Jonson 1994 [4] Patterns Of Enterprise Application Architecture Martiacuten Fowler [5] Java Blueprints httpjavasuncomblueprintspatternscataloghtm [6] NET Enterprise Patterns httpmsdnmicrosoftcomarchitecturepatterns [7] Patterns in Java A Catalog of Reusable Design Patterns Illustrated with UML Mark Grand [8] Te Server Side En esta web encontraremos una seccion dedicada a patrones de disentildeo wwwtheserversidecom

Arriba

Referencia bibliograacutefica Este documento esta COPIADO en su totalidad de un articulo escrito por Aacutelvaro Zabala Ordoacutentildeez y fue publicado en la revista Soacutelo Programadores num 113 con el tiacutetulo Patrones de Disentildeo Un curso practico [I] El articulo original muestra ejemplos en varios lenguajes En esta COPIA los he sustituido por ejemplos escritos exclusivamente en Visual Basic NET y ademaacutes he modificado la redaccioacuten de los paacuterrafos que haciacutean referencia a los ejemplos en otros lenguajes al objeto de darle una coherencia al texto final

Usted aprenderaacute a Aplicar meacutetodos probados para crear adaptables confiables y

eficientes NET y aplicaciones de cliente inteligente Resolver problemas de programacioacuten complejos con los patrones de

disentildeo estaacutendar de la industria Entregar el coacutedigo libre de errores con el desarrollo basado en pruebas

en Visual Studio Cree capas arquitecturas de reutilizacioacuten y evitar la superposicioacuten

funcional Aplicar las mejores praacutecticas para el disentildeo de la clase mejor Simplificar y automatizar las tareas repetitivas

Beneficios del curso El conocimiento de la NET y las bibliotecas no es suficiente para desarrollar aplicaciones robustas patrones de disentildeo probado y las mejores praacutecticas extraiacutedas de la sabiduriacutea de los expertos que ayuda en la creacioacuten de aplicaciones sobre una base soacutelida Este curso proporciona los conocimientos necesarios para resolver los problemas del mundo real de desarrollo de software y ofrecer aplicaciones raacutepida y fiable iquestQuieacuten debe asistir arquitectos programadores y cualquier sistema de desarrollo NET experiencia de programacioacuten a nivel de curso 419 programacioacuten de C o Curso 503 Visual Basic de programacioacuten para NET se supone Manos a la formacioacuten Ganas experiencia en la implementacioacuten NET mejores praacutecticas y patrones de disentildeo Ejercicios completado en VB o C incluyen

La conciliacioacuten de diversos problemas de procesamiento con el patroacuten Estrategia

La simplificacioacuten de un sistema complejo con el patroacuten Fachada La explotacioacuten de Microsoft Entity Framework para acceso a datos y

actualizaciones Creacioacuten de un modelo de objetos de dominio de Negocios Construccioacuten de casos de prueba automatizado Estructuracioacuten de un interfaz de usuario comprobable con el patroacuten

Modelo Vista Controlador La captura y reutilizacioacuten de las pruebas dentro de Visual Studio

Contenido del curso 511

Introduccioacuten Codificacioacuten de las mejores praacutecticas Simplificacioacuten de software con patrones de disentildeo

Simplificacioacuten de programacioacuten complejos con probada patrones de disentildeo La aplicacioacuten de interfaces simples a complejos algoritmos

La unificacioacuten de interfaces de subsistemas para facilitar su uso y reutilizacioacuten

Aplicacioacuten del modelo de fachada Variando la funcionalidad mediante la programacioacuten de interfaces

Fechas del curso

Asistir a eventos destacoacute en persona o en liacutenea con LearningTreeAnyWareTM

Feb 8 hasta 11 Reston VA inscribirse

5to al 8vo 04 Toronto inscribirse

19 a 22 ab Boston (Waltham) inscribirse

04 26ta al 29o Nueva York inscribirse

10 al 13 mayo Los Angelesinscribirse

10 al 13 mayo Ottawa inscribirse

17 al 20 mayo Rockville MD inscribirse

Mayo 24-27 Chicago (Schaumburg) inscribirse

31 mayo a 3 junio Reston VA inscribirse

07 al 10 junio Nueva York inscribirse

Para inscripciones AnyWare por favor regiacutestrese al menos 10 diacuteas antes del inicio del curso Maacutes fechas y lugares En las instalaciones y Formacioacuten personalizada Llevar este o cualquier otro aacuterbol curso de aprendizaje a su ubicacioacuten o la han personalizado para su organizacioacuten Matriacutecula

$ 2890 Norma de matriacutecula

Matriacutecula con un Plan de Ahorro

$ 1700 Premium-Pass

1733 doacutelares Pasaporte de formacioacuten

$ 2250 Vale 10-Pack

$ 2573 Gobierno de descuento

$ 2600 Antiguos Alumnos de descuento de Oro

Alumni Gold Discount

Mejorar la adaptabilidad y la flexibilidad de su aplicacioacuten Explotar el patroacuten Estrategia

Ampliacioacuten de la conducta objeto de forma dinaacutemica El aumento de la funcionalidad sin afectar al coacutedigo existente Composicioacuten de objetos con el patroacuten Decorador

El logro de reutilizacioacuten y flexibilidad La eliminacioacuten de la duplicacioacuten de coacutedigo al esbozar las bases de un

algoritmo Empleando el modelo de plantilla Meacutetodo

Interfaz clases incompatibles La transformacioacuten de una interfaz para agregar valor a coacutedigo

existente Aprovechar el modelo del adaptador

La aplicacioacuten de teacutecnicas de desarrollo basado en pruebas Automatizar las pruebas unitarias

Acortar los ciclos de desarrollo de pruebas automatizadas Mejora de la calidad con una cobertura consistente de pruebas La eliminacioacuten de los errores de regresioacuten con las pruebas

reutilizables La integracioacuten de las pruebas y la codificacioacuten

La aplicacioacuten de la prueba praacutectica de programacioacuten de sesiones para conducir el disentildeo del coacutedigo

Generar retroalimentacioacuten inmediata luz verde para el aumento de la calidad del coacutedigo y los cortos ciclos de desarrollo de funciones

Organizar coordinar y ejecutar los casos de prueba con Visual Studio Arquitectura de una aplicacioacuten de capas Disentildeo de la arquitectura de aplicaciones

Capas arquitecturas de reutilizacioacuten durabilidad y capacidad de ampliacioacuten

Acceso a datos de la capa de negocio La disociacioacuten de creacioacuten de objetos con el patroacuten de la faacutebrica Preservar la identidad del objeto con el patroacuten de identidad Mapa

Programacioacuten niveles de la aplicacioacuten Estructuracioacuten de un cliente Web o de aplicaciones ricas con el

patroacuten Observer Organizador rico estado-aplicaciones con el modelo de Estado Reestructuracioacuten de las tablas de la base de datos sin afectar el

coacutedigo de la aplicacioacuten Modelado de un aacuterea de negocio

Libertador ricos Business Object modelos de las estructuras de base de datos utilizando el patroacuten de modelo de dominio

Cartografiacutea ricos Business Objects a las tablas de base de datos con el patroacuten Data Mapper

El colapso de las jerarquiacuteas de objetos de negocio con el patroacuten de herencia Mapper

La explotacioacuten de la programacioacuten declarativa en Microsoft Entity Framework para implementar clases de datos de cartografiacutea

Attend your first course and you will receive a personalized Alumni Gold Discount card entitling you to save as much as $320 on each course you take within the following 12 months

Alumni Gold Discount Attend your first course and you will receive a personalized Alumni Gold Discount card entitling you to save as much as $320 on each course you take within the following 12 months

Federal State and Local Government Federal State and Local Government employees can take advantage of government discount pricing for Learning Tree Courses

Federal State and Local Government Federal State and Local Government employees can take advantage of government discount pricing for Learning Tree Courses

Training Vouchers With Vouchers any members of your team can attend any Learning Tree Course anytime Available in 5- and 10-Course Packs or larger each Voucher is valid for 12 months and is used in lieu of the tuition for any Learning Tree Public Course

Training Vouchers With Vouchers any members of your team can attend any Learning Tree Course anytime Available in 5- and 10-Course Packs or larger each Voucher is valid for 12 months and is

La aplicacioacuten de Buenas Praacutecticas La organizacioacuten y la aplicacioacuten de la loacutegica de negocio

La aplicacioacuten de los patrones de dominio de la loacutegica en el nivel medio

Ampliacioacuten de tipos de entidad con clases parciales La manipulacioacuten de los grupos de entidades con las clases de loacutegica

de negocio Las mejores praacutecticas en el disentildeo de clase

Proteccioacuten contra la rigidez con el Abierto de Principio Cerrado La extraccioacuten de las nuevas clases con el Principio de Responsabilidad

Individual El uso eficaz de la herencia

Automatizar tareas repetitivas Facilitar los datos de coacutedigo de acceso

La reduccioacuten de la base de datos de coacutedigo de acceso mediante la explotacioacuten de la entidad de navegacioacuten Propiedades

La eliminacioacuten de coacutedigo de actualizacioacuten de base de datos con el cambio de entidad de seguimiento Mejorar el coacutedigo de aplicacioacuten

Automatizacioacuten de revisiones de disentildeo con FxCop y Visual Studio Anaacutelisis

La eliminacioacuten de la duplicacioacuten de coacutedigo a traveacutes de la refactorizacioacuten para los patrones de disentildeo

ltltVolver a Visual Studio y NET Listado de cursos Cursos relacionados

Construyendo Aplicaciones Web con ASPNET y Ajax - Curso 506 ASPNET WebForms Integral Introduccioacuten - Curso 512 Construyendo Aplicaciones Web con ASPNET MVC - Curso 977 NET 4 Programacioacuten - Curso 2620 WPF y Silverlight Introduccioacuten - Curso 975 Servicios Web NET Introduccioacuten - Curso 2601 De programacioacuten C extendido Caracteriacutesticas - Curso 973 Programacioacuten de aplicaciones con SharePoint 2010 - NET Curso 2615 Windows Azure - Curso 2602

used in lieu of the tuition for any Learning Tree Public Course

Training Passport As a Training Passport holder one person can take as many as three hands-on courses in 12 months for as little as $1733 per course Only $5200 - save as much as 45

Training Passport As a Training Passport holder one person can take as many as three hands-on courses in 12 months for as little as $1733 per course Only $5200 - save as much as 45

Premium Pass The NEW Premium Pass gives you more time to take more courses while saving more money Take 4 courses within 24 months for as little as $1700 per course mdash at a price of only $6790 you can SAVE as much as 45 per course

Premium Pass The NEW Premium Pass gives you more time to take more courses while saving more money Take 4 courses within 24 months for as little as $1700 per course mdash at a price of only $6790 you can SAVE as much as 45 per course

Page 7: Patrones de diseño

Una vez introducidos dos de los patrones de disentildeo fundamentales Interfaz y Delegacioacuten veremos un patroacuten del tipo creacional muy frecuente en la praacutectica el patroacuten de disentildeo Singleton Este patroacuten se utiliza cuando queremos garantizar que de una determinada clase soacutelo existe una instancia De esta forma todos los objetos que hagan uso de esa clase utilizaraacuten la misma instancia iquestCuaacutendo suele ser necesario aplicar un Singleton Cuando nos encontramos con clases que deben encargarse de gestionar un recurso bien sea externo (las conexiones a una base de datos por ejemplo) bien sea interno (informacioacuten de configuracioacuten global a nivel de sistema informacioacuten uacutenica para el contexto de la aplicacioacuten etc)

Gestor de conexiones con el patroacuten Singleton

iquestCoacutemo se implementa un Singleton En primer lugar se debe impedir que los clientes construyan instancias de la clase que se desea hacer Singleton Para ello lo normal es hacer su constructor privado Ademaacutes se debe hacer que dicha clase contenga una referencia estaacutetica a la uacutenica instancia de esa propia clase que puede existir En el mundo de la orientacioacuten a objetos se denomina estaacuteticas a aquellas propiedades y meacutetodos que son comunes de una clase y por tanto compartidas por todas sus instancias Por uacuteltimo se debe antildeadir al Singleton un meacutetodo puacuteblico y estaacutetico que devuelva la uacutenica referencia existente de esa clase En el listado siguiente vemos coacutemo implementar un Singleton en Visual BasicNET Listado 07 - Patroacuten de creacioacuten Singleton ------------------------------------------- PublicClassSingleton Variable que contiene la referencia a ESTA clase Private Shared m_Instance As Singleton = Nothing constructor privado Private Sub New() o hacer nada End Sub meacutetodo estaacutetico permite obtener la referencia de la clase siempre se devuelve la misma referencia Public Shared ReadOnly Property Instance() As Singleton Get If m_Instance Is Nothing Then m_Instance = New Singleton() End If Return m_Instance End Get End Property

EndClass ------------------------------------------- El patroacuten Singleton Asegura que solo se cree una instancia de la clase y provee un punto global de acceso a esta En el siguiente ejemplo crearemos una clase que inicialice y retorne un objeto conexioacuten si no existe y si ya existen que nos retorne la instancia existente El ejemplo estaacute escrito por Enriquillo Mantildeoacuten y lo encontre el dia 22122004 en la paacutegina siguiente httpwwwmicrosoftcomspanishmsdncomunidadmtjnetvoicesart151asp Listado 08 - Patroacuten de creacioacuten Singleton ------------------------------------------- Implementacioacuten del Patroacuten Singleton PublicClassConexion Objeto que contendraacute la instancia compartida Private Shared m_objConexion As Conexion Privatem_FechaCreacion As String El Mutex es una clase que proporciona NET FrameWork Con ella evitaremos que en un ambiente multithread se cree alguacuten tipo de conflicto Private Shared m_Mutex As New SystemThreadingMutex Private Sub New() m_FechaCreacion = DateTimeNowToString End Sub Este meacutetodo eliminaraacute la instancia ya existente Public Shared Sub KillInstance() m_objConexion = Nothing End Sub Este seraacute el meacutetodo que proporcionara el acceso A la instancia existente si no existe creara unanueva (meacutetodo Singleton) Public Shared Function GetInstance() As Conexion m_MutexWaitOne() If m_objConexion Is Nothing Then m_objConexion = New Conexion End If m_MutexReleaseMutex() Return m_objConexion EndFunction Propiedad que presenta la fecha y hora en que Fue creada la instancia PublicReadOnlyPropertyFechaCreada() As String Get Return m_FechaCreacion End Get End Property End Class ------------------------------------------- La implementacioacuten para probar nuestra clase es bastante sencilla para instanciarla

Listado 09 - Patroacuten de creacioacuten instanciarla ------------------------------------------- Try Dim objConexion As SingletonConexion objConexion = SingletonConexionGetInstance TextBox1Text amp= Instancia Creada el + objConexionFechaCreadaampvbCrLf Catch ex As Exception MessageBoxShow(exMessage) End Try ------------------------------------------- Y para inicializarla Listado 10 - Patroacuten de creacioacuten inicializarla ------------------------------------------- Try SingletonConexionKillInstance() TextBox1Text amp= InstanciaEliminada---- ampvbCrLf Catch ex As Exception MessageBoxShow(exMessage) End Try -------------------------------------------

Arriba

Para Saber Mas [1] A Pattern Language Towns Buildings Construction Christopher Alexander 1977 [2] Using Patterns Languages for Object-Oriented Programs Ward Cunningham Kent Beck 1987 [3] Desing Patterns Elements of Reusable Object Oriented Software Gamma Helm Vlissides y Jonson 1994 [4] Patterns Of Enterprise Application Architecture Martiacuten Fowler [5] Java Blueprints httpjavasuncomblueprintspatternscataloghtm [6] NET Enterprise Patterns httpmsdnmicrosoftcomarchitecturepatterns [7] Patterns in Java A Catalog of Reusable Design Patterns Illustrated with UML Mark Grand [8] Te Server Side En esta web encontraremos una seccion dedicada a patrones de disentildeo wwwtheserversidecom

Arriba

Referencia bibliograacutefica Este documento esta COPIADO en su totalidad de un articulo escrito por Aacutelvaro Zabala Ordoacutentildeez y fue publicado en la revista Soacutelo Programadores num 113 con el tiacutetulo Patrones de Disentildeo Un curso practico [I] El articulo original muestra ejemplos en varios lenguajes En esta COPIA los he sustituido por ejemplos escritos exclusivamente en Visual Basic NET y ademaacutes he modificado la redaccioacuten de los paacuterrafos que haciacutean referencia a los ejemplos en otros lenguajes al objeto de darle una coherencia al texto final

Usted aprenderaacute a Aplicar meacutetodos probados para crear adaptables confiables y

eficientes NET y aplicaciones de cliente inteligente Resolver problemas de programacioacuten complejos con los patrones de

disentildeo estaacutendar de la industria Entregar el coacutedigo libre de errores con el desarrollo basado en pruebas

en Visual Studio Cree capas arquitecturas de reutilizacioacuten y evitar la superposicioacuten

funcional Aplicar las mejores praacutecticas para el disentildeo de la clase mejor Simplificar y automatizar las tareas repetitivas

Beneficios del curso El conocimiento de la NET y las bibliotecas no es suficiente para desarrollar aplicaciones robustas patrones de disentildeo probado y las mejores praacutecticas extraiacutedas de la sabiduriacutea de los expertos que ayuda en la creacioacuten de aplicaciones sobre una base soacutelida Este curso proporciona los conocimientos necesarios para resolver los problemas del mundo real de desarrollo de software y ofrecer aplicaciones raacutepida y fiable iquestQuieacuten debe asistir arquitectos programadores y cualquier sistema de desarrollo NET experiencia de programacioacuten a nivel de curso 419 programacioacuten de C o Curso 503 Visual Basic de programacioacuten para NET se supone Manos a la formacioacuten Ganas experiencia en la implementacioacuten NET mejores praacutecticas y patrones de disentildeo Ejercicios completado en VB o C incluyen

La conciliacioacuten de diversos problemas de procesamiento con el patroacuten Estrategia

La simplificacioacuten de un sistema complejo con el patroacuten Fachada La explotacioacuten de Microsoft Entity Framework para acceso a datos y

actualizaciones Creacioacuten de un modelo de objetos de dominio de Negocios Construccioacuten de casos de prueba automatizado Estructuracioacuten de un interfaz de usuario comprobable con el patroacuten

Modelo Vista Controlador La captura y reutilizacioacuten de las pruebas dentro de Visual Studio

Contenido del curso 511

Introduccioacuten Codificacioacuten de las mejores praacutecticas Simplificacioacuten de software con patrones de disentildeo

Simplificacioacuten de programacioacuten complejos con probada patrones de disentildeo La aplicacioacuten de interfaces simples a complejos algoritmos

La unificacioacuten de interfaces de subsistemas para facilitar su uso y reutilizacioacuten

Aplicacioacuten del modelo de fachada Variando la funcionalidad mediante la programacioacuten de interfaces

Fechas del curso

Asistir a eventos destacoacute en persona o en liacutenea con LearningTreeAnyWareTM

Feb 8 hasta 11 Reston VA inscribirse

5to al 8vo 04 Toronto inscribirse

19 a 22 ab Boston (Waltham) inscribirse

04 26ta al 29o Nueva York inscribirse

10 al 13 mayo Los Angelesinscribirse

10 al 13 mayo Ottawa inscribirse

17 al 20 mayo Rockville MD inscribirse

Mayo 24-27 Chicago (Schaumburg) inscribirse

31 mayo a 3 junio Reston VA inscribirse

07 al 10 junio Nueva York inscribirse

Para inscripciones AnyWare por favor regiacutestrese al menos 10 diacuteas antes del inicio del curso Maacutes fechas y lugares En las instalaciones y Formacioacuten personalizada Llevar este o cualquier otro aacuterbol curso de aprendizaje a su ubicacioacuten o la han personalizado para su organizacioacuten Matriacutecula

$ 2890 Norma de matriacutecula

Matriacutecula con un Plan de Ahorro

$ 1700 Premium-Pass

1733 doacutelares Pasaporte de formacioacuten

$ 2250 Vale 10-Pack

$ 2573 Gobierno de descuento

$ 2600 Antiguos Alumnos de descuento de Oro

Alumni Gold Discount

Mejorar la adaptabilidad y la flexibilidad de su aplicacioacuten Explotar el patroacuten Estrategia

Ampliacioacuten de la conducta objeto de forma dinaacutemica El aumento de la funcionalidad sin afectar al coacutedigo existente Composicioacuten de objetos con el patroacuten Decorador

El logro de reutilizacioacuten y flexibilidad La eliminacioacuten de la duplicacioacuten de coacutedigo al esbozar las bases de un

algoritmo Empleando el modelo de plantilla Meacutetodo

Interfaz clases incompatibles La transformacioacuten de una interfaz para agregar valor a coacutedigo

existente Aprovechar el modelo del adaptador

La aplicacioacuten de teacutecnicas de desarrollo basado en pruebas Automatizar las pruebas unitarias

Acortar los ciclos de desarrollo de pruebas automatizadas Mejora de la calidad con una cobertura consistente de pruebas La eliminacioacuten de los errores de regresioacuten con las pruebas

reutilizables La integracioacuten de las pruebas y la codificacioacuten

La aplicacioacuten de la prueba praacutectica de programacioacuten de sesiones para conducir el disentildeo del coacutedigo

Generar retroalimentacioacuten inmediata luz verde para el aumento de la calidad del coacutedigo y los cortos ciclos de desarrollo de funciones

Organizar coordinar y ejecutar los casos de prueba con Visual Studio Arquitectura de una aplicacioacuten de capas Disentildeo de la arquitectura de aplicaciones

Capas arquitecturas de reutilizacioacuten durabilidad y capacidad de ampliacioacuten

Acceso a datos de la capa de negocio La disociacioacuten de creacioacuten de objetos con el patroacuten de la faacutebrica Preservar la identidad del objeto con el patroacuten de identidad Mapa

Programacioacuten niveles de la aplicacioacuten Estructuracioacuten de un cliente Web o de aplicaciones ricas con el

patroacuten Observer Organizador rico estado-aplicaciones con el modelo de Estado Reestructuracioacuten de las tablas de la base de datos sin afectar el

coacutedigo de la aplicacioacuten Modelado de un aacuterea de negocio

Libertador ricos Business Object modelos de las estructuras de base de datos utilizando el patroacuten de modelo de dominio

Cartografiacutea ricos Business Objects a las tablas de base de datos con el patroacuten Data Mapper

El colapso de las jerarquiacuteas de objetos de negocio con el patroacuten de herencia Mapper

La explotacioacuten de la programacioacuten declarativa en Microsoft Entity Framework para implementar clases de datos de cartografiacutea

Attend your first course and you will receive a personalized Alumni Gold Discount card entitling you to save as much as $320 on each course you take within the following 12 months

Alumni Gold Discount Attend your first course and you will receive a personalized Alumni Gold Discount card entitling you to save as much as $320 on each course you take within the following 12 months

Federal State and Local Government Federal State and Local Government employees can take advantage of government discount pricing for Learning Tree Courses

Federal State and Local Government Federal State and Local Government employees can take advantage of government discount pricing for Learning Tree Courses

Training Vouchers With Vouchers any members of your team can attend any Learning Tree Course anytime Available in 5- and 10-Course Packs or larger each Voucher is valid for 12 months and is used in lieu of the tuition for any Learning Tree Public Course

Training Vouchers With Vouchers any members of your team can attend any Learning Tree Course anytime Available in 5- and 10-Course Packs or larger each Voucher is valid for 12 months and is

La aplicacioacuten de Buenas Praacutecticas La organizacioacuten y la aplicacioacuten de la loacutegica de negocio

La aplicacioacuten de los patrones de dominio de la loacutegica en el nivel medio

Ampliacioacuten de tipos de entidad con clases parciales La manipulacioacuten de los grupos de entidades con las clases de loacutegica

de negocio Las mejores praacutecticas en el disentildeo de clase

Proteccioacuten contra la rigidez con el Abierto de Principio Cerrado La extraccioacuten de las nuevas clases con el Principio de Responsabilidad

Individual El uso eficaz de la herencia

Automatizar tareas repetitivas Facilitar los datos de coacutedigo de acceso

La reduccioacuten de la base de datos de coacutedigo de acceso mediante la explotacioacuten de la entidad de navegacioacuten Propiedades

La eliminacioacuten de coacutedigo de actualizacioacuten de base de datos con el cambio de entidad de seguimiento Mejorar el coacutedigo de aplicacioacuten

Automatizacioacuten de revisiones de disentildeo con FxCop y Visual Studio Anaacutelisis

La eliminacioacuten de la duplicacioacuten de coacutedigo a traveacutes de la refactorizacioacuten para los patrones de disentildeo

ltltVolver a Visual Studio y NET Listado de cursos Cursos relacionados

Construyendo Aplicaciones Web con ASPNET y Ajax - Curso 506 ASPNET WebForms Integral Introduccioacuten - Curso 512 Construyendo Aplicaciones Web con ASPNET MVC - Curso 977 NET 4 Programacioacuten - Curso 2620 WPF y Silverlight Introduccioacuten - Curso 975 Servicios Web NET Introduccioacuten - Curso 2601 De programacioacuten C extendido Caracteriacutesticas - Curso 973 Programacioacuten de aplicaciones con SharePoint 2010 - NET Curso 2615 Windows Azure - Curso 2602

used in lieu of the tuition for any Learning Tree Public Course

Training Passport As a Training Passport holder one person can take as many as three hands-on courses in 12 months for as little as $1733 per course Only $5200 - save as much as 45

Training Passport As a Training Passport holder one person can take as many as three hands-on courses in 12 months for as little as $1733 per course Only $5200 - save as much as 45

Premium Pass The NEW Premium Pass gives you more time to take more courses while saving more money Take 4 courses within 24 months for as little as $1700 per course mdash at a price of only $6790 you can SAVE as much as 45 per course

Premium Pass The NEW Premium Pass gives you more time to take more courses while saving more money Take 4 courses within 24 months for as little as $1700 per course mdash at a price of only $6790 you can SAVE as much as 45 per course

Page 8: Patrones de diseño

EndClass ------------------------------------------- El patroacuten Singleton Asegura que solo se cree una instancia de la clase y provee un punto global de acceso a esta En el siguiente ejemplo crearemos una clase que inicialice y retorne un objeto conexioacuten si no existe y si ya existen que nos retorne la instancia existente El ejemplo estaacute escrito por Enriquillo Mantildeoacuten y lo encontre el dia 22122004 en la paacutegina siguiente httpwwwmicrosoftcomspanishmsdncomunidadmtjnetvoicesart151asp Listado 08 - Patroacuten de creacioacuten Singleton ------------------------------------------- Implementacioacuten del Patroacuten Singleton PublicClassConexion Objeto que contendraacute la instancia compartida Private Shared m_objConexion As Conexion Privatem_FechaCreacion As String El Mutex es una clase que proporciona NET FrameWork Con ella evitaremos que en un ambiente multithread se cree alguacuten tipo de conflicto Private Shared m_Mutex As New SystemThreadingMutex Private Sub New() m_FechaCreacion = DateTimeNowToString End Sub Este meacutetodo eliminaraacute la instancia ya existente Public Shared Sub KillInstance() m_objConexion = Nothing End Sub Este seraacute el meacutetodo que proporcionara el acceso A la instancia existente si no existe creara unanueva (meacutetodo Singleton) Public Shared Function GetInstance() As Conexion m_MutexWaitOne() If m_objConexion Is Nothing Then m_objConexion = New Conexion End If m_MutexReleaseMutex() Return m_objConexion EndFunction Propiedad que presenta la fecha y hora en que Fue creada la instancia PublicReadOnlyPropertyFechaCreada() As String Get Return m_FechaCreacion End Get End Property End Class ------------------------------------------- La implementacioacuten para probar nuestra clase es bastante sencilla para instanciarla

Listado 09 - Patroacuten de creacioacuten instanciarla ------------------------------------------- Try Dim objConexion As SingletonConexion objConexion = SingletonConexionGetInstance TextBox1Text amp= Instancia Creada el + objConexionFechaCreadaampvbCrLf Catch ex As Exception MessageBoxShow(exMessage) End Try ------------------------------------------- Y para inicializarla Listado 10 - Patroacuten de creacioacuten inicializarla ------------------------------------------- Try SingletonConexionKillInstance() TextBox1Text amp= InstanciaEliminada---- ampvbCrLf Catch ex As Exception MessageBoxShow(exMessage) End Try -------------------------------------------

Arriba

Para Saber Mas [1] A Pattern Language Towns Buildings Construction Christopher Alexander 1977 [2] Using Patterns Languages for Object-Oriented Programs Ward Cunningham Kent Beck 1987 [3] Desing Patterns Elements of Reusable Object Oriented Software Gamma Helm Vlissides y Jonson 1994 [4] Patterns Of Enterprise Application Architecture Martiacuten Fowler [5] Java Blueprints httpjavasuncomblueprintspatternscataloghtm [6] NET Enterprise Patterns httpmsdnmicrosoftcomarchitecturepatterns [7] Patterns in Java A Catalog of Reusable Design Patterns Illustrated with UML Mark Grand [8] Te Server Side En esta web encontraremos una seccion dedicada a patrones de disentildeo wwwtheserversidecom

Arriba

Referencia bibliograacutefica Este documento esta COPIADO en su totalidad de un articulo escrito por Aacutelvaro Zabala Ordoacutentildeez y fue publicado en la revista Soacutelo Programadores num 113 con el tiacutetulo Patrones de Disentildeo Un curso practico [I] El articulo original muestra ejemplos en varios lenguajes En esta COPIA los he sustituido por ejemplos escritos exclusivamente en Visual Basic NET y ademaacutes he modificado la redaccioacuten de los paacuterrafos que haciacutean referencia a los ejemplos en otros lenguajes al objeto de darle una coherencia al texto final

Usted aprenderaacute a Aplicar meacutetodos probados para crear adaptables confiables y

eficientes NET y aplicaciones de cliente inteligente Resolver problemas de programacioacuten complejos con los patrones de

disentildeo estaacutendar de la industria Entregar el coacutedigo libre de errores con el desarrollo basado en pruebas

en Visual Studio Cree capas arquitecturas de reutilizacioacuten y evitar la superposicioacuten

funcional Aplicar las mejores praacutecticas para el disentildeo de la clase mejor Simplificar y automatizar las tareas repetitivas

Beneficios del curso El conocimiento de la NET y las bibliotecas no es suficiente para desarrollar aplicaciones robustas patrones de disentildeo probado y las mejores praacutecticas extraiacutedas de la sabiduriacutea de los expertos que ayuda en la creacioacuten de aplicaciones sobre una base soacutelida Este curso proporciona los conocimientos necesarios para resolver los problemas del mundo real de desarrollo de software y ofrecer aplicaciones raacutepida y fiable iquestQuieacuten debe asistir arquitectos programadores y cualquier sistema de desarrollo NET experiencia de programacioacuten a nivel de curso 419 programacioacuten de C o Curso 503 Visual Basic de programacioacuten para NET se supone Manos a la formacioacuten Ganas experiencia en la implementacioacuten NET mejores praacutecticas y patrones de disentildeo Ejercicios completado en VB o C incluyen

La conciliacioacuten de diversos problemas de procesamiento con el patroacuten Estrategia

La simplificacioacuten de un sistema complejo con el patroacuten Fachada La explotacioacuten de Microsoft Entity Framework para acceso a datos y

actualizaciones Creacioacuten de un modelo de objetos de dominio de Negocios Construccioacuten de casos de prueba automatizado Estructuracioacuten de un interfaz de usuario comprobable con el patroacuten

Modelo Vista Controlador La captura y reutilizacioacuten de las pruebas dentro de Visual Studio

Contenido del curso 511

Introduccioacuten Codificacioacuten de las mejores praacutecticas Simplificacioacuten de software con patrones de disentildeo

Simplificacioacuten de programacioacuten complejos con probada patrones de disentildeo La aplicacioacuten de interfaces simples a complejos algoritmos

La unificacioacuten de interfaces de subsistemas para facilitar su uso y reutilizacioacuten

Aplicacioacuten del modelo de fachada Variando la funcionalidad mediante la programacioacuten de interfaces

Fechas del curso

Asistir a eventos destacoacute en persona o en liacutenea con LearningTreeAnyWareTM

Feb 8 hasta 11 Reston VA inscribirse

5to al 8vo 04 Toronto inscribirse

19 a 22 ab Boston (Waltham) inscribirse

04 26ta al 29o Nueva York inscribirse

10 al 13 mayo Los Angelesinscribirse

10 al 13 mayo Ottawa inscribirse

17 al 20 mayo Rockville MD inscribirse

Mayo 24-27 Chicago (Schaumburg) inscribirse

31 mayo a 3 junio Reston VA inscribirse

07 al 10 junio Nueva York inscribirse

Para inscripciones AnyWare por favor regiacutestrese al menos 10 diacuteas antes del inicio del curso Maacutes fechas y lugares En las instalaciones y Formacioacuten personalizada Llevar este o cualquier otro aacuterbol curso de aprendizaje a su ubicacioacuten o la han personalizado para su organizacioacuten Matriacutecula

$ 2890 Norma de matriacutecula

Matriacutecula con un Plan de Ahorro

$ 1700 Premium-Pass

1733 doacutelares Pasaporte de formacioacuten

$ 2250 Vale 10-Pack

$ 2573 Gobierno de descuento

$ 2600 Antiguos Alumnos de descuento de Oro

Alumni Gold Discount

Mejorar la adaptabilidad y la flexibilidad de su aplicacioacuten Explotar el patroacuten Estrategia

Ampliacioacuten de la conducta objeto de forma dinaacutemica El aumento de la funcionalidad sin afectar al coacutedigo existente Composicioacuten de objetos con el patroacuten Decorador

El logro de reutilizacioacuten y flexibilidad La eliminacioacuten de la duplicacioacuten de coacutedigo al esbozar las bases de un

algoritmo Empleando el modelo de plantilla Meacutetodo

Interfaz clases incompatibles La transformacioacuten de una interfaz para agregar valor a coacutedigo

existente Aprovechar el modelo del adaptador

La aplicacioacuten de teacutecnicas de desarrollo basado en pruebas Automatizar las pruebas unitarias

Acortar los ciclos de desarrollo de pruebas automatizadas Mejora de la calidad con una cobertura consistente de pruebas La eliminacioacuten de los errores de regresioacuten con las pruebas

reutilizables La integracioacuten de las pruebas y la codificacioacuten

La aplicacioacuten de la prueba praacutectica de programacioacuten de sesiones para conducir el disentildeo del coacutedigo

Generar retroalimentacioacuten inmediata luz verde para el aumento de la calidad del coacutedigo y los cortos ciclos de desarrollo de funciones

Organizar coordinar y ejecutar los casos de prueba con Visual Studio Arquitectura de una aplicacioacuten de capas Disentildeo de la arquitectura de aplicaciones

Capas arquitecturas de reutilizacioacuten durabilidad y capacidad de ampliacioacuten

Acceso a datos de la capa de negocio La disociacioacuten de creacioacuten de objetos con el patroacuten de la faacutebrica Preservar la identidad del objeto con el patroacuten de identidad Mapa

Programacioacuten niveles de la aplicacioacuten Estructuracioacuten de un cliente Web o de aplicaciones ricas con el

patroacuten Observer Organizador rico estado-aplicaciones con el modelo de Estado Reestructuracioacuten de las tablas de la base de datos sin afectar el

coacutedigo de la aplicacioacuten Modelado de un aacuterea de negocio

Libertador ricos Business Object modelos de las estructuras de base de datos utilizando el patroacuten de modelo de dominio

Cartografiacutea ricos Business Objects a las tablas de base de datos con el patroacuten Data Mapper

El colapso de las jerarquiacuteas de objetos de negocio con el patroacuten de herencia Mapper

La explotacioacuten de la programacioacuten declarativa en Microsoft Entity Framework para implementar clases de datos de cartografiacutea

Attend your first course and you will receive a personalized Alumni Gold Discount card entitling you to save as much as $320 on each course you take within the following 12 months

Alumni Gold Discount Attend your first course and you will receive a personalized Alumni Gold Discount card entitling you to save as much as $320 on each course you take within the following 12 months

Federal State and Local Government Federal State and Local Government employees can take advantage of government discount pricing for Learning Tree Courses

Federal State and Local Government Federal State and Local Government employees can take advantage of government discount pricing for Learning Tree Courses

Training Vouchers With Vouchers any members of your team can attend any Learning Tree Course anytime Available in 5- and 10-Course Packs or larger each Voucher is valid for 12 months and is used in lieu of the tuition for any Learning Tree Public Course

Training Vouchers With Vouchers any members of your team can attend any Learning Tree Course anytime Available in 5- and 10-Course Packs or larger each Voucher is valid for 12 months and is

La aplicacioacuten de Buenas Praacutecticas La organizacioacuten y la aplicacioacuten de la loacutegica de negocio

La aplicacioacuten de los patrones de dominio de la loacutegica en el nivel medio

Ampliacioacuten de tipos de entidad con clases parciales La manipulacioacuten de los grupos de entidades con las clases de loacutegica

de negocio Las mejores praacutecticas en el disentildeo de clase

Proteccioacuten contra la rigidez con el Abierto de Principio Cerrado La extraccioacuten de las nuevas clases con el Principio de Responsabilidad

Individual El uso eficaz de la herencia

Automatizar tareas repetitivas Facilitar los datos de coacutedigo de acceso

La reduccioacuten de la base de datos de coacutedigo de acceso mediante la explotacioacuten de la entidad de navegacioacuten Propiedades

La eliminacioacuten de coacutedigo de actualizacioacuten de base de datos con el cambio de entidad de seguimiento Mejorar el coacutedigo de aplicacioacuten

Automatizacioacuten de revisiones de disentildeo con FxCop y Visual Studio Anaacutelisis

La eliminacioacuten de la duplicacioacuten de coacutedigo a traveacutes de la refactorizacioacuten para los patrones de disentildeo

ltltVolver a Visual Studio y NET Listado de cursos Cursos relacionados

Construyendo Aplicaciones Web con ASPNET y Ajax - Curso 506 ASPNET WebForms Integral Introduccioacuten - Curso 512 Construyendo Aplicaciones Web con ASPNET MVC - Curso 977 NET 4 Programacioacuten - Curso 2620 WPF y Silverlight Introduccioacuten - Curso 975 Servicios Web NET Introduccioacuten - Curso 2601 De programacioacuten C extendido Caracteriacutesticas - Curso 973 Programacioacuten de aplicaciones con SharePoint 2010 - NET Curso 2615 Windows Azure - Curso 2602

used in lieu of the tuition for any Learning Tree Public Course

Training Passport As a Training Passport holder one person can take as many as three hands-on courses in 12 months for as little as $1733 per course Only $5200 - save as much as 45

Training Passport As a Training Passport holder one person can take as many as three hands-on courses in 12 months for as little as $1733 per course Only $5200 - save as much as 45

Premium Pass The NEW Premium Pass gives you more time to take more courses while saving more money Take 4 courses within 24 months for as little as $1700 per course mdash at a price of only $6790 you can SAVE as much as 45 per course

Premium Pass The NEW Premium Pass gives you more time to take more courses while saving more money Take 4 courses within 24 months for as little as $1700 per course mdash at a price of only $6790 you can SAVE as much as 45 per course

Page 9: Patrones de diseño

Listado 09 - Patroacuten de creacioacuten instanciarla ------------------------------------------- Try Dim objConexion As SingletonConexion objConexion = SingletonConexionGetInstance TextBox1Text amp= Instancia Creada el + objConexionFechaCreadaampvbCrLf Catch ex As Exception MessageBoxShow(exMessage) End Try ------------------------------------------- Y para inicializarla Listado 10 - Patroacuten de creacioacuten inicializarla ------------------------------------------- Try SingletonConexionKillInstance() TextBox1Text amp= InstanciaEliminada---- ampvbCrLf Catch ex As Exception MessageBoxShow(exMessage) End Try -------------------------------------------

Arriba

Para Saber Mas [1] A Pattern Language Towns Buildings Construction Christopher Alexander 1977 [2] Using Patterns Languages for Object-Oriented Programs Ward Cunningham Kent Beck 1987 [3] Desing Patterns Elements of Reusable Object Oriented Software Gamma Helm Vlissides y Jonson 1994 [4] Patterns Of Enterprise Application Architecture Martiacuten Fowler [5] Java Blueprints httpjavasuncomblueprintspatternscataloghtm [6] NET Enterprise Patterns httpmsdnmicrosoftcomarchitecturepatterns [7] Patterns in Java A Catalog of Reusable Design Patterns Illustrated with UML Mark Grand [8] Te Server Side En esta web encontraremos una seccion dedicada a patrones de disentildeo wwwtheserversidecom

Arriba

Referencia bibliograacutefica Este documento esta COPIADO en su totalidad de un articulo escrito por Aacutelvaro Zabala Ordoacutentildeez y fue publicado en la revista Soacutelo Programadores num 113 con el tiacutetulo Patrones de Disentildeo Un curso practico [I] El articulo original muestra ejemplos en varios lenguajes En esta COPIA los he sustituido por ejemplos escritos exclusivamente en Visual Basic NET y ademaacutes he modificado la redaccioacuten de los paacuterrafos que haciacutean referencia a los ejemplos en otros lenguajes al objeto de darle una coherencia al texto final

Usted aprenderaacute a Aplicar meacutetodos probados para crear adaptables confiables y

eficientes NET y aplicaciones de cliente inteligente Resolver problemas de programacioacuten complejos con los patrones de

disentildeo estaacutendar de la industria Entregar el coacutedigo libre de errores con el desarrollo basado en pruebas

en Visual Studio Cree capas arquitecturas de reutilizacioacuten y evitar la superposicioacuten

funcional Aplicar las mejores praacutecticas para el disentildeo de la clase mejor Simplificar y automatizar las tareas repetitivas

Beneficios del curso El conocimiento de la NET y las bibliotecas no es suficiente para desarrollar aplicaciones robustas patrones de disentildeo probado y las mejores praacutecticas extraiacutedas de la sabiduriacutea de los expertos que ayuda en la creacioacuten de aplicaciones sobre una base soacutelida Este curso proporciona los conocimientos necesarios para resolver los problemas del mundo real de desarrollo de software y ofrecer aplicaciones raacutepida y fiable iquestQuieacuten debe asistir arquitectos programadores y cualquier sistema de desarrollo NET experiencia de programacioacuten a nivel de curso 419 programacioacuten de C o Curso 503 Visual Basic de programacioacuten para NET se supone Manos a la formacioacuten Ganas experiencia en la implementacioacuten NET mejores praacutecticas y patrones de disentildeo Ejercicios completado en VB o C incluyen

La conciliacioacuten de diversos problemas de procesamiento con el patroacuten Estrategia

La simplificacioacuten de un sistema complejo con el patroacuten Fachada La explotacioacuten de Microsoft Entity Framework para acceso a datos y

actualizaciones Creacioacuten de un modelo de objetos de dominio de Negocios Construccioacuten de casos de prueba automatizado Estructuracioacuten de un interfaz de usuario comprobable con el patroacuten

Modelo Vista Controlador La captura y reutilizacioacuten de las pruebas dentro de Visual Studio

Contenido del curso 511

Introduccioacuten Codificacioacuten de las mejores praacutecticas Simplificacioacuten de software con patrones de disentildeo

Simplificacioacuten de programacioacuten complejos con probada patrones de disentildeo La aplicacioacuten de interfaces simples a complejos algoritmos

La unificacioacuten de interfaces de subsistemas para facilitar su uso y reutilizacioacuten

Aplicacioacuten del modelo de fachada Variando la funcionalidad mediante la programacioacuten de interfaces

Fechas del curso

Asistir a eventos destacoacute en persona o en liacutenea con LearningTreeAnyWareTM

Feb 8 hasta 11 Reston VA inscribirse

5to al 8vo 04 Toronto inscribirse

19 a 22 ab Boston (Waltham) inscribirse

04 26ta al 29o Nueva York inscribirse

10 al 13 mayo Los Angelesinscribirse

10 al 13 mayo Ottawa inscribirse

17 al 20 mayo Rockville MD inscribirse

Mayo 24-27 Chicago (Schaumburg) inscribirse

31 mayo a 3 junio Reston VA inscribirse

07 al 10 junio Nueva York inscribirse

Para inscripciones AnyWare por favor regiacutestrese al menos 10 diacuteas antes del inicio del curso Maacutes fechas y lugares En las instalaciones y Formacioacuten personalizada Llevar este o cualquier otro aacuterbol curso de aprendizaje a su ubicacioacuten o la han personalizado para su organizacioacuten Matriacutecula

$ 2890 Norma de matriacutecula

Matriacutecula con un Plan de Ahorro

$ 1700 Premium-Pass

1733 doacutelares Pasaporte de formacioacuten

$ 2250 Vale 10-Pack

$ 2573 Gobierno de descuento

$ 2600 Antiguos Alumnos de descuento de Oro

Alumni Gold Discount

Mejorar la adaptabilidad y la flexibilidad de su aplicacioacuten Explotar el patroacuten Estrategia

Ampliacioacuten de la conducta objeto de forma dinaacutemica El aumento de la funcionalidad sin afectar al coacutedigo existente Composicioacuten de objetos con el patroacuten Decorador

El logro de reutilizacioacuten y flexibilidad La eliminacioacuten de la duplicacioacuten de coacutedigo al esbozar las bases de un

algoritmo Empleando el modelo de plantilla Meacutetodo

Interfaz clases incompatibles La transformacioacuten de una interfaz para agregar valor a coacutedigo

existente Aprovechar el modelo del adaptador

La aplicacioacuten de teacutecnicas de desarrollo basado en pruebas Automatizar las pruebas unitarias

Acortar los ciclos de desarrollo de pruebas automatizadas Mejora de la calidad con una cobertura consistente de pruebas La eliminacioacuten de los errores de regresioacuten con las pruebas

reutilizables La integracioacuten de las pruebas y la codificacioacuten

La aplicacioacuten de la prueba praacutectica de programacioacuten de sesiones para conducir el disentildeo del coacutedigo

Generar retroalimentacioacuten inmediata luz verde para el aumento de la calidad del coacutedigo y los cortos ciclos de desarrollo de funciones

Organizar coordinar y ejecutar los casos de prueba con Visual Studio Arquitectura de una aplicacioacuten de capas Disentildeo de la arquitectura de aplicaciones

Capas arquitecturas de reutilizacioacuten durabilidad y capacidad de ampliacioacuten

Acceso a datos de la capa de negocio La disociacioacuten de creacioacuten de objetos con el patroacuten de la faacutebrica Preservar la identidad del objeto con el patroacuten de identidad Mapa

Programacioacuten niveles de la aplicacioacuten Estructuracioacuten de un cliente Web o de aplicaciones ricas con el

patroacuten Observer Organizador rico estado-aplicaciones con el modelo de Estado Reestructuracioacuten de las tablas de la base de datos sin afectar el

coacutedigo de la aplicacioacuten Modelado de un aacuterea de negocio

Libertador ricos Business Object modelos de las estructuras de base de datos utilizando el patroacuten de modelo de dominio

Cartografiacutea ricos Business Objects a las tablas de base de datos con el patroacuten Data Mapper

El colapso de las jerarquiacuteas de objetos de negocio con el patroacuten de herencia Mapper

La explotacioacuten de la programacioacuten declarativa en Microsoft Entity Framework para implementar clases de datos de cartografiacutea

Attend your first course and you will receive a personalized Alumni Gold Discount card entitling you to save as much as $320 on each course you take within the following 12 months

Alumni Gold Discount Attend your first course and you will receive a personalized Alumni Gold Discount card entitling you to save as much as $320 on each course you take within the following 12 months

Federal State and Local Government Federal State and Local Government employees can take advantage of government discount pricing for Learning Tree Courses

Federal State and Local Government Federal State and Local Government employees can take advantage of government discount pricing for Learning Tree Courses

Training Vouchers With Vouchers any members of your team can attend any Learning Tree Course anytime Available in 5- and 10-Course Packs or larger each Voucher is valid for 12 months and is used in lieu of the tuition for any Learning Tree Public Course

Training Vouchers With Vouchers any members of your team can attend any Learning Tree Course anytime Available in 5- and 10-Course Packs or larger each Voucher is valid for 12 months and is

La aplicacioacuten de Buenas Praacutecticas La organizacioacuten y la aplicacioacuten de la loacutegica de negocio

La aplicacioacuten de los patrones de dominio de la loacutegica en el nivel medio

Ampliacioacuten de tipos de entidad con clases parciales La manipulacioacuten de los grupos de entidades con las clases de loacutegica

de negocio Las mejores praacutecticas en el disentildeo de clase

Proteccioacuten contra la rigidez con el Abierto de Principio Cerrado La extraccioacuten de las nuevas clases con el Principio de Responsabilidad

Individual El uso eficaz de la herencia

Automatizar tareas repetitivas Facilitar los datos de coacutedigo de acceso

La reduccioacuten de la base de datos de coacutedigo de acceso mediante la explotacioacuten de la entidad de navegacioacuten Propiedades

La eliminacioacuten de coacutedigo de actualizacioacuten de base de datos con el cambio de entidad de seguimiento Mejorar el coacutedigo de aplicacioacuten

Automatizacioacuten de revisiones de disentildeo con FxCop y Visual Studio Anaacutelisis

La eliminacioacuten de la duplicacioacuten de coacutedigo a traveacutes de la refactorizacioacuten para los patrones de disentildeo

ltltVolver a Visual Studio y NET Listado de cursos Cursos relacionados

Construyendo Aplicaciones Web con ASPNET y Ajax - Curso 506 ASPNET WebForms Integral Introduccioacuten - Curso 512 Construyendo Aplicaciones Web con ASPNET MVC - Curso 977 NET 4 Programacioacuten - Curso 2620 WPF y Silverlight Introduccioacuten - Curso 975 Servicios Web NET Introduccioacuten - Curso 2601 De programacioacuten C extendido Caracteriacutesticas - Curso 973 Programacioacuten de aplicaciones con SharePoint 2010 - NET Curso 2615 Windows Azure - Curso 2602

used in lieu of the tuition for any Learning Tree Public Course

Training Passport As a Training Passport holder one person can take as many as three hands-on courses in 12 months for as little as $1733 per course Only $5200 - save as much as 45

Training Passport As a Training Passport holder one person can take as many as three hands-on courses in 12 months for as little as $1733 per course Only $5200 - save as much as 45

Premium Pass The NEW Premium Pass gives you more time to take more courses while saving more money Take 4 courses within 24 months for as little as $1700 per course mdash at a price of only $6790 you can SAVE as much as 45 per course

Premium Pass The NEW Premium Pass gives you more time to take more courses while saving more money Take 4 courses within 24 months for as little as $1700 per course mdash at a price of only $6790 you can SAVE as much as 45 per course

Page 10: Patrones de diseño

Usted aprenderaacute a Aplicar meacutetodos probados para crear adaptables confiables y

eficientes NET y aplicaciones de cliente inteligente Resolver problemas de programacioacuten complejos con los patrones de

disentildeo estaacutendar de la industria Entregar el coacutedigo libre de errores con el desarrollo basado en pruebas

en Visual Studio Cree capas arquitecturas de reutilizacioacuten y evitar la superposicioacuten

funcional Aplicar las mejores praacutecticas para el disentildeo de la clase mejor Simplificar y automatizar las tareas repetitivas

Beneficios del curso El conocimiento de la NET y las bibliotecas no es suficiente para desarrollar aplicaciones robustas patrones de disentildeo probado y las mejores praacutecticas extraiacutedas de la sabiduriacutea de los expertos que ayuda en la creacioacuten de aplicaciones sobre una base soacutelida Este curso proporciona los conocimientos necesarios para resolver los problemas del mundo real de desarrollo de software y ofrecer aplicaciones raacutepida y fiable iquestQuieacuten debe asistir arquitectos programadores y cualquier sistema de desarrollo NET experiencia de programacioacuten a nivel de curso 419 programacioacuten de C o Curso 503 Visual Basic de programacioacuten para NET se supone Manos a la formacioacuten Ganas experiencia en la implementacioacuten NET mejores praacutecticas y patrones de disentildeo Ejercicios completado en VB o C incluyen

La conciliacioacuten de diversos problemas de procesamiento con el patroacuten Estrategia

La simplificacioacuten de un sistema complejo con el patroacuten Fachada La explotacioacuten de Microsoft Entity Framework para acceso a datos y

actualizaciones Creacioacuten de un modelo de objetos de dominio de Negocios Construccioacuten de casos de prueba automatizado Estructuracioacuten de un interfaz de usuario comprobable con el patroacuten

Modelo Vista Controlador La captura y reutilizacioacuten de las pruebas dentro de Visual Studio

Contenido del curso 511

Introduccioacuten Codificacioacuten de las mejores praacutecticas Simplificacioacuten de software con patrones de disentildeo

Simplificacioacuten de programacioacuten complejos con probada patrones de disentildeo La aplicacioacuten de interfaces simples a complejos algoritmos

La unificacioacuten de interfaces de subsistemas para facilitar su uso y reutilizacioacuten

Aplicacioacuten del modelo de fachada Variando la funcionalidad mediante la programacioacuten de interfaces

Fechas del curso

Asistir a eventos destacoacute en persona o en liacutenea con LearningTreeAnyWareTM

Feb 8 hasta 11 Reston VA inscribirse

5to al 8vo 04 Toronto inscribirse

19 a 22 ab Boston (Waltham) inscribirse

04 26ta al 29o Nueva York inscribirse

10 al 13 mayo Los Angelesinscribirse

10 al 13 mayo Ottawa inscribirse

17 al 20 mayo Rockville MD inscribirse

Mayo 24-27 Chicago (Schaumburg) inscribirse

31 mayo a 3 junio Reston VA inscribirse

07 al 10 junio Nueva York inscribirse

Para inscripciones AnyWare por favor regiacutestrese al menos 10 diacuteas antes del inicio del curso Maacutes fechas y lugares En las instalaciones y Formacioacuten personalizada Llevar este o cualquier otro aacuterbol curso de aprendizaje a su ubicacioacuten o la han personalizado para su organizacioacuten Matriacutecula

$ 2890 Norma de matriacutecula

Matriacutecula con un Plan de Ahorro

$ 1700 Premium-Pass

1733 doacutelares Pasaporte de formacioacuten

$ 2250 Vale 10-Pack

$ 2573 Gobierno de descuento

$ 2600 Antiguos Alumnos de descuento de Oro

Alumni Gold Discount

Mejorar la adaptabilidad y la flexibilidad de su aplicacioacuten Explotar el patroacuten Estrategia

Ampliacioacuten de la conducta objeto de forma dinaacutemica El aumento de la funcionalidad sin afectar al coacutedigo existente Composicioacuten de objetos con el patroacuten Decorador

El logro de reutilizacioacuten y flexibilidad La eliminacioacuten de la duplicacioacuten de coacutedigo al esbozar las bases de un

algoritmo Empleando el modelo de plantilla Meacutetodo

Interfaz clases incompatibles La transformacioacuten de una interfaz para agregar valor a coacutedigo

existente Aprovechar el modelo del adaptador

La aplicacioacuten de teacutecnicas de desarrollo basado en pruebas Automatizar las pruebas unitarias

Acortar los ciclos de desarrollo de pruebas automatizadas Mejora de la calidad con una cobertura consistente de pruebas La eliminacioacuten de los errores de regresioacuten con las pruebas

reutilizables La integracioacuten de las pruebas y la codificacioacuten

La aplicacioacuten de la prueba praacutectica de programacioacuten de sesiones para conducir el disentildeo del coacutedigo

Generar retroalimentacioacuten inmediata luz verde para el aumento de la calidad del coacutedigo y los cortos ciclos de desarrollo de funciones

Organizar coordinar y ejecutar los casos de prueba con Visual Studio Arquitectura de una aplicacioacuten de capas Disentildeo de la arquitectura de aplicaciones

Capas arquitecturas de reutilizacioacuten durabilidad y capacidad de ampliacioacuten

Acceso a datos de la capa de negocio La disociacioacuten de creacioacuten de objetos con el patroacuten de la faacutebrica Preservar la identidad del objeto con el patroacuten de identidad Mapa

Programacioacuten niveles de la aplicacioacuten Estructuracioacuten de un cliente Web o de aplicaciones ricas con el

patroacuten Observer Organizador rico estado-aplicaciones con el modelo de Estado Reestructuracioacuten de las tablas de la base de datos sin afectar el

coacutedigo de la aplicacioacuten Modelado de un aacuterea de negocio

Libertador ricos Business Object modelos de las estructuras de base de datos utilizando el patroacuten de modelo de dominio

Cartografiacutea ricos Business Objects a las tablas de base de datos con el patroacuten Data Mapper

El colapso de las jerarquiacuteas de objetos de negocio con el patroacuten de herencia Mapper

La explotacioacuten de la programacioacuten declarativa en Microsoft Entity Framework para implementar clases de datos de cartografiacutea

Attend your first course and you will receive a personalized Alumni Gold Discount card entitling you to save as much as $320 on each course you take within the following 12 months

Alumni Gold Discount Attend your first course and you will receive a personalized Alumni Gold Discount card entitling you to save as much as $320 on each course you take within the following 12 months

Federal State and Local Government Federal State and Local Government employees can take advantage of government discount pricing for Learning Tree Courses

Federal State and Local Government Federal State and Local Government employees can take advantage of government discount pricing for Learning Tree Courses

Training Vouchers With Vouchers any members of your team can attend any Learning Tree Course anytime Available in 5- and 10-Course Packs or larger each Voucher is valid for 12 months and is used in lieu of the tuition for any Learning Tree Public Course

Training Vouchers With Vouchers any members of your team can attend any Learning Tree Course anytime Available in 5- and 10-Course Packs or larger each Voucher is valid for 12 months and is

La aplicacioacuten de Buenas Praacutecticas La organizacioacuten y la aplicacioacuten de la loacutegica de negocio

La aplicacioacuten de los patrones de dominio de la loacutegica en el nivel medio

Ampliacioacuten de tipos de entidad con clases parciales La manipulacioacuten de los grupos de entidades con las clases de loacutegica

de negocio Las mejores praacutecticas en el disentildeo de clase

Proteccioacuten contra la rigidez con el Abierto de Principio Cerrado La extraccioacuten de las nuevas clases con el Principio de Responsabilidad

Individual El uso eficaz de la herencia

Automatizar tareas repetitivas Facilitar los datos de coacutedigo de acceso

La reduccioacuten de la base de datos de coacutedigo de acceso mediante la explotacioacuten de la entidad de navegacioacuten Propiedades

La eliminacioacuten de coacutedigo de actualizacioacuten de base de datos con el cambio de entidad de seguimiento Mejorar el coacutedigo de aplicacioacuten

Automatizacioacuten de revisiones de disentildeo con FxCop y Visual Studio Anaacutelisis

La eliminacioacuten de la duplicacioacuten de coacutedigo a traveacutes de la refactorizacioacuten para los patrones de disentildeo

ltltVolver a Visual Studio y NET Listado de cursos Cursos relacionados

Construyendo Aplicaciones Web con ASPNET y Ajax - Curso 506 ASPNET WebForms Integral Introduccioacuten - Curso 512 Construyendo Aplicaciones Web con ASPNET MVC - Curso 977 NET 4 Programacioacuten - Curso 2620 WPF y Silverlight Introduccioacuten - Curso 975 Servicios Web NET Introduccioacuten - Curso 2601 De programacioacuten C extendido Caracteriacutesticas - Curso 973 Programacioacuten de aplicaciones con SharePoint 2010 - NET Curso 2615 Windows Azure - Curso 2602

used in lieu of the tuition for any Learning Tree Public Course

Training Passport As a Training Passport holder one person can take as many as three hands-on courses in 12 months for as little as $1733 per course Only $5200 - save as much as 45

Training Passport As a Training Passport holder one person can take as many as three hands-on courses in 12 months for as little as $1733 per course Only $5200 - save as much as 45

Premium Pass The NEW Premium Pass gives you more time to take more courses while saving more money Take 4 courses within 24 months for as little as $1700 per course mdash at a price of only $6790 you can SAVE as much as 45 per course

Premium Pass The NEW Premium Pass gives you more time to take more courses while saving more money Take 4 courses within 24 months for as little as $1700 per course mdash at a price of only $6790 you can SAVE as much as 45 per course

Page 11: Patrones de diseño

Mejorar la adaptabilidad y la flexibilidad de su aplicacioacuten Explotar el patroacuten Estrategia

Ampliacioacuten de la conducta objeto de forma dinaacutemica El aumento de la funcionalidad sin afectar al coacutedigo existente Composicioacuten de objetos con el patroacuten Decorador

El logro de reutilizacioacuten y flexibilidad La eliminacioacuten de la duplicacioacuten de coacutedigo al esbozar las bases de un

algoritmo Empleando el modelo de plantilla Meacutetodo

Interfaz clases incompatibles La transformacioacuten de una interfaz para agregar valor a coacutedigo

existente Aprovechar el modelo del adaptador

La aplicacioacuten de teacutecnicas de desarrollo basado en pruebas Automatizar las pruebas unitarias

Acortar los ciclos de desarrollo de pruebas automatizadas Mejora de la calidad con una cobertura consistente de pruebas La eliminacioacuten de los errores de regresioacuten con las pruebas

reutilizables La integracioacuten de las pruebas y la codificacioacuten

La aplicacioacuten de la prueba praacutectica de programacioacuten de sesiones para conducir el disentildeo del coacutedigo

Generar retroalimentacioacuten inmediata luz verde para el aumento de la calidad del coacutedigo y los cortos ciclos de desarrollo de funciones

Organizar coordinar y ejecutar los casos de prueba con Visual Studio Arquitectura de una aplicacioacuten de capas Disentildeo de la arquitectura de aplicaciones

Capas arquitecturas de reutilizacioacuten durabilidad y capacidad de ampliacioacuten

Acceso a datos de la capa de negocio La disociacioacuten de creacioacuten de objetos con el patroacuten de la faacutebrica Preservar la identidad del objeto con el patroacuten de identidad Mapa

Programacioacuten niveles de la aplicacioacuten Estructuracioacuten de un cliente Web o de aplicaciones ricas con el

patroacuten Observer Organizador rico estado-aplicaciones con el modelo de Estado Reestructuracioacuten de las tablas de la base de datos sin afectar el

coacutedigo de la aplicacioacuten Modelado de un aacuterea de negocio

Libertador ricos Business Object modelos de las estructuras de base de datos utilizando el patroacuten de modelo de dominio

Cartografiacutea ricos Business Objects a las tablas de base de datos con el patroacuten Data Mapper

El colapso de las jerarquiacuteas de objetos de negocio con el patroacuten de herencia Mapper

La explotacioacuten de la programacioacuten declarativa en Microsoft Entity Framework para implementar clases de datos de cartografiacutea

Attend your first course and you will receive a personalized Alumni Gold Discount card entitling you to save as much as $320 on each course you take within the following 12 months

Alumni Gold Discount Attend your first course and you will receive a personalized Alumni Gold Discount card entitling you to save as much as $320 on each course you take within the following 12 months

Federal State and Local Government Federal State and Local Government employees can take advantage of government discount pricing for Learning Tree Courses

Federal State and Local Government Federal State and Local Government employees can take advantage of government discount pricing for Learning Tree Courses

Training Vouchers With Vouchers any members of your team can attend any Learning Tree Course anytime Available in 5- and 10-Course Packs or larger each Voucher is valid for 12 months and is used in lieu of the tuition for any Learning Tree Public Course

Training Vouchers With Vouchers any members of your team can attend any Learning Tree Course anytime Available in 5- and 10-Course Packs or larger each Voucher is valid for 12 months and is

La aplicacioacuten de Buenas Praacutecticas La organizacioacuten y la aplicacioacuten de la loacutegica de negocio

La aplicacioacuten de los patrones de dominio de la loacutegica en el nivel medio

Ampliacioacuten de tipos de entidad con clases parciales La manipulacioacuten de los grupos de entidades con las clases de loacutegica

de negocio Las mejores praacutecticas en el disentildeo de clase

Proteccioacuten contra la rigidez con el Abierto de Principio Cerrado La extraccioacuten de las nuevas clases con el Principio de Responsabilidad

Individual El uso eficaz de la herencia

Automatizar tareas repetitivas Facilitar los datos de coacutedigo de acceso

La reduccioacuten de la base de datos de coacutedigo de acceso mediante la explotacioacuten de la entidad de navegacioacuten Propiedades

La eliminacioacuten de coacutedigo de actualizacioacuten de base de datos con el cambio de entidad de seguimiento Mejorar el coacutedigo de aplicacioacuten

Automatizacioacuten de revisiones de disentildeo con FxCop y Visual Studio Anaacutelisis

La eliminacioacuten de la duplicacioacuten de coacutedigo a traveacutes de la refactorizacioacuten para los patrones de disentildeo

ltltVolver a Visual Studio y NET Listado de cursos Cursos relacionados

Construyendo Aplicaciones Web con ASPNET y Ajax - Curso 506 ASPNET WebForms Integral Introduccioacuten - Curso 512 Construyendo Aplicaciones Web con ASPNET MVC - Curso 977 NET 4 Programacioacuten - Curso 2620 WPF y Silverlight Introduccioacuten - Curso 975 Servicios Web NET Introduccioacuten - Curso 2601 De programacioacuten C extendido Caracteriacutesticas - Curso 973 Programacioacuten de aplicaciones con SharePoint 2010 - NET Curso 2615 Windows Azure - Curso 2602

used in lieu of the tuition for any Learning Tree Public Course

Training Passport As a Training Passport holder one person can take as many as three hands-on courses in 12 months for as little as $1733 per course Only $5200 - save as much as 45

Training Passport As a Training Passport holder one person can take as many as three hands-on courses in 12 months for as little as $1733 per course Only $5200 - save as much as 45

Premium Pass The NEW Premium Pass gives you more time to take more courses while saving more money Take 4 courses within 24 months for as little as $1700 per course mdash at a price of only $6790 you can SAVE as much as 45 per course

Premium Pass The NEW Premium Pass gives you more time to take more courses while saving more money Take 4 courses within 24 months for as little as $1700 per course mdash at a price of only $6790 you can SAVE as much as 45 per course

Page 12: Patrones de diseño

La aplicacioacuten de Buenas Praacutecticas La organizacioacuten y la aplicacioacuten de la loacutegica de negocio

La aplicacioacuten de los patrones de dominio de la loacutegica en el nivel medio

Ampliacioacuten de tipos de entidad con clases parciales La manipulacioacuten de los grupos de entidades con las clases de loacutegica

de negocio Las mejores praacutecticas en el disentildeo de clase

Proteccioacuten contra la rigidez con el Abierto de Principio Cerrado La extraccioacuten de las nuevas clases con el Principio de Responsabilidad

Individual El uso eficaz de la herencia

Automatizar tareas repetitivas Facilitar los datos de coacutedigo de acceso

La reduccioacuten de la base de datos de coacutedigo de acceso mediante la explotacioacuten de la entidad de navegacioacuten Propiedades

La eliminacioacuten de coacutedigo de actualizacioacuten de base de datos con el cambio de entidad de seguimiento Mejorar el coacutedigo de aplicacioacuten

Automatizacioacuten de revisiones de disentildeo con FxCop y Visual Studio Anaacutelisis

La eliminacioacuten de la duplicacioacuten de coacutedigo a traveacutes de la refactorizacioacuten para los patrones de disentildeo

ltltVolver a Visual Studio y NET Listado de cursos Cursos relacionados

Construyendo Aplicaciones Web con ASPNET y Ajax - Curso 506 ASPNET WebForms Integral Introduccioacuten - Curso 512 Construyendo Aplicaciones Web con ASPNET MVC - Curso 977 NET 4 Programacioacuten - Curso 2620 WPF y Silverlight Introduccioacuten - Curso 975 Servicios Web NET Introduccioacuten - Curso 2601 De programacioacuten C extendido Caracteriacutesticas - Curso 973 Programacioacuten de aplicaciones con SharePoint 2010 - NET Curso 2615 Windows Azure - Curso 2602

used in lieu of the tuition for any Learning Tree Public Course

Training Passport As a Training Passport holder one person can take as many as three hands-on courses in 12 months for as little as $1733 per course Only $5200 - save as much as 45

Training Passport As a Training Passport holder one person can take as many as three hands-on courses in 12 months for as little as $1733 per course Only $5200 - save as much as 45

Premium Pass The NEW Premium Pass gives you more time to take more courses while saving more money Take 4 courses within 24 months for as little as $1700 per course mdash at a price of only $6790 you can SAVE as much as 45 per course

Premium Pass The NEW Premium Pass gives you more time to take more courses while saving more money Take 4 courses within 24 months for as little as $1700 per course mdash at a price of only $6790 you can SAVE as much as 45 per course