2010-05-07 41 views
6

He estudiado e implementado patrones de diseño desde hace algunos años, y me pregunto. ¿Cuáles son algunos de los patrones de diseño más nuevos (desde el GOF)? Además, ¿qué debería uno, similar a mí, estudiar [en el camino del diseño de software] a continuación?Nuevos patrones de diseño/estrategias de diseño

Nota: He estado utilizando TDD y UML desde hace un tiempo. Tengo curiosidad sobre los cambios de paradigma más nuevos o los patrones de diseño más nuevos.

Respuesta

2

Me sorprende que nadie haya mencionado el libro de Martin Fowler Patterns of Enterprise Application Architecture. Este es un libro excepcional con decenas de patrones, muchos de los cuales se utilizan en el diseño moderno de ORM (repositorio, registro activo), junto con una serie de patrones de capa de interfaz de usuario. Muy recomendable.

+0

Una vez más, quiero señalar que esos no son realmente patrones de diseño, son patrones de arquitectura. Similar, pero mucho más alto nivel. –

1

Un cambio enorme desde un aspecto de mantenimiento es el uso de DVCS. Si usted no sabe lo que uno es o no ha utilizado uno, le recomiendo leer sobre los dos bateadores duro:

Mercurial (hg): https://www.mercurial-scm.org/
git: http://git-scm.com/

que han hecho bastante para cambiar el flujo de trabajo del entorno de programación común. No es realmente un patrón/diseño que planteo, pero no creo que TDD o UML sean diseños/patrones técnicos, ya sea en algún nivel. Tal vez más como prácticas comunes en torno a la programación.

+1

No consideraría las tecnologías relacionadas con VC para cambiar mucho el flujo de trabajo. Consideré TDD y UML porque cambia su enfoque para diseñar y resolver un problema. – monksy

+2

-1, no relacionado con los patrones de diseño – harto

2

yo soy un ávido seguidor y defensor de la PCMEF (now PCBMER) framework

Here's una visión simple de la misma.

Entiende que los sistemas empresariales son enormes y complejos, y al combinar un conjunto de otros patrones de diseño en el marco PCMBER (Presentación, Control, Mediador, Entidad y Recursos), incluso el sistema más complejo sigue siendo fácil de usaremos y administraremos

+0

Interesante ... Tendré que echarle un vistazo. – monksy

4

Hay una infinidad de patrones de diseño. Los patrones de diseño son solo eso: una recurrencia de trucos que los programadores usan para hacer las cosas. Lo más útil acerca de los patrones de GoF es lo famosos que son. En eso, se han convertido en un lenguaje, exactamente lo que el GdF esperaba lograr.

Muchos otros patrones que encontrará en la web y en la literatura son "solo" trucos útiles, no tanto un lenguaje que puede usar cuando habla con otros programadores. Dicho esto, hay una serie de patrones que surgieron en los últimos diez años más o menos, particularmente en el ámbito del desarrollo web. Vea los patrones listados en Martin Fowler's patterns book.

+0

No diría que los patrones son "una recurrencia de trucos". Creo que hay bastante más que eso. Crear un buen diseño requiere pensar y comprender cómo funciona el sistema, cómo crecerá, dónde se requiere flexibilidad y dónde no. Hay muchos trucos que los programadores usan para hacer su vida más fácil, pero los trucos no son necesariamente ideas avanzadas en el diseño del sistema. Otros pueden estar en desacuerdo, pero cuando escucho "trucos", pienso en "accesos directos" y no en un diseño de software sólido. – JasCav

+0

@Jason ¿qué tiene esto que ver con los patrones de diseño? Cuando resuelve un problema de diseño y luego utiliza la misma idea de una solución para resolver el mismo problema en otro lugar, utiliza un patrón de diseño. No promueve el planeo, es una recurrencia de una idea para resolver un problema de diseño. Se necesita experiencia para usar patrones de diseño de manera efectiva, y como elegir un idioma si lo haces desde puntos de vista religiosos, vas a fallar miserablemente. No tiene que usar patrones de diseño para hacer algo bien y muy a menudo usa patrones de diseño sin siquiera darse cuenta. – wilhelmtell

+0

La razón por la que dije lo que hice se debe a cómo redactó su respuesta. Decir que los patrones de diseño son "solo trucos" y que el GoF solo es útil porque "se hicieron famosos" está ignorando por completo el hecho de que un buen diseño requiere planificación y una comprensión de cómo construir ese diseño con una comprensión de POR QUÉ eres usando un diseño. Claro, puedo tropezar accidentalmente con un buen diseño, del mismo modo que un arquitecto puede toparse con una buena estructura para un edificio. No significa que el software o el edificio está bien diseñado. Los patrones de diseño son más que simples "trucos". – JasCav

2

Uno de los más nuevos que encontré particularmente útil es Domain Driven Design. No tanto un patrón en sí mismo, sino más bien una mentalidad: concentrarse en los objetos de dominio, es decir, las cosas que modelas y construyes el resto de la aplicación a su alrededor.

Descubrí que daba sentido a los principios que todos conocíamos anteriormente, pero que eran demasiado vagos para abordarlos, como el Principio de Responsabilidad Individual y la Separación de Preocupaciones. Tomo esos dos especialmente más en serio ahora.

Otro eje de mejora para mí fue TDD y Dependency Injection. Descubrí que con muchas interfaces y clases implementándolas, pude dejar de lado este miedo de solo definir algo una vez. Eso no quiere decir que esté en conflicto con DRY (Do not Repeat Yourself) mucho. Está bien tener dos clases con las mismas propiedades si sus propósitos son diferentes. La encapsulación y SRP son mucho más importantes que solo definir una propiedad una vez.

+0

Eso es un poco lo que he estado viendo. De las cosas que resultan de OMG ... me parece que no hay muchos cambios de GOF. – monksy

+0

DDD no es un patrón de diseño. Es un estilo de arquitectura combinado con un estilo de gestión de clientes. –

2

Umm ... ninguna de las cosas que la gente ha mencionado son patrones de diseño.

GOF se escribió implícitamente con Java en mente. Exploró ese espacio bastante bien.Sin embargo, una vez que ingresas en otros idiomas, algunos patrones ya no son necesarios (el observador rara vez se usa en un lenguaje como C# que admite eventos) y surgen algunos nuevos. Tómese los libros Pro JavaScript Design Patterns o Design Patterns In Ruby y vea qué pasa con los patrones de espera en estos paradigmas muy diferentes.

Mis favoritos últimamente provienen de la deriva funcional de los idiomas modernos. Soy un gran admirador de nested closures y de las formas funcionales de abordar algunos de los mismos problemas que GoF (de nuevo, vea el libro de Ruby para ver ejemplos). También estoy enamorado de la idea de domain-specific languages interno que se abre a toda una serie de patrones de diseño propios (incluidos los cierres anidados). Además, la agregación de eventos parece estar a punto de alcanzar un gran éxito en el mundo de .Net en el futuro cercano.

Un par de otros grandes que han llegado a la escena pero que no se discuten tanto en GoF, probablemente porque son más altos que los que estaban buscando, son Inversión de contenedores de control, Message Bussing, Orientación de aspecto -Programación, Model-View-Controller, Model-View-Presenter, Model-View-ViewModel, y su tipo.

Por cierto, estos no son patrones de diseño, pero si está buscando avanzar más allá de TDD, comience a analizar el Desarrollo basado en el comportamiento y el Contexto/Especificación.

+1

+1: los patrones GoF son a la manera de Java, diferentes idiomas tienen diferentes expresiones idiomáticas. –

+1

Me sorprende su comentario de que Observer rara vez se usa en C#. Está incorporado en el lenguaje (tipo "evento") y la capacidad de agregar múltiples suscriptores a eventos con el operador + =. Los .NET Framework proporciona definiciones de interfaz para propiedad y notificación de cambio de colección; estos son cruciales para la unión de datos en WPF y Silverlight. Si el patrón "Observer" no se llama mucho, es porque se ha convertido en un concepto central. –

+0

@Cyclon ese es exactamente mi punto. La necesidad de observables todavía está allí, pero la implementación planteada en GoF rara vez se usa (no he examinado IObservableCollection todavía, pero podría hacer algo similar), ha sido suplantada por una función de idioma. –