+ All Categories
Home > Documents > Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible....

Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible....

Date post: 26-Jun-2020
Category:
Upload: others
View: 1 times
Download: 0 times
Share this document with a friend
108
Manuel Pijierro Sa - @mpijierro
Transcript
Page 1: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Manuel Pijierro Sa - @mpijierro

Page 2: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Sobre mi

@mpijierro

https://github.com/mpijierro

mandev.es/cv/

Reference Leader Software Development at S|ngular

https://medium.com/@mpijierro

Manuel Pijierro Sa

Page 3: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Talk is cheap. Show me the code

Torvalds, Linux (25-08-2000)

Sobre la charla

Page 4: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Sobre el código limpio

Correcto Simple

Testable Extensible

Page 5: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Sobre el código limpio

No existe una definición exacta

Tiene algo de subjetivo

Proceso de mejora contínua

Page 6: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Sobre el código limpio

"Code is like humor. When you have to explain it, it’s bad"Cory House, @housecor

"It is not enough for code to work"Robert C. Martin, @unclebobmartin

Page 7: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Mantenibilidad

Page 8: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Mantenibilidad

cost total = cost develop + cost maintain

Edward Yurdon & Larry L. Constantine: Structured Design: Fundamentals of a Discipline of Computer Program and Systems Designhttps://www.win.tue.nl/~wstomv/quotes/structured-design.html

Page 9: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Mantenibilidad

cost maintain = cost understand + cost change + cost test + cost deploy

Edward Yurdon & Larry L. Constantine: Structured Design: Fundamentals of a Discipline of Computer Program and Systems Designhttps://www.win.tue.nl/~wstomv/quotes/structured-design.html

Page 10: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Mantenibilidad

Alta mantenibilidadMejor software

Cambios en menos tiempo y menos recursosSoftware más barato

Software más competitivoProyectos y productos más competitivos

Empresas más solventes

Page 11: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Mantenibilidad

LEGIBLE COMPRENSIBLE

Objetivos

Page 12: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Programación Orientada a Objetos

Imagen de https://medium.com/@richardeng/a-simple-explanation-of-oop-46a156581214

Page 13: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Programación Orientada a Objetos

Imagen de https://www.javatpoint.com/java-oops-concepts

Page 14: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Programación Orientada a ObjetosClases

Definición de características y comportamiento

modelan objetos del mudo real y abstractos

Page 15: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Programación Orientada a ObjetosObjetos

instancia de un clase

contienen sus atributos y comportamiento

siempre deben tener un estado válido

Page 16: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Programación Orientada a ObjetosObjetos

- debe permanecer ocultoSobre el estado

Page 17: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Programación Orientada a ObjetosObjetos

- no revelar los detalles de implementación- no revelar estructura interna

Sobre el estado

Page 18: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Programación Orientada a ObjetosObjetos

- no usar “getters”Sobre el estado - porque revelan estructura interna y

decisiones de diseño.- porque tratamos a los objetos como

estructura planas de datos y no como objetos .

- porque la información pierde valor semántico.

Page 19: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Programación Orientada a ObjetosObjetos

- no usar “getters”Sobre el estado

Object thinkingData thinking

https://www.yegor256.com/2014/09/16/getters-and-setters-are-evil.html

Page 20: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Programación Orientada a ObjetosObjetos

- no usar “getters”Sobre el estado

Object thinkingData thinking

https://www.yegor256.com/2014/09/16/getters-and-setters-are-evil.html

Page 21: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Programación Orientada a ObjetosObjetos

- Principio “Tell don’t ask”Sobre el estado

https://martinfowler.com/bliki/TellDontAsk.html

“Dime que hago, no me preguntes”

Page 22: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Programación Orientada a ObjetosObjetos

- Principio “Tell don’t ask”Sobre el estado

- No volverse locos (getter erradicator)- Objetos intercambian información- Convertir getters en métodos semánticos que

devuelvan tipos concretoshttps://martinfowler.com/bliki/GetterEradicator.html

Page 23: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Tipos de objetos

Imagen de http://time.com/3931946/lego-sustainable-materials/

Page 24: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Tipos de objetos

- Servicios

- Entidades

- Value objects

- Domain events

- Event listener

- Dto’s

Page 25: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Tipos de objetos

- Objetos que realizan una tarea o devuelven información

- Se instancian una vez y se utilizan muchas veces

Servicios

Page 26: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Tipos de objetos

- Según el contexto- Servicios de aplicación- Servicios de dominio- Servicios de infraestructura

- Según el tipo de operación- Command: hacen una tarea- Query: obtienen información

Servicios

Page 27: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Tipos de objetos

- Objetos que representan un concepto del dominio

- Tienen identidad inmutable -> son identificables

- Tienen un alto significado semántico

- Son objetos inmutables

- Ej: Usuario, Producto, Pedido

Entidades

Page 28: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Tipos de objetos

- Objetos que representan un concepto general

- No tienen identidad. Definidas por su valor

- Son tipos complejos que pueden tener comportamiento

- Son objetos inmutables

- Son conceptos medibles, cuantificables o descriptores

- Ej: Fechas, precio de un producto, peso, altura, edad

Value object

Page 29: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Tipos de objetosValue object

- Les da sentido a tipos primitivos- Los modela de acuerdo al dominio- Le da un comportamiento propio

Page 30: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Tipos de objetos

- Objetos que notifican a otros servicios que algo ha

ocurrido en el modelo de escritura (command) dentro de

nuestro dominio.

Domain events

Page 31: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Tipos de objetosEvent Listener

- Objetos que realizan tareas secundarias relacionadas con una tarea

principal.

- Suelen recibir como parámetro el evento al que están asociado.

Page 32: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Tipos de objetosDTO’s

- Data Transfer Object

- Objeto que lleva datos entre procesos

- Únicamente encapsula información

- No tienen comportamiento asociado -> modelos anémicos

- Inmutables

Page 33: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Creando objetos

Page 34: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Creando objetosCreando servicios

Inyectar dependencias y configuración por constructor

Page 35: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Creando objetosCreando servicios

Page 36: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Creando objetosCreando servicios

Los argumentos del constructor deberían ser obligatorios

NO pasar argumentos con valor null

Page 37: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Creando objetosCreando servicios

Page 38: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Creando objetosCreando servicios

Únicamente usar inyección por constructor

NO utilizar setters

Servicios son inmutables

Page 39: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Creando objetosCreando servicios

Page 40: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Creando objetosCreando servicios

Haz todas las dependencias explícitas

Convierte llamadas estáticas en dependencias de objetos

Page 41: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Creando objetosCreando servicios

Page 42: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Creando objetosCreando servicios

Dependencias y configuración por constructor

Datos relevantes para la tarea como argumentos de métodos

Page 43: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Creando objetosCreando servicios

¿Parámetro de constructor o parámetro de método?

¿Podríamos ejecutar este servicio en un proceso batch sin requerir su instanciación una y otra vez?

Page 44: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Creando objetosCreando servicios

Page 45: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Creando objetosCreando servicios

Dentro del constructor únicamente

- validar parámetros (aserciones)- lanzar excepciones si un parámetro es inválido- asignarlos a las propiedades

Page 46: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Creando objetosResumen

- Inyectar dependencias y configuración por constructor

- Argumentos del constructor obligatorios- NO pasar argumentos con valor null- Dependencias explícitas- NO utilizar setters

- Convertir llamadas estáticas en dependencias de objetos

- Datos relevantes para la tarea como argumentos de métodos

- El constructor solo valida y asigna- Servicios inmutables

Page 47: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Creando objetosInmutabilidad

- código predecible

- somos consciente del estado de nuestros objetos

- nos asegura que nuestro código no cambia

- si hay cambio de estado -> instanciamos un nuevo objeto

Page 48: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Usando objetos

Page 49: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Tipos de operaciones de los métodos

Usando objetos

COMMAND QUERY

Command/Query Separation

https://martinfowler.com/bliki/CommandQuerySeparation.html

Page 50: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Tipos de operaciones de los métodos

Usando objetos

https://martinfowler.com/bliki/CommandQuerySeparation.html

command

query

Page 51: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Obteniendo información con métodos query

Usando objetos

- Únicamente retornan información- No producen cambios en el estado observable del sistema - Devuelven un único tipo de dato específico- Idempotente- No exponen el estado interno -> no getters- Pueden encadenarse llamadas de métodos query

Page 52: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Obteniendo información: sugerencia naming en métodos query

Usando objetos

- Empiezan por get…..

- Empiezan por find…..

- Retornan lo buscado- Lanzan una excepción

- Retornan lo buscado- Retornan alternativa vacía:

empty list, null object

Page 53: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Cambiando el estado con métodos command

Usando objetos

- No retornan nada: return void- Limitar el alcance de un método command -> usar eventos - No idempotente- Si algo va mal -> lanza una excepción- Puede usar queries para recoger información y ejecutar su tarea

Page 54: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Cambiando el estado: sugerencia naming en métodos command

Usando objetos

- Usar formas imperativas: “haz esto”, “haz aquello”- Normalmente: verbo + objeto a tratar- Indica que el cliente puede dar órdenes al objeto

Page 55: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Usar eventos para realizar tareas secundarias

Usando objetos

- Buscar cumplir el Principio de Responsabilidad Única

- Diferenciar tarea principal del método de tareas secundarias

- ¿Tiene el nombre del método un ‘And’ que indique tareas adicionales?- ¿Todas las líneas del método contribuyen a la tarea principal?- ¿Podría hacerse en un proceso background?

Page 56: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Usar eventos para realizar tareas secundarias

Usando objetos

¿Cómo limitamos el alcance de este método y cumplimos además el principio de responsabilidad única?

Page 57: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Usar eventos para realizar tareas secundarias

Usando objetos

1) Creamos un objeto que refleje el evento que ha ocurrido en el sistema

Page 58: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Usar eventos para realizar tareas secundarias

Usando objetos

2) Sustituimos el código original por la generación del evento

Page 59: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Usar eventos para realizar tareas secundarias

Usando objetos

3) Creamos un listener que realice la tarea asociada al evento

Page 60: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Command/Query en objetos

Usando objetos

COMMAND OBJECT

Command/Query Responsibility Segregation (CQRS)

QUERY OBJECT

Page 61: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Aspectos del código que mejoran y facilitan su legibilidad y

comprensibilidad

Page 62: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Sobre los nombres

Page 63: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Evita nombres que no revelen la intención

Sobre los nombres

Page 64: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Evita usar varias palabras para un mismo concepto

1) Sobre los nombres nombres

Page 65: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Una palabra por concepto usando estándares y convenciones

Nombre de funciones

- add / remove - increment / decrement- begin / end - insert / delete- create / destroy - lock / unlock- first / last - get / set- show / hide - start / stop

Nombres de variables

- begin / end - first / last- locked / unlocked - min / max- next / previous - old / new- opened / closed - source / targe- up / down

1) Sobre los nombres

Page 66: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Sobre los parámetros

Page 67: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Usa operandos y no opciones

Sobre los parámetros

Page 68: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Usa operandos y no opciones

Sobre los parámetros

Page 69: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Objetos de dominio y ‘data clumps’ (value objects)

Sobre los parámetros

Page 70: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Sobre los parámetrosObjetos de dominio y ‘data clumps’ (value objects)

Page 71: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Sobre las condiciones

Page 72: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Utiliza condicionales semánticos fáciles de leer y comprender

Sobre las condiciones

Page 73: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Utiliza condicionales semánticos fáciles de leer y comprender

Sobre las condiciones

Page 74: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Un solo nivel de indentación por método

Sobre las condiciones

Page 75: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Un solo nivel de indentación por método

Sobre las condiciones

Page 76: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Un solo nivel de indentación por método: cláusulas de guarda

Sobre las condiciones

Page 77: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Un solo nivel de indentación por método

Sobre las condiciones

Page 78: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Un solo nivel de indentación por método

Sobre las condiciones

Page 79: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Aprovecha para contar una historia en cada método público...

Sobre las funciones

Page 80: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Sobre las funciones...pero no cuentes historias de miedo

Page 81: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Sobre las funcionesPequeñas, menos es más

Page 82: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Sobre los principiosEvita las sorpresas: Principio de la Mínima Sorpresa

Page 83: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Sobre los principiosEvita las sorpresas: Principio de la Mínima Sorpresa

Page 84: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Sobre los principiosEvita las sorpresas: Principio de la Mínima Sorpresa

Page 85: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Sobre los principiosEvita las sorpresas: Principio de la Mínima Sorpresa

Page 86: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Sobre los principiosEvita las sorpresas: Principio de la Mínima Sorpresa

Page 87: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Sobre los principiosEvita las sorpresas: Principio de la Mínima Sorpresa

Page 88: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Sobre los comentariosEl código es el único que siempre dice la verdad

Page 89: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Sobre los comentariosEl código es el único que siempre dice la verdad

Page 90: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Sobre los comentariosEl código es el único que siempre dice la verdad

Page 91: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

SimetríaEl código debe parecerse en cualquier parte del proyecto

Simetría sintáctica

Simetría semántica

Simetría sistémica

Page 92: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

SimetríaSimetría sistémica

Page 93: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

SimetríaSimetría sistémica

Page 94: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

SimetríaSimetría en métodos

https://leanpub.com/object-design

Page 95: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

SimetríaSimetría en métodos: Pre-conditions check

- validamos todos los parámetros

- generan excepciones InvalidArgumentException cuando algo va mal

- podemos usar aserciones

- argumentos como value objects o entities ahorran validaciones

Page 96: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

SimetríaSimetría en métodos: Pre-conditions check

Page 97: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

SimetríaSimetría en métodos: failure scenarios

- se corresponden con errores funcionales normalmente generados por condiciones externas- generan excepciones de tipo runtime

Page 98: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

SimetríaSimetría en métodos: happy path

https://leanpub.com/object-design

Page 99: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

SimetríaSimetría en métodos: post-condition checks

https://leanpub.com/object-design

- comprobaciones y validaciones antes de hacer el return

Page 100: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

SimetríaSimetría en métodos: return

https://leanpub.com/object-design

- se realiza el return del método

- solo los métodos query deberían devolver algo

- mejor devolver tipos de datos que primitivas

- devolver únicamente un tipo de dato específico por método

Page 101: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

De tu parte queda...

Entrenar

Page 102: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

EntrenarConcentrarse

De tu parte queda...

Page 103: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

EntrenarConcentrarseSer consciente

De tu parte queda...

Page 104: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

EntrenarConcentrarseSer conscienteSer responsable

De tu parte queda...

Page 105: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Bibliografía recomendada

Page 106: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Bibliografía recomendada

Page 107: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Ahora te toca a ti

¿preguntas? ¿comentarios? ¿sugerencias?

Page 108: Manuel Pijierro Sa - @mpijierro · Sobre el código limpio Correcto Simple Testable Extensible. Sobre el código limpio No existe una definición exacta Tiene algo de subjetivo Proceso

Fin

Gracias por vuestra atención.


Recommended