Una corta introducción para el principio de diseño conocodo como: HAcer los estados invalidos imposibles de representar.
Charla para el #PyBirrasTenerife2022
5. De que va
Qué son los estados imposibles y
por qué deberíamos evitarlos
Ejemplos de estados imposibles y
como evitarlos
Enlaces y resumen
6. Make Invalid States
Unrepresentable
Art by Maomi - https://www.pinterest.com/pin/565905509422569311/
7. 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
8. 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
14. 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
15. 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)
20. 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
21. 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
23. Ventajas
Podemos ver algunas ventajas de
esta representación analizando
algunas de las operaciones que
podríamos hacer
24. 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
25. 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
35. 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”
36. 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
Notas del editor
Suponiemos que los estados son excluyentes
Si, claro, esto no deberia pasar nunca, bla, bla, bla...
No váłido para estados superpuestos ni estados cuanticos no colapsados. Consulte con su médico para posibles contraindicaciones y tratamiento. Solo con receta médica,