¿Cuál es el patrón de diseño más utilizado? [cerrado]

24

¿Qué patrón de diseño crees que es el más popular?

Tamara Wijsman
fuente
Ambos, si es posible ...
Tamara Wijsman
"cambiar en lugar de polimorfismo"?
mlvljr
@Bigown: Deberías "aceptar" la respuesta que más te haya gustado. Si no le gusta ninguna de las respuestas, ofrezca una recompensa.
Macneil
2
votó para cerrar como no constructivo, esto es básicamente una encuesta. A menos que alguien tenga un estudio empírico que citar, todas las respuestas serán conjeturas o favoritas (o no favoritas) y los votos reflejarán sentimientos personales. El resultado final será una lista de patrones de diseño sin profundidad. Por lo tanto, no constructivo.
Steven A. Lowe
@ Steven: Estoy bastante seguro de que Jay tiene razón con The Big Ball of Mud. :-)
Tamara Wijsman

Respuestas:

39

Estoy bastante seguro de que lo más común es 'La gran bola de barro'. Lamentablemente para todos nosotros.
http://en.wikipedia.org/wiki/Big_ball_of_mud

Arrendajo
fuente
De acuerdo, cuando comienzas un nuevo proyecto, todo está bien estructurado y documentado, pero a medida que se acerca la fecha límite, todo termina como una gran bola de barro
Arturo Molina
3
@Arturo - Esa es una posible razón. Otros: 1) Pequeño proyecto iniciado por un programador inexperto que tiene un éxito inesperado y luego crece más allá de su propósito original. 2) La tendencia de los programadores inexpertos a ser asignados al mantenimiento, que luego no tienen orientación o comprensión de la arquitectura original, por lo que simplemente piratean cosas y empeora a medida que el sistema envejece. 3) El equipo usa la tecnología incorrecta, o una nueva tecnología con la que no están familiarizados y la usan mal en un nuevo proyecto, y se acumula antes de la fecha límite :)
Jay
1
LOL: si pudiera agregarle más puntos, lo haría. Excelente (y triste) observación.
luis.espinal
25

MVC y sus variaciones es definitivamente uno de los mejores patrones de diseño.

ysolik
fuente
2
Iba a decir que la pregunta del OP es bastante tonta (todavía creo que lo es). Sin embargo, su respuesta es bastante correcta en mi opinión. Si hay un patrón (y sus variaciones) que se usa más o menos de manera consistente, es este. +1 por tu buena respuesta.
luis.espinal
21

Si estás hablando de patrones de diseño Gang-of-Four , tendría que decir Singleton . Este es un estado de cosas realmente triste, casi como si los programadores escucharan sobre la magia de los patrones de diseño y luego simplemente se detuvieran después del primero.

Si estás hablando de patrones de estilo arquitectónico (en otras palabras, patrones de diseño que abarcan múltiples clases o capas), tendría que decir MVC . Algunos otros populares son el patrón de repositorio y el localizador de servicios .

Jaco Pretorius
fuente
2
¡Es aún más triste cuando consideras que muchas personas consideran que el Singleton es un antipatrón!
RichardOD
1
@ RichardDod, ¿triste que la gente lo considere uno cuando no lo es, o triste que la gente lo use cuando es un antipatrón?
Matt Olenik
Lo que quiero decir es que es triste que sea tan popular, parece ser una entrevista favorita. La última vez que fui entrevistado me preguntaron cómo codificaría un Singleton, y mi respuesta fue que no usaría un contenedor de IoC como Unity para manejar eso por mí.
RichardOD
@ RichardDOD: no es único que se considere un antipatrón. Es el uso indebido de él que es un antipatrón. Muy pocos casos realmente exigen / necesitan singleton, y en entornos con contenedores que controlan la granularidad de los recursos, ni siquiera son necesarios. Cuando ve un singleton en una base de código Java moderna, por ejemplo, eso suele ser una bandera roja para un uso antipatrón (no en el patrón singleton en sí)
Luis.espinal
@Jaco - Tendría una opinión diferente a la tuya. Creo que el compuesto, la estrategia y la plantilla (y sus múltiples reencarnaciones) se han vuelto mucho, mucho más frecuentes que el singleton, especialmente desde que nos hemos centrado en la composición estructural sobre la herencia durante la última década más o menos.
luis.espinal
16

Observador

Si alguna vez has usado un evento. Has usado Observer.

Steven Evers
fuente
¡Este debe ser el ganador!
Fredrik Wallenius
7

Decorador

Agregue funcionalidad a un objeto en tiempo de ejecución a través de la composición. Mi favorito personal

Editar: También Factory es probablemente uno de los más comunes.

JD Isaacks
fuente
5

Fachada

Piense en cualquier interfaz REST como Twitter o las API SO. Está ocultando un montón de cosas de back-end que, al menos en el caso de los twitters, pueden ser terriblemente complejas.

¿Me importa en qué tweets de db tables @ apklusk están almacenados? ¿Y que tiene un caché rápido? ¿Y que @shemnon tiene tan pocos lectores que los tweets siempre están fuera de memoria? Esa es la magia de la fachada.

Shemnon
fuente
5

Patrón de estrategia

Si alguna vez ha usado la inyección de dependencia, ha usado el patrón de estrategia.

richeym
fuente
De acuerdo, la estrategia además de la plantilla y el compuesto (y sus múltiples variaciones y combinaciones.)
luis.espinal
5

¿Por qué nadie ha mencionado aún el iterador ? Especialmente con todos los mapas que componen estructuras de datos complejas ... es la que más uso. ¿O estamos hablando de patrones que volvemos a implementar?

A la playa
fuente
3

Me sorprende que nadie haya mencionado el patrón Factory, en mi experiencia, es uno de los patrones más utilizados (y también más abusados). Si no es el primero, probablemente el singleton debería ser el primero, hubiera pensado que sería un segundo cercano.

AlexC
fuente
3

Junto con mi respuesta anterior, voy a agregar una nueva que encontré hoy de mi bestia de un proyecto heredado:

Copiar pegar

Mientras depuraba me encontré con un código que llamaba a 2 funciones con nombres similares:

if(x)
   Func1
else
   Func2

Func1 y Func2 tenían los mismos parámetros. Los saqué y difundí, y son 100% iguales, excepto para las llamadas Func1 Func3 y Func2 llamadas Func4. Los saqué y los distinguí. 100% igual, excepto por 1 línea. Por lo tanto, un programador anterior decidió copiar y pegar dos funciones anidadas de 50 líneas, en lugar de agregar un parámetro de indicador, a 2 funciones privadas utilizadas en exactamente 1 lugar. Eso me hace querer llorar.

Jay
fuente
2

Hablando de patrones de diseño Gang-of-Four, no puedo pensar en un programa que no use el patrón Observer. Además, como mencionó Jaco, Singleton también se usa mucho, desafortunadamente se ha convertido en un martillo (cualquier programador lo usa incluso si no es completamente necesario).

Cristian
fuente
1
Es curioso, pero nunca tuve la necesidad de usar un Singleton. Si necesito un lugar para mantener el estado global, lo pongo en un archivo de configuración y uso una clase normal para acceder a él.
Robert Harvey
Por supuesto, en esos casos no es necesario ... ¿qué pasa cuando realmente necesita un objeto para hacer algún trabajo, sincrónicamente y seguro para subprocesos? Singleton no es solo para mantener el estado de algunas variables estáticas, es un objeto real con trabajo real que hacer, etc.
Cristian
El único tiempo que he visto la necesidad es conexiones de base de datos. Dicho esto, casi todas las clases de "Servicio" (léase: similar a la fábrica) en este proyecto en el trabajo es un singleton, almacenado en la $_SESSIONvariable PHP .
Tarka
2

Interprete

Raramente implementado, de uso frecuente. Selectores XPATH, XSLT, Regex, jQuery, etc.

Jesse Millikan
fuente
1

Me sorprende que nadie haya dicho "Constructor" todavía. O "Adaptador". Probablemente no sean tan exóticos como algunos de los otros mencionados, pero los uso todo el tiempo. Factory y Abstract Factory también son muy comunes (pero ya están tomadas).

Tim Claason
fuente
1

Especificación

No creo que esté listado en el GoF, pero uso variaciones de él todo el tiempo.

John Kraft
fuente
1

El patrón de diseño más utilizado es, obviamente, el espagueti .

SK-logic
fuente
0

A nivel de diseño de software, diría que Compuesto, Estrategia y Plantilla (y, en menor medida, Fábrica) son los más utilizados. Durante la última década más o menos, hemos visto una preferencia por la composición sobre la herencia al construir nuestros sistemas utilizando un diseño OO. Como resultado, la combinación de los patrones recién mencionados juega un papel mucho más importante que todos los demás IMO.

Arquitectónicamente, abogaría por MVC en la empresa, y patrones basados ​​en máquinas de estado en el lado incrustado de las cosas.

luis.espinal
fuente