Download - Patrones de diseño

Transcript
Page 1: Patrones de diseño

Patrones de Diseño

SumarioA 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 .NETVeremos 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 .

ArribaIntroducciónEl 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).

ArribaPatrones de diseño: concepto y disciplinaLos 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

Page 2: Patrones de diseño

los patrones de diseño. Esta disciplina establece una especie de especificación para documentar los patrones de diseño de software orientado a objetos. Según esta especificación, todo patrón de diseño debe ir acompañado de:Nombre del patrón: Gracias a éste nombre podremos identificar al patrón y referimos al mismo cuando discutamos con otros diseñadores durante la fase de diseño.Sinopsis: Breve resumen que nos indica la esencia de la solución proporcionada por el patrón. Es de gran utilidad para los programadores expertos que no conocen el nombre del patrón. De esta forma, se les indica lo que éste hace.Contexto: Descripción detallada del problema recurrente que el patrón viene a solucionar.Solución: Contiene una descripción detallada del patrón, y viene acompañada de un diagrama de clases UML que refleja gráficamente esta solución.Ejemplo de aplicación: La descripción del patrón siempre será más rica si va acompañada de un ejemplo practico.No obstante, a lo largo de esta serie de artículos no emplearemos este formato de documentación, que, aunque exhaustivo, podría resultar difícil de seguir.

ArribaLos orígenes de los patrones de diseñoAntes de entrar en materia, veremos de forma muy breve los orígenes de los patrones de diseño de software.El concepto de patrón de diseño procede del campo de la arquitectura. Los trabajos del arquitecto Christopher Alexander (véase referencia [1] del cuadro "Bibliografía recomendada"), publicados a finales de la década de los 70, postulaban la existencia de patrones repetitivos en las soluciones adoptadas en planeamiento urbanístico y construcción. Estas ideas eran susceptibles de ser aplicadas a otras disciplinas, entre ellas, la de la Ingeniería del Software. Así, en el año 1987 los archiconocidos W.Cunningham y Kent Beck (padre de la metodología "Extreme Programming") utilizaron algunas de las ideas de Alexander para identificar una serie de patrones en la construcción de interfaces de usuario (véase referencia [2] del cuadro "Bibliografía recomendada"). Estos patrones se emplearon en el lenguaje SmallTalk (uno de los pioneros de los lenguajes orientados a objetos puros) y dieron lugar al conocidísimo patrón Modelo/Vista/Controlador.En el año 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 diseño (véase referencia [3] del cuadro "Bibliografía recomendada"). Este libro popularizó la idea de los patrones de diseño e introdujo la clasificación de patrones de diseño más extendida en la actualidad. A partir de este momento, se produjo la explosión del fenómeno de los patrones de diseño. Se han desarrollado patrones aplicables a diferentes niveles de la lógica de la aplicación, como persistencia, mensajería, presentación, etc.El último movimiento parece ser el de los patrones para la creación de aplicaciones empresariales, que tratan de cubrir todos los aspectos de un sistema empresarial. En este sentido cabe destacar los trabajos de Martin Fowler (véase referencia [4] del cuadro "Bibliografía recomendada"), o las publicaciones de Sun (véase referencia [5] del cuadro "Bibliografía recomendada") y Microsoft (véase referencia [6] del cuadro "Bibliografía recomendada") para mostrar cómo construir aplicaciones empresariales con sus plataformas de desarrollo. Paralelamente al concepto de patrón, ha ido surgiendo el concepto de "Antipatrón". Se basa en la idea de que con frecuencia resulta más fácil aprender de los errores, por lo que se trata de catalogar los errores más frecuentes de análisis, diseño y programación.

Page 3: Patrones de diseño

ArribaClasificación de los patrones de diseñoLos patrones de diseño varían tanto en su granularidad como en su nivel de abstracción. Puesto que existen numerosos patrones de diseño, éstos se clasifican en categorías, lo que facilita su aprendizaje y permite referirse a patrones similares mediante la familia a la que pertenecen.En la obra del Gof (véase referencia [3] del cuadro "Bibliografía recomendada") se proponen las siguientes categorías:Patrones de creación: Esta categoría agrupa a los patrones que proporcionan guías de cómo construir objetos, cuando su creación implique la toma de una decisión. Esta decisión puede ser básicamente elegir qué subclase dentro de una jerarquía de herencia instanciar, y qué clase tiene la responsabilidad de su creaciónPatrones estructurales: Los patrones de esta categoría describen mecanismos genéricos para organizar diferentes clases de objetos entre sí.Patrones de comportamiento: Estos patrones se utilizan para organizar, gestionar y combinar el comportamiento de diferentes objetos.A esta clasificación, Mark Grand en su obra "Patterns in Java" (véase referencia [7] del cuadro "Bibliografía recomendada") añade la categoría de Patrones fundamentales". " Según este autor, esta categoría engloba a patrones que aparecen con mucha frecuencia en el resto de patrones, de mayor complejidad.Comenzaremos nuestro repaso de los principales patrones de diseño por dos patrones de esta categoría: el patrón Interfaz y el patrón Delegación.

ArribaEl patrón InterfazEste patrón prácticamente aparece en el resto de patrones de diseño que vamos a ver a lo largo de esta serie de artículos, por lo que con él nos vamos a detener un poco más. Se utiliza cuando deseamos que una clase que hace uso de los servicios proporcionados por otras clases, permanezca independiente de estas.¿Qué ventajas obtenemos con ello? Reduce el acoplamiento entre clases, y evita la propagación de cambios. ¿Y cómo podemos implementar este patrón? A través de la utilización de interfaces. Una interfaz define un contrato que deben cumplir una serie de clases, independientemente de los detalles internos de implementación de cada una de éstas. Se trata por tanto de un tipo especial de herencia denominado "de interfaz". Mediante la aplicación de este patrón de diseño, 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.¿Cómo podemos implementar este patrón de diseño con Visual Basic .NET?En VB.NET podemos definir una interfaz de la siguiente manera:Listado 01 - Interfaz definida en VB.NET '-------------------------------------------Public Interface IEducado Sub diHola() Sub diAdios()End Interface'-------------------------------------------

Page 4: Patrones de diseño

Diagrama de clases UML del patrón Interfaz Esta interfaz define un comportamiento, que podrán heredar otras clases a través de la herencia de interfaz. En el listado 1 tenemos dos implementaciones de esta interfaz con VB.NET. En dicho ejemplo tenemos una interfaz "IEducado", que obliga a que todas las clases que la implementen tengan métodos de saludo y despedida, impresos por consola. En el En el listado 2 vemos como la clase Educadolngles implementa estos métodos en inglés, mientras que la clase EducadoEspañol los implementa en español. Listado 02 - Clases que utilizan la interfaz IEducado '-------------------------------------------Public Class EducadoIngles Implements IEducado Friend Sub Hola() Implements IEducado.diHola Console.WriteLine("Hello") End Sub Friend Sub Adios() Implements IEducado.diAdios Console.WriteLine("Bye") End SubEnd Class'-------------------------------------------Public Class EducadoEspañol Implements IEducado Friend Sub Hola() Implements IEducado.diHola Console.WriteLine("Hola") End Sub Friend Sub Adios() Implements IEducado.diAdios Console.WriteLine("Adios") End SubEnd Class'-------------------------------------------Listado 03 - Forma básica de utilizr el Interfaz IEducado '------------------------------------------- Public Sub ProbarInterfazFormaUno() ' Instanciar una clase Dim oEnEspañol As New EducadoEspañol() ' definicion de la interfaz ' asignando una clase a la interfaz Dim iMuyEduado As IEducado = oEnEspañol ' usando la interfaz iMuyEduado.diHola() iMuyEduado.diAdios() '------------------------------ ' asignar otra clase a la interfaz ' Instanciar una clase

Page 5: Patrones de diseño

Dim oEnIngles As New EducadoIngles() ' asignar la clase a la interfaz iMuyEduado = oEnIngles ' usando la interfaz iMuyEduado.diHola() iMuyEduado.diAdios() '---------------- iMuyEduado = Nothing oEnEspañol = Nothing oEnIngles = Nothing End Sub '-------------------------------------------Supongamos que tenemos una clase encargada de interactuar con el usuario en un entorno de línea de comandos, saludándolo al iniciar la sesión y despidiéndose 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(ByVal UnObjetoIdioma As Object) ' definicion de la interfaz ' asignando una clase a la interfaz ' ctype es por [Option Strict ON] iMuyEduado = CType(UnObjetoIdioma, IEducado) End Sub Public Sub diHola() iMuyEduado.diHola() End Sub Public Sub diAdios() iMuyEduado.diAdios() End SubEnd Class'-------------------------------------------En función del idioma seleccionado por el usuario, esta clase recibirá en su constructor una implementación u otra, sin necesidad de modificar la clase que hace uso de los servicios ofrecidos por esta interfaz. Es más: podemos seguir añadiendo soporte de nuevos idiomas, creando nuevas implementaciones de la interfaz.Listado 05 - Función que utiliza la clase anterior [HaceUsoInterfazEducado] '------------------------------------------- Public Sub ProbarInterfazFormaDos() ' Instanciar una clase en función del idioma a utilizar Dim oEnEspañol As New EducadoEspañol() ' instanciar la clase que usa el interfaz Dim oIEducado As New HaceUsoInterfazEducado(oEnEspañol) oIEducado.diHola() oIEducado.diAdios()

Page 6: Patrones de diseño

oIEducado = Nothing oEnEspañol = Nothing End Sub '-------------------------------------------Otros lenguajes más antiguos, como C++ o Visual Basic carecen de interfaces. En su lugar ofrecen otra construcción, las clases abstractas, también presentes en Java y C#.En C++ una clase es abstracta cuando tiene uno de sus métodos "virtual". El modificador "virtual" es similar al modificador "abstract" de Java y otros lenguajes. En C++ definiríamos el contrato de nuestra interfaz con una clase abstracta (que puede ser pura si todos sus métodos son abstractos), y cada una de las implementaciones de la interfaz serían clases que heredarían de ésta.Incluso las últimas versiones de Visual Basic (5 y 6), antes de su sustitución por Visual Basic .NET, permitían la definición de clases abstractas. Para tal fin, había que crear un módulo de clase con el asistente visual del lenguaje, y dar el valor "PublicNoCreatable" a la propiedad "Instancing" del módulo. Esto hacía que no se pudiese utilizar ni el operador "new" ni la función "CreateObject" para obtener instancias de la clase. Un módulo podía implementar esta interfaz mediante el uso de la palabra reservada "implements".

ArribaEl patrón DelegaciónLa delegación consiste en un medio de extender y reutilizar la funcionalidad de una clase mediante la creación de otra clase que se la proporcione. Todos los lenguajes orientados a objetos proporcionan mecanismos para implementar este patrón, pues basta con añadir una nueva referencia a la clase que consume el servicio.

Diagrama de clases UML del patrón Delegación La importancia del patrón Delegación radica en que nos proporciona un mecanismo para decidir cuándo debemos hacer que una clase herede de otra, o cuando añadirle una referencia para utilizar sus servicios. En nuestro ejemplo de la clase educada, parece claro que hay que utilizar delegación. Muchas veces la decisión nos la da el sentido común (la regla de "es un"), mientras que otras veces habrá que hacer un análisis del número de herencias posibles. En nuestro ejemplo, añadiendo una referencia a la interfaz "IEducado" sólo crearemos una clase que consuma sus servicios, mientras que si optamos por el mecanismo de la herencia, tendríamos que crear dos subclases: una de "EducadoIngles" y otra de "EducadoEspañol". Además. conforme fuese creciendo el número de implementaciones de "IEducado", habría que ir aumentando el número de herencias. El listado siguiente se muestra la codificación en VB.NET de este patrón.Listado 06 - Patrón delegación (extracto del listado 4)'-------------------------------------------Public Class HaceUsoInterfazEducado Dim iMuyEduado As IEducado. . . . . . . . .' El código completo de la clase esta en el listado 04End Class'-------------------------------------------

ArribaPatrones de creación: Singleton .

Page 7: Patrones de diseño

Una vez introducidos dos de los patrones de diseño fundamentales, Interfaz y Delegación, veremos un patrón del tipo creacional muy frecuente en la práctica: el patrón de diseño Singleton.Este patrón se utiliza cuando queremos garantizar que, de una determinada clase, sólo existe una instancia. De esta forma, todos los objetos que hagan uso de esa clase utilizarán la misma instancia. ¿Cuándo 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 (información de configuración global a nivel de sistema, información única para el contexto de la aplicación, etc.)

Gestor de conexiones con el patrón Singleton ¿Cómo 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. Además, se debe hacer que dicha clase contenga una referencia estática a la única instancia de esa propia clase que puede existir. En el mundo de la orientación a objetos, se denomina estáticas a aquellas propiedades y métodos que son comunes de una clase, y por tanto compartidas por todas sus instancias. Por último, se debe añadir al Singleton un método público y estático que devuelva la única referencia existente de esa clase.En el listado siguiente vemos cómo implementar un Singleton en Visual Basic.NET.Listado 07 - Patrón de creación: Singleton '-------------------------------------------Public Class Singleton ' 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 ' método estático ' 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

Page 8: Patrones de diseño

End Class'-------------------------------------------El patrón 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 conexión si no existe y si ya existen que nos retorne la instancia existente.El ejemplo está escrito por Enriquillo Mañón, y lo encontre el dia 22/12/2004 en la página siguiente:http://www.microsoft.com/spanish/msdn/comunidad/mtj.net/voices/art151.asp Listado 08 - Patrón de creación: Singleton '-------------------------------------------'Implementación del Patrón SingletonPublic Class Conexion 'Objeto que contendrá la instancia compartida Private Shared m_objConexion As Conexion Private m_FechaCreacion As String 'El Mutex es una clase que proporciona .NET FrameWork 'Con ella evitaremos que en un ambiente multi thread 'se cree algún tipo de conflicto Private Shared m_Mutex As New System.Threading.Mutex Private Sub New() m_FechaCreacion = DateTime.Now.ToString End Sub 'Este método eliminará la instancia ya existente Public Shared Sub KillInstance() m_objConexion = Nothing End Sub 'Este será el método que proporcionara el acceso 'A la instancia existente, si no existe, creara 'una nueva (método Singleton). Public Shared Function GetInstance() As Conexion m_Mutex.WaitOne() If m_objConexion Is Nothing Then m_objConexion = New Conexion End If m_Mutex.ReleaseMutex() Return m_objConexion End Function 'Propiedad que presenta la fecha y hora en que 'Fue creada la instancia Public ReadOnly Property FechaCreada() As String Get Return m_FechaCreacion End Get End PropertyEnd Class'-------------------------------------------La implementación para probar nuestra clase es bastante sencilla, para instanciarla:

Page 9: Patrones de diseño

Listado 09 - Patrón de creación: instanciarla '------------------------------------------- Try Dim objConexion As Singleton.Conexion objConexion = Singleton.Conexion.GetInstance TextBox1.Text &= "Instancia Creada el " + objConexion.FechaCreada & vbCrLf Catch ex As Exception MessageBox.Show(ex.Message) End Try'-------------------------------------------Y para inicializarla:Listado 10 - Patrón de creación: inicializarla '------------------------------------------- Try Singleton.Conexion.KillInstance() TextBox1.Text &= "Instancia Eliminada---- " & vbCrLf Catch ex As Exception MessageBox.Show(ex.Message) End Try'-------------------------------------------

ArribaPara 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", Martín Fowler[5] "Java Blueprints" http://java.sun.com/blueprints/patterns/catalog.htm [6] ".NET Enterprise Patterns". http://msdn.microsoft.com/architecture/patterns/ [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 diseño. www.theserverside.com

ArribaReferencia bibliográfica

Este documento esta COPIADO en su totalidad de un articulo escrito por Álvaro Zabala Ordóñez, y fue publicado en la revista Sólo Programadores num. 113 con el título "Patrones de Diseño. 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 además he modificado la redacción de los párrafos que hacían referencia a los ejemplos en otros lenguajes al objeto de darle una coherencia al texto final.

Page 10: Patrones de diseño

Usted aprenderá aImplement proven methods to build adaptable, reliable and efficient .NET Web and smart client applications Aplicar métodos probados para crear adaptables, confiables y eficientes. NET y aplicaciones de cliente inteligenteSolve complex programming problems with industry-standard design patterns Resolver problemas de programación complejos con los patrones de diseño estándar de la industriaDeliver bug-free code using test-driven development in Visual Studio Entregar el código libre de errores con el desarrollo basado en pruebas en Visual StudioCreate layered architectures for reusability and avoiding functional overlap Cree capas arquitecturas de reutilización y evitar la superposición funcionalApply best practices for improved class design Aplicar las mejores prácticas para el diseño de la clase mejorSimplify and automate repetitive tasks Simplificar y automatizar las tareas repetitivasCourse Benefits Beneficios del cursoKnowledge of the .NET languages and libraries alone is not enough to develop robust applications. El conocimiento de la. NET y las bibliotecas no es suficiente para desarrollar aplicaciones robustas. Proven design patterns and best practices, distilled from the wisdom of experts, support you in building applications upon a solid foundation. patrones de diseño probado y las mejores prácticas, extraídas de la sabiduría de los expertos, que ayuda en la creación de aplicaciones sobre una base sólida. This course provides the skills needed to solve real-world software development problems and deliver fast, reliable applications. Este curso proporciona los conocimientos necesarios para resolver los problemas del mundo real de desarrollo de software y ofrecer aplicaciones rápida y fiable.Who Should Attend ¿Quién debe asistirProgrammers, system architects and anyone developing .NET applications. arquitectos programadores, y cualquier sistema de desarrollo. NET. Programming experience at the level of Course 419, " ," or Course 503, " ," is assumed. experiencia de programación a nivel de curso 419, " programación de C # , "o Curso 503," Visual Basic de programación para. NET ", se supone.Hands-On Training Manos a la formaciónYou gain experience implementing .NET best practices and design patterns. Ganas experiencia en la implementación. NET mejores prácticas y patrones de diseño. Exercises, completed in VB or C#, include: Ejercicios, completado en VB o C #, incluyen:Reconciling diverse processing problems with the Strategy pattern La conciliación de diversos problemas de procesamiento con el patrón EstrategiaSimplifying a complex system with the Facade pattern La simplificación de un sistema complejo con el patrón Fachada

Course Dates Fechas del curso

Attend Asistir a eventos destacó in person or online with TM . en persona o en línea con Learning Tree AnyWare TM.

Feb 8-11 Feb. 8 hasta 11 Reston, VA Reston, VA Apr 5-8 5to al 8vo 04 Toronto Toronto inscribirseApr 19-22 19 a 22 ab. Boston (Waltham) Boston

(Waltham) inscribirseApr 26-29 04 26ta al 29o

New York Nueva York

May 10-13 10 al 13 mayo

Los Angeles Los Angeles

May 10-13 10 al 13 mayo

Ottawa Ottawa inscribirse

May 17-20 17 al 20 mayo

Rockville, MD Rockville, MD inscribirse

May 24-27 Mayo 24-27 Chicago (Schaumburg) (Schaumburg) inscribirse

May 31-Jun 3 31 mayo a 3 junio

Reston, VA Reston, VA

Jun 7-10 07 al 10 junio New York Nueva York For AnyWare enrollments, please register at least 10 days prior to the start of the course. Para inscripciones AnyWare, por favor regístrese al menos 10 días antes del inicio del curso. and . Más fechas y lugares .On-Site & En las instalaciones y Custom Training Formación personalizadaBring this or any Learning Tree course or have it organization. Llevar este o cualquier otro árbol curso de aprendizaje a su ubicación o la han personalizadoorganización.Tuition Matrícula

Page 11: Patrones de diseño

Exploiting Microsoft Entity Framework for data access and updates La explotación de Microsoft Entity Framework para acceso a datos y actualizacionesCreating a Business Domain Object Model Creación de un modelo de objetos de dominio de NegociosBuilding automated test cases Construcción de casos de prueba automatizadoStructuring a testable user interface with the Model View Controller pattern Estructuración de un interfaz de usuario comprobable con el patrón Modelo Vista ControladorCapturing and reusing tests within Visual Studio La captura y reutilización de las pruebas dentro de Visual StudioCourse 511 Content Contenido del curso 511

Introduction IntroducciónCoding with best practices Codificación de las mejores prácticasSimplifying software with design patterns Simplificación de software con patrones de diseñoSimplifying Complex Programming with Proven Design Patterns Simplificación de programación complejos con probada patrones de diseñoApplying simple interfaces to intricate algorithms La aplicación de interfaces simples a complejos algoritmosUnifying interfaces from subsystems for ease of use and reusability La unificación de interfaces de subsistemas para facilitar su uso y reutilizaciónImplementing the Facade pattern Aplicación del modelo de fachadaVarying functionality by programming to interfaces Variando la funcionalidad mediante la programación de interfacesEnhancing the adaptability and flexibility of your application Mejorar la adaptabilidad y la flexibilidad de su aplicaciónExploiting the Strategy pattern Explotar el patrón EstrategiaExtending object behavior dynamically Ampliación de la conducta objeto de forma dinámicaIncreasing functionality without impacting existing code El aumento de la funcionalidad sin afectar al código existenteComposing objects with the Decorator pattern Composición de objetos con el patrón DecoradorAchieving reuse and flexibility El logro de reutilización y flexibilidadEliminating code duplication by outlining a basis for an algorithm La eliminación de la duplicación de código al esbozar las bases de un algoritmoEmploying the Template Method pattern Empleando el modelo de plantilla MétodoInterfacing incompatible classes Interfaz clases incompatiblesTransforming an interface to add value to existing code La transformación de una interfaz para agregar valor a código existenteHarnessing the Adapter pattern Aprovechar el modelo del adaptador

$ 2.890 Standard Tuition Norma de matrícula

Matrícula con un Plan de Ahorro $ 1.700 Premium-Pass 1.733 dólares Pasaporte de formación $ 2.250 Vale 10-Pack $ 2.573 Gobierno de descuento

$ 2.600 Antiguos Alumnos de descuento de Oro

Alumni Gold DiscountAttend 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 DiscountAttend 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 GovernmentFederal, State and Local Government employees can take advantage of government discount pricing for Learning Tree Courses.

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

Training VouchersWith 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

Page 12: Patrones de diseño

Applying Test-Driven Development Techniques La aplicación de técnicas de desarrollo basado en pruebasAutomating unit testing Automatizar las pruebas unitariasShortening development cycles with automated tests Acortar los ciclos de desarrollo de pruebas automatizadasImproving quality with consistent test coverage Mejora de la calidad con una cobertura consistente de pruebasEliminating regression errors with reusable tests La eliminación de los errores de regresión con las pruebas reutilizablesIntegrating testing and coding La integración de las pruebas y la codificaciónApplying the test-first programming practice to drive code design La aplicación de la prueba práctica de programación de sesiones para conducir el diseño del códigoGenerating immediate green-light feedback for increased code quality and short feature development cycles Generar retroalimentación inmediata luz verde para el aumento de la calidad del código y los cortos ciclos de desarrollo de funcionesOrganizing, coordinating and running test cases with Visual Studio Organizar, coordinar y ejecutar los casos de prueba con Visual StudioArchitecting a Layered Application Arquitectura de una aplicación de capasDesigning the application architecture Diseño de la arquitectura de aplicacionesLayering architectures for reusability, durability and scalability Capas arquitecturas de reutilización, durabilidad y capacidad de ampliaciónAccessing data from the business tier Acceso a datos de la capa de negocioDecoupling object creation with the Factory pattern La disociación de creación de objetos con el patrón de la fábricaPreserving object identity with the Identity Map pattern Preservar la identidad del objeto con el patrón de identidad MapaProgramming application tiers Programación niveles de la aplicaciónStructuring a Web or rich client application with the Observer pattern Estructuración de un cliente Web o de aplicaciones ricas con el patrón ObserverOrganizing state-rich applications with the State pattern Organizador rico estado-aplicaciones con el modelo de EstadoRestructuring database tables without impacting application code Reestructuración de las tablas de la base de datos sin afectar el código de la aplicaciónModeling a business area Modelado de un área de negocioLiberating rich Business Object Models from database structures using the Domain Model pattern Libertador ricos Business Object modelos de las estructuras de base de datos utilizando el patrón de modelo de dominioMapping rich Business Objects to database tables with the Data

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

Training VouchersWith 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 PassportAs a Training Passport holder, one person can take as many as three hands-on courses in 12 months for as little as $1,733 per course.Only $5,200 - save as much as 45%.

Training PassportAs a Training Passport holder, one person can take as many as three hands-on courses in 12 months for as little as $1,733 per course.Only $5,200 - save as much as 45%.

Premium PassThe 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 $1,700 per course — at a price of only $6,790, you can SAVE as much as 45% per course.

Premium PassThe 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

Page 13: Patrones de diseño

Mapper pattern Cartografía ricos Business Objects a las tablas de base de datos con el patrón Data MapperCollapsing Business Object hierarchies with the Inheritance Mapper pattern El colapso de las jerarquías de objetos de negocio con el patrón de herencia MapperExploiting declarative programming in Microsoft Entity Framework to implement Data Mapping classes La explotación de la programación declarativa en Microsoft Entity Framework para implementar clases de datos de cartografíaApplying Best Practices La aplicación de Buenas PrácticasOrganizing and implementing business logic La organización y la aplicación de la lógica de negocioApplying domain logic patterns in the middle tier La aplicación de los patrones de dominio de la lógica en el nivel medioExtending Entity types with partial classes Ampliación de tipos de entidad con clases parcialesManipulating groups of Entities with business logic classes La manipulación de los grupos de entidades con las clases de lógica de negocioBest practices in class design Las mejores prácticas en el diseño de claseGuarding against rigidity with the Open/Closed Principle Protección contra la rigidez con el Abierto de Principio / CerradoExtracting new classes with the Single Responsibility Principle La extracción de las nuevas clases con el Principio de Responsabilidad IndividualEffective use of inheritance El uso eficaz de la herenciaAutomating Repetitive Tasks Automatizar tareas repetitivasEasing data access code Facilitar los datos de código de accesoReducing database access code by exploiting Entity Navigation Properties La reducción de la base de datos de código de acceso mediante la explotación de la entidad de navegación PropiedadesEliminating database update code with Entity change tracking La eliminación de código de actualización de base de datos con el cambio de entidad de seguimientoEnhancing application code Mejorar el código de aplicaciónAutomating design reviews with FxCop and Visual Studio Analysis Automatización de revisiones de diseño con FxCop y Visual Studio AnálisisEliminating code duplication through refactoring to design patterns La eliminación de la duplicación de código a través de la refactorización para los patrones de diseño

<<Volver a Visual Studio y. NET Listado de cursosRelated Courses Cursos relacionados Construyendo Aplicaciones Web con ASP.NET y Ajax - Curso 506 ASP.NET WebForms Integral Introducción - Curso 512 Construyendo Aplicaciones Web con ASP.NET MVC - Curso 977

$1,700 per course — at a price of only $6,790, you can SAVE as much as 45% per course.


Top Related