Background: sto lavorando a un'applicazione che gestirà i generatori di backup. Questi generatori devono poter essere "collegati" insieme. Ad esempio, il generatore B potrebbe servire come backup per il generatore A. Se A fallisce, il software attiva B. Oppure potrebbero essere collegati in una configurazione di condivisione del carico, dove il generatore A e B funzionano insieme e condividono il carico.
Sto facendo una funzione che renderà il collegamento, dato 2 generatori e il tipo di collegamento desiderato.
public void LinkGenerators(Generator A, Generator B, Type linkType);
Nello scrivere i miei test, sono arrivato con un gran numero di configurazioni di parametri non valide. La mia funzione LinkGenerators
si presenta così:
public void LinkGenerators(Generator A, Generator B, Type linkType)
{
if (linkType.BaseType != typeof(Link))
{
throw new ArgumentException("linkType is not a valid link type");
}
if (linkAlreadyExistsFor(A, B))
{
throw new InvalidOperationException("Link for A and B already exists");
}
if (A.Equals(B) || B.Equals(A))
{
throw new InvalidOperationException("A and B cannot be the same generator");
}
if (A == null || B == null || linkType == null)
{
throw new ArgumentException("Cannot pass a null argument");
}
.....
//Actually make the link after making sure all the arguments are valid.
}
La maggior parte delle funzioni di LinkGenerator consiste nel verificare che i parametri siano buoni. La creazione del collegamento effettivo richiede 2 righe di codice. C'è un po 'di logica aziendale (verifica che il collegamento non esiste già e che i generatori non siano uguali) mescolato con una logica funzionale bit (assicurandosi che il linkType derivi da Link
, gli argomenti non sono nulli .. .), e mi rende ....... a disagio.
Un lungo elenco di parametri controlla un odore anti-pattern o un codice? E se sì, cosa si può fare a riguardo?
(Giusto per chiarire agli elettori vicini probabilmente fraintendere la domanda: questa non è una domanda su "stile di codifica per condizioni" come questo ).