¿Qué es la programación basada en patrones?

16

¿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í".

davidk01
fuente
12
Obsession con patrones es de una forma un anti-patrón
Anto
1
Sobre el último punto, estoy de acuerdo en parte. Hay algunos patrones que nombraré, pero algunos patrones de libros de texto parecen variantes menores entre sí, y lo interesante es generalmente cómo se adapta el patrón para que se adapte al caso específico de todos modos, por lo que ciertamente no debe ser dogmático sobre las cosas.
Steve314
1
¿Estás programando en un lenguaje dinámico? Muchos de los patrones a los que se refieren las personas son formas de sortear las limitaciones en Java.
johncip
Además, tratar cada problema por separado no se adapta al tamaño del equipo. Por ejemplo, con un marco MVC, los modelos a menudo se normalizan, pero las vistas pueden tratar con datos derivados. Hay algunas formas de manejar eso, pero las personas no deberían resolver ese problema (potencialmente diferente) cada vez que se encuentra. Y otros que lean el código no deberían tener que descubrir cómo se resolvió el problema X en este caso, en oposición a todos los demás.
johncip

Respuestas:

19

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.

Mike Seymour
fuente
1
Por ejemplo, los famosos patrones orientados a objetos de pandillas de cuatro fueron compilados a partir de la experiencia de los autores y las personas con las que estuvieron en contacto. La razón por la que algunos patrones tienen varios nombres: se reinventaron independientemente y se nombraron varias veces. La mayoría de los programadores reinventarán naturalmente algunos patrones que quedan en sus propios dispositivos, y algunos antipatrones, por supuesto.
Steve314
3
la "obsesión" que observas generalmente proviene de personas que acaban de descubrir el concepto , principalmente cierto, en mi humilde opinión. creo que hay quienes creen que debe abordar un problema con patrones listos ... y si su solución no incluye patrones obvios, entonces su solución es incorrecta ... deberíamos tomarnos el tiempo para aprender patrones, cómo se usan, y cuándo y cuándo no usarlos - son parte de nuestra caja de herramientas
IAbstract
9

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
2
+1 para comunicación. La rutina diaria es mucho más fácil cuando todos están en la misma página y tienen un léxico común.
Ampt
3

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.

DPD
fuente
1

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.

Jason
fuente