SlideShare ist ein Scribd-Unternehmen logo
1 von 46
S.O.L.I.D.
 ¿Cómo lo aplico en mi código?
#codepassion_pe




    @JuanjoFuchs   @RaybertParedes
http://www.lostechies.com/blogs/derickbailey/archive/2009/02/11/solid-development-principles-in-motivational-pictures.aspx
Que pasa
  cuando nos
  toca modificar
  código?


http://www.albertelli.com/photoarchive/Random_2003/lawn_jenga0002.jpeg
Da miedo…




http://blog.rwbenwick.com/wp-content/uploads/2009/12/Reason-For-Leaving-iStock_000008369823Medium.jpg
http://www.albertelli.com/photoarchive/Random_2003/lawn_jenga0002.jpeg
Quien nos podrá ayudar?




                                                                 Pues….
http://browse.deviantart.com/?qh=&section=&q=avengers#/d41k54l
Tampoco….
http://www.pharmatek.com/developers/developers.htm
Nosotros




http://www.catosplace.net/blogs/personal/wp-content/uploads/2011/04/developers.jpg
Pero como??




http://4.bp.blogspot.com/-wLWxI2BZTEo/TbP44yGHHXI/AAAAAAAACMA/ck1BVzrucHo/s1600/bg_doubt.jpg
Aprendiendo un poco de…




                          Etc…
En donde???




              Y otros mas…
Bueno, manos a la ubre!!




           Perdón, a la obra…. ;)
Entonces, ¿Qué es S.O.L.I.D.?
Es un acrónimo de:
• Siempre
• Olvido
• Lo
• Interesante del
• Desarrollo
Mentira, S.O.L.I.D. es un acrónimo de:

• Single Responsibility
• Open Closed
• Liskov Substitution
• Interface Segregation
• Dependency Inversion
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.
Single Responsibility Principle
Cohesión:                         Acoplamiento:

     Qué tan fuertemente             El grado en el cual cada
relacionadas y enfocadas están       módulo de un programa
las distintas responsabilidades    depende de cada uno de los
         de un módulo.                    otros módulos
Single Responsibility Principle
Single Responsibility Principle
https://github.com/JuanjoFuchs/SOLID/tree/master/SRP
       https://github.com/JuanjoFuchs/SOLID/tree/master/SRP%20-%20Refactorizado




Demo
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
Open Closed Principle
Abiertas 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 el
comportamiento del módulo.

                                 Pero cómo?

               Abstracción
Open Closed Principle




          https://gist.github.com/2896236#file_ocp_empleados.sin_refactorizar.cs
Open Closed Principle




https://gist.github.com/2896236#file_ocp_empleados.refactorizado.cs
https://github.com/JuanjoFuchs/SOLID/tree/master/OCP
       https://github.com/JuanjoFuchs/SOLID/tree/master/OCP%20-%20Refactorizado




Demo
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.
Liskov Substitution Principle




https://gist.github.com/2896064             https://gist.github.com/2896078
https://github.com/JuanjoFuchs/SOLID/tree/master/LSP




Demo
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.
Interface Segregation Principle




                https://gist.github.com/2896112#file_lsp_animal.sin_refactorizar.cs
Interface Segregation Principle




                 https://gist.github.com/2896112#file_lsp_animal.refactorizado.cs
https://github.com/JuanjoFuchs/SOLID/tree/master/ISP




Demo
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)
DIP – Ejemplo 1




https://gist.github.com/2896132#file_dip_hola_mundo.sin_refactoriza   https://gist.github.com/2896132#file_dip_hola_mundo.refactorizado.
DIP – Ejemplo 2




https://gist.github.com/2896132#file_dip_volvo.sin_refactorizar.cs   https://gist.github.com/2896132#file_dip_volvo.refactorizado.cs
DIP – Arquitectura tradicional

                 UI

          Negocio




                                    Dependencia
Acceso a Datos        Componentes
DIP – Arquitectura invertida


Acceso a               Pruebas       Web
            UI
 Datos                 Unitarias   Services


           Capa de Negocio


                 Entidades
https://github.com/JuanjoFuchs/SOLID/tree/master/DIP_Multicapa
       https://github.com/JuanjoFuchs/SOLID/tree/master/DIP_Multicapa_Refactorizado




Demo
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/
¿Preguntas?
SOLID - ¿Cómo lo aplico a mi código?

Weitere ähnliche Inhalte

Was ist angesagt? (20)

Estructura de datos pilas y colas
Estructura de datos pilas y colasEstructura de datos pilas y colas
Estructura de datos pilas y colas
 
Patrones GRASP
Patrones GRASPPatrones GRASP
Patrones GRASP
 
Solid Principles
Solid PrinciplesSolid Principles
Solid Principles
 
Solid Principles
Solid PrinciplesSolid Principles
Solid Principles
 
SOLID principles
SOLID principlesSOLID principles
SOLID principles
 
Learning solid principles using c#
Learning solid principles using c#Learning solid principles using c#
Learning solid principles using c#
 
Solid principles
Solid principlesSolid principles
Solid principles
 
SOLID - Teoria e Prática
SOLID - Teoria e PráticaSOLID - Teoria e Prática
SOLID - Teoria e Prática
 
Clases y objetos en Java
Clases y objetos en JavaClases y objetos en Java
Clases y objetos en Java
 
Solid Principles
Solid PrinciplesSolid Principles
Solid Principles
 
Patrones Grasp
Patrones GraspPatrones Grasp
Patrones Grasp
 
Metodologías agiles de desarrollo de software
Metodologías agiles de desarrollo de softwareMetodologías agiles de desarrollo de software
Metodologías agiles de desarrollo de software
 
Encapsulamiento poo
Encapsulamiento pooEncapsulamiento poo
Encapsulamiento poo
 
4 objetos (caso de uso)
4 objetos  (caso de uso)4 objetos  (caso de uso)
4 objetos (caso de uso)
 
Programación Orientada a Objetos para Python
Programación Orientada a Objetos para PythonProgramación Orientada a Objetos para Python
Programación Orientada a Objetos para Python
 
S.O.L.I.D. Principles for Software Architects
S.O.L.I.D. Principles for Software ArchitectsS.O.L.I.D. Principles for Software Architects
S.O.L.I.D. Principles for Software Architects
 
patrones-disenio_compress.pdf
patrones-disenio_compress.pdfpatrones-disenio_compress.pdf
patrones-disenio_compress.pdf
 
Modelos de proceso de desarrollo de software
Modelos de proceso de desarrollo de softwareModelos de proceso de desarrollo de software
Modelos de proceso de desarrollo de software
 
Clean code: SOLID
Clean code: SOLIDClean code: SOLID
Clean code: SOLID
 
Solid principles
Solid principlesSolid principles
Solid principles
 

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

Java script para desarrolladores SharePoint
Java script para desarrolladores SharePointJava script para desarrolladores SharePoint
Java script para desarrolladores SharePointAdrian Diaz Cervera
 
Code Smells y SOLID: A qué huele tu código?
Code Smells y SOLID: A qué huele tu código?Code Smells y SOLID: A qué huele tu código?
Code Smells y SOLID: A qué huele tu código?Johnny Ordóñez
 
Qué puede aprender Drupal de Plone
Qué puede aprender Drupal de PloneQué puede aprender Drupal de Plone
Qué puede aprender Drupal de Plonementtes
 
VLCTechFest - Simplificando Controladores: Una introducción a Action-Domain ...
VLCTechFest -  Simplificando Controladores: Una introducción a Action-Domain ...VLCTechFest -  Simplificando Controladores: Una introducción a Action-Domain ...
VLCTechFest - Simplificando Controladores: Una introducción a Action-Domain ...Miguel Ángel Sánchez Chordi
 
Primeros pasos Symfony PHPVigo
Primeros pasos Symfony PHPVigoPrimeros pasos Symfony PHPVigo
Primeros pasos Symfony PHPVigoPHP Vigo
 
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring -  Junta General del MexALN 28/06/2012Retos en la Adopción del Refactoring -  Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012Alfredo Chavez
 
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012Alfredo Chavez
 
El universo JavaScript en Drupal 8
El universo JavaScript en Drupal 8El universo JavaScript en Drupal 8
El universo JavaScript en Drupal 8Ymbra
 
Evolución Android: Del Framework a la supervivencia del más fuerte
Evolución Android: Del Framework a la supervivencia del más fuerteEvolución Android: Del Framework a la supervivencia del más fuerte
Evolución Android: Del Framework a la supervivencia del más fuerteRubén Serrano Núñez
 
El testing como impulsor del cambio hacia una cultura DevOps
El testing como impulsor del cambio hacia una cultura DevOpsEl testing como impulsor del cambio hacia una cultura DevOps
El testing como impulsor del cambio hacia una cultura DevOpsFederico Toledo
 
Sesionmoodle 101223143117-phpapp02
Sesionmoodle 101223143117-phpapp02Sesionmoodle 101223143117-phpapp02
Sesionmoodle 101223143117-phpapp02Kimiemi VJ
 
Sesion moodle - "más allá de lo básico"...
Sesion moodle - "más allá de lo básico"...Sesion moodle - "más allá de lo básico"...
Sesion moodle - "más allá de lo básico"...Valeria Pleszowski
 
Directorio betabeers
Directorio betabeersDirectorio betabeers
Directorio betabeersbetabeers
 
SharePoint Saturday Barcelona. La importancia de JavaScript en nuestros desar...
SharePoint Saturday Barcelona. La importancia de JavaScript en nuestros desar...SharePoint Saturday Barcelona. La importancia de JavaScript en nuestros desar...
SharePoint Saturday Barcelona. La importancia de JavaScript en nuestros desar...Adrian Diaz Cervera
 
Herramientas para desarrollar rápidamente
Herramientas para desarrollar rápidamenteHerramientas para desarrollar rápidamente
Herramientas para desarrollar rápidamenteCarlos Toxtli
 

Ähnlich wie SOLID - ¿Cómo lo aplico a mi código? (20)

Java script para desarrolladores SharePoint
Java script para desarrolladores SharePointJava script para desarrolladores SharePoint
Java script para desarrolladores SharePoint
 
Code Smells y SOLID: A qué huele tu código?
Code Smells y SOLID: A qué huele tu código?Code Smells y SOLID: A qué huele tu código?
Code Smells y SOLID: A qué huele tu código?
 
Qué puede aprender Drupal de Plone
Qué puede aprender Drupal de PloneQué puede aprender Drupal de Plone
Qué puede aprender Drupal de Plone
 
VLCTechFest - Simplificando Controladores: Una introducción a Action-Domain ...
VLCTechFest -  Simplificando Controladores: Una introducción a Action-Domain ...VLCTechFest -  Simplificando Controladores: Una introducción a Action-Domain ...
VLCTechFest - Simplificando Controladores: Una introducción a Action-Domain ...
 
Primeros pasos Symfony PHPVigo
Primeros pasos Symfony PHPVigoPrimeros pasos Symfony PHPVigo
Primeros pasos Symfony PHPVigo
 
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring -  Junta General del MexALN 28/06/2012Retos en la Adopción del Refactoring -  Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
 
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
 
El universo JavaScript en Drupal 8
El universo JavaScript en Drupal 8El universo JavaScript en Drupal 8
El universo JavaScript en Drupal 8
 
Developing for Android (The movie)
Developing for Android (The movie)Developing for Android (The movie)
Developing for Android (The movie)
 
Introducción a symfony
Introducción a symfonyIntroducción a symfony
Introducción a symfony
 
Evolución Android: Del Framework a la supervivencia del más fuerte
Evolución Android: Del Framework a la supervivencia del más fuerteEvolución Android: Del Framework a la supervivencia del más fuerte
Evolución Android: Del Framework a la supervivencia del más fuerte
 
El testing como impulsor del cambio hacia una cultura DevOps
El testing como impulsor del cambio hacia una cultura DevOpsEl testing como impulsor del cambio hacia una cultura DevOps
El testing como impulsor del cambio hacia una cultura DevOps
 
Sesionmoodle 101223143117-phpapp02
Sesionmoodle 101223143117-phpapp02Sesionmoodle 101223143117-phpapp02
Sesionmoodle 101223143117-phpapp02
 
Sesionmoodle 101223143117-phpapp02
Sesionmoodle 101223143117-phpapp02Sesionmoodle 101223143117-phpapp02
Sesionmoodle 101223143117-phpapp02
 
Sesion moodle - "más allá de lo básico"...
Sesion moodle - "más allá de lo básico"...Sesion moodle - "más allá de lo básico"...
Sesion moodle - "más allá de lo básico"...
 
Directorio betabeers
Directorio betabeersDirectorio betabeers
Directorio betabeers
 
SharePoint Saturday Barcelona. La importancia de JavaScript en nuestros desar...
SharePoint Saturday Barcelona. La importancia de JavaScript en nuestros desar...SharePoint Saturday Barcelona. La importancia de JavaScript en nuestros desar...
SharePoint Saturday Barcelona. La importancia de JavaScript en nuestros desar...
 
Code Igniter
Code IgniterCode Igniter
Code Igniter
 
Herramientas para desarrollar rápidamente
Herramientas para desarrollar rápidamenteHerramientas para desarrollar rápidamente
Herramientas para desarrollar rápidamente
 
Atix24
Atix24Atix24
Atix24
 

Kürzlich hochgeladen

redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativanicho110
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21mariacbr99
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estossgonzalezp1
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxJorgeParada26
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosJhonJairoRodriguezCe
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanamcerpam
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIhmpuellon
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...JohnRamos830530
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxFederico Castellari
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.FlorenciaCattelani
 

Kürzlich hochgeladen (10)

redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos Basicos
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 

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