Está en la página 1de 37

Estados Imposibles

(Y como evitarlos)

Juan Ignacio Rodrígue de León


@jileon
De que va
 Qué son los estados imposibles y
por qué deberíamos evitarlos
 Ejemplos de estados imposibles y
como evitarlos
 Enlaces y resumen
Make Invalid States
Unrepresentable

Art by Maomi - https://www.pinterest.com/pin/565905509422569311/


Principio de diseño
 Suele usarse para los tipos de datos,
pero se aplica a Estructuras, bases de
datos, etc.
 La idea es reducir o eliminar los
estados en los que pueden estar los
datos, idealmente haciendo imposible
representar estados inválidos
Para campos estado

Obviamente es aplicable cuando tenemos codificado un estado


directamente.

Por ejemplo, supongamos un sistema de publicaciones con tres


estados posibles:

🔘 En preparación
🔘 En borrador
🔘 Publicado
Estas cosas pasan
¿Es un borrador?
Disclaimer
Solo Estados excluyentes

Hi!
Una posible solución
No, es broma
 El estado no se refiere solo a estos
estados especificos, cualquier
configuración de datos tiene un
estado
 Vamos a ver otro ejemplo en que
no hay un estado explicito, pero
nuestra elección de la estructura
de datos implica un estado
Periodos contiguos de tiempo

 Vamos a representar una serie de


periodos contiguos en el tiempo
 Por ejemplo, en una aplicación que
me permita monitorizar en todo
momento lo que estoy haciendo (o
dejndo de hacer)
¡Fácil!
Pero...
Permite representar estados
imposibles (En este caso, no
deseados)
...Huecos
...Solapamiento

Solapamiento

Periodo 1 Periodo 2

Inicio Inicio Final Final tiempo


Eliminar redundacia

 Podemos hacer que sea imposible


representar periodos con huecos
y/o que se superpongan
 Similar a normalizar una base de
datos: Eliminar la redundacia
Eliminar fecha final

 La marca de final de un periodo es


redundante con la de inicio del
siguiente
 Así que solo necesitamos una única
fecha, la de inicio. El final está
definido por el inicio del siguiente
periodo
Menos es más
Ventajas

Podemos ver algunas ventajas de


esta representación analizando
algunas de las operaciones que
podríamos hacer
Dividir un periodo

 Primer caso:
 Hacer ajustes en el periodo anterior
 Insertar un nuevo periodo (posiblemente
consultando el periodo siguiente)
 Verificar las restricciones impuestas
 Segundo caso:
 añadir una fecha el conjunto
Vale, pero ...

 Yo sigo necesitando trabajar con periodos, con


su inicio y final (Por ejemplo, porque tengo
código ya funcionando que usa ese convenio)
 Resulta trivial proyectar la secuencia de fechas
a esta forma
 Mientras la representación subyacente siga
siendo una lista de fechas, las restricciones de
los periodos siempre se cumplirán
Algo así...
Ya casi estamos
Clases y Objetos

Vamos a representar un
semáforo en un cruce
Primera aproximación
My work here is done
¿Qué podría salir mal..?
Segunda versión¹
Segunda versión¹
Segunda versión²
Resumen

 Conviene echar una pensada sobre los


estados y ver si podemos representar
estados imposibles, y en ese caso, intentar
eliminar esa posibilidad
 Cualquier conjunto de datos
interrelacionados son un estado
 La representación de un objeto “real” no
tiene por que seguir su estructura “fisica”
Enlaces

 Charla en YouTube Making Impossible


States Impossible por Richard Feldman
https://www.youtube.com/watch?v=IcgmSRJHu_8

 Artículo de Kevin Mahoney Applying


"Make Invalid States
Unrepresentable"
https://kevinmahoney.co.uk/articles/applying-misu

También podría gustarte