2008-08-14 26 views
27

¿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?¿Utiliza patrones de diseño?

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

Nota: Para los fines de esta pregunta, ignore los patrones de diseño 'simples' como Singleton. Estoy hablando de diseñar su código para que pueda aprovechar Controlador de vista de modelo, etc.

Respuesta

54

Cualquier programa grande que esté bien escrito utilizará patrones de diseño, incluso si no son nombrados o no se reconocen como tales. Eso es lo que son los patrones de diseño, los diseños que repetidamente y naturalmente ocurren. Si está interactuando con una API fea, probablemente se encuentre implementando un Facade para limpiarla. Si tiene mensajes entre componentes que necesita desacoplar, puede encontrarse utilizando Observer. Si tiene varios algoritmos intercambiables, puede 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 del todo, terminarás creándolos eventualmente (si eres un programador decente).

Y, por supuesto, si usa un lenguaje moderno, probablemente se verá forzado a usarlo para algunas cosas, ya que están incluidas en las bibliotecas estándar.

3

Intento, sí. Ciertamente ayudan a mantener y a leer su código. Sin embargo, hay personas que abusan de ellos, generalmente (por lo que he visto) forzando a un sistema a un patrón que no existe.

2

Hay muchos patrones de diseño más allá de los simples que se usan en el "mundo real". Buen ejemplo Stackoverflow utiliza el patrón de controlador de vista de modelo. He usado las fábricas de clase varias veces en proyectos para mi empleador, y también he visto muchos proyectos ya escritos usarlos.

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

2

Sí lo hacemos, generalmente sucede cuando comenzamos a diseñar algo y luego alguien se da cuenta de que se asemeja a un patrón existente. Luego lo miramos y vemos cómo nos ayudaría a lograr nuestro objetivo.

También utilizamos patrones que no están documentados pero que surgen del diseño de un lote.

Eso sí, no los usamos mucho.

2

Sí, Factory, Chain of Responsibility, Comando, 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 podían decir suficientes cosas buenas en el latest podcast.

3

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

+0

Pero, ¿cómo puede familiarizarse con él si no intenta usarlo? La primera vez que succionará, pero con el tiempo comenzará a usarlos adecuadamente. En otros trabajos, ¿cómo se puede lograr sin falla? – ep3static

+0

Por supuesto, debe experimentar, pero no con el código de producción. De eso era de lo que estaba hablando. – Patrik

+0

Pero, ¿no es el código de producción la verdadera prueba de que lo que has hecho realmente funciona, y funciona bien? –

1

Sí, uso muchos patrones de diseño bien conocidos, pero también termino construyendo algún software que más tarde descubro que usa un patrón de diseño 'nombrado'. La mayoría de los diseños elegantes y reutilizables podrían llamarse 'patrón'. Es muy parecido a los movimientos de baile. Todos conocemos el vals y el de 2 pasos, pero no todos tienen un nombre para el 'bache y el patinazo', aunque la mayoría de nosotros lo hacemos.

1

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

Son importantes, sí, porque le da un método para hablar sobre el diseño de software de una manera rápida, eficiente y generalmente aceptada. ¿Puedes 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 mayormente una cosa académica.

1

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

Además, he utilizado recientemente un patrón de la fábrica de una clase base para generar y devolver la clase DataContext adecuado que tenía sobre la marcha, usando LINQ .

Los puentes se utilizan cuando se trata cuando se trata de pegar entre sí dos tecnologías diferentes (como Cocoa and Ruby en el Mac, por ejemplo)

Me parece, sin embargo, que cada vez que puedo implementar un patrón, es porque sabía sobre él antes mano. Por lo general, tengo que pensar un poco más ya que creo que debo modificar el patrón original ligeramente para adaptarlo a mis necesidades.

Solo necesita tener cuidado de no convertirse en architecture astronaut!

9

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

Déjenme explicar, nosotros, programadores y diseñadores, todos usamos patrones de diseño ... simplemente no siempre nos damos cuenta. Sé que esto suena a cliché, pero no vas a patrones, los patrones vienen a ti. Usted diseña cosas, podría parecerse a un patrón existente, lo nombra de esa manera para que todos entiendan de lo que está hablando y la razón detrás de su decisión de diseño es más sólida, 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 malinterprete, si es un principiante, los libros sobre patrones le mostrarán cómo una solución se resuelve mejor "usando" sus patrones en lugar de otro diseño defectuoso. Probablemente aprenderá del ejercicio. Sin embargo, debes darte cuenta de que esto no significa que cada situación necesita un patrón correspondiente para resolverlo. Cada situación tiene un capricho aquí y allá que requerirá que pienses en alternativas y tomes una decisión difícil sin una respuesta perfecta. Eso es diseño.

Antipatrón, sin embargo, están en una clase totalmente diferente.Usted realmente quiere a activamente evite anti-patrones. Es por eso que el nombre anti-patrón es tan controvertido.

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

0

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

También soy muy aficionado a Martin Fowler'sPatterns of Enterprise Application Architecture. Cuando se presenta un problema o tarea, cambio a la sección relacionada (es principalmente un libro de referencia) y leo algunas descripciones generales de los patrones. Una vez que tenga una mejor idea del problema general y de las soluciones existentes, comenzaré a ver el camino a largo plazo que mi código probablemente tomará a través de la experiencia de los demás. Termino tomando mejores decisiones.

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

1

Sí, los patrones de diseño se usan ampliamente en el mundo real, y diariamente 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 la nueva clase como una "utilidad que crea una de varias otras clases basadas en una combinación de criterios de entrada", sólo tiene que decir que es una "fábrica abstracto" y todo el mundo al instante entiende lo que Estamos hablando de

4

Sí. Los patrones de diseño pueden ser maravillosos si 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 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 al MVC; utilizado para aplicaciones WPF y Silverlight.

  • Composición: ideal para cuando necesita usar una jerarquía de objetos.

  • Singleton: Más elegante que usar globales 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 la falta de características de idioma y/o deficiencias en un idioma. Por ejemplo, los iteradores ahora están integrados como parte de los idiomas más nuevos.

En general, los patrones de diseño son bastante útiles, pero no debe usarlos en todas partes; justo donde son adecuados para sus necesidades.

1

Sí, los patrones de diseño o los patrones abstractos son parte de mi vida, donde los miro, los empiezo a ver. Por lo tanto, estoy rodeado de ellos. Pero, como sabes, poco conocimiento es algo peligroso. Por lo tanto, le recomiendo leer 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 habla el lenguaje de patrones, su software no llegará muy lejos y se encontrarán en una pesadilla de mantenimiento.

Como sabe, el antipatrón es también algo peligroso y ocurre cuando tiene poca experiencia en patrones de diseño. Y refactorizar antipatrones es mucho más difícil. Como libro recomendado sobre este problema, lea "AntiPatrones: software de refactorización, arquitecturas y proyectos en crisis".

1

Sí.

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

Hasta ahora he visto Adapter, Visitor, Facade, Module, Observer y algo muy parecido a Composite e Iterator. Debido a la naturaleza de los idiomas, se utilizan principalmente patrones estruturales. Además, no siempre estoy seguro de que las personas que los usan lo hagan conscientemente: D