He leído alrededor de 4-5 libros sobre patrones de diseño, pero ¿todavía no siento que me he acercado al nivel intermedio en los patrones de diseño?
¿Cómo debo ir estudiando patrones de diseño?
¿Hay algún buen libro para patrones de diseño?
Sé que esto vendrá solo con experiencia, pero debe haber alguna forma de dominarlos.
design-patterns
anand
fuente
fuente
Respuestas:
La mejor manera es comenzar a codificar con ellos. Los patrones de diseño son un gran concepto que es difícil de aplicar simplemente leyendo sobre ellos. Tome algunas implementaciones de muestra que encuentre en línea y desarrolle alrededor de ellas.
Un gran recurso es la página de Data & Object Factory . Repasan los patrones y le dan ejemplos conceptuales y del mundo real. Su material de referencia también es excelente.
fuente
Leí tres libros y aún no entendía muy bien los patrones hasta que leí Head First Design Patterns de OReilly. Este libro me abrió los ojos y realmente me explicó bien.
fuente
Mis dos centavos por tal y vieja pregunta
Algunas personas ya mencionaron, practican y refactorizan. Creo que el orden correcto para aprender sobre patrones es este:
La mayoría de las personas ignora 1, muchos creen que pueden hacer 2, y casi todos van directamente por 3.
Para mí, la clave para mejorar mis habilidades de software fue aprender TDD. Puede ser mucho tiempo de codificación lenta y dolorosa, pero escribir sus pruebas primero ciertamente lo hace pensar mucho sobre su código. Si una clase necesita demasiado repetitivo o se rompe fácilmente, comienzas a notar malos olores bastante rápido
El principal beneficio de TDD es que pierde el miedo a refactorizar su código y lo obliga a escribir clases que son altamente independientes y coherentes. Sin un buen conjunto de pruebas, es demasiado doloroso tocar algo que no está roto. Con la red de seguridad, realmente se aventurará a realizar cambios drásticos en su código. Ese es el momento en que realmente puedes comenzar a aprender de la práctica.
Ahora llega el punto en el que debes leer libros sobre patrones y, en mi opinión, es una completa pérdida de tiempo esforzarse demasiado. Solo entendí muy bien los patrones después de notar que hice algo similar, o podría aplicarlo al código existente. Sin las pruebas de seguridad o los hábitos de refactorización, hubiera esperado hasta un nuevo proyecto. El problema de usar patrones en un proyecto nuevo es que no ves cómo impactan o cambian un código de trabajo. Solo entendí un patrón de software una vez que refactoricé mi código en uno de ellos, nunca cuando introduje uno nuevo en mi código.
fuente
Derek Banas hizo tutoriales de youtube para diseñar patrones que me gustan mucho:
http://www.youtube.com/playlist?list=PLF206E906175C7E07
Pueden ser un poco cortos de tiempo, pero su sincronización y presentación los hace muy agradables de aprender.
fuente
Práctica práctica práctica.
Puedes leer sobre tocar el violonchelo durante años, y aún no ser capaz de poner un arco al instrumento y hacer algo que suene como música.
Los patrones de diseño se reconocen mejor como un problema de alto nivel; uno que solo sea relevante si tiene la experiencia necesaria para reconocerlos como útiles. Es bueno que reconozca que son útiles, pero a menos que haya visto situaciones en las que se aplicarían, o lo hubieran aplicado, es casi imposible comprender su verdadero valor.
Donde se vuelven útiles es cuando reconoce patrones de diseño en el código de otros, o reconoce un problema en la fase de diseño que encaja bien con un patrón; y luego examine el patrón formal, y examine el problema, y determine cuál es el delta entre ellos, y qué dice eso tanto sobre el patrón como sobre el problema.
Es realmente lo mismo que la codificación; K&R puede ser la "biblia" para C, pero leerlo de principio a fin varias veces no ofrece una experiencia práctica; No hay reemplazo para la experiencia.
fuente
Práctica práctica práctica. Creo que de 4 a 5 libros es incluso un ejercicio de lectura excesivo sin una buena cantidad de práctica. Creo que la mejor manera de hacer esto es comenzar a refactorizar sus proyectos actuales utilizando los patrones. O si no tiene ningún proyecto en el que esté trabajando activamente, simplemente hágalo a su manera y luego intente refactorizar los patrones .
No puedes apreciarlos completamente si no has sufrido los problemas que resuelven. Y tenga en cuenta que no son balas de plata: no necesita memorizarlas y presionar con fuerza para aplicarlas sobre la marcha. Mis dos centavos..
fuente
Hágase estas preguntas:
¿Qué hacen?
¿Qué desacoplan / pareja?
¿Cuándo deberías usarlos?
¿Cuándo no deberías usarlos?
¿Qué característica de idioma faltante los haría desaparecer?
¿En qué deuda técnica incurres al usarlo?
¿Hay una manera más simple de hacer el trabajo?
fuente
He descubierto que es un poco difícil comprender o comprender los beneficios de algunos patrones hasta que uno comprende los problemas que resuelven y la otra (peor) forma en que se han implementado.
Aparte de los libros GOF y POSA, realmente no he leído ninguno, así que no puedo darle otras recomendaciones. Realmente solo tiene que tener una comprensión de los dominios de problemas y creo que muchos desarrolladores menos experimentados pueden no ser capaces de apreciar los beneficios de los patrones. Esto no es leve contra ellos. Es mucho más fácil adoptar, comprender y apreciar buenas soluciones cuando uno tiene que luchar con alternativas pobres primero.
Buena suerte
fuente
Se han dado muchos buenos ejemplos. Me gustaría agregar uno:
Mal aplicarlos. No es necesario que lo haga intencionalmente, sucederá cuando intente aplicarlos en su diseño-patrón-ajuste inicial. Durante ese tiempo, cada problema que verá parecerá encajar exactamente en un patrón de diseño. A menudo, todos los problemas parecen encajar en el mismo patrón de diseño por alguna razón (Singelton es un candidato principal para eso).
Y aplicará el patrón y será bueno. Y algunos meses después, necesitará cambiar algo en el código y ver que usar ese patrón en particular no fue tan inteligente, porque se codificó en una esquina y necesita refactorizar nuevamente.
De acuerdo, esa no es realmente una respuesta de hazlo y lo aprenderás en 21 días, pero en mi experiencia es más probable que te dé una buena idea del asunto.
fuente
¿Has leído "Patrones de diseño explicados", por Allan Shalloway.
Este libro es muy diferente de otros libros de patrones de diseño porque no es tanto un catálogo de patrones, sino que principalmente presenta una forma de descomponer un espacio problemático que se asigna fácilmente a los patrones.
Los problemas se pueden descomponer en dos partes: cosas que son comunes y cosas que varían. Una vez hecho esto, asignamos las cosas comunes a una interfaz y las cosas que varían según la implementación. En esencia, muchos patrones caen en este "patrón".
Por ejemplo, en el patrón de Estrategia, las cosas comunes se expresan como el contexto de la estrategia, y las partes variables se expresan como estrategias concretas.
Este libro me pareció muy estimulante en contraste con otros libros de patrones que, para mí, tienen el mismo grado de emoción que leer una guía telefónica.
fuente
¿Has probado el libro Gang of Four?
Patrones de diseño: elementos de software orientado a objetos reutilizables
fuente
Para los libros, recomendaría Patrones de diseño explicados y Head First . Para aprender realmente estos patrones, debe mirar su código existente. Busque qué patrones ya está usando. Mire los olores de código y qué patrones podrían resolverlos.
fuente
He dirigido algunos grupos de discusión de patrones de diseño ( nuestro sitio ) y he leído 5 o 6 libros de patrones. Recomiendo comenzar con el libro Head First Design Patterns y asistir o comenzar un grupo de discusión. El libro Head First puede parecer un poco Hasboro al principio, pero a la mayoría de la gente le gusta después de leer uno o dos capítulos.
Utilice el recurso excepcional: una guía de aprendizaje de Joshua Kereivisky para diseñar patrones para ordenar los patrones y ayudar a su grupo de discusión. Por experiencia, el único cambio que sugiero para ordenar es poner la Estrategia primero. La mayoría de los desarrolladores de hoy en día han experimentado una buena o mala encarnación de una Fábrica, por lo que comenzar con la Fábrica puede generar mucha conversación y confusión sobre el patrón. Esto tiende a centrarse en cómo estudiar y aprender patrones, lo cual es bastante esencial para eso. primera cita.
fuente
Recomiendo HeadFirst DesignPattern. Leer el libro no es suficiente, después de asimilar los conceptos que necesita para encontrar las respuestas a muchas preguntas que surgen en su mente y tratar de descubrir las aplicaciones de la vida real en las que se pueden utilizar estos patrones. Estoy haciendo lo mismo y comencé a hacer preguntas, incluso esas preguntas parecen tontas.
fuente
Mi sugerencia sería una combinación de implementar algunos de ellos y analizar algunas implementaciones de ellos. Por ejemplo, dentro de .Net, hay usos de patrones de adaptadores si mira Adaptadores de datos, así como algunos otros si uno profundiza un poco en el marco.
fuente
No sé sobre el mejor libro, pero los puristas podrían decir Patrones de diseño: elementos de software orientado a objetos reutilizables
En cuanto a mi favorito personal, me gustan los patrones de diseño de Head First publicados por O'Reilly. Está escrito en una voz conversacional que me atrae. Cuando lo leí, revisé mi código fuente al mismo tiempo para ver si se aplicaba a lo que estaba leyendo. Si lo hizo, refactoré. Así es como aprendí la Cadena de responsabilidad.
Práctica práctica práctica.
fuente
Los patrones de diseño son solo herramientas, como funciones de biblioteca similares. Si sabe que están allí y su función aproximada, puede sacarlos de un libro cuando sea necesario.
No hay nada de mágico en los patrones de diseño, y cualquier buen programador descubrió el 90% de ellos antes de que saliera algún libro. En su mayor parte, considero que los libros son más útiles para definir simplemente los nombres de los diversos patrones para que podamos analizarlos más fácilmente.
fuente
La forma en que aprendí los patrones de diseño es escribiendo mucho software realmente terrible. Cuando tenía unos 12 años, no tengo idea de lo que era bueno o malo. Acabo de escribir montones de código de espagueti. Durante los siguientes 10 años más o menos, aprendí de mis errores. Descubrí lo que funcionaba y lo que no. Inventé de forma independiente la mayoría de los patrones de diseño comunes, por lo que cuando escuché por primera vez qué eran los patrones de diseño, me emocioné mucho al conocerlos, y luego me decepcionó que solo fuera una colección de nombres para cosas que ya sabía intuitivamente. (esa broma acerca de enseñarte a ti mismo C ++ en 10 años no es realmente una broma)
Moraleja de la historia: escribe mucho código. Como otros han dicho, practica, practica, practica. Creo que hasta que comprenda por qué su diseño actual es malo y busque una mejor manera, no tendrá una buena idea de dónde aplicar varios patrones de diseño. Los libros de patrones de diseño deberían proporcionarle una solución refinada y una terminología común para discutirlo con otros desarrolladores, no una solución integrada para un problema que no comprende.
fuente
La idea de que leer patrones de diseño, practicar la codificación no va a ayudar realmente a la OMI. Cuando lea estos libros 1. Busque el problema básico que resuelve un patrón de diseño en particular, comenzar con Patrones de creación es su mejor opción. 2. Estoy seguro de que ha escrito código en el pasado, analice si enfrentó los mismos problemas que los patrones de diseño tienen como objetivo proporcionar una solución. 3. Intente rediseñar / refactorizar el código o quizás comenzar de nuevo.
Sobre los recursos puedes consultar estos
1 es un inicio rápido, 2 será un estudio en profundidad ... 3 explicará o debería hacerle pensar lo que aprendió en 2 ajustes en el software empresarial.
Mis 2 centavos ...
fuente
Creo que también es difícil estudiar patrones de diseño. Tiene que saber más sobre OOP y algunas experiencias con el desarrollo de aplicaciones medianas a grandes. Para mí, estudio como grupo de desarrolladores para hacer una discusión. Seguimos una guía de aprendizaje para diseñar patrones que han completado el estudio de patrones. Hay desarrolladores de C # y JavaScript que se unen. Para mí, lo más elegante es que los códigos de escritura del desarrollador de C # en JavaScript y el desarrollador de JavaScript hacen lo mismo para los códigos de C #. Después de dejar una reunión, también investigo y leo algunos libros en casa para revisar. La mejor manera de entender más y recordar en mi mente es hacer blogs con ejemplos en C # y JavaScript aquí http://tech.wowkhmer.com/category/Design-Patterns.aspx .
Sugeriría primero antes de ir a cada patrón de diseño, por favor, comprenda el nombre de los patrones. Además, si alguien conoce el concepto, simplemente explique y dé un ejemplo no solo de programación sino también en el mundo de la lectura.
por ejemplo:
Método de fábrica
Leer mundo: solo doy dinero $ 5, $ 10 o $ 20 y producirá pizza de regreso sin saber nada acerca de cómo se produce, solo obtengo una pizza pequeña, mediana o grande dependiendo del aporte de dinero para poder comer o hacer lo que sea.
Programación: el cliente simplemente pasa el valor del parámetro $ 5, $ 10 o $ 20 al método de fábrica y devolverá el objeto Pizza. Entonces el cliente puede usar ese objeto sin saber cómo se procesa.
No estoy seguro de que esto pueda ayudarte. Depende del nivel de conocimiento de las personas que se unen a la reunión.
fuente
Creo que debe examinar algunos de los problemas que ha encontrado como desarrollador cuando se quitó el pelo después de tener que revisar su código por décima vez debido a otro cambio de diseño. Probablemente tenga una lista de proyectos en los que sintió que había mucho trabajo y dolor.
De esa lista puede derivar los escenarios que los patrones de diseño pretenden resolver. ¿Ha habido algún momento en el que necesitaras realizar la misma serie de acciones en diferentes conjuntos de datos? ¿Necesitará poder tener una capacidad futura para una aplicación pero desea evitar reelaborar toda su lógica para las clases existentes? Comience con esos escenarios y regrese al catálogo de patrones y sus respectivos problemas que se supone que deben resolver. Es probable que vea algunas coincidencias entre GoF y su biblioteca de proyectos.
fuente
Para un principiante, los patrones de Head First Design harían, una vez que estemos familiarizados con todos los patrones, intente visualizar los objetos en tiempo real en esos patrones.
El libro lo ayudará a comprender los conceptos básicos, a menos que hasta que lo haya implementado en el mundo real NO PUEDE ser un MAESTRO de los PATRONES DE DISEÑO
fuente