Download - SOLID - ¿Cómo lo aplico a mi código?
![Page 1: SOLID - ¿Cómo lo aplico a mi código?](https://reader036.vdocuments.co/reader036/viewer/2022081515/558df1331a28ab31438b458a/html5/thumbnails/1.jpg)
S.O.L.I.D.¿Cómo lo aplico en mi código?
![Page 2: SOLID - ¿Cómo lo aplico a mi código?](https://reader036.vdocuments.co/reader036/viewer/2022081515/558df1331a28ab31438b458a/html5/thumbnails/2.jpg)
@JuanjoFuchs @RaybertParedes
#codepassion_pe
![Page 3: SOLID - ¿Cómo lo aplico a mi código?](https://reader036.vdocuments.co/reader036/viewer/2022081515/558df1331a28ab31438b458a/html5/thumbnails/3.jpg)
http://www.lostechies.com/blogs/derickbailey/archive/2009/02/11/solid-development-principles-in-motivational-pictures.aspx
![Page 4: SOLID - ¿Cómo lo aplico a mi código?](https://reader036.vdocuments.co/reader036/viewer/2022081515/558df1331a28ab31438b458a/html5/thumbnails/4.jpg)
http://www.albertelli.com/photoarchive/Random_2003/lawn_jenga0002.jpeg
Que pasa cuando nos toca modificar código?
![Page 5: SOLID - ¿Cómo lo aplico a mi código?](https://reader036.vdocuments.co/reader036/viewer/2022081515/558df1331a28ab31438b458a/html5/thumbnails/5.jpg)
http://blog.rwbenwick.com/wp-content/uploads/2009/12/Reason-For-Leaving-iStock_000008369823Medium.jpg
Da miedo…
![Page 6: SOLID - ¿Cómo lo aplico a mi código?](https://reader036.vdocuments.co/reader036/viewer/2022081515/558df1331a28ab31438b458a/html5/thumbnails/6.jpg)
Porque probablemente esta sea nuestra única pieza por sacar
http://www.albertelli.com/photoarchive/Random_2003/lawn_jenga0002.jpeg
![Page 7: SOLID - ¿Cómo lo aplico a mi código?](https://reader036.vdocuments.co/reader036/viewer/2022081515/558df1331a28ab31438b458a/html5/thumbnails/7.jpg)
http://browse.deviantart.com/?qh=§ion=&q=avengers#/d41k54l
Quien nos podrá ayudar?
Pues….
![Page 8: SOLID - ¿Cómo lo aplico a mi código?](https://reader036.vdocuments.co/reader036/viewer/2022081515/558df1331a28ab31438b458a/html5/thumbnails/8.jpg)
Tampoco….http://www.pharmatek.com/developers/developers.htm
![Page 9: SOLID - ¿Cómo lo aplico a mi código?](https://reader036.vdocuments.co/reader036/viewer/2022081515/558df1331a28ab31438b458a/html5/thumbnails/9.jpg)
http://www.catosplace.net/blogs/personal/wp-content/uploads/2011/04/developers.jpg
Nosotros
![Page 10: SOLID - ¿Cómo lo aplico a mi código?](https://reader036.vdocuments.co/reader036/viewer/2022081515/558df1331a28ab31438b458a/html5/thumbnails/10.jpg)
Pero como??
http://4.bp.blogspot.com/-wLWxI2BZTEo/TbP44yGHHXI/AAAAAAAACMA/ck1BVzrucHo/s1600/bg_doubt.jpg
![Page 11: SOLID - ¿Cómo lo aplico a mi código?](https://reader036.vdocuments.co/reader036/viewer/2022081515/558df1331a28ab31438b458a/html5/thumbnails/11.jpg)
Etc…
Aprendiendo un poco de…
![Page 12: SOLID - ¿Cómo lo aplico a mi código?](https://reader036.vdocuments.co/reader036/viewer/2022081515/558df1331a28ab31438b458a/html5/thumbnails/12.jpg)
En donde???
Y otros mas…
![Page 13: SOLID - ¿Cómo lo aplico a mi código?](https://reader036.vdocuments.co/reader036/viewer/2022081515/558df1331a28ab31438b458a/html5/thumbnails/13.jpg)
Bueno, manos a la ubre!!
Perdón, a la obra…. ;)
![Page 14: SOLID - ¿Cómo lo aplico a mi código?](https://reader036.vdocuments.co/reader036/viewer/2022081515/558df1331a28ab31438b458a/html5/thumbnails/14.jpg)
Entonces, ¿Qué es S.O.L.I.D.?
Es un acrónimo de:• Siempre • Olvido• Lo • Interesante del• Desarrollo
![Page 15: SOLID - ¿Cómo lo aplico a mi código?](https://reader036.vdocuments.co/reader036/viewer/2022081515/558df1331a28ab31438b458a/html5/thumbnails/15.jpg)
Mentira, S.O.L.I.D. es un acrónimo de:
• Single Responsibility •Open Closed• Liskov Substitution• Interface Segregation•Dependency Inversion
![Page 16: SOLID - ¿Cómo lo aplico a mi código?](https://reader036.vdocuments.co/reader036/viewer/2022081515/558df1331a28ab31438b458a/html5/thumbnails/16.jpg)
![Page 17: SOLID - ¿Cómo lo aplico a mi código?](https://reader036.vdocuments.co/reader036/viewer/2022081515/558df1331a28ab31438b458a/html5/thumbnails/17.jpg)
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.
![Page 18: SOLID - ¿Cómo lo aplico a mi código?](https://reader036.vdocuments.co/reader036/viewer/2022081515/558df1331a28ab31438b458a/html5/thumbnails/18.jpg)
Single Responsibility Principle
Cohesión:
Qué tan fuertemente relacionadas y enfocadas están las distintas responsabilidades
de un módulo.
Acoplamiento:
El grado en el cual cada módulo de un programa
depende de cada uno de los otros módulos
![Page 19: SOLID - ¿Cómo lo aplico a mi código?](https://reader036.vdocuments.co/reader036/viewer/2022081515/558df1331a28ab31438b458a/html5/thumbnails/19.jpg)
Single Responsibility Principle
![Page 20: SOLID - ¿Cómo lo aplico a mi código?](https://reader036.vdocuments.co/reader036/viewer/2022081515/558df1331a28ab31438b458a/html5/thumbnails/20.jpg)
Single Responsibility Principle
![Page 21: SOLID - ¿Cómo lo aplico a mi código?](https://reader036.vdocuments.co/reader036/viewer/2022081515/558df1331a28ab31438b458a/html5/thumbnails/21.jpg)
Demo
https://github.com/JuanjoFuchs/SOLID/tree/master/SRP
https://github.com/JuanjoFuchs/SOLID/tree/master/SRP%20-%20Refactorizado
![Page 22: SOLID - ¿Cómo lo aplico a mi código?](https://reader036.vdocuments.co/reader036/viewer/2022081515/558df1331a28ab31438b458a/html5/thumbnails/22.jpg)
![Page 23: SOLID - ¿Cómo lo aplico a mi código?](https://reader036.vdocuments.co/reader036/viewer/2022081515/558df1331a28ab31438b458a/html5/thumbnails/23.jpg)
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
![Page 24: SOLID - ¿Cómo lo aplico a mi código?](https://reader036.vdocuments.co/reader036/viewer/2022081515/558df1331a28ab31438b458a/html5/thumbnails/24.jpg)
Open Closed Principle
Abiertas para extensión
Podemos hacer que la aplicación se comporte de
distintas formas.
Extendiendo el comportamiento del módulo.
Cerradas para modificación
No se necesita hacer cambios del código fuente de dicho
módulo.
AbstracciónPero cómo?
![Page 25: SOLID - ¿Cómo lo aplico a mi código?](https://reader036.vdocuments.co/reader036/viewer/2022081515/558df1331a28ab31438b458a/html5/thumbnails/25.jpg)
Open Closed Principle
https://gist.github.com/2896236#file_ocp_empleados.sin_refactorizar.cs
![Page 26: SOLID - ¿Cómo lo aplico a mi código?](https://reader036.vdocuments.co/reader036/viewer/2022081515/558df1331a28ab31438b458a/html5/thumbnails/26.jpg)
Open Closed Principle
https://gist.github.com/2896236#file_ocp_empleados.refactorizado.cs
![Page 27: SOLID - ¿Cómo lo aplico a mi código?](https://reader036.vdocuments.co/reader036/viewer/2022081515/558df1331a28ab31438b458a/html5/thumbnails/27.jpg)
Demo
https://github.com/JuanjoFuchs/SOLID/tree/master/OCP
https://github.com/JuanjoFuchs/SOLID/tree/master/OCP%20-%20Refactorizado
![Page 28: SOLID - ¿Cómo lo aplico a mi código?](https://reader036.vdocuments.co/reader036/viewer/2022081515/558df1331a28ab31438b458a/html5/thumbnails/28.jpg)
![Page 29: SOLID - ¿Cómo lo aplico a mi código?](https://reader036.vdocuments.co/reader036/viewer/2022081515/558df1331a28ab31438b458a/html5/thumbnails/29.jpg)
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.
![Page 30: SOLID - ¿Cómo lo aplico a mi código?](https://reader036.vdocuments.co/reader036/viewer/2022081515/558df1331a28ab31438b458a/html5/thumbnails/30.jpg)
Liskov Substitution Principle
https://gist.github.com/2896064 https://gist.github.com/2896078
![Page 31: SOLID - ¿Cómo lo aplico a mi código?](https://reader036.vdocuments.co/reader036/viewer/2022081515/558df1331a28ab31438b458a/html5/thumbnails/31.jpg)
Demo
https://github.com/JuanjoFuchs/SOLID/tree/master/LSP
![Page 32: SOLID - ¿Cómo lo aplico a mi código?](https://reader036.vdocuments.co/reader036/viewer/2022081515/558df1331a28ab31438b458a/html5/thumbnails/32.jpg)
![Page 33: SOLID - ¿Cómo lo aplico a mi código?](https://reader036.vdocuments.co/reader036/viewer/2022081515/558df1331a28ab31438b458a/html5/thumbnails/33.jpg)
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.
![Page 34: SOLID - ¿Cómo lo aplico a mi código?](https://reader036.vdocuments.co/reader036/viewer/2022081515/558df1331a28ab31438b458a/html5/thumbnails/34.jpg)
Interface Segregation Principle
https://gist.github.com/2896112#file_lsp_animal.sin_refactorizar.cs
![Page 35: SOLID - ¿Cómo lo aplico a mi código?](https://reader036.vdocuments.co/reader036/viewer/2022081515/558df1331a28ab31438b458a/html5/thumbnails/35.jpg)
Interface Segregation Principle
https://gist.github.com/2896112#file_lsp_animal.refactorizado.cs
![Page 36: SOLID - ¿Cómo lo aplico a mi código?](https://reader036.vdocuments.co/reader036/viewer/2022081515/558df1331a28ab31438b458a/html5/thumbnails/36.jpg)
Demo
https://github.com/JuanjoFuchs/SOLID/tree/master/ISP
![Page 37: SOLID - ¿Cómo lo aplico a mi código?](https://reader036.vdocuments.co/reader036/viewer/2022081515/558df1331a28ab31438b458a/html5/thumbnails/37.jpg)
![Page 38: SOLID - ¿Cómo lo aplico a mi código?](https://reader036.vdocuments.co/reader036/viewer/2022081515/558df1331a28ab31438b458a/html5/thumbnails/38.jpg)
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)
![Page 39: SOLID - ¿Cómo lo aplico a mi código?](https://reader036.vdocuments.co/reader036/viewer/2022081515/558df1331a28ab31438b458a/html5/thumbnails/39.jpg)
DIP – Ejemplo 1
https://gist.github.com/2896132#file_dip_hola_mundo.sin_refactorizar.cs
https://gist.github.com/2896132#file_dip_hola_mundo.refactorizado.cs
![Page 40: SOLID - ¿Cómo lo aplico a mi código?](https://reader036.vdocuments.co/reader036/viewer/2022081515/558df1331a28ab31438b458a/html5/thumbnails/40.jpg)
DIP – Ejemplo 2
https://gist.github.com/2896132#file_dip_volvo.sin_refactorizar.cs https://gist.github.com/2896132#file_dip_volvo.refactorizado.cs
![Page 41: SOLID - ¿Cómo lo aplico a mi código?](https://reader036.vdocuments.co/reader036/viewer/2022081515/558df1331a28ab31438b458a/html5/thumbnails/41.jpg)
DIP – Arquitectura tradicional
UI
Negocio
Acceso a Datos Componentes Dep
ende
ncia
![Page 42: SOLID - ¿Cómo lo aplico a mi código?](https://reader036.vdocuments.co/reader036/viewer/2022081515/558df1331a28ab31438b458a/html5/thumbnails/42.jpg)
DIP – Arquitectura invertida
Acceso a Datos UI Pruebas
UnitariasWeb
Services
Capa de Negocio
Entidades
![Page 43: SOLID - ¿Cómo lo aplico a mi código?](https://reader036.vdocuments.co/reader036/viewer/2022081515/558df1331a28ab31438b458a/html5/thumbnails/43.jpg)
Demo
https://github.com/JuanjoFuchs/SOLID/tree/master/DIP_Multicapa_Refactorizado
https://github.com/JuanjoFuchs/SOLID/tree/master/DIP_Multicapa
![Page 44: SOLID - ¿Cómo lo aplico a mi código?](https://reader036.vdocuments.co/reader036/viewer/2022081515/558df1331a28ab31438b458a/html5/thumbnails/44.jpg)
Referencias• Posters motivacionales
http://lostechies.com/derickbailey/2009/02/11/solid-development-principles-in-motivational-pictures/
• PluralSight – SOLID Principles of Object Oriented Designhttp://www.pluralsight-training.net/microsoft/Courses/TableOfContents?courseName=principles-oo-design
• Principios de DOO – Bob Martinhttp://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod
• Pablo’s SOLID Software Developmenthttp://lostechies.com/wp-content/uploads/2011/03/pablos_solid_ebook.pdf
• Principios SOLID con ejemplos realeshttp://blog.gauffin.org/2012/05/solid-principles-with-real-world-examples/
![Page 45: SOLID - ¿Cómo lo aplico a mi código?](https://reader036.vdocuments.co/reader036/viewer/2022081515/558df1331a28ab31438b458a/html5/thumbnails/45.jpg)
¿Preguntas?
![Page 46: SOLID - ¿Cómo lo aplico a mi código?](https://reader036.vdocuments.co/reader036/viewer/2022081515/558df1331a28ab31438b458a/html5/thumbnails/46.jpg)