¿Alguien puede explicar la obsesión con los patrones y antipatrones en la programación? Pregunto porque no tengo ni idea de qué significan los patrones. Cuando me enfrento a una tarea de programación, pienso un poco en el problema, escribo algunas estructuras de datos que creo que serán relevantes, crea un prototipo de solución, separa algunos módulos e itera. En ninguna parte del proceso pienso "Oh, necesito el patrón FunkyLookyTastic aquí".
16
Respuestas:
Un patrón es un enfoque común para resolver un tipo común de problema; Nada más y nada menos. Al conocerlos y comprenderlos, puede utilizar las experiencias de otras personas para guiarlo hacia el tipo de solución que se ha demostrado que funciona bien, evitar los escollos que se han encontrado en el pasado y discutir la solución utilizando una terminología que sea familiar para otros que Conoce ese patrón.
Por supuesto, puede llegar a una buena solución sin usar explícitamente un patrón, e igualmente puede encontrar una mala solución al tratar de aplicar un patrón que realmente no se ajuste a su problema particular. Creo que la "obsesión" que observas generalmente proviene de personas que acaban de descubrir el concepto y piensan que es bastante más poderoso de lo que realmente es. La mayoría de las personas los reconocerá rápidamente por lo que son: una herramienta útil, no una bala mágica.
Los antipatrones, por otro lado, son comportamientos comúnmente observados que tienden a reducir la calidad del código. Nuevamente, es útil conocer y comprender algunos de estos para que pueda evitar tal comportamiento e intentar corregirlo (con argumentos razonados) cuando lo observa en otros. Algunos describirían el uso excesivo de patrones como un antipatrón.
fuente
Los patrones son tanto el conocimiento destilado de los programadores en un libro de cocina como una forma útil para que los programadores se comuniquen.
Como sugieren otras respuestas, los patrones realmente son soluciones comunes a problemas comunes. El beneficio es que a menudo puede obtener mejores soluciones utilizando un patrón existente o descubrir posibles dificultades antes de comenzar a codificar.
El otro beneficio es cuando estás hablando con alguien sobre tu código. Los patrones son otro tipo de jerga que condensa descripciones extensas en pocas palabras. Intente explicar "entonces tenemos un observador agregado por la fábrica" sin referirse a los patrones. Puedes hacerlo, pero lleva mucho tiempo.
fuente
La mayoría de los desarrolladores se estremecerán ante cualquier nuevo paradigma o metodología que surja. Lo hice cuando escuché por primera vez sobre los patrones de diseño. Los patrones de diseño son exactamente lo que sugiere el nombre: un diseño o plantilla para crear clases y modelar su comportamiento e interacción de una manera predecible
Echa un vistazo a las casas. Tienen algunas similitudes. Cada casa tiene una sala de estar, cocina, dormitorio, baño, aseo para un mínimo. Nadie construirá una casa sin baño, ¿verdad? Los apartamentos tienen un patrón diferente al de los bunglows. Los castillos tienen un patrón completamente diferente. La ropa también tiene patrones. Una chaqueta y una camisa formal tienen el mismo diseño básico, pero tienen comportamientos diferentes: no usarás una chaqueta de vaquero para una entrevista. Del mismo modo, las clases y sus acciones se pueden agrupar según su comportamiento y diseño. Observar los elementos comunes en sus comportamientos le da patrones de diseño para las clases.
En mi opinión, los patrones de diseño solo son importantes si la reutilización y la capacidad de expansión son las principales preocupaciones. Si crea aplicaciones pequeñas (digamos menos de 10 clases), es posible que no las necesite en absoluto. Pero los proyectos grandes, especialmente aquellos que tienen grandes equipos trabajando en ellos y tienen un largo mantenimiento y ciclos de adición de características, definitivamente necesitarán patrones. Ni siquiera es una opción en grandes proyectos.
Eche un vistazo a algunos tutoriales en línea sobre patrones. Wikipedia tiene un buen conjunto de artículos. Este sitio también es bueno: http://sourcemaking.com/ . Si eres un programador experimentado, descubrirás que te has encontrado con algunos patrones, tal vez incluso has implementado algo similar tú mismo sin saberlo por un nombre en particular.
¡No los ignores por completo! Puede encontrarlos útiles en el futuro si no ahora. La clave para abordar los Patrones de diseño con una mente abierta es preguntar: "¿Qué pasará si no uso patrones de diseño?" Los patrones no se consideran "curas" (aunque puede usarlos como una cura para un problema); más bien, encarnan el dicho "más vale prevenir que curar".
De todos modos, advertiría contra una obsesión con la implementación de patrones donde y cuando veas un pequeño pretexto para usarlo. Enfrenté este problema en un proyecto donde el arquitecto estaba convencido de que sin DP el proyecto sería un completo desastre. Tuvimos una reunión de grupo donde los ingenieros cambiaron el diseño y señalaron que muchos patrones que él recomendó no tendrían otro uso que mostrar "wow mira los hermosos patrones". Se necesitaron muchas convenciones y algunas negociaciones para reducir el número de lugares donde los patrones se usaban solo para una necesidad.
fuente
Las personas que respondieron son correctas en términos de "programación basada en patrones" como se piensa normalmente. Tengo una definición ligeramente diferente que encuentro más relevante para lo que estoy haciendo y tiendo a usar la "programación basada en patrones" para describir un enfoque de complemento en lugar de un enfoque de planificación.
Desde que programo los complementos jQuery, un complemento de nube CMS y complementos de comercio electrónico, la "programación basada en patrones" desde esa perspectiva significa mirar la tecnología central y qué casos de uso existen y golpear los más estadísticamente relevantes. Los complementos en particular tienen que estar muy basados en patrones para que se ajusten bien al contexto de programación.
Sin embargo, es mejor aplicar un patrón DESPUÉS de ver casos de uso válidos en múltiples proyectos para que sea estadísticamente válido para su reutilización.
fuente