Qual è un buon modello di progettazione per il software multi-mode?

6

Spiegherò la mia domanda a titolo di esempio, ma mi piacerebbe una soluzione generale.

Sto scrivendo un'applicazione JavaScript che deve funzionare in modo diverso a seconda del contesto di esecuzione. Per gestire questo, ho fatto quanto segue. (1) All'inizio del programma, ho impostato due variabili di contesto, diciamo is_foo e is_bar , che non possono essere entrambe vere. Quindi (2) in tutto il codice, controllo queste variabili ogni volta che devo tenere conto del contesto:

if (is_foo) {
    app.do_something(is_foo_config);
} else if (is_bar) {
    app.do_something(is_bar_config);
}

Esistono buoni schemi di progettazione o best practice per la progettazione di un programma che ha una "modalità" con configurazioni correlate?

    
posta gwg 05.11.2014 - 22:54
fonte

2 risposte

12

Generalmente, invece di impostare un flag, si desidera utilizzare il polimorfismo per scegliere tra diverse implementazioni. In altre parole, invece di controllare is_foo dappertutto, fallo una volta all'inizio, ad esempio:

if (is_foo) {
  app = new FooApp();
} else {
  app = new BarApp();
}

In alternativa, se solo la configurazione è diversa, fai qualcosa di simile all'inizio:

if (is_foo) {
  config = is_foo_config;
} else {
  config = is_bar_config;
}

Questo ti consente in seguito di eseguire:

app.do_something(config);

In pratica, eseguendo l'istruzione if una volta, si riduce al minimo la possibilità di dimenticarsi accidentalmente di farlo in un secondo momento e di solito elimina anche molte ripetizioni.

    
risposta data 05.11.2014 - 23:21
fonte
9

Poiché la modalità è selezionata all'avvio 1 il modello di strategia funzionerebbe.

Correlato è Sostituisci condizionale con polimorfismo (anche qui ) e Sostituisci il codice tipo con stato / Strategia refactoring.

1Selamodalitàstavacambiandoduranteilcorsodell'esecuzione,allorail pattern di stato sarebbe richiesto. È simile al modello di strategia e ha meccanismi interni simili.

    
risposta data 06.11.2014 - 03:47
fonte

Leggi altre domande sui tag