SOLID - ¿Cómo lo aplico a mi código?

9,193 views

Published on

¿Cómo aplicar los principios SOLID a mi código?

Definición de los principios y ejemplos clásicos de buenas prácticas de Diseño Orientado a Objetos

Audio de la presentación:
http://archive.org/details/10.S.o.l.i.d.ComoLoAplicoEnMiCdigo-JuanJosFuchs

Published in: Technology
2 Comments
15 Likes
Statistics
Notes
  • chevre, una consulta donde podria encontrar un ejemplo completo de aplicacacion web usando SOLID
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Excelente amigo, Segui asi!
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total views
9,193
On SlideShare
0
From Embeds
0
Number of Embeds
19
Actions
Shares
0
Downloads
329
Comments
2
Likes
15
Embeds 0
No embeds

No notes for slide

SOLID - ¿Cómo lo aplico a mi código?

  1. 1. S.O.L.I.D. ¿Cómo lo aplico en mi código?
  2. 2. #codepassion_pe @JuanjoFuchs @RaybertParedes
  3. 3. http://www.lostechies.com/blogs/derickbailey/archive/2009/02/11/solid-development-principles-in-motivational-pictures.aspx
  4. 4. Que pasa cuando nos toca modificar código?http://www.albertelli.com/photoarchive/Random_2003/lawn_jenga0002.jpeg
  5. 5. Da miedo…http://blog.rwbenwick.com/wp-content/uploads/2009/12/Reason-For-Leaving-iStock_000008369823Medium.jpg
  6. 6. http://www.albertelli.com/photoarchive/Random_2003/lawn_jenga0002.jpeg
  7. 7. Quien nos podrá ayudar? Pues….http://browse.deviantart.com/?qh=&section=&q=avengers#/d41k54l
  8. 8. Tampoco….http://www.pharmatek.com/developers/developers.htm
  9. 9. Nosotroshttp://www.catosplace.net/blogs/personal/wp-content/uploads/2011/04/developers.jpg
  10. 10. Pero como??http://4.bp.blogspot.com/-wLWxI2BZTEo/TbP44yGHHXI/AAAAAAAACMA/ck1BVzrucHo/s1600/bg_doubt.jpg
  11. 11. Aprendiendo un poco de… Etc…
  12. 12. En donde??? Y otros mas…
  13. 13. Bueno, manos a la ubre!! Perdón, a la obra…. ;)
  14. 14. Entonces, ¿Qué es S.O.L.I.D.?Es un acrónimo de:• Siempre• Olvido• Lo• Interesante del• Desarrollo
  15. 15. Mentira, S.O.L.I.D. es un acrónimo de:• Single Responsibility• Open Closed• Liskov Substitution• Interface Segregation• Dependency Inversion
  16. 16. Single Responsibility Principle Una clase jamás debería tener más de una razón por la cual cambiar• Responsabilidad == Razón para cambiar• Si una clase asume más de una responsabilidad, entonces tendrá más de una razón para cambiar.• Acoplamiento de responsabilidades.
  17. 17. Single Responsibility PrincipleCohesión: Acoplamiento: Qué tan fuertemente El grado en el cual cadarelacionadas y enfocadas están módulo de un programalas distintas responsabilidades depende de cada uno de los de un módulo. otros módulos
  18. 18. Single Responsibility Principle
  19. 19. Single Responsibility Principle
  20. 20. https://github.com/JuanjoFuchs/SOLID/tree/master/SRP https://github.com/JuanjoFuchs/SOLID/tree/master/SRP%20-%20RefactorizadoDemo
  21. 21. Open Closed Principle Entidades de software (clases, módulos, funciones, etc.) deberían estar abiertas para extensión pero cerradas para modificación.• Si 1 cambio impacta a varios módulos, entonces la aplicación no está bien diseñada.• Debemos diseñar módulos que nunca cambien
  22. 22. Open Closed PrincipleAbiertas para extensión Cerradas para modificación Podemos hacer que la No se necesita hacer cambios aplicación se comporte de del código fuente de dicho distintas formas. módulo. Extendiendo elcomportamiento del módulo. Pero cómo? Abstracción
  23. 23. Open Closed Principle https://gist.github.com/2896236#file_ocp_empleados.sin_refactorizar.cs
  24. 24. Open Closed Principlehttps://gist.github.com/2896236#file_ocp_empleados.refactorizado.cs
  25. 25. https://github.com/JuanjoFuchs/SOLID/tree/master/OCP https://github.com/JuanjoFuchs/SOLID/tree/master/OCP%20-%20RefactorizadoDemo
  26. 26. Liskov Substitution Principle Funciones que usen punteros o referencias a clases base deben poder usar objetos de clases derivadas sin saberlo.• Si tenemos una clase BASE y dos subclases SUB1 y SUB2, el código cliente siempre debe referirse a BASE.• No decir: SUB1 es una BASE.• En cambio decir: SUB1 es reemplazable por una BASE.
  27. 27. Liskov Substitution Principlehttps://gist.github.com/2896064 https://gist.github.com/2896078
  28. 28. https://github.com/JuanjoFuchs/SOLID/tree/master/LSPDemo
  29. 29. Interface Segregation Principle Los clientes no deberían estar forzados a depender de interfaces que no utilizan.• Las interfaces “gordas” o “contaminadas” deben dividirse en varios grupos de funciones.• Cada grupo será implementado por distintos tipos de clientes.
  30. 30. Interface Segregation Principle https://gist.github.com/2896112#file_lsp_animal.sin_refactorizar.cs
  31. 31. Interface Segregation Principle https://gist.github.com/2896112#file_lsp_animal.refactorizado.cs
  32. 32. https://github.com/JuanjoFuchs/SOLID/tree/master/ISPDemo
  33. 33. Dependency Inversion Principle• Módulos de alto nivel no deben depender de módulos de bajo nivel. Ambos deben depender de abstracciones.• Abstracciones no deben depender de detalles. Los detalles deben depender de abstracciones.• Puede implementarse con: – Inyección de dependencias – IoC (Inversión del control)
  34. 34. DIP – Ejemplo 1https://gist.github.com/2896132#file_dip_hola_mundo.sin_refactoriza https://gist.github.com/2896132#file_dip_hola_mundo.refactorizado.
  35. 35. DIP – Ejemplo 2https://gist.github.com/2896132#file_dip_volvo.sin_refactorizar.cs https://gist.github.com/2896132#file_dip_volvo.refactorizado.cs
  36. 36. DIP – Arquitectura tradicional UI Negocio DependenciaAcceso a Datos Componentes
  37. 37. DIP – Arquitectura invertidaAcceso a Pruebas Web UI Datos Unitarias Services Capa de Negocio Entidades
  38. 38. https://github.com/JuanjoFuchs/SOLID/tree/master/DIP_Multicapa https://github.com/JuanjoFuchs/SOLID/tree/master/DIP_Multicapa_RefactorizadoDemo
  39. 39. Referencias• Posters motivacionales http://lostechies.com/derickbailey/2009/02/11/solid-development-principles-in-motivational-pictures/• PluralSight – SOLID Principles of Object Oriented Design http://www.pluralsight-training.net/microsoft/Courses/TableOfContents?courseName=principles-oo- design• Principios de DOO – Bob Martin http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod• Pablo’s SOLID Software Development http://lostechies.com/wp-content/uploads/2011/03/pablos_solid_ebook.pdf• Principios SOLID con ejemplos reales http://blog.gauffin.org/2012/05/solid-principles-with-real-world-examples/
  40. 40. ¿Preguntas?

×