Vale la pena considerare lo schema di stato in questo caso

4

Ho il seguente diagramma di stato che può essere visto in Webgraphviz :

digraph reload_states {
    rankdir=LR;
    size="8,5"
    node [shape = doublecircle]; Requested;
    node [shape = circle];
    Requested       ->  Requested       [ label = "Reschedule" ];
    Requested       ->  Approved        [ label = "Approve" ];
    Requested       ->  Canceled        [ label = "Cancel" ];
    Approved        ->  Standardized    [ label = "Standardize" ];
    Approved        ->  Canceled        [ label = "Cancel" ];
    Standardized    ->  Queued          [ label = "Queue" ];
    Standardized    ->  Canceled        [ label = "Cancel" ];
    Queued          ->  Running         [ label = "Run" ];
    Running         ->  Succeeded       [ label = "Succeed" ];
    Running         ->  Failed          [ label = "Fail" ];
    Succeeded       ->  Completed       [ label = "Complete" ];
    Succeeded       ->  Canceled        [ label = "Cancel" ];
    Failed          ->  Queued          [ label = "Queue" ];
    Failed          ->  Canceled        [ label = "Cancel" ];
}

Questasembraesseredimediacomplessitàenonpossodecideretraduepossibiliimplementazioni:

  1. Memorizzalostatocorrentecomeenumehailmetodoperognitransizionenell'entità
  2. Implementaloschemadistatoeincapsulaognistatoelasua'logicainunoggettoseparatocherappresentalostatoconcreto

Nonhomaiimplementatoloschemadistatoesonopiuttostocuriosodifarlo,mavogliochequalcunoconpiùesperienzapermisuraresenonèuneccessoperilmiocasod'uso?

Stavoleggendo questo articolo per capire quali sono i pro e i contro che fornisce.

    
posta Evaldas Buinauskas 17.09.2018 - 09:43
fonte

1 risposta

5

Se non hai motivo di pensare che avrai bisogno di conoscere più informazioni del solo testo dell'etichetta, allora sì, lo schema di stato è un serio eccesso. Hai solo bisogno di una tabella di ricerca per restituire l'etichetta. Anche se in futuro aveste bisogno di ulteriori informazioni, potete restituire i dati nella propria classe di bean dedicata all'attività.

Suggerirei State Pattern solo se il comportamento cambia in base al suo stato, e anche allora, solo se ci sono variazioni radicali nel comportamento. Ad esempio, se si decide di impostare un'etichetta solo se è presente, ciò è ancora del tutto fattibile aggiungendo un semplice controllo nella logica della classe che esegue la transizione.

Se hai motivo di pensare che lo scenario sia più complicato di quello che hai presentato, ti preghiamo di aggiornare la tua domanda e rivaluterò la mia risposta.

    
risposta data 17.09.2018 - 10:12
fonte