¿Por qué?
Es una mejor opción que la alternativa de usar flags para demarcar el estado. Esto se debe a que los estados se vuelven implicitos y requiere un montón de código condicional para gestionarlo. Por otro lado, habrá estados que no necesitan de otros, es decir, surge complejidad por intentar resumir todo bajo un unico record. Por último, no es evidente que flag va con que flags para representar un estado.
En contraste, lo que se propone permite eliminar esos estados y condicionles. Los types reflejan documentación de dominio. Da independencia a la hora de quitar o agregar campos, sin causar un breaking change
¿Cómo lo hacemos?
Con un Choice type
type Order =
| Unvalidated of UnvalidatedOrder
| Validated of ValidatedOrder
| Priced of PricedOrder
``