SlideShare una empresa de Scribd logo
7
MANEJO DE ERRORES
• Datos de entrada inesperados
• Conexiones que fallan
• Datos que faltan
“El manejo de errores es inevitable y necesario”
Clean Code
Si oculta/invade la lógica principal del programa está
mal.
Excepciones, no
códigos de error
Códigos de error
• Embarullan el código que invoca.

• Obligan a gestionar el error en la siguiente línea.

• En ocasiones se olvida.
Excepciones
• No enmarañan el código del que invoca.

• Se separa la lógica principal del manejo del error.

• Se pueden entender ambos códigos
independientemente.
Usar “Unchecked
exceptions”
Checked exceptions
• Obligan a declarar el lanzamiento de la excepción
en todas las llamadas hasta el catch.

• Un cambio a bajo nivel obliga a cambiar todas las
capas de alto nivel.

• Rompen la encapsulación.

• Son beneficiosas para una librería crítica o de bajo
nivel pero en una aplicación no merecen la pena.
Excepciones
• Provee contexto con la excepción. Indica el
mensaje. Información del error. Operación y el tipo
de error.

• Define las excepciones en términos de la
necesidad del que invoca. (Conexión fallida,
Servidor no disponible…).

• Envuelve (wrap) código ajeno para lanzar tus
propias excepciones.
Evita el caso especial
• SPECIAL CASE PATTERN.

• Cuando el caso especial puede ser incluido en el
flujo normal.

• Crea o configura una clase para que maneje el
caso especial y así evitar que el que invoca lo
maneje.

• Encapsulas el comportamiento especial.
Evita retornar null
• Al devolver null, obligamos al que invoca a
manejarlo.

• Al revolver null de un objeto considera “lanzar una
excepción” o usar un “Special case object”.

• Si es de un tercero, considera envolver el método y
“lanzar una excepción” o usar un “Special case
object”.
• Listado vacío en vez de null.
Evita pasar null
• Incluso peor que retornarlo.

• No hay buena forma de manejarlo.

• Obliga a comprobarlo siempre.

• Mejor evitar y prohibir pasarlos y manejarlos
cuando no quede otra opción.
8
LÍMITES
Usar código de otros
Código externo

Código de terceros
Código de terceros
• Un código de terceros tiende a ser generalista y a
ser amplio en opciones y capacidad.

• En nuestra aplicación preferimos código enfocado
en nuestras necesidades y con lo mínimo
necesario. Forzando nuestros requerimientos de
negocio.

• P.E. La un array: Métodos innecesarios y
“péligrosos”, incluyen cualquier objeto.
Código de terceros
• Envolver (Wrapear) código de terceros.

• Encapsulamos la librería genérica usada.

• Ajustamos la interfaz únicamente a nuestras
necesidades.

• Podemos cambiar la estructura interna.
No se trata de
encapsular todo
Sino de no pasarlos
por todo el sistema
Solo dentro de clases o dentro de una familia de clases
relacionadas.
Tests de aprendizaje
• Prueba librerías de terceros mediante tests y de
forma aislada.

• Evita el problema de no saber si es fallo nuestro, de
la librería o un mal uso de la librería.

• Integrar y aprender a usar la librería son dos tareas
complicadas. Intentar atacarlo por separado.

• Puede ayudarnos a validar que todo sigue igual
tras actualizar a nuevas versiones de la librería.
Usar código que aún no
existe
• Pensar la interfaz deseada en el límite de lo
desconocido.

• Código más legado y enfocado en lo que quiere
conseguir.

• Una vez se define el api real adaptarla (ADAPTER) para
acomodarse a la actual.

• El ADAPTER encapsula la interacción con el API y
ofrece un único lugar de cambio cuando el API
evoluciona.
PATRON ADAPTER
Límites limpios
• En los límites ocurren cambios.

• El buen software acomoda los cambios con poca inversión
y “rework”.

• Al trabajar con código ajeno hay que tener especial cuidado
e intentar que el cambio no sea demasiado costoso.

• Hay que intentar que muy pocas partes del código accedan
al código de terceros.

• Wrapers o Adapters son técnicas que ayudan en esta
labor.
SIGUIENTE
9
Unit Tests

Más contenido relacionado

Similar a Clean code 7-8

¿A qué huele tu código? Afinando nuestro olfato
¿A qué huele tu código? Afinando nuestro olfato¿A qué huele tu código? Afinando nuestro olfato
¿A qué huele tu código? Afinando nuestro olfatoRubén Bernárdez
 
Obfuscation & unpacking
Obfuscation & unpackingObfuscation & unpacking
Obfuscation & unpackingRicardoGomez94
 
Codigo Escalable WDT
Codigo Escalable WDTCodigo Escalable WDT
Codigo Escalable WDTEdwin Cruz
 
Buenas practicas desarrollando software
Buenas practicas desarrollando softwareBuenas practicas desarrollando software
Buenas practicas desarrollando softwareGabriel Moral
 
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez.NET UY Meetup
 
Trabajando con código heredado y ser feliz
Trabajando con código heredado y ser felizTrabajando con código heredado y ser feliz
Trabajando con código heredado y ser felizDiego Caballero
 
Desymfony - Servicios
Desymfony  - ServiciosDesymfony  - Servicios
Desymfony - ServiciosRicard Clau
 
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
 
Caracteristicas de C Sharp
Caracteristicas de C SharpCaracteristicas de C Sharp
Caracteristicas de C SharpEdgardo Martinez
 
Introducción a testing en php
Introducción a testing en phpIntroducción a testing en php
Introducción a testing en phpIsmael Ambrosi
 
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
 
Unidad 7 conceptos Avanzados en la Programacion orientado a objetos
Unidad 7 conceptos Avanzados en la Programacion orientado a objetosUnidad 7 conceptos Avanzados en la Programacion orientado a objetos
Unidad 7 conceptos Avanzados en la Programacion orientado a objetosAmado Arcaya
 

Similar a Clean code 7-8 (20)

¿A qué huele tu código? Afinando nuestro olfato
¿A qué huele tu código? Afinando nuestro olfato¿A qué huele tu código? Afinando nuestro olfato
¿A qué huele tu código? Afinando nuestro olfato
 
Obfuscation & unpacking
Obfuscation & unpackingObfuscation & unpacking
Obfuscation & unpacking
 
Codigo Escalable WDT
Codigo Escalable WDTCodigo Escalable WDT
Codigo Escalable WDT
 
Buenas practicas desarrollando software
Buenas practicas desarrollando softwareBuenas practicas desarrollando software
Buenas practicas desarrollando software
 
Python
PythonPython
Python
 
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
 
Código Limpio
Código LimpioCódigo Limpio
Código Limpio
 
Código Limpio
Código LimpioCódigo Limpio
Código Limpio
 
Trabajando con código heredado y ser feliz
Trabajando con código heredado y ser felizTrabajando con código heredado y ser feliz
Trabajando con código heredado y ser feliz
 
Desymfony - Servicios
Desymfony  - ServiciosDesymfony  - Servicios
Desymfony - Servicios
 
Manejo De Excepciones
Manejo De ExcepcionesManejo De Excepciones
Manejo De Excepciones
 
Principios de diseño
Principios de diseñoPrincipios de diseño
Principios de diseño
 
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
 
Caracteristicas de C Sharp
Caracteristicas de C SharpCaracteristicas de C Sharp
Caracteristicas de C Sharp
 
Clean code
Clean codeClean code
Clean code
 
Introducción a testing en php
Introducción a testing en phpIntroducción a testing en php
Introducción a testing en php
 
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
 
Unidad 7 conceptos Avanzados en la Programacion orientado a objetos
Unidad 7 conceptos Avanzados en la Programacion orientado a objetosUnidad 7 conceptos Avanzados en la Programacion orientado a objetos
Unidad 7 conceptos Avanzados en la Programacion orientado a objetos
 
Introducción a DDD
Introducción a DDDIntroducción a DDD
Introducción a DDD
 
Act 2 y 3
Act 2 y 3Act 2 y 3
Act 2 y 3
 

Más de 540deg

Katayuno TCR (test && commit || revert)
Katayuno TCR (test && commit || revert)Katayuno TCR (test && commit || revert)
Katayuno TCR (test && commit || revert)540deg
 
Test doubles
Test doublesTest doubles
Test doubles540deg
 
Clean code 9
Clean code 9Clean code 9
Clean code 9540deg
 
Clean code 10-11
Clean code 10-11Clean code 10-11
Clean code 10-11540deg
 
Clean code 4-6
Clean code 4-6Clean code 4-6
Clean code 4-6540deg
 
Clean code 1-3
Clean code 1-3Clean code 1-3
Clean code 1-3540deg
 
Arquitectura hexagonal
Arquitectura hexagonalArquitectura hexagonal
Arquitectura hexagonal540deg
 

Más de 540deg (7)

Katayuno TCR (test && commit || revert)
Katayuno TCR (test && commit || revert)Katayuno TCR (test && commit || revert)
Katayuno TCR (test && commit || revert)
 
Test doubles
Test doublesTest doubles
Test doubles
 
Clean code 9
Clean code 9Clean code 9
Clean code 9
 
Clean code 10-11
Clean code 10-11Clean code 10-11
Clean code 10-11
 
Clean code 4-6
Clean code 4-6Clean code 4-6
Clean code 4-6
 
Clean code 1-3
Clean code 1-3Clean code 1-3
Clean code 1-3
 
Arquitectura hexagonal
Arquitectura hexagonalArquitectura hexagonal
Arquitectura hexagonal
 

Último

FICHA DE TRABAJO DE CREACION DE TABLAS EN WORD
FICHA  DE TRABAJO DE CREACION DE TABLAS EN WORDFICHA  DE TRABAJO DE CREACION DE TABLAS EN WORD
FICHA DE TRABAJO DE CREACION DE TABLAS EN WORDRobertSotilLujn
 
MODULO BASICO DE WORD - I CICLO.DOC.DOC.
MODULO BASICO DE WORD - I CICLO.DOC.DOC.MODULO BASICO DE WORD - I CICLO.DOC.DOC.
MODULO BASICO DE WORD - I CICLO.DOC.DOC.CarmenFlores88207
 
Los desafíos de calidad de software que nos trae la IA y los LLMs
Los desafíos de calidad de software que nos trae la IA y los LLMsLos desafíos de calidad de software que nos trae la IA y los LLMs
Los desafíos de calidad de software que nos trae la IA y los LLMsFederico Toledo
 
trabajo integrador final sofi y vane.docx
trabajo integrador final sofi y vane.docxtrabajo integrador final sofi y vane.docx
trabajo integrador final sofi y vane.docxlasocharfuelan123
 
infografia del sena para analisis y desarrollo de software
infografia del sena para analisis y desarrollo de softwareinfografia del sena para analisis y desarrollo de software
infografia del sena para analisis y desarrollo de softwareoscartorres960914
 
Virus informático (tipos y opciones para prevenir)
Virus informático (tipos y opciones para prevenir)Virus informático (tipos y opciones para prevenir)
Virus informático (tipos y opciones para prevenir)edisonquispecalderon
 
Documento colaborativo. Solución del caso GA1-240201526-AA6-EV01.pdf
Documento colaborativo. Solución del caso GA1-240201526-AA6-EV01.pdfDocumento colaborativo. Solución del caso GA1-240201526-AA6-EV01.pdf
Documento colaborativo. Solución del caso GA1-240201526-AA6-EV01.pdfHAROLD IVANOVICH
 
Escaneo y eliminación de malware en el equipo
Escaneo y eliminación de malware en el equipoEscaneo y eliminación de malware en el equipo
Escaneo y eliminación de malware en el equiponicromante2000
 
experiencia de aprendizaje sobre lectura y escritura como herramientas de ap...
experiencia de aprendizaje sobre lectura y escritura como  herramientas de ap...experiencia de aprendizaje sobre lectura y escritura como  herramientas de ap...
experiencia de aprendizaje sobre lectura y escritura como herramientas de ap...cuentauniversidad34
 
Maquina de Dibujo y Escritura Automática.pdf
Maquina de Dibujo y Escritura Automática.pdfMaquina de Dibujo y Escritura Automática.pdf
Maquina de Dibujo y Escritura Automática.pdfjuanjosebarreiro704
 

Último (10)

FICHA DE TRABAJO DE CREACION DE TABLAS EN WORD
FICHA  DE TRABAJO DE CREACION DE TABLAS EN WORDFICHA  DE TRABAJO DE CREACION DE TABLAS EN WORD
FICHA DE TRABAJO DE CREACION DE TABLAS EN WORD
 
MODULO BASICO DE WORD - I CICLO.DOC.DOC.
MODULO BASICO DE WORD - I CICLO.DOC.DOC.MODULO BASICO DE WORD - I CICLO.DOC.DOC.
MODULO BASICO DE WORD - I CICLO.DOC.DOC.
 
Los desafíos de calidad de software que nos trae la IA y los LLMs
Los desafíos de calidad de software que nos trae la IA y los LLMsLos desafíos de calidad de software que nos trae la IA y los LLMs
Los desafíos de calidad de software que nos trae la IA y los LLMs
 
trabajo integrador final sofi y vane.docx
trabajo integrador final sofi y vane.docxtrabajo integrador final sofi y vane.docx
trabajo integrador final sofi y vane.docx
 
infografia del sena para analisis y desarrollo de software
infografia del sena para analisis y desarrollo de softwareinfografia del sena para analisis y desarrollo de software
infografia del sena para analisis y desarrollo de software
 
Virus informático (tipos y opciones para prevenir)
Virus informático (tipos y opciones para prevenir)Virus informático (tipos y opciones para prevenir)
Virus informático (tipos y opciones para prevenir)
 
Documento colaborativo. Solución del caso GA1-240201526-AA6-EV01.pdf
Documento colaborativo. Solución del caso GA1-240201526-AA6-EV01.pdfDocumento colaborativo. Solución del caso GA1-240201526-AA6-EV01.pdf
Documento colaborativo. Solución del caso GA1-240201526-AA6-EV01.pdf
 
Escaneo y eliminación de malware en el equipo
Escaneo y eliminación de malware en el equipoEscaneo y eliminación de malware en el equipo
Escaneo y eliminación de malware en el equipo
 
experiencia de aprendizaje sobre lectura y escritura como herramientas de ap...
experiencia de aprendizaje sobre lectura y escritura como  herramientas de ap...experiencia de aprendizaje sobre lectura y escritura como  herramientas de ap...
experiencia de aprendizaje sobre lectura y escritura como herramientas de ap...
 
Maquina de Dibujo y Escritura Automática.pdf
Maquina de Dibujo y Escritura Automática.pdfMaquina de Dibujo y Escritura Automática.pdf
Maquina de Dibujo y Escritura Automática.pdf
 

Clean code 7-8

  • 2. • Datos de entrada inesperados • Conexiones que fallan • Datos que faltan “El manejo de errores es inevitable y necesario”
  • 3. Clean Code Si oculta/invade la lógica principal del programa está mal.
  • 5. Códigos de error • Embarullan el código que invoca. • Obligan a gestionar el error en la siguiente línea. • En ocasiones se olvida.
  • 6. Excepciones • No enmarañan el código del que invoca. • Se separa la lógica principal del manejo del error. • Se pueden entender ambos códigos independientemente.
  • 8. Checked exceptions • Obligan a declarar el lanzamiento de la excepción en todas las llamadas hasta el catch. • Un cambio a bajo nivel obliga a cambiar todas las capas de alto nivel. • Rompen la encapsulación. • Son beneficiosas para una librería crítica o de bajo nivel pero en una aplicación no merecen la pena.
  • 9. Excepciones • Provee contexto con la excepción. Indica el mensaje. Información del error. Operación y el tipo de error. • Define las excepciones en términos de la necesidad del que invoca. (Conexión fallida, Servidor no disponible…). • Envuelve (wrap) código ajeno para lanzar tus propias excepciones.
  • 10. Evita el caso especial • SPECIAL CASE PATTERN. • Cuando el caso especial puede ser incluido en el flujo normal. • Crea o configura una clase para que maneje el caso especial y así evitar que el que invoca lo maneje. • Encapsulas el comportamiento especial.
  • 11. Evita retornar null • Al devolver null, obligamos al que invoca a manejarlo. • Al revolver null de un objeto considera “lanzar una excepción” o usar un “Special case object”. • Si es de un tercero, considera envolver el método y “lanzar una excepción” o usar un “Special case object”. • Listado vacío en vez de null.
  • 12. Evita pasar null • Incluso peor que retornarlo. • No hay buena forma de manejarlo. • Obliga a comprobarlo siempre. • Mejor evitar y prohibir pasarlos y manejarlos cuando no quede otra opción.
  • 14. Usar código de otros Código externo Código de terceros
  • 15. Código de terceros • Un código de terceros tiende a ser generalista y a ser amplio en opciones y capacidad. • En nuestra aplicación preferimos código enfocado en nuestras necesidades y con lo mínimo necesario. Forzando nuestros requerimientos de negocio. • P.E. La un array: Métodos innecesarios y “péligrosos”, incluyen cualquier objeto.
  • 16. Código de terceros • Envolver (Wrapear) código de terceros. • Encapsulamos la librería genérica usada. • Ajustamos la interfaz únicamente a nuestras necesidades. • Podemos cambiar la estructura interna.
  • 17. No se trata de encapsular todo
  • 18. Sino de no pasarlos por todo el sistema Solo dentro de clases o dentro de una familia de clases relacionadas.
  • 19. Tests de aprendizaje • Prueba librerías de terceros mediante tests y de forma aislada. • Evita el problema de no saber si es fallo nuestro, de la librería o un mal uso de la librería. • Integrar y aprender a usar la librería son dos tareas complicadas. Intentar atacarlo por separado. • Puede ayudarnos a validar que todo sigue igual tras actualizar a nuevas versiones de la librería.
  • 20. Usar código que aún no existe • Pensar la interfaz deseada en el límite de lo desconocido. • Código más legado y enfocado en lo que quiere conseguir. • Una vez se define el api real adaptarla (ADAPTER) para acomodarse a la actual. • El ADAPTER encapsula la interacción con el API y ofrece un único lugar de cambio cuando el API evoluciona.
  • 22. Límites limpios • En los límites ocurren cambios. • El buen software acomoda los cambios con poca inversión y “rework”. • Al trabajar con código ajeno hay que tener especial cuidado e intentar que el cambio no sea demasiado costoso. • Hay que intentar que muy pocas partes del código accedan al código de terceros. • Wrapers o Adapters son técnicas que ayudan en esta labor.