Upgrade to Pro — share decks privately, control downloads, hide ads and more …

(Re)descubriendo la sencillez en nuestro código

(Re)descubriendo la sencillez en nuestro código

Revisión de distintas reglas, prácticas y principios que nos pueden guiar en el diseño de código más sencillo, mejor diseñado y, por lo tanto, más mantenible. Pasando, entre otros, por las cuatro reglas de Kent Beck para el diseño sencillo, la identificación de ciertos code smell o ejemplos de aplicación de distintos principios S.O.L.I.D. en nuestro código

Carlos Tirado

October 26, 2017
Tweet

More Decks by Carlos Tirado

Other Decks in Programming

Transcript

  1. DISCLAIMER •  Orientación a Objetos •  El lenguaje condiciona • 

    Principios, guías… no reglas •  Subje:vidad EVERYWHERE •  Muchos acrónimos (y algo de inglés)
  2. “La belleza en el es1lo, la armonía, la gracia y

    el buen ritmo dependen de la simplicidad” Platón
  3. MANIFIESTO ÁGIL PRINCIPIO Nº 10 “La simplicidad, o el arte

    de maximizar la can1dad de trabajo no realizado, es esencial.”
  4. SIMPLICITY IS THE KEY PRINCIPIO XP Haz la cosa más

    simple que pueda funcionar ¿Qué es la simplicidad? La simplicidad es el camino más corto a una solución - Ward Cunningham
  5. YAGNI PRINCIPIO XP Implementa siempre las cosas cuando realmente las

    necesites, no cuando prevés que lo vas a necesitar. - Ron Jeffries You Aren't Gonna Need It
  6. 4 RULES OF SIMPLE DESIGN KENT BECK 1. Runs all

    the tests 2. Has no duplicated logic. Be wary of hidden duplica:on like parallel class hierarchies 3. States every inten:on important to the programmer 4. Has the fewest possible classes and methods
  7. 4 RULES OF SIMPLE DESIGN MARTIN FOWLER 1. Passes the

    tests 2. Reveals inten:on 3. No duplica:on 4. Fewest elements
  8. 4 RULES OF SIMPLE DESIGN JB RAINSBERGER 1. Passes the

    tests 2-3. Remove duplica:on 2-3. Improve names 4. Fewest elements
  9. DRY (DON’T REPEAT YOURSELF) PRINCIPIO Every piece of knowledge must

    have a single, unambiguous, authorita1ve representa1on within a system. Andy Hunt y David Thomas - The Pragmatic Programmer
  10. DRY (DON’T REPEAT YOURSELF) “duplica>on is far cheaper than the

    wrong abstrac>on” Sandi Metz - My RailsConf 2014 PRINCIPIO “prefer duplica>on over the wrong abstrac>on”
  11. SOLID Serie de principios de diseño en la programación orientada

    a objetos PRINCIPIOS DE DISEÑO Alta cohesión Bajo acoplamiento Single responsibility principle Open/closed principle Liskov subs;tu;on principle Interface segrega;on principle Dependency inversion principle S O L I D OOP for Dummies
  12. SINGLE RESPONSABILITY PRINCIPLE (SRP) PRINCIPIO DE RESPONSABILIDAD ÚNICA SOLID Una

    clase o módulo debería tener una sola razón para cambiar
  13. LISKOV SUBSTITUTION PRINCIPLE (LSP) PRINCIPIO DE SUSTITUCIÓN DE LISKOV SOLID

    Una clase derivada no debe modificar el comportamiento de la clase base
  14. INTERFACE SEGREGATION PRINCIPLE (ISP) PRINCIPIO DE SEGREGACIÓN DE INTERFACES SOLID

    Los clientes no deben verse obligados a depender de interfaces que no u>lizan
  15. INTERFACE SEGREGATION PRINCIPLE (ISP) PRINCIPIO DE SEGREGACIÓN DE INTERFACES SOLID

    h#p://blog.koalite.com/2015/04/principio-de-segregacion-de-interfaces-para-abuelas/
  16. DEPENDENCY INVERSION PRINCIPLE (DIP) PRINCIPIO DE INVERSIÓN DE DEPENDENCIAS SOLID

    A. Los módulos de alto nivel no deben depender de módulos de bajo nivel. Ambos deben depender de abstracciones. B. Las abstracciones no deben depender de detalles, son los detalles los que deben depender de abstracciones.
  17. NOMBRES •  Nombres descrip<vos •  Lenguaje ubicuo o de solución

    •  Que se puedan buscar -> la longitud está relacionada con el scope •  Clases nombres. Métodos verbos. •  No hace falta elegir bien los nombres a la primera -> REFACTORIZAR CLEAN CODE
  18. FUNCIONES •  Funciones muy cortas •  Las funciones deben hacer

    sólo una cosa •  Stepdown •  Cuantos menos argumentos mejor •  SLA: Separar dis<ntos niveles de abstracción •  CQS: Separación de comandos y queries CLEAN CODE
  19. COMENTARIOS •  Mejor un método que un comentario •  Explicar

    el por qué, no lo que hace •  No ser redundante •  No u<lizarlos como histórico de cambios •  Código comentado -> BORRARLO •  Los TODOs con cuidado (asociados a <cket) •  Para APIs, librerías, etc. CLEAN CODE
  20. COMENTARIOS CLEAN CODE //TODO: generar este objeto con un factoria

    var trabajador = new Trabajador(id); // compruebo que el trabajador no es nulo if (trabajador != null) { //if (trabajador.FechaAlta >= DateTime.Now) // Carlos NUEVO 12/10/2017 // Comprobamos si el trabajador esta dado de alta // No es suficiente con la fecha, puede tener fecha de alta vigente pero estado suspendido if (trabajador.FechaAlta >= DateTime.Now && trabajador.Estado == TrabajadorEstado.Alta) { _servicioInscripcion.InscribirTrabajadorEnCurso(trabajador, curso); } }
  21. COMENTARIOS CLEAN CODE //TODO: Ticket 13340 - generar este objeto

    con un factoria var trabajador = new Trabajador(id); if (trabajador != null) { if (trabajador.EstaDadoDeAlta) { _servicioInscripcion.InscribirTrabajadorEnCurso(trabajad or, curso); } }
  22. OTROS CONSEJOS •  El mejor código es el que no

    existe •  Usa las convenciones (o por lo menos se consistente) •  Team rules •  Sigue la regla del boy scout •  El código de test como ciudadano de primera clase
  23. REFERENCIAS •  The Rules Of Extreme Programming hcp://www.extremeprogramming.org/rules.html •  Simplicidad

    para desarrolladores – Eduardo Ferro hcps://www.youtube.com/watch?v=6FDxbCzh2sI •  Simple Made Easy – Rich Hickey hcps://www.infoq.com/presenta:ons/Simple-Made-Easy •  8 Lines of Code – Greg Young hcps://www.infoq.com/presenta:ons/8-lines-code-refactoring •  Yagni – Mar:n Fowler hcps://mar:nfowler.com/bliki/Yagni.html •  BeckDesignRules – Mar:n Fowler hcps://mar:nfowler.com/bliki/BeckDesignRules.html
  24. REFERENCIAS •  Pulng An Age-Old Bacle To Rest – J.B.

    Rainsberger hcp://blog.thecodewhisperer.com/permalink/pulng-an-age-old-bacle-to-rest •  The Wrong Abstrac:on – Sandi Metz hcps://www.sandimetz.com/blog/2016/1/20/the-wrong-abstrac:on •  The Principles of OOD – Robert C. Mar:n hcp://butunclebob.com/Ar:cleS.UncleBob.PrinciplesOfOod •  Why Every Element of SOLID is Wrong – Dan North hcps://speakerdeck.com/tastapod/why-every-element-of-solid-is-wrong •  SOLID is OOP for dummies – Yegor Bugayenko hcp://www.yegor256.com/2017/03/28/solid.html •  Pure DI – Mark Seemann hcp://blog.ploeh.dk/2014/06/10/pure-di/