Modelos de diseño para principiantes

Publicado: 2016-01-13

Si ya has escrito programas para productos o aplicaciones de software, grandes/pequeños, lo más probable es que hayas usado muchos Patrones de Diseño… aunque es posible que no sean uno de los patrones de diseño más usados/estándar.

Pero sí, hay una diferencia obvia entre implementar un patrón de diseño y “usar” un patrón de diseño… de cualquier manera, la persona que trabaja con patrones de diseño lo entiende, o lo entenderá fácilmente.

El punto es que los patrones de diseño no son nuevos para los programadores.

En este artículo a continuación, estoy tratando de explicar los patrones de diseño, en sus aspectos básicos, y estudiaremos los detalles de varios patrones, ejemplos, etc. en otro artículo.

¿Qué es un patrón de diseño?

Empezar…

Creo que la mejor manera de comenzar a comprender los patrones de diseño es comprender los patrones no técnicos que seguimos a sabiendas o sin saberlo en nuestra vida cotidiana.

Por ejemplo, tomemos muchos currículos enviados para una vacante de trabajo. El currículum de todos no se ve igual... aunque todos tienden a hacer lo mismo, es decir, decirle al lector en qué son hábiles o cómo puede ser apto para el trabajo.

La mayoría de los que envían currículums para trabajos saben que necesitan enviar un currículum con un conjunto particular de información en un documento de Word formateado.

Esto... es un patrón, que todos envían un currículum con un conjunto particular de información expresada en él.

Si te apetece… llámalo Plantillas en lugar de Patrones. Plantillas de diseño.

Hay muchas de esas cosas en la vida real que son patrones. A algunas personas les gustan los siguientes ejemplos:

Todos los chefs de todo el mundo cocinan pizza o papas fritas de la misma manera. Aunque pueden cubrirlo / darle sabor de manera diferente. Eso es un patrón.

El diseño de cada automóvil sigue un patrón de diseño básico, cuatro ruedas, volante, el sistema de transmisión central como acelerador-freno-embrague, etc.

Todas las cosas construidas / producidas repetidamente, inevitablemente seguirán un patrón en su diseño... ya sean autos, pizzas, cajeros automáticos, lo que sea... incluso el cepillo de dientes.

Los diseños que casi se han convertido en la forma estándar de codificar alguna lógica/mecanismo/técnica en el software, por lo tanto, se conocen y, por lo tanto, se estudian como patrones de diseño de software.

¿Por qué es importante un patrón de diseño?

Básicamente por dos motivos:

  1. Para apegarse a un estándar
  2. Para fijar el desarrollo

Voy a explicar en detalle.

En primer lugar, vemos por qué es interesante apegarse a un patrón estándar.

Tomemos el ejemplo de la lista de currículos que discutimos antes.

Puede haber uno o dos solicitantes que envíen sus solicitudes de empleo por correo electrónico sin el formato adecuado, sin archivos adjuntos a su correo electrónico, etc., estos uno o dos solicitantes no están siguiendo el patrón... y NO es probable que terminen con el trabajo…. ¿Por qué? Porque se están desviando de un patrón bien establecido, lo que podría no ser del agrado de las personas que preseleccionan currículums para el trabajo.

¿No hay nadie que se desvíe del patrón y se vuelva “cool”? ¿No es eso Innovación?

Sí, hay ocasiones en que un currículum presentado de manera muy diferente obtiene el trabajo por ser diferente de los demás. Por lo general, he oído hablar de diseñadores web que consiguieron trabajos excelentes porque recopilaron y presentaron una película en CD de su trabajo, o crearon un personaje de animación que explicaba su trabajo, lo subieron a su blog y cosas por el estilo.

Pero... esto es experimentación ( La innovación viene de experimentos exitosos ).

La mayoría de las veces, en el desarrollo de software, no puede darse el lujo de experimentar, debido a la presión de la línea de tiempo, las expectativas, etc., pero sí, a veces, algunos proyectos interesantes permiten algo de experimentación.

En el software, no podemos hacer cosas básicas como un depósito bancario... de 101 maneras... habrá solo algunas formas de procesar un depósito bancario... así que tiene sentido seguir un patrón establecido y probado.

Además, la mayoría de los patrones de diseño tienen variaciones... algunas de las variaciones son tan populares que las variaciones también serán un nuevo tipo estándar del patrón.

Se espera que los proyectos de software en estos días (al menos implícitamente) sigan un diseño ya establecido de un producto/software similar en el mercado.

Aquí es donde apegarse a un estilo estándar de codificación o patrón de diseño ayuda al desarrollo de software... acelerar el desarrollo, eliminar la sobrecarga de preocuparse por una nueva implementación no probada, etc.

Tiempo de desarrollo de la fijación

Seguir un patrón de diseño estándar también tiene la ventaja de comunicarse fácilmente a través del árbol/jerarquía de arquitectos de software, líderes de módulos, líderes de equipo, desarrolladores, etc., sobre "cómo" algo debe desarrollarse, y no solo "qué" debe ser. desarrollado.

A veces, incluso ayuda a los equipos de prueba, porque los evaluadores saben por experiencia que el código que sigue patrones de diseño en particular probablemente podría probarse de una manera específica con un conjunto de herramientas de prueba en un cierto período de tiempo, y dichos diseños conocidos podrían no tener algunos defectos. o tienen algunos defectos 'conocidos'.

¿Usar patrones de diseño no le da un toque personal?

No. En primer lugar porque no estamos diciendo que sigues un patrón de diseño y no pasa nada más. La mayoría de las implementaciones de proyectos solo comparten requisitos básicos con otros proyectos y lo más probable es que tengan desviaciones. Construir estas desviaciones requerirá flexionar y estirar los patrones estándar utilizados en una implementación.

Es como hacer la pizza de la manera estándar, luego darle sabor / presentarla según diferentes requisitos, ya sea como una pizza de pastel completo, o un pastel cortado, o lo que sea.

Para comprender la importancia de los patrones de diseño, una cosa es muy importante :

Los patrones de diseño no son ninguna tecnología o marco que nos imponga una empresa o un lenguaje de programación en particular. Eso significa que es como un concepto abierto... eres libre de tomarlo, usarlo, modificarlo según tus necesidades y, lo que es más importante... sentirlo como propio.

Todos los patrones de diseño estándar o populares, en realidad, son extensibles en gran medida... se hicieron populares, en primer lugar, solo porque muchas personas los usan... y muchas personas los usan solo porque son flexibles a sus requisitos.

¿O cómo cree que un patrón de diseño estándar encajaría en un proyecto en Nueva Jersey para una empresa y también en Bangalore para una empresa diferente y un tipo de proyecto diferente?

Eso nos lleva a " La mayoría de los patrones de diseño son genéricos "... lo que significa que no siempre se utilizan para construir el mismo tipo de software. Es posible que no escuche cosas como "patrón de diseño de software bancario" o "patrón de diseño de software de redes sociales" que se usan en discusiones comunes... sino solo "patrones de diseño".

¿Quién debería preocuparse por los patrones de diseño?

  1. Al igual que un buen Arquitecto de edificios desarrolla sus habilidades para diseñar edificios, mediante el estudio de la Arquitectura y el Diseño de numerosos edificios y formas a lo largo de su vida, un Arquitecto de Software debe estudiar y visualizar cómo se diseñan o diseñan diferentes sistemas de Software/Tecnología en todo el mundo. diseñado
  2. Y así como los trabajadores de la construcción de un edificio deben conocer las diferentes formas de implementar un diseño de edificio, ya sea desde su propia experiencia o entendiéndolo desde el Arquitecto del Edificio.

Los desarrolladores/programadores de software deben comprender los patrones básicos de diseño de software y su código de implementación... ya sea ellos mismos o del Arquitecto de software, quien instruye al equipo para desarrollarlo siguiendo un patrón particular.

Patrones de código básicos

En las primeras líneas de este artículo, dije que cualquier programador habría usado patrones de diseño. Aquí hay algunos ejemplos muy básicos de código siguiendo un patrón.

  1. A continuación se muestra un patrón de diseño de filtro interceptor básico.
  2. Ocultar código de copia
  3. [código]
    cambiar (condición){
    caso Valor1:
    caso Valor2:
    por defecto:
    }
    [/código]
  4. Los activadores de eventos, los controladores de eventos... vienen bajo el patrón de diseño básico Sujeto-Observador . Discutiremos los estándares de cada patrón, las variaciones populares, con ejemplos... pronto.
  5. Si usó algún tipo de colecciones, como Arraylist en C#, e iteró a través de la matriz, entonces usó un patrón de diseño de iterador básico.
  6. El siguiente código es un ejemplo de un patrón básico de Manejo de excepciones/ Cadena de responsabilidad .
  7. Ocultar código de copia
  8. [código]
    tratar{
    }captura(excepción ex){
    }
    finalmente{
    }
    [/código]

Diferentes áreas de patrones de diseño

Hay diferentes terminologías en el software además de los patrones de diseño... algunos de ellos a menudo relacionados con los patrones de diseño que hemos discutido hasta ahora... y algunos de ellos no tienen ninguna relación.

Lo que hasta ahora hemos discutido anteriormente a veces se llama " Patrones de diseño de implementación ".

Hay otros, como patrones de arquitectura, patrones de marco, patrones de lenguaje (en su mayoría llamados construcciones de lenguaje).

Son patrones colocados en diferentes niveles... como los patrones de lenguaje son patrones implementados como parte de lenguajes de programación como C#/Java, como características/construcciones del lenguaje... algunos de ellos ya los hemos visto.

Todos los ejemplos anteriores de sujeto-observador, filtro interceptor, etc., se absorben como construcciones de lenguaje en todos los lenguajes de programación de alto nivel populares que vinieron después de C.

Los patrones de arquitectura son esos modelos estándar de arquitectura de software, que comúnmente se refieren a diferentes métodos para colocar o vincular módulos o capas o niveles, que componen la aplicación completa.

Esto no tiene nada que ver con los patrones de diseño en el sentido de codificación/programación que… pero comparten las mismas respuestas a Por qué/Qué es, como se analiza en este artículo.

Los patrones de marco tampoco están relacionados con nuestra discusión de patrones de diseño. Cuando los marcos como .NET implementan medios especiales para registrar errores o rastrear rutas de ejecución de código fácilmente a través de los métodos u objetos integrados del marco, dichos mecanismos se denominan patrones de marco.

Algunos ejemplos en .NET Framework incluyen la función stackTrace, la función de atributo de clase con [] llaves cuadradas encima de las definiciones de clase/método, etc. Cuando usamos tales funciones, codificamos con los patrones integrados de Framework.

Espero que este artículo ayude a proporcionar una descripción general de los patrones de diseño y las terminologías relacionadas.

Hasta ahora, solo discutimos qué son los estándares y cuán importantes son... pero no discutimos cuáles son los patrones estándar en sí.

Licencia

Este artículo, junto con cualquier código fuente y archivos asociados, tiene licencia de The Code Project Open License (CPOL).