Un condizionale come if(isFreeVersion)
dovrebbe verificarsi solo una volta nel codice. Questo non è uno schema, ma sono sicuro che tu già conosci il nome per questo: si chiama il principio DRY . Avere un codice come " if(isFreeVersion)
" in più di una posizione nel codice significa che hai ripetuto questa riga / la logica al suo interno, il che significa che dovrebbe essere refactored per evitare la ripetizione.
" if(isFreeVersion)
" dovrebbe essere usato per impostare un elenco di opzioni di configurazione interne per diverse funzionalità. Il codice risultante potrebbe essere simile a questo:
if(isFreeVersion)
{
feature1Enabled=false;
feature2Enabled=false;
maxNoOfItems=5;
advertisingStrategy=new ShowLotsOfAdvertisementsStrategy();
// ...
}
else
{
feature1Enabled=true;
feature2Enabled=true;
maxNoOfItems=int.MaxValue; // virtually unlimited
advertisingStrategy=new ShowMinimalAdvertisementsStrategy();
}
Questo mappa il tuo singolo flag "isFreeVersion" su diverse funzioni . Nota puoi decidere qui se preferisci utilizzare singoli flag booleani per singole funzionalità, o utilizzare qualche tipo di altri parametri, ad esempio diversi oggetti strategia con un'interfaccia comune, se il controllo funzionalità richiede una parametrizzazione più complessa.
Ora hai il controllo di ciò che è nella versione gratuita e di quello della versione a pagamento in un unico posto, il che rende la manutenzione di questa logica abbastanza semplice. Dovrai comunque fare attenzione a non avere il tuo codice ingombrato da molte dichiarazioni if(feature1Enabled)
(seguendo il principio DRY), ma ora il mantenimento di questi controlli non è più doloroso. Ad esempio, hai un controllo molto migliore di ciò che devi cambiare quando vuoi rendere libera una funzionalità a pagamento esistente (o viceversa).
Infine diamo un'occhiata all'articolo del blog di Fowler sui pulsanti di attivazione , in cui parla dei punti di inserimento delle funzionalità / attivazione / disattivazione punti. Lasciatemi citare un punto centrale:
Don't try to protect every code path in the new feature code with a toggle, focus on just the entry points that would lead users there and toggle those entry points.
Pertanto, come strategia generale, concentrati sull'interfaccia utente e limita i tuoi assegni al numero minimo di punti necessari per far apparire o scomparire determinate funzionalità. Questo dovrebbe mantenere pulito il tuo codice base, senza inutili confusioni.