¿Usas patrones de diseño?


¿Cuál es la penetración de los patrones de diseño en el mundo real? ¿Los usas en tu trabajo diario-discutiendo cómo y dónde aplicarlos con tus compañeros de trabajo-o siguen siendo más un concepto académico?

¿Realmente proporcionan valor real a su trabajo? ¿O son solo algo de lo que la gente habla para sonar inteligente?

Nota: Para el propósito de esta pregunta, ignore patrones de diseño 'simples' como Singleton. Estoy hablando de diseñar tu código para puede aprovechar Model View Controller , etc.

Author: Chris, 2008-08-14

15 answers

Cualquier programa grande que esté bien escrito usará patrones de diseño, incluso si no son nombrados o reconocidos como tales. Eso es lo que son los patrones de diseño, diseños que ocurren repetidamente y naturalmente . Si estás interactuando con una API fea, es probable que te encuentres implementando un Facade para limpiarlo. Si tienes mensajes entre componentes que necesitas desacoplar, puedes encontrarte usando Observer. Si tienes varios algoritmos intercambiables, podrías terminar usando Strategy.

Vale la pena conocer los patrones de diseño porque es más probable que los reconozca y luego converja en una solución limpia más rápidamente. Sin embargo, incluso si no los conoces en absoluto, terminarás creándolos eventualmente (si eres un programador decente).

Y, por supuesto, si está utilizando un lenguaje moderno, probablemente se verá obligado a usarlos para algunas cosas, porque están integrados en las bibliotecas estándar.

 53
Author: Derek Park,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-14 20:00:38

En mi opinión, la pregunta: "¿Utiliza patrón de diseño?", solo es un poco defectuoso porque la respuesta es universalmente SÍ.

Permítanme explicar, nosotros, programadores y diseñadores, todos usamos patrones de diseño... no siempre nos damos cuenta. Sé que esto suena a cliché, pero no vas a los patrones, los patrones vienen a ti. Diseñas cosas, podría parecer un patrón existente, lo nombras de esa manera para que todos entiendan de lo que estás hablando y la razón detrás de tu la decisión de diseño es más fuerte, sabiendo que se ha discutido ad nauseum antes.

Yo personalmente uso los patrones como una herramienta de comunicación. Eso es. No son soluciones de diseño, no son mejores prácticas, no son herramientas en una caja de herramientas.

No me malinterpretes, si eres un principiante, los libros sobre patrones te mostrarán cómo se resuelve mejor una solución "usando" sus patrones en lugar de otro diseño defectuoso. Probablemente aprenderá del ejercicio. Sin embargo, usted tiene que darse cuenta de que esto no significa que cada situación necesita un patrón correspondiente para resolverlo. Cada situación tiene una peculiaridad aquí y allá que le requerirá pensar en alternativas y tomar una decisión difícil sin una respuesta perfecta. Eso es diseño.

Sin embargo, los anti-patrones están en una clase totalmente diferente. En realidad, quiere evitar activamente los anti-patrones. Es por eso que el nombre anti-patrón es tan controvertido.

Para volver a su original pregunta:
"¿Uso patrones de diseño?", Sí!
"¿Me inclino activamente hacia los patrones de diseño?", No.

 10
Author: Coincoin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-14 20:16:55

Sí. Los patrones de diseño pueden ser maravillosos cuando se usan apropiadamente. Como mencionaste, ahora estoy usando Model-View-Controller (MVC) para todos mis proyectos web. Es un patrón muy común en el espacio web que hace que el código del lado del servidor sea mucho más limpio y bien organizado.

Más allá de eso, aquí hay algunos otros patrones que pueden ser útiles:

  • MVVM (Model-View-ViewModel): un patrón similar a MVC; utilizado para aplicaciones WPF y Silverlight.

  • Composición: Gran para cuando necesite usar una jerarquía de objetos.

  • Singleton: Más elegante que usar globals para almacenar elementos que realmente necesitan una sola instancia. Como mencionaste, un patrón simple pero tiene sus usos.

Vale la pena señalar que un patrón de diseño también puede resaltar una falta de características del lenguaje y/o deficiencias en un lenguaje. Por ejemplo, los iteradores ahora están integrados como parte de lenguajes más nuevos.

En general, los patrones de diseño son bastante útiles, pero usted no debe usarlos en todas partes; solo donde son un buen ajuste para sus necesidades.

 4
Author: Justin Ethier,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-07-18 13:37:18

Lo intento, sí. De hecho, ayudan a mantener y legibilidad de su código. Sin embargo, hay personas que abusan de ellos, por lo general (por lo que he visto) al forzar un sistema a un patrón que no existe.

 3
Author: Thomas Owens,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-14 19:41:40

Trato de usar patrones si son aplicables. Creo que es un poco triste ver a los desarrolladores implementar patrones de diseño en el código solo por el bien de ello. Sin embargo, para la tarea correcta, los patrones de diseño pueden ser muy útiles y poderosos.

 3
Author: Patrik Svensson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-14 19:46:04

Hay muchos patrones de diseño más allá de lo simple que se utilizan en el "mundo real". Buen ejemplo Stackoverflow utiliza el Patrón de Controlador de Vista de Modelo. He usado Class Factories varias veces en proyectos para mi empleador, y he visto muchos proyectos ya escritos usándolos también.

No estoy diciendo que todos los patrones de diseño se estén utilizando, pero muchos sí.

 2
Author: Tanerax,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-14 19:42:32

Sí, por lo general sucede cuando empezamos a diseñar algo y luego alguien se da cuenta de que se asemeja a un patrón existente. Luego le echamos un vistazo y vemos cómo nos ayudaría a lograr nuestro objetivo.

También utilizamos patrones que no están documentados pero que surgen de diseñar mucho.

Eso sí, no los usamos mucho.

 2
Author: mbillard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-14 19:44:40

Sí, Factory, Chain of Responsibility, Command, Proxy, Visitor y Observer, entre otros, están en uso en una base de código con la que trabajo a diario. En cuanto a MVC, este sitio parece usarlo bastante bien, y los desarrolladores no pudieron decir suficientes cosas buenas en el último podcast .

 2
Author: Greg Hurlman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-14 20:02:37

Sí, uso muchos patrones de diseño bien conocidos, pero también termino construyendo algún software que luego descubro que usa un patrón de diseño 'con nombre'. La mayoría de los diseños elegantes y reutilizables podrían llamarse 'patrón'. Se parece mucho a los movimientos de baile. Todos conocemos el vals y el 2-step, pero no todos tienen un nombre para el 'bump and scoot', aunque la mayoría de nosotros lo hacemos.

 1
Author: Brad Barker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-14 19:47:18

MVC es muy conocido, así que sí usamos patrones de diseño bastante. Ahora, si estás preguntando por la Banda de Cuatro patrones, hay varios que uso porque otros mantenedores sabrán el diseño y lo que estamos trabajando en el código. Sin embargo, hay varios que permanecen bastante oscuros para lo que hacemos, por lo que si uso uno no obtengo todos los beneficios de usar un patrón.

Son importantes, sí, porque le da un método de hablar de diseño de software en un rápido manera eficiente y generalmente aceptada. ¿Puede hacer mejores soluciones personalizadas, bueno sí (sorta)?

Los patrones originales de GoF se extrajeron del código de producción, por lo que catalogaron lo que ya se estaba utilizando en la naturaleza. No son puramente o incluso en su mayoría una cosa académica.

 1
Author: Dan Blair,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-14 19:47:20

Encuentro el patrón MVC realmente útil para aislar la lógica de su modelo, que puede reutilizarse o trabajarse sin demasiados problemas. También ayuda a desconectar sus clases y facilita las pruebas unitarias. Escribí sobre ello recientemente (sí, enchufe descarado aquí...)

Además, recientemente he usado un patrón de fábrica de una clase base para generar y devolver la clase DataContext adecuada que necesitaba sobre la marcha, usando LINQ.

Los puentes se usan cuando se intenta cuando se intenta para unir dos tecnologías diferentes (comoCocoa y Ruby en el Mac, por ejemplo)

Encuentro, sin embargo, que cada vez que implemento un patrón, es porque lo sabía de antemano. Un pensamiento adicional generalmente entra en él como me parece que debo modificar el patrón original ligeramente para adaptarse a mis necesidades.

Solo tiene que tener cuidado de no convertirse en y astronauta de arquitectura !

 1
Author: Louis Salin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-14 19:50:15

Sí, los patrones de diseño se utilizan en gran medida en el mundo real, y a diario por muchas de las personas con las que trabajo.

En mi opinión, el mayor valor proporcionado por los patrones de diseño es que proporcionan un lenguaje universal de alto nivel para transmitir el diseño de software a otros programadores.

Por ejemplo, en lugar de describir su nueva clase como una "utilidad que crea una de varias otras clases basadas en alguna combinación de criterios de entrada", simplemente puede decir que es un " resumen fábrica" y todo el mundo entiende al instante de lo que estás hablando.

 1
Author: Vinnie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-27 17:50:05

Sí, los patrones de diseño o patrones abstractos son parte de mi vida, donde miro, empiezo a verlos. Por lo tanto, estoy rodeado de ellos. Pero, como sabes, poco conocimiento es algo peligroso. Por lo tanto, le recomiendo encarecidamente que lea el libro GoF.

Uno de los principales problemas sobre los patrones de diseño, la mayoría de los desarrolladores simplemente no entienden la idea, o no creen en ellos. Y la mayoría de las veces discuten sobre las variables, bucles o interruptores. Pero, creo firmemente que si no lo haces hable el lenguaje del patrón, su software no irá muy lejos y se encontrará en una pesadilla de mantenimiento.

Como sabes, anti-patrón también es algo peligroso y sucede cuando tienes poca experiencia en patrones de diseño. Y refactorizar anti-patrones es mucho más difícil. Como un libro recomendado sobre este problema por favor lea "AntiPatterns: Refactoring Software, Architectures, and Projects in Crisis".

 1
Author: baris.aydinoz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-03-30 11:56:41

Sí.

Incluso los estamos usando en mi trabajo actual: Codificación de Mainframe con COBOL y PL/I.

Hasta ahora he visto Adaptador, Visitante, Fachada, Módulo, Observador y algo muy cercano al Compuesto y al Iterador. Debido a la naturaleza de los idiomas, se utilizan principalmente patrones struturales. Además, no siempre estoy seguro de que las personas que los usan lo hagan conscientemente: D

 1
Author: Anders Johansen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-19 08:45:20

Uso absolutamente patrones de diseño. En este punto doy MVC por sentado como un patrón de diseño. Mi razón principal para usarlos es que soy lo suficientemente humilde como para saber que probablemente no soy la primera persona en encontrar un problema en particular. Rara vez comienzo una pieza de código sabiendo qué patrón voy a usar; constantemente observo el código para ver si se desarrolla naturalmente en un patrón existente.

También soy muy aficionado a Martin Fowler Patrones de Empresa Arquitectura de aplicaciones . Cuando un problema o tarea se presenta, volteo a la sección relacionada (es principalmente un libro de referencia) y leo algunas descripciones generales de los patrones. Una vez que tengo una mejor idea del problema general y las soluciones existentes, empiezo a ver el camino a largo plazo que mi código probablemente tomará a través de la experiencia de otros. Termino tomando decisiones mucho mejores.

Los patrones de diseño definitivamente juegan un papel importante en todas mis ideas "para el futuro".

 0
Author: Barrett Conrad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-14 21:50:32