Perché io sono relativamente nuovo alla OOP/C# non so il modello giusto per risolvere questo:Object-oriented modello di progettazione per evitare if/then/else
devo costruire un'architettura a plugin per diversi fornitori di IO. L'host legge il nome/tipo del provider necessario dalla configurazione, quindi dovrebbe stabilire l'istanza e la parametrizzazione del provider.
così ho fondamentalmente queste interfacce:
public interface IoProvider //(Base interface, all Providers implements this)
{
void Initialize();
void Execute();
}
public interface IFileProvider: IoProvider
{
string PropertyA { get; set; }
}
public interface ISmtpProvider : IoProvider
{
string PropertyB { get; set; }
string PropertyC { get; set; }
}
come vedete i derivati, fornitori specializzati IO hanno diverse proprietà aggiuntive dei parametri che l'interfaccia di base non ha. Per evitare if/then/else o cambiare le istruzioni la mia idea era di usare uno schema di fabbrica.
Ma se lo capisco correttamente, non risolve il problema if/then/else perché sul client devo controllare il tipo derivato per fornire i parametri corretti.
Così il flusso del programma nel sistema host sarebbe qualcosa di simile: Host legge config, prende nome/tipo di necessaria Provider Host chiama Fabbrica e ottiene il provider
Ma come evitare questo - c'è un motivo per risolvere questo senza if/then/else?
If (provider == typeOf(IFileProvider))
PropertyA = value
else if (provider == typeOf(ISmtpProvider))
PropertyB = value
PropertyC = value
Elseif …
cosa c'è di sbagliato con 'se/else'? –
Mi piacciono le mappe per questo tipo di cose, ma le fabbriche spesso hanno grandi istruzioni sugli interruttori. Perché senti il bisogno di rimuoverlo? –
ho imparato che questo è uno stile di codifica errato. non ci sono solo 2 tipi di fornitori, al momento ci sono 5 fornitori diversi. – Radioactive