Nell'immagine seguente per il Pattern di stato da Applicazione di pattern e pattern basati su domini: con esempi in C # e .NET
Sto cercando di mantenere l'entità SalesOrder
nel database. Normalmente avrei una tabella salesOrder
nel mio database con un campo currentState
che punta allo stato corrente dell'entità.
Questa implementazione va bene in quanto esiste un'entità singola e i suoi stati contengono solo comportamenti diversi.
Tuttavia , cosa succede se devo monitorare altre proprietà per i diversi stati? Esempi:
- Quando un SalesOrder viene annullato, devo tracciare il% cancellato% co_de,
quantity
,cancellationReason
,cancelledBy
. - Quando un ordine di vendita è rimborsato, devo tracciare
cancellationDate
,refundQuantity
,refundPrice
.
Quindi in pratica è come se avessi un refundFee
e CancelledSalesOrder
entità con attributi aggiuntivi. Lo stesso si può dire anche per gli altri stati.
Quindi il mio problema ora è che dovrò cambiare il progetto dall'usare il modello di stato nell'utilizzo dell'ereditarietà. Tuttavia, l'ereditarietà non consente al mio di cambiare dinamicamente il mio stato in fase di esecuzione (il problema che il diagramma di stato risolve inizialmente).
quindi le mie domande:
- Lo schema di stato fallisce quando un'entità in ogni stato ha attributi aggiuntivi? qual è l'alternativa?
- Come devo mantenere le mie entità in questo caso? Ereditarietà di una tabella? tabella per classe? tabella per classe di calcestruzzo?
- Se devo mantenere alcuni attributi da uno stato precedente (Rimborso di un ordine spedito, ma non eliminare lo stato di spedizione dallo stato Spedito), come ci si avvicina a questo problema?
- Come fai a tenere traccia dell'ordine in cui si sono verificati gli stati?