2010-10-21 16 views
14

Estaba leyendo Design patterns página en Wikipedia. Y una sección más específica de "Crítica". ¿Podrías dirigirme a algunos artículos o libros sobre las deficiencias de los patrones de diseño?Diseño de patrones fuentes de crítica

+0

sobre un patrón específico (por ejemplo [singletons] (http://googletesting.blogspot.com/2008/08/by-miko-hevery-so-you-join-new-project.html)) o sobre [todos los patrones de diseño] (http://norvig.com/design-patterns/) – jball

+0

Mis dos centavos: si un "patrón de diseño" debe considerarse en términos de un "nombre", significa que la tarea/proceso es demasiado complejo y/o no encaja fácilmente en el modelo o paradigma expuesto. (Utilizo muchos "patrones de diseño" todo el tiempo; no tienen nombre para mí, excepto para las discusiones académicas.) –

+0

@jball, quizás de manera más general será mejor. – kofucii

Respuesta

24

La mayoría de las críticas a los patrones de diseño que he encontrado se relacionan con un disgusto por la estructuración y el etiquetado de lo que consideran buenas prácticas orientadas a objetos. La mayoría de los patrones se reducen a la programación de interfaces y otros principios SÓLIDOS. La sensación es que cuando enseñamos patrones, hacemos que los desarrolladores, especialmente los desarrolladores principiantes, intenten meter todos los problemas en el conjunto de patrones que han aprendido, lo que puede crear problemas más obtusos y engorrosos que si hubieran sido más "directos". enfoque.

Tiendo a estar de acuerdo con el sentimiento de que una vez que comienzas a aprender patrones, tienden a usarlos en exceso, sin embargo, normalmente te mueves rápidamente de esa etapa y en una carrera de software mucho más productiva y profesional después.

Como beneficio adicional, here is a bit of mild criticism from Jeff Atwood y some critical insights from Mark Dominus

+0

Gran resumen, gracias. – kralyk

+0

Creo que usar demasiado es realmente bueno: a través de la experiencia (uso excesivo) aprendes cuándo usarlos y cuándo no. – paul23

3

Una gran crítica contra los patrones de diseño se trata de cuánto muchos patrones de diseño "genéricas" son en realidad. Por ejemplo, la implementación del Patrón de estrategia parece ser más relevante (y compleja) en los idiomas que carecen de funciones lambdas/de primera clase (compare el enfoque "funcional" de Java vs. Ruby o incluso el de C#, here).

Pero creo que este argumento no niega el hecho de que existen patrones de diseño, y que son una muy buena forma de entender la arquitectura del software, más independiente del lenguaje. Incluso si algún patrón de diseño tiene una implementación más fácil en un idioma determinado.

Por supuesto, estoy de acuerdo en que la mayoría de los patrones de diseño empresarial no cabrían en un lenguaje funcional puro. Pero creo que el mundo funcional también tiene su propio conjunto de patrones de diseño (como el Monad).

2

Los patrones de diseño fueron promocionados mucho hace unos diez años; me parece que la mayoría de las críticas se refieren a aplicaciones de gran formato y a aplicar todos los patrones que se puedan imaginar siempre que se pueda. Este acalorado debate es bastante aburrido cuando quitas el factor de despotricar, sí, demasiado de todo no es bueno y para un programador inexperto con un martillo todo parece un clavo.

De vez en cuando, alguien descubre que algo que ha estado haciendo tiene un nombre y comenta que no merece tener un nombre (falta el hecho de que los patrones de diseño se refieren a nombrar cosas a veces obvias que puedes hablar de ellos).

Aparte de eso, básicamente te queda el hecho de que algunos idiomas tienen algunos patrones incorporados, y otros no, y el debate académico sobre cómo con el tiempo algunos patrones se convierten en características del lenguaje de programación.

No he visto muchas críticas válidas relacionadas con los patrones de diseño además de eso. Definitivamente existen, a veces son útiles, no tienes que conocerlos todos cuando alguien te despierta a las 3 AM, y eso es todo. :)

0

Los patrones de diseño generalmente se presentan como un conjunto de trucos en un lenguaje de programación específico, generalmente Java o C++. Por lo general, no se explica cuándo y por qué se debe usar un patrón, y cuándo es mejor no usarlo. Por lo general, no se explica lo que sucedería en un lenguaje de programación totalmente diferente.

Entonces uno tiene la impresión de que 1) los patrones de diseño provienen del cielo, inventados por genios, 2) el libro de GoF necesita ser memorizado, 3) los patrones deben aplicarse siempre y cada vez más en cada situación.

En mi opinión, los patrones de diseño son altamente específicos del lenguaje (LISP tiene un conjunto totalmente diferente de "patrones de diseño" que Java) y específicos del problema (dependiendo del proyecto, use o no un patrón aunque es "teóricamente" aplicable a este lugar en su código). El libro de GoF es un complemento útil de un manual de lenguaje Java, pero no un conjunto de principios eternos sobre "programación en general".

-1

Estoy seguro de que los patrones de diseño ayudan a estructurar cursos educativos sobre técnicas de programación, pero no creo que sea útil que se conviertan en una lingua franca en la industria del software. Pueden ser contraproducentes como una forma de comunicar el diseño porque obligan al diseño a ajustarse a los patrones establecidos, permiten que el diseño se describa demasiado casualmente y obligan a cualquiera que intente comprender el diseño a leer un libro sobre patrones de diseño.

1

El propio Alan Kay es muy crítico con los patrones porque no cree que el software deba ser tan cacareada. Here's a 2012 Dr. Dobbs interview with Kay.

"Lo más desastroso sobre la programación - que elegir una de las 10 cosas más desastrosos sobre la programación. - hay un movimiento muy popular basado en los lenguajes de patrones Cuando Christopher Alexander primero hizo que en la arquitectura, que estaba mirando a 2000 años de maneras en que los humanos se han puesto cómodos. Así que había algo en ello, porque estaba lidiando con un genoma que no había cambiado tanto. Creo que obtuvo unos cientos de valiosos patrones de eso. tratar de hacer eso en informática es la suposición de que sabemos algo acerca de la programación. Por lo tanto, extraer patrones de las prácticas de programación actuales los ennoblece de una manera que no se merecen. De hecho, les da más prestigio ".