SlideShare una empresa de Scribd logo
1 de 21
Patrones Para Mortales
Patrones Para Mortales
Patrones para Mortales
C# De
Patrones Para Mortales
¿De qué debemos defender nuestro
código?
• Entradas incorrectas
• Operaciones invalidas
• Problemas del/los sistemas
• Futuros desarrolladores
Patrones Para Mortales
"Si algo malo puede
pasar, pasará"
Ley de Murphy
Patrones Para Mortales
Programación Defensiva
“La programación defensiva es un enfoque que busca
mejorar el software y el código fuente, en términos
de”
• Calidad
• Comprensibilidad
• Predictibilidad
Patrones Para Mortales
¿ Cómo vamos a lograrlo?
• Escribiendo más código
• Eliminando código innecesario
Patrones Para Mortales
Riesgo Defensa
Patrones Para Mortales
Refactorizar es el proceso en cual
modificamos la estructura de nuestro
código, sin alterar su comportamiento.
Patrones Para Mortales
Mejorar la calidad de nuestro
código
• Responsabilidad única
• Separación de reponsabilidades
• DRY (Don’t Repeat Yourself)
Patrones Para Mortales
Unit Test
1. Definir casos de test
2. Crear tests para cada caso
3. Ejecutar los tests
4. Ejecutar nuevamente los tests
Patrones Para Mortales
Principle
of Least
Surprise
Patrones Para Mortales
Debe de comportarse como
todos los usuarios
esperarían que se comporte.
Principle of Least
Surprise
Patrones Para Mortales
Defensive Code
• Validar argumentos de métodos
• Guard Clauses
• Manejas Nulls
• Option/Maybe
• Retornar resultados predecibles
• Manejar excepciones
• Exception management strategy
Patrones Para Mortales
“La llamo mi error de
mil millones de dólares”
Tony Hoare
https://es.wikipedia.org/wiki/C._A.
_R._Hoare
Patrones Para Mortales
Patrones Para Mortales
¿Por qué debo escribir código
defensivo?
• Mejora la calidad
• Mas entendible y manejable
• Mayor Predictibilidad
• Nos previene de bugs futuros
• Mejora la testiabilidad
Patrones Para Mortales
Gracias!!!
Germán Küber
Software Architect & Developer
Net-Baires
http://www.germankuber.com.ar/
@GermanKuber
Patrones Para Mortales
https://net-baires.com.ar/JoinSlack
Patrones Para Mortales
Jornada de Arquitectura .NET
Unit Test - ¿Qué, Cómo, Dónde y Cuándo?
http://jornadadearquitectura.net/
Porque hacer arquitectura no es únicamente cosa de
Arquitectos.
Patrones Para Mortales
¿Por qué estoy escribiendo
código defensivo?
Style
Patrones Para Mortales

Más contenido relacionado

Similar a Defensive code C#

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
 
Introducción a testing en php
Introducción a testing en phpIntroducción a testing en php
Introducción a testing en phpIsmael Ambrosi
 
vOpenvOpenUy: El misterioso CQRS
vOpenvOpenUy: El misterioso CQRSvOpenvOpenUy: El misterioso CQRS
vOpenvOpenUy: El misterioso CQRSfernando sonego
 
Semana xiii.i
 Semana xiii.i Semana xiii.i
Semana xiii.ielssalinas
 
Jornada de Arquitectura .NET - 2º Edición
Jornada de Arquitectura .NET - 2º EdiciónJornada de Arquitectura .NET - 2º Edición
Jornada de Arquitectura .NET - 2º Ediciónfernando sonego
 
Análisis estático de código en Java
Análisis estático de código en JavaAnálisis estático de código en Java
Análisis estático de código en JavaCésar Hernández
 
Authenticode para malotes
Authenticode para malotesAuthenticode para malotes
Authenticode para malotesRamon
 
Virus, el arte de algunos - Alberto García de Dios (/Rooted CON 2011)
Virus, el arte de algunos - Alberto García de Dios (/Rooted CON 2011)Virus, el arte de algunos - Alberto García de Dios (/Rooted CON 2011)
Virus, el arte de algunos - Alberto García de Dios (/Rooted CON 2011)Oskar Laguillo
 
fuzzing.pdf
fuzzing.pdffuzzing.pdf
fuzzing.pdfndi_z
 
Módulo 4. Desarrollador ágil
Módulo 4. Desarrollador ágilMódulo 4. Desarrollador ágil
Módulo 4. Desarrollador ágilJohnny Ordóñez
 
Ramón Pinuaga - Authenticode para malotes [rooted2017]
Ramón Pinuaga - Authenticode para malotes [rooted2017]Ramón Pinuaga - Authenticode para malotes [rooted2017]
Ramón Pinuaga - Authenticode para malotes [rooted2017]RootedCON
 
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
 
.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
 
Net-Baires: CleanCode 20190622
Net-Baires: CleanCode 20190622Net-Baires: CleanCode 20190622
Net-Baires: CleanCode 20190622fernando sonego
 
Clean code 7-8
Clean code 7-8Clean code 7-8
Clean code 7-8540deg
 

Similar a Defensive code C# (20)

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
 
Introducción a testing en php
Introducción a testing en phpIntroducción a testing en php
Introducción a testing en php
 
vOpenvOpenUy: El misterioso CQRS
vOpenvOpenUy: El misterioso CQRSvOpenvOpenUy: El misterioso CQRS
vOpenvOpenUy: El misterioso CQRS
 
Semana xiii.i
 Semana xiii.i Semana xiii.i
Semana xiii.i
 
Jornada de Arquitectura .NET - 2º Edición
Jornada de Arquitectura .NET - 2º EdiciónJornada de Arquitectura .NET - 2º Edición
Jornada de Arquitectura .NET - 2º Edición
 
Análisis estático de código en Java
Análisis estático de código en JavaAnálisis estático de código en Java
Análisis estático de código en Java
 
Authenticode para malotes
Authenticode para malotesAuthenticode para malotes
Authenticode para malotes
 
Practicas tecnicas
Practicas tecnicasPracticas tecnicas
Practicas tecnicas
 
Virus, el arte de algunos - Alberto García de Dios (/Rooted CON 2011)
Virus, el arte de algunos - Alberto García de Dios (/Rooted CON 2011)Virus, el arte de algunos - Alberto García de Dios (/Rooted CON 2011)
Virus, el arte de algunos - Alberto García de Dios (/Rooted CON 2011)
 
fuzzing.pdf
fuzzing.pdffuzzing.pdf
fuzzing.pdf
 
Introducción a tdd
Introducción a tddIntroducción a tdd
Introducción a tdd
 
Lenguaje de programación Java
Lenguaje de programación Java Lenguaje de programación Java
Lenguaje de programación Java
 
Módulo 4. Desarrollador ágil
Módulo 4. Desarrollador ágilMódulo 4. Desarrollador ágil
Módulo 4. Desarrollador ágil
 
Ramón Pinuaga - Authenticode para malotes [rooted2017]
Ramón Pinuaga - Authenticode para malotes [rooted2017]Ramón Pinuaga - Authenticode para malotes [rooted2017]
Ramón Pinuaga - Authenticode para malotes [rooted2017]
 
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
 
Refactor y deuda técnica
Refactor y deuda técnicaRefactor y deuda técnica
Refactor y deuda técnica
 
Don't Feed The Zombies!
Don't Feed The Zombies!Don't Feed The Zombies!
Don't Feed The Zombies!
 
.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-Baires: CleanCode 20190622
Net-Baires: CleanCode 20190622Net-Baires: CleanCode 20190622
Net-Baires: CleanCode 20190622
 
Clean code 7-8
Clean code 7-8Clean code 7-8
Clean code 7-8
 

Más de Germán Küber

Explorando el Diseño de la Memoria en Rust
Explorando el Diseño de la Memoria en RustExplorando el Diseño de la Memoria en Rust
Explorando el Diseño de la Memoria en RustGermán Küber
 
De Código a Ejecución: El Papel Fundamental del MSIL en .NET
De Código a Ejecución: El Papel Fundamental del MSIL en .NETDe Código a Ejecución: El Papel Fundamental del MSIL en .NET
De Código a Ejecución: El Papel Fundamental del MSIL en .NETGermán Küber
 
Que son los smart contracts.pptx
Que son los smart contracts.pptxQue son los smart contracts.pptx
Que son los smart contracts.pptxGermán Küber
 
De 0 a blockchain developer en 3 meses
De 0 a blockchain developer en 3 mesesDe 0 a blockchain developer en 3 meses
De 0 a blockchain developer en 3 mesesGermán Küber
 
Patrones de diseño en solidity
Patrones de diseño en solidityPatrones de diseño en solidity
Patrones de diseño en solidityGermán Küber
 
Vertical slice architecture
Vertical slice architectureVertical slice architecture
Vertical slice architectureGermán Küber
 
De 0 a blockchain developer en 3 meses
De 0 a blockchain developer en 3 mesesDe 0 a blockchain developer en 3 meses
De 0 a blockchain developer en 3 mesesGermán Küber
 
Diamon pattern presentation
Diamon pattern presentationDiamon pattern presentation
Diamon pattern presentationGermán Küber
 
Programación Funcional C#
Programación Funcional C#Programación Funcional C#
Programación Funcional C#Germán Küber
 
Arquitectura en aplicaciones Angular y buenas practicas.
Arquitectura en aplicaciones Angular y buenas practicas.Arquitectura en aplicaciones Angular y buenas practicas.
Arquitectura en aplicaciones Angular y buenas practicas.Germán Küber
 
Un mundo sin if. generics al rescate
Un mundo sin if. generics al rescateUn mundo sin if. generics al rescate
Un mundo sin if. generics al rescateGermán Küber
 
Azure 360º para Desarrolaldores
Azure 360º para DesarrolaldoresAzure 360º para Desarrolaldores
Azure 360º para DesarrolaldoresGermán Küber
 
Vertical slice architecture
Vertical slice architectureVertical slice architecture
Vertical slice architectureGermán Küber
 
Microservicios net arquitectura para aplicaciones net contenerizadas - net ...
Microservicios net   arquitectura para aplicaciones net contenerizadas - net ...Microservicios net   arquitectura para aplicaciones net contenerizadas - net ...
Microservicios net arquitectura para aplicaciones net contenerizadas - net ...Germán Küber
 
CQRS .NET Conf Chile 2018
CQRS .NET Conf Chile 2018CQRS .NET Conf Chile 2018
CQRS .NET Conf Chile 2018Germán Küber
 

Más de Germán Küber (20)

Explorando el Diseño de la Memoria en Rust
Explorando el Diseño de la Memoria en RustExplorando el Diseño de la Memoria en Rust
Explorando el Diseño de la Memoria en Rust
 
De Código a Ejecución: El Papel Fundamental del MSIL en .NET
De Código a Ejecución: El Papel Fundamental del MSIL en .NETDe Código a Ejecución: El Papel Fundamental del MSIL en .NET
De Código a Ejecución: El Papel Fundamental del MSIL en .NET
 
Mev Rapido.pptx
Mev Rapido.pptxMev Rapido.pptx
Mev Rapido.pptx
 
Que son los smart contracts.pptx
Que son los smart contracts.pptxQue son los smart contracts.pptx
Que son los smart contracts.pptx
 
De 0 a blockchain developer en 3 meses
De 0 a blockchain developer en 3 mesesDe 0 a blockchain developer en 3 meses
De 0 a blockchain developer en 3 meses
 
Patrones funcionales
Patrones funcionalesPatrones funcionales
Patrones funcionales
 
Patrones de diseño en solidity
Patrones de diseño en solidityPatrones de diseño en solidity
Patrones de diseño en solidity
 
Vertical slice architecture
Vertical slice architectureVertical slice architecture
Vertical slice architecture
 
De 0 a blockchain developer en 3 meses
De 0 a blockchain developer en 3 mesesDe 0 a blockchain developer en 3 meses
De 0 a blockchain developer en 3 meses
 
Diamon pattern presentation
Diamon pattern presentationDiamon pattern presentation
Diamon pattern presentation
 
Patrones funcionales
Patrones funcionalesPatrones funcionales
Patrones funcionales
 
Programación Funcional C#
Programación Funcional C#Programación Funcional C#
Programación Funcional C#
 
Event sourcing
Event sourcingEvent sourcing
Event sourcing
 
C sharp 8
C sharp 8C sharp 8
C sharp 8
 
Arquitectura en aplicaciones Angular y buenas practicas.
Arquitectura en aplicaciones Angular y buenas practicas.Arquitectura en aplicaciones Angular y buenas practicas.
Arquitectura en aplicaciones Angular y buenas practicas.
 
Un mundo sin if. generics al rescate
Un mundo sin if. generics al rescateUn mundo sin if. generics al rescate
Un mundo sin if. generics al rescate
 
Azure 360º para Desarrolaldores
Azure 360º para DesarrolaldoresAzure 360º para Desarrolaldores
Azure 360º para Desarrolaldores
 
Vertical slice architecture
Vertical slice architectureVertical slice architecture
Vertical slice architecture
 
Microservicios net arquitectura para aplicaciones net contenerizadas - net ...
Microservicios net   arquitectura para aplicaciones net contenerizadas - net ...Microservicios net   arquitectura para aplicaciones net contenerizadas - net ...
Microservicios net arquitectura para aplicaciones net contenerizadas - net ...
 
CQRS .NET Conf Chile 2018
CQRS .NET Conf Chile 2018CQRS .NET Conf Chile 2018
CQRS .NET Conf Chile 2018
 

Defensive code C#