SlideShare una empresa de Scribd logo
1 de 18
Patrones para Mortales
State Pattern en C#
Software Architect
Net-Baires
http://germankuber.com.ar/
@germankuber
¿Que vamos a ver?
Patrones de
comportamiento
Demo
Problemas
State Pattern
Refactorización
Preguntas
Patrones de diseño
Los patrones de diseño son
soluciones para problemas típicos y
recurrentes que nos podemos
encontrar a la hora de desarrollar
una aplicación
Patrones de
comportamiento
Los patrones de diseño de
comportamiento identifican
situaciones comunes de
comunicación entre objetos.
Al hacerlo, aumentan la
flexibilidad al llevar a cabo
esta comunicación.
DEMO
Un Locuraaaaa!!!
if (_state == AccountState.Close)
Close ();
else if (_state == AccountState.Open)
Open ();
else if (_state == AccountState.Verified)
Verified ();
else if (_state == AccountState.NotVerified)
NotVerified ();
else if (_state == AccountState.Active)
WithDraw (amount);
else if (_state == AccountState.Frozen)
onUnFreeze ();
else if (_state == AccountState.Blocked)
Blocked ();
else if (_state == AccountState.Expired)
Expired ();
Problemas
Problemas de mantenimiento
Difícil de
extender
Mezcla de
responsabilidades
Difícil de
testear
Difícil de
mantener
State Pattern
Motivación
Es útil cuando quieres tener un objeto que representa el
estado de una aplicación y desea poder cambiar este estado
al cambiar ese objeto.
• Está destinado a proporcionar un mecanismo para
permitir que un objeto altere su comportamiento en
respuesta a un estimulo INTERNO
• Para el cliente, un cambio de estado es un cambio de
clase
• La lógica específica del estado está encapsulada
en una única clase que lo representa
State
Cambiar el comportamiento de cualquier
objeto con cada estado
Encapsular el comportamiento de cada
estado en un solo objeto
Permite descubrir el estado de forma
dinámica
Fácil de testear
Beneficios
Separación de preocupaciones
Fácil de encontrar el comportamiento de un
estado especifico
State Pattern
Fácil de entender la transición entre
estados
Fácil reutilización de un estado
Simplifica la legibilidad del cliente
Fácil de mantener
Fácil de agregar nuevo comportamiento a
un estado
DEMO
Estructura (ANTES)
Diagrama de clases
Estructura (DESPUES)
Diagrama de clases
Reflexión
Un patrón es una oportunidad
Podemos aplicar patrones en todos
lados
No esperemos a que la oportunidad
llegue, LA OPORTUNIDAD ESTA
AHÍ!!
Preguntas ??
Recursos
https://app.pluralsight.com/library/courses/c-sharp-code-
more-objectoriented/
Design Patterns : Elements of Reusable Object-Oriented
Software
http://germankuber.com.ar/state-pattern-account
Gracias!!
Germán Küber

Más contenido relacionado

Similar a Patrones para mortales state pattern

Trabajo final programacion
Trabajo final programacionTrabajo final programacion
Trabajo final programacion
markos1992
 
Clase 28 (3)
Clase 28 (3)Clase 28 (3)
Clase 28 (3)
victdiazm
 
4.0 modelos
4.0 modelos4.0 modelos
4.0 modelos
jaldanam
 
Presentación1
Presentación1Presentación1
Presentación1
Nestor
 
Técnicas y herramientas para que la computadora haga más y el programador m...
Técnicas y herramientas para que la computadora haga más y el programador m...Técnicas y herramientas para que la computadora haga más y el programador m...
Técnicas y herramientas para que la computadora haga más y el programador m...
Hernan Wilkinson
 
Conceptos de algoritmo, programa y lenguaje de
Conceptos de algoritmo, programa y lenguaje deConceptos de algoritmo, programa y lenguaje de
Conceptos de algoritmo, programa y lenguaje de
'Felipe Lozada
 
Conceptos de algoritmo, programa y lenguaje de
Conceptos de algoritmo, programa y lenguaje deConceptos de algoritmo, programa y lenguaje de
Conceptos de algoritmo, programa y lenguaje de
'Felipe Lozada
 
Conceptos de algoritmo, programa y lenguaje de
Conceptos de algoritmo, programa y lenguaje deConceptos de algoritmo, programa y lenguaje de
Conceptos de algoritmo, programa y lenguaje de
'Felipe Lozada
 
Conceptos de algoritmo, programa y lenguaje de
Conceptos de algoritmo, programa y lenguaje deConceptos de algoritmo, programa y lenguaje de
Conceptos de algoritmo, programa y lenguaje de
'Felipe Lozada
 
Java script(diapositivas)
Java script(diapositivas) Java script(diapositivas)
Java script(diapositivas)
Roberto Mejia
 

Similar a Patrones para mortales state pattern (20)

Trabajo final programacion
Trabajo final programacionTrabajo final programacion
Trabajo final programacion
 
Clase 28 (3)
Clase 28 (3)Clase 28 (3)
Clase 28 (3)
 
4.0 modelos
4.0 modelos4.0 modelos
4.0 modelos
 
Semestral prog
Semestral progSemestral prog
Semestral prog
 
Estructuras basicas
Estructuras basicasEstructuras basicas
Estructuras basicas
 
Guía de Algoritmo y Programación en C
Guía de Algoritmo y Programación en CGuía de Algoritmo y Programación en C
Guía de Algoritmo y Programación en C
 
Algoritmos1
Algoritmos1Algoritmos1
Algoritmos1
 
Presentación1
Presentación1Presentación1
Presentación1
 
Presentación1
Presentación1Presentación1
Presentación1
 
Presentación1
Presentación1Presentación1
Presentación1
 
Logica - Programacion I
Logica - Programacion ILogica - Programacion I
Logica - Programacion I
 
Presentation .pdf
Presentation .pdfPresentation .pdf
Presentation .pdf
 
Técnicas y herramientas para que la computadora haga más y el programador m...
Técnicas y herramientas para que la computadora haga más y el programador m...Técnicas y herramientas para que la computadora haga más y el programador m...
Técnicas y herramientas para que la computadora haga más y el programador m...
 
Fundamentos de programación
Fundamentos de programaciónFundamentos de programación
Fundamentos de programación
 
Taller de programación
Taller de programaciónTaller de programación
Taller de programación
 
Conceptos de algoritmo, programa y lenguaje de
Conceptos de algoritmo, programa y lenguaje deConceptos de algoritmo, programa y lenguaje de
Conceptos de algoritmo, programa y lenguaje de
 
Conceptos de algoritmo, programa y lenguaje de
Conceptos de algoritmo, programa y lenguaje deConceptos de algoritmo, programa y lenguaje de
Conceptos de algoritmo, programa y lenguaje de
 
Conceptos de algoritmo, programa y lenguaje de
Conceptos de algoritmo, programa y lenguaje deConceptos de algoritmo, programa y lenguaje de
Conceptos de algoritmo, programa y lenguaje de
 
Conceptos de algoritmo, programa y lenguaje de
Conceptos de algoritmo, programa y lenguaje deConceptos de algoritmo, programa y lenguaje de
Conceptos de algoritmo, programa y lenguaje de
 
Java script(diapositivas)
Java script(diapositivas) Java script(diapositivas)
Java script(diapositivas)
 

Más de Germá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
 
Defensive code
Defensive codeDefensive code
Defensive code
 
Programación Funcional C#
Programación Funcional C#Programación Funcional C#
Programación Funcional C#
 
Unit testing consejos
Unit testing   consejosUnit testing   consejos
Unit testing consejos
 
Defensive code C#
Defensive code C#Defensive code C#
Defensive code 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
 

Último

POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
silviayucra2
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
241521559
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
FagnerLisboa3
 

Último (10)

guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 

Patrones para mortales state pattern

Notas del editor

  1. Código que pueda adaptarse a una situación.
  2. El termino aumento su popularidad luego de la aparición del libro : Refactoring: Improving the Design of Existing Code de Martin Fowler
  3. El termino aumento su popularidad luego de la aparición del libro : Refactoring: Improving the Design of Existing Code de Martin Fowler