¿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?


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


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.


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 .


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


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.


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.


5

Patrón de estrategia

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


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?


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.


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.


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).


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.


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).




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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.