Domanda semplice sullo stato: CLOSE_MANUAL / CLOSE_AUTO vs CLOSE con bandiera booleana automatica

1

Sto cercando di individuare l'opzione migliore per contrassegnare un'entità database che potrebbe essere chiusa manualmente o automaticamente. Questa entità ha già uno stato che accetta OPEN o CANCELED .

Ora desidero "chiudere", ma l'azione di chiusura può essere manuale o automatica e in futuro avrò bisogno di queste informazioni per sapere come è stata chiusa questa entità.

Quindi, penso di avere due opzioni:

  1. Crea due diversi stati: CLOSE_MANUALLY e CLOSE_AUTOMATICALLY .
  2. Crea uno stato CLOSE e crea un flag booleano close_automatically

C'è qualche opzione ovvia tra questo due? C'è un'altra opzione?

    
posta Dherik 08.02.2018 - 19:46
fonte

2 risposte

4

Vai con un singolo stato 'Chiuso' ma registra anche le azioni che vengono prese rispetto al record.

Questo ti copre per le situazioni in cui il record viene chiuso automaticamente, riaperto e chiuso manualmente.

È meglio controllare la cronologia delle azioni piuttosto che provare ad avere stati per ogni azione possibile, o una serie di azioni che altrimenti risulterebbero nello stesso stato

    
risposta data 08.02.2018 - 20:33
fonte
1

Vorrei andare per la prima opzione (facendo uno stato separato per ogni caso). In questo modo, il tuo stato è una semplice macchina a stati. Anche solo guardando la lista degli stati disponibili mi viene un'idea abbastanza chiara delle possibili transizioni.

Se parti del codice devono controllare se il DB è stato chiuso indipendentemente dal metodo (automatico / manuale), è necessario fornire una funzione per questo. Non fare in modo che i tuoi clienti controllino entrambi gli stati ogni volta.

Ovviamente OPEN / CANCELED / CLOSED è ancora più semplice, ma ora hai un flag aggiuntivo che ha solo un significato in uno stato specifico.

Un'alternativa possibile è il modello di stato, che consentirebbe anche di incapsulare il comportamento dipendente dallo stato. Inoltre potresti avere metodi come WasClosedAutomatically() che restituirebbero false per tutti gli stati tranne uno. Tuttavia, molto probabilmente questo è eccessivo per te.

    
risposta data 08.02.2018 - 20:11
fonte

Leggi altre domande sui tag