Red de conocimiento informático - Material del sitio web - Cómo utilizar los patrones de diseño correctamente

Cómo utilizar los patrones de diseño correctamente

De hecho, el libro "Patrones de diseño" de GoF * * * tiene tres niveles de contenido:

1 Señala la existencia de patrones en las actividades de desarrollo de programación y propone cuatro elementos a los que se debe prestar atención al resumir. patrones de diseño "Nombre-Problema-Solución-Efecto" y proporciona una plantilla de formato que describe un conjunto de patrones.

2. Presente las ideas de diseño generales de "programar para interfaces es mejor que programar para implementación" y "la composición es mejor que la herencia" en el desarrollo orientado a objetos.

3. Seleccione 23 patrones de diseño comunes basados ​​en las ideas de diseño anteriores como ejemplos para describir en detalle.

Aunque el punto 3 contiene la mayor cantidad de ejemplos de patrones de diseño específicos, los puntos 1 y 2 son en realidad el foco. De hecho, el significado más trascendental de los patrones de diseño de este libro reside en el punto 1. Posteriormente, aparecieron algunos libros de alta calidad, como "Patrones de análisis", "Patrones de arquitectura empresarial", "Patrones de integración empresarial", "Patrones de prueba xUnit", "Refactoring", etc. Estos libros organizan el contenido en formato de patrones de diseño. .

Hay un pasaje en el libro que creo que es muy importante, pero es fácil de ignorar.

Los patrones de diseño tratados en este libro no describen diseños nuevos o no probados. Solo incluimos diseños exitosos que se han utilizado varias veces en diferentes sistemas. La mayoría de estos diseños no quedaron registrados por escrito en el pasado. Provienen de intercambios informales entre diseñadores orientados a objetos o de partes de sistemas orientados a objetos exitosos, pero son difíciles de aprender para los principiantes. Aunque estos diseños no contienen ideas nuevas, los presentamos a los lectores de una manera nueva y fácil de entender, es decir, varios conjuntos de patrones de diseño en un formato unificado y categorías clasificadas.

La clave de este pasaje es:

1. Los patrones en el libro no son invención del autor ni secretos únicos, sino prácticas de larga data y ampliamente utilizadas, pero no lo han sido. utilizado. Regístrelo sistemáticamente. En otras palabras, siempre que se sigan ciertos principios, estos llamados patrones pueden aparecer de forma espontánea e inconsciente en el código del producto.

2. Estos patrones se utilizan muchas veces en varios sistemas. En otras palabras, siempre que esté expuesto a suficiente código, seguramente estará expuesto a una gran cantidad de aplicaciones prácticas de estos patrones. Es solo que antes de leer el libro "Patrones de diseño", es posible que no se dé cuenta de que es un método de diseño sistemático.

3. El autor cree que el valor del libro "Patrones de diseño" radica en su organización eficaz y descripción fácil de entender de los patrones de diseño. En otras palabras, el punto de partida de este libro es "fácil de entender" y está dirigido a "diseñadores novatos". Muchos principiantes simplemente encuentran este libro difícil de entender, lo que demuestra que el autor eligió la descripción que cree que es más fácil de entender y al mismo tiempo garantiza la precisión. Una descripción más superficial que la de este libro probablemente sacrificaría la precisión (una descripción inexacta obviamente hará más daño que bien a un principiante). Por supuesto, algunas personas piensan que la capacidad expresiva del autor es limitada y este tipo de cosas no se pueden verificar, pero yo prefiero lo primero.

=====================================

Ahora más cerca de casa, cómo utilizar correctamente los patrones de diseño, para ser precisos, los 23 patrones involucrados en el libro de GoF "Patrones de diseño". Pero también podríamos considerar primero una pregunta simple: cómo evitar el uso incorrecto de patrones de diseño. Al fin y al cabo, es mejor no utilizarlo correctamente. Si lo usa lentamente evitando un uso incorrecto, se usa correctamente.

Lo más probable que te extravíes al utilizar patrones de diseño es: lees un patrón específico en "Patrones de diseño" y sientes que no lo entiendes, o ni siquiera has leído el trabajo original. . Luego leí algunas cosas concretas como "Re-Talk", "Maravillosas explicaciones" y "Big Talk", y de repente me sentí iluminado. Más tarde, cuando estaba desarrollando, encontré un lugar que era muy consistente con tu comprensión de este modelo, así que comencé a usarlo. Este método se puede usar para practicar (es decir, usted sabe que usar este modo no es necesariamente una buena idea, solo está tratando de implementarlo en un escenario real y el código de práctica no ingresa el código del producto final), pero a menudo se utiliza para diseños reales.

La razón es simple: el patrón de diseño es una técnica para captar conceptos abstractos. El formato estándar para describir patrones incluye descripciones abstractas, ejemplos de código y escenarios de aplicación. Si un programador no puede comprender un patrón de diseño basado en esta información, significa que su pensamiento abstracto inicial no es suficiente para dominar el patrón de diseño, y luego no tiene experiencia suficiente para comprender el código y contactar con los escenarios de aplicación. En pocas palabras, no ha alcanzado el nivel de entrada de "diseño novato". En este estado, el uso reacio de patrones de diseño es inevitable.

Así que el primer punto está claro: si lees la descripción de un patrón de diseño, entonces el requisito previo más básico para usarlo correctamente es que puedas comprender completamente su descripción en el patrón de diseño GoF. Hasta entonces, sólo mira, no es necesario. Ver significa mirar la descripción original o el código específico del patrón. En particular, no se recomienda utilizar analogías de ejemplos de vida específicos para comprender los patrones de diseño. El formato de escritura de un patrón de diseño es una forma de describir un patrón de manera eficiente sin perder precisión. Si no puede entenderlo, solo puede mirar los escenarios de aplicación del código de producción real (porque el patrón de diseño en sí se resume a partir del código específico). No tiene sentido reducir la abstracción de un patrón de diseño a través de analogías para ayudarlo a comprenderlo; incluso si cree que lo comprende, su pensamiento abstracto y su experiencia de desarrollo no son suficientes para usar el patrón correctamente.

Como se mencionó anteriormente, siempre que comprenda bien algunos de los principios básicos del diseño orientado a objetos, puede comenzar a utilizar un patrón incluso antes de leer sobre patrones de diseño. Si ha alcanzado este nivel, naturalmente podrá comprender la descripción sin ninguna presión. Da un paso atrás. Si aún no ha alcanzado este nivel, dado que los patrones en los patrones de diseño son muy comunes, siempre que esté dispuesto a mirar más el código, definitivamente podrá entrar en contacto con él en el código existente. No es difícil de entender verificando el código de la aplicación real con la descripción del libro. Para dar un paso atrás, si nunca ha encontrado un determinado patrón en el código al que está expuesto y nunca ha podido comprender espontáneamente un determinado patrón, entonces este patrón no le sirve de nada y no tiene buscar oportunidades para utilizarlo.

El segundo punto para evitar un uso inadecuado es evitar sobrediseñar. La esencia del exceso de ingeniería aquí es que se paga demasiada complejidad por posibles cambios. De hecho, no existe una conexión necesaria entre el sobrediseño y los patrones de diseño. Siempre que piensas que un lugar va a cambiar, te planteas si deberías añadir complejidad a cambio de flexibilidad. Los patrones de diseño solo proporcionan algunos medios efectivos para que algunos escenarios específicos cambien la complejidad por la flexibilidad. La clave para evitar el exceso de ingeniería es evaluar correctamente si la complejidad introducida por la planificación anticipada vale la pena en comparación con el poder potencial y destructivo del cambio.

Para evaluar correctamente la posibilidad y el poder destructivo del cambio, sólo podemos confiar en la experiencia de la industria, lo cual es una cuestión de calificaciones. Si no tiene suficiente experiencia para evaluar su escenario actual, lo mejor que puede hacer es asumir que no cambiará con frecuencia y simplemente utilizar la estrategia común de alta cohesión y bajo acoplamiento para brindar flexibilidad sin agregar complejidad adicional. Espere hasta que se confirmen los cambios antes de refactorizar.

Sin embargo, la comprensión de los patrones de diseño puede influir en las estimaciones de complejidad. Muchos principiantes en patrones de diseño fácilmente juzgan mal la complejidad de implementar un patrón de diseño y piensan que la flexibilidad está al alcance de su mano. O inconscientemente buscan oportunidades para practicar en sus teléfonos móviles e ignoran los complejos costos. Suponiendo que el programador comprenda completamente un patrón de diseño, creo que al menos se deben considerar estos factores al evaluar la complejidad:

1. Comprenda que cuantos más conceptos haya en un fragmento de código, más difícil será de entender.

2. La complejidad del patrón de diseño en sí.

3. Una vez introducido, para mantener la flexibilidad que aporta el diseño, a qué se debe prestar atención en el desarrollo posterior. ¿Se pueden utilizar restricciones a nivel de código para garantizar que no se destruya la flexibilidad?

4. ¿Qué tan bien entienden los demás miembros del equipo este patrón de diseño?

5. Para la depuración, el posible impacto del análisis estático del código (por ejemplo, el modo observador y el modo visitante a menudo interrumpen el análisis estático y es difícil determinar el estado de ejecución leyendo el código).

Si podemos evaluar de manera aproximada y precisa los factores anteriores y luego tomar una decisión, creo que sigue siendo una decisión de diseño calificada incluso si al final no se realizan cambios.

La verdadera dificultad reside en evaluar el cambio, que sólo puede basarse en la experiencia. Además, es mejor hacer un seguimiento y resumir cada decisión de diseño para acumular experiencia para la siguiente decisión.

Consideraré temporalmente el uso de patrones de diseño.

========================

Dado que el título menciona "El veneno del patrón de diseño", Luego, permítanme hablar sobre el mayor problema del libro "Patrones de diseño": una oración que parece correcta, pero que ha sido malinterpretada y amplificada por algunos libros posteriores, causando la mayoría de los problemas en la implementación real:

Nombra un nuevo patrón Aumentó nuestro vocabulario de diseño. Los patrones de diseño nos permiten diseñar a un nivel más alto de abstracción. Basándonos en el vocabulario de patrones, nosotros y nuestros colegas podemos discutir patrones y utilizarlos al escribir documentación. Los nombres de los patrones nos ayudan a pensar y comunicar ideas de diseño y resultados de diseño a otros.

Esta descripción del elemento "nombre del patrón" se ha ampliado en muchos libros o artículos posteriores: Una función importante de los patrones de diseño es proporcionar un medio conveniente de comunicación para el equipo. Parece correcto. Por ejemplo, puedo decirle a mi colega que aquí se necesita un adaptador. O asígnele el nombre XXXApapter directamente en el código y sus colegas sabrán qué es de un vistazo. La comunicación se vuelve muy fácil, siempre que hayamos leído el patrón de diseño y lo hayamos descrito claramente. El resultado de utilizar patrones de diseño para comunicarse es que las personas que conocen un patrón de diseño no pueden comunicarse con personas que no lo conocen.

La comunicación es algo muy básico e indispensable en un equipo. Otro resultado es que las personas que conocen un determinado patrón de diseño piensan que las personas que no lo conocen no pueden alcanzar el nivel básico. Según el análisis anterior, los patrones de diseño son solo un resumen de los métodos de desarrollo existentes. Es muy posible que alguien sea lo suficientemente capaz de utilizar patrones de diseño de forma espontánea, pero como no ha leído detenidamente el libro "Patrones de diseño", se considera que no ha alcanzado el nivel básico. Esto ha provocado que muchos desarrolladores con ciertas habilidades de programación se sientan disgustados con los patrones de diseño.

El resultado de una mayor extensión es que debido a que los patrones de diseño se han convertido en un medio para identificar si tienen un nivel básico, para poder parecer por encima del nivel básico, debes demostrar que comprendes los patrones de diseño. Incluso si no entiendo el texto original de los patrones de diseño. Esto ha traído al mercado muchas "palabras importantes" y libros "reexplicativos" y, a su vez, ha creado una gran cantidad de principiantes que no comprenden los patrones de diseño del desarrollo real o la lectura del código, y han cometido muchos errores en la práctica. aplicaciones.