Attualmente sto cercando di ristrutturare il mio programma per essere più OO e di attuare meglio i modelli noti eccCome evitare multipli FI nidificati
ho abbastanza molti nidificati IF-dichiarazioni e vogliono sbarazzarsi di loro. Come posso andare su questo? Il mio primo approccio era quello di farlo con le eccezioni, quindi ad es.
public static Boolean MyMethod(String param) {
if (param == null)
throw new NullReferenceException("param may not be null");
if (param.Equals("none") || param.Equals("0") || param.Equals("zero"))
throw new ArgumentNullException("param may not be zero");
// Do some stuff with param
// This is not executed if param is null, as the program stops a soon
// as one of the above exceptions is thrown
}
Il metodo è utilizzato nella classe principale dell'applicazione, ad es.
static void Main() {
try {
Boolean test = MyClass.MyMethod(null); // Will throw an exception
} catch (Exception ex) {
MessageBox.Show(ex.Message, "Error");
}
Credo che questo è molto bello, in quanto impedisce le istruzioni nidificate e quasi tutti i metodi azioni sono ben disposti su un livello.
Come con IF-dichiarazioni, il metodo sarebbe simile a questa
public Boolean MyMethod(String param) {
if (param != null) {
if (!param.Equals("none") && !param.Equals("0") && !param.Equals("zero")) {
// Do some stuff with param
} else {
MessageBox.Show("param may not be zero", "Error");
} else {
MessageBox.Show("param may not be null", "Error");
}
}
che trovo molto, molto brutto e difficile da mantenere.
Ora, la domanda è; è questo approccio buono? Lo so, potrebbe essere soggettivo, ma come superare gli IF annidati (1 o 2 livelli non sono poi così male, ma dopo questo peggiora ...)
Questo potrebbe essere solo un codice di esempio, ma si dovrebbe davvero evitare di lanciare l'eccezione. Usa ArgumentNullException ecc. –
E forse ancora più importante non devi gettare e quindi prendere eccezioni come quella. –
È un codice di esempio, cerco sempre di lanciare eccezioni con il nome migliore per il caso. E il catching, naturalmente, non si presenta nello stesso modo, è fatto su un livello molto più alto dell'applicazione, più o meno appena prima che si gonfiano fino all'utente. –