Nomi di classi a stato lungo con pattern di stato

3

Sto usando lo schema di stato su 28 stati nella mia applicazione. Gli stati sono per le tessere che ha 7 stati principali, ci sono 4 attributi booleani per la tessera che influisce sul suo comportamento quindi ho deciso di incorporarli con stati, è così che si moltiplica a 28 stati.

Il problema ora è con la denominazione delle classi degli stati, si sta facendo impazzire, sto finendo con lo stato della classe chiamato così Membership-UnderCreation-Printed-Linked-Premium-Frozen ----- Ho hyphened diversi attributi per renderlo chiaro.

Va bene che i nomi delle classi di stato siano così?

    
posta Sisyphus 11.09.2013 - 12:10
fonte

1 risposta

4

Non è la strategia che personalmente avrei scelto. Avrei definito i 7 stati e definito i 4 attributi come proprietà dell'oggetto dell'applicazione. È quindi necessario definire regole di business che si applicano all'applicazione in base a questi attributi che potrebbero applicare cambiamenti di stato all'applicazione.

Il vantaggio di questo approccio è che le regole aziendali aggiuntive sono implementate nel codice come regole aziendali aggiuntive che sono molto mantenibili.

Nel tuo progetto, stai codificando le regole aziendali nella macchina a stati, il che significa che nel tempo, con l'introduzione delle regole aziendali, la macchina a stati cresce e diventa completamente non-mantenibile.

Ad esempio:

public decide_next_state(IApplication application,  Dictionary<state, List<IBusinessRules>> rules)
{
    //  by default we remain in the current state.
    next_state = application.current_state

    foreach(state in rules.keys())
    {
        bool matched = true;
        foreach(rule in rules[state])
        {
          //  if this business rule blocks the transition, then it
          //  returns false.
          if rule.apply(application) == false
          {
            matched = false;
            break;
          }
        }
        if(matched == true)
        {
           next_state = state;
           break;
        }
    }
    return next_state;
}

Ora con questo codice, si passerebbe nel dizionario delle regole per lo stato attuale delle applicazioni. Le regole definiscono quindi a quale stato verrà passata l'applicazione corrente. Tuttavia, può eseguire questa transizione solo se tutte le regole aziendali per tale transizione lo consentono.

Questo è un modello molto semplice, ma può essere reso molto più complesso se necessario.

    
risposta data 11.09.2013 - 13:18
fonte

Leggi altre domande sui tag