2009-05-08 23 views
17

Voy a estar dando a los desarrolladores de mi empresa un curso intensivo sobre patrones de diseño (después de encontrar algún código aterrador recientemente).¿Alguna sugerencia para un curso intensivo sobre patrones de diseño?

Una de las cosas más importantes que quiero transmitir es que ahorran tiempo tanto a corto como a largo plazo (¡lo que realmente hacen!), Ya que los desarrolladores están sometidos a una gran tensión de tiempo. En general, necesito demostrar los beneficios diarios: cosas que les permitirán irse a casa temprano.

Decirles que podría significar menos errores probablemente no llegue a casa. Necesito cosas que vayan a hundirse.

Probablemente haga entre tres y cuatro sesiones de una hora cada una. ¿Tienen alguna sugerencia sobre qué tocar/hacer?

+2

¿Cómo se desarrolló esta clase? – jmucchiello

+0

Pluralsight: https://www.pluralsight.com/courses/patterns-library – ssmith

Respuesta

14

Las diapositivas de buena apertura para cualquier curso de educación en mi opinión son:
1) ¿Por qué estamos aquí? (¿Dónde se ha identificado la necesidad de este curso?)
2) ¿Qué espero aprender?
3) ¿Quién debería tomar este curso? (¿Cuáles son los estudiantes, prerrequisitos, etc.?)
4) ¿Cuándo puedo aplicar lo que he aprendido?
5) Las expectativas de que (participación, tareas, exámenes, clases mínimas para asistir, etc)

Para los patrones de diseño que podía esperar varias herramientas visuales o "job aids".

me seguirá a la estructura similar a la del libro Elements of Reusable Object-Oriented Software:

1) UML - Diagrama de clases general
2) POO - abstracción, encapsulación, polimorfismo, herencia
3) Cohesión y acoplamiento
4) ¿Qué es un patrón de diseño? - Nombre del patrón, El problema, La solución, Las consecuencias
5) ¿Por qué son tan difíciles de aprender los patrones de diseño?
6) ¿Por qué usar Patrones de diseño?
7) Cómo seleccionar un patrón de diseño
8) Cómo utilizar un patrón de diseño
9) cubren varios GoF patrones de diseño con ejemplos - Mostrar ejemplos de código antes de la aplicación de un patrón de diseño, y cómo se cuida como Vince Huston hace en su examples.
10) Conclusión

Como ya se mencionó, los patrones de diseño son realmente ideas, por lo que al enseñar debe transmitir la idea. Si entienden el problema, la solución y las consecuencias del patrón de diseño, estarán mucho mejor que intentar forzar patrones en el código (y eso se convertirá en una pesadilla). El verdadero objetivo es el reconocimiento de dónde y qué patrones (si los hay). Los ejemplos de Huston son realmente buenos para dar un ejemplo de código a la clase y ver si pueden identificar un patrón para mejorarlo. Espero que esto ayude.

+1

que es una descripción fantástica. gracias por todos los enlaces y sugerencias, tal vez voy a echar un vistazo a algunas sesiones más. –

+0

A menos que me falta algo, parece que el enlace "ayudas para el trabajo" está roto. –

20

Head First Design Patterns sería un buen lugar para comenzar. Cubre los patrones de diseño principales.

Refactoring to Patterns también podría ser de su interés.

Si no puede comprar un libro para cada desarrollador, compre algunos y difúndalos.

+0

como un libro para todos los desarrolladores? Deseo. –

+2

¿por qué no? un libro relativamente barato, comparado con el tiempo de un desarrollador ... –

+3

+1 primeros diseños de diseño de cabeza - estaba a mitad de camino antes de notar que estaba en Java y no en C# ... – Pondidum

7

Los patrones son difíciles de aprender primero. Leo the GoF book tan a menudo en ese entonces. Cada año otro patrón se hundía en mi cabeza. Así que mi único consejo es que elijas un máximo de dos patrones y veas muchos ejemplos de qué resolver con él.

Un compuesto es algo que todo el mundo sabe. Al respecto, puede explicar que podría ser importante saber que tiene un nombre que puede usar y comunicar. Importante en los patrones es que facilita que los demás reconozcan tus intenciones. Y estos pequeños nombres son bastante útiles.

Personalmente encuentro que el patrón de método de plantilla es realmente bueno para tratar en el desarrollo basado en OO. Está tan cerca de cómo OOP debería ocurrir que podría tener el beneficio de mejorar el estilo de codificación también.

+1

+1 Muy difícil aprender un patrón hasta que lo haya visto * correctamente * implementado – RobS

+0

+1 definitivamente intente golpear los pertinentes ... –

+0

Sí, necesita esto * haga clic * s en su cabeza para ver de qué se trata. Y luego, si los aprendiste y alguien pregunta qué diferencias comienzas de nuevo desde el principio :) –

7

El enfoque que utilizan la mayoría de los libros para explicar los patrones es exactamente lo contrario de lo que me gustaría ver. Toman un patrón, describen las condiciones previas y lo que no, y luego dan un ejemplo. Preferiría tomar problemas concretos y discutir alternativas. El que se destaca, ese será el 'patrón', introdúcelo como tal solo entonces.

Elija los patrones que son a) fáciles y b) más probable es que se usen en su código. Los singletons son fáciles de aprender (ya que no involucran sujetos/objetos). Otro interesante es el patrón del observador.

+1

+1 ... Creo que voy a tener un problema difícil para elegir la respuesta 'correcta' ... –

+3

+1 Los patrones representan años de experiencia en forma condensada. A ciegas copiarlos del libro no te da esa experiencia. Discutir minuciosamente las alternativas sí lo hace. – palm3D

4

Usted está en una posición única para un que imparte un curso: conoce a los desarrolladores y conoce el código con el que están trabajando.

Un enfoque posible sería la de mirar a una parte del código de miedo, e ir a lo largo de las líneas de "¿Cómo podríamos ir sobre la mejora de esta? Da la casualidad que hay un patrón de diseño llamado Observador ...."

Esto podría terminar siendo una mezcla de design patterns y refactoring. Pero eso podría ser apropiado, dado que está tratando de llegar a los desarrolladores que trabajan en una base de código existente.

+0

+1 para refectoring !!!! gracias por traer eso hasta –

+0

y esta es una idea brillante. usar el código de nuestra base de código realmente golpearía a casa –

4

El problema con los patrones de aprendizaje es que debe tener suficiente experiencia con el software para haber visto el patrón (normalmente sin nombre) en el código escrito o mantenido. Si nunca ha escrito un observador, leer la descripción del patrón no será fácil de asimilar.

No digo que no deba leer acerca de los patrones. Pero tenga en cuenta que la capacidad de apreciar patrones está limitada por la falta de experiencia.

El otro problema con los patrones, y el problema que tendrá, es que no existen. Al menos existen aún menos que el "software" existe. Los patrones son ideas y conceptos. No son código ejecutable. El código ejecutable puede implementar un patrón, pero el reverso no existe. No puede simplemente escribir "singleton" en su código y de repente existe un singleton. No hay lenguaje en el que agregar el atributo "visitante" de repente haga que todo el pegamento implemente el patrón de visitante. Existen mejores prácticas y ejemplos de patrones en varios idiomas, pero no son algo que pueda guardar en una biblioteca y simplemente llamar.

Entonces, lo que realmente quieres hacer es enseñar algunas de las mejores prácticas en las que el núcleo de esas prácticas implica reconocer y usar patrones. Ser observador es una habilidad muy difícil de enseñar (para todas las formas de observación).

El tercer problema con los patrones es que no son realmente del dominio de los codificadores. Se les llama formalmente patrones de diseño por una razón. Son más propiamente una construcción de tiempo de diseño. Claro que puedes usar patrones para ayudar a refactorizar el código existente. Pero, en general, los patrones de diseño son jerga para simplificar la discusión del diseño. De nuevo, esta es la razón por la cual no hay ninguna biblioteca de códigos singleton. Usar un singleton es una aproximación al código, no al código en sí mismo.

Dicho todo esto, intentar educar a los programadores sobre los patrones de diseño no puede hacer daño. Hacer que los programadores piensen es algo bueno y si solo uno de ellos sale de él con más que una comprensión superficial de los patrones, probablemente salgas adelante del juego. Buena suerte.

+0

¡Guau! Supongo que tienes razón, lamentablemente los desarrolladores y diseñadores son uno en lo mismo aquí. Ciertamente, sé que los patrones se usan principalmente para provocar la solución real: combinando, alterando o inventando.Dar un curso sobre patrones es más plausible que simplemente decir "Haz tus cosas bien" y más alentador que eso también. –

2

Eche un vistazo a este sitio: http://www.dofactory.com/Patterns/Patterns.aspx Se enfoca en los muchos tipos de patrones creacionales, estructurales y de comportamiento y brinda ejemplos con código estructural, del mundo real y .net optimizado. Espero que esto ayude

+0

Casi primer golpe en google. Definitivamente va a obtener algunos ejemplos de código de allí (a menudo el código habla más fuerte que los diagramas) –

2

Aquí hay un tutorial de Nettuts +: A Beginner’s Guide to Design Patterns

muy fácil de entender. Perfecto para comenzar a diseñar patrones.

Este tutorial explica claramente:

  • qué patrones de diseño son importantes
  • cuándo y por qué se deben utilizar
  • proporciona ejemplos, en PHP, para cada patrón

Los siguientes patrones de diseño se explican en el tutorial:

  • patrón de estrategia
  • adapter
  • Método de fábrica del patrón
  • Decorador patrón
  • Singleton patrón