@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. :-)
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.
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 .
¡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.
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.
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?
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.
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.
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).
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.
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).
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.
Respuestas:
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
fuente
MVC y sus variaciones es definitivamente uno de los mejores patrones de diseño.
fuente
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 .
fuente
Observador
Si alguna vez has usado un evento. Has usado Observer.
fuente
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.
fuente
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.
fuente
Patrón de estrategia
Si alguna vez ha usado la inyección de dependencia, ha usado el patrón de estrategia.
fuente
¿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?
fuente
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.
fuente
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:
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.
fuente
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).
fuente
$_SESSION
variable PHP .Interprete
Raramente implementado, de uso frecuente. Selectores XPATH, XSLT, Regex, jQuery, etc.
fuente
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).
fuente
Especificación
No creo que esté listado en el GoF, pero uso variaciones de él todo el tiempo.
fuente
El patrón de diseño más utilizado es, obviamente, el espagueti .
fuente
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.
fuente