Ci sono molte soluzioni al problema generale che presenti. Non entrerò in svantaggi o vantaggi, solo enumerare alcuni modi per esplorare ulteriormente, e in nessun modo mi aspetto di essere esaustivo
Opzioni di input (per definire quali opzioni attivare / disattivare):
a) File di configurazione
a.1 - aggiungi variabili di commutazione (molte variabili di caratteristiche, ciascuna vera / falsa)
a.2 - aggiungi l'elenco di stringhe di caratteristiche (ad esempio "caratteristiche"="funzionalità1, funzionalità2, funzione4" implica che la funzione 3 è disabilitata)
b) Tabella del database
b.1 - tabella singola con una riga per caratteristica
b.2 - riga singola con un elenco di funzioni
b.3 - più tabelle, ad esempio relative agli utenti e alle funzioni
c) Registro di sistema (generalmente simile alle soluzioni di configurazione, ma può essere utilizzato come database tramite sottochiavi)
d) File proprietario (simile a config ma si definisce una struttura di file specifica)
e) Servizio Web (il programma si connette a un servizio per ottenere la configurazione, quindi simile al file di configurazione). Particolarmente comune per le app mobili
e.1 - riceve JSON
e.2 - riceve XML
e.3 - formato proprietario
Opzioni di elaborazione (per definire come eseguire l'abilitato / disabilitato):
a) Imposta variabili booleane, usa se su percorsi di codice specifici
b) Istruzione switch (la soluzione)
c) Modello di strategia
d) Applica pattern IoC in cui carichi un processore specifico in base alla configurazione