Domanda

Sto seguendo il Fallire velocemente principale. Mi chiedo se sia una buona pratica avere in atto una lezione di asserzione per controllare i miei argomenti paramater del costruttore.

Per esempio:

public static class Assertions
{
    public static void ParamterIsNotNull(object subject, string paramName = "")
    {
        if (subject == null) throw new ArgumentNullException(paramName, "Paramter cannot be null");
    }
}

e in uso:

public class Test
{
    public Test(object obj)
    {
        Assertions.ParamterIsNotNull(obj, "obj");
    }
}

Questa buona pratica è scaricare l'eccezione che si lancia a un'altra classe o è meglio lanciare l'eccezione direttamente nel costruttore?

È stato utile?

Soluzione

Da quello che ho letto (alla fine dell'articolo) Martin afferma che è bene fare entrambe le cose - fallimento veloce, fornendo l'eccezione significativa e il "fallimento lento" - dando all'utente l'abilità per dire supporto a contatto e continuare I compiti che possono essere completati si sono verificati con successo indipendentemente dall'eccezione.

L'esempio del sistema batch è stato molto bello in questo caso - anche se 1 articolo dal batch potrebbe essere balzano, molto probabilmente l'utente vorrà che il resto sia dannoso, ecco perché lanci un'eccezione che viene catturata dal gestore globale (il globale Handler decide di continuare con l'elemento successivo e aggrega l'errore in modo che possa mostrarlo all'utente e inviare un avviso al team di sviluppo).

In questo modo entrambi sono completati: la maggior parte degli utenti lavora viene eseguita e anche il principio di fallimento veloce viene licenziato.

Quindi dipende dal tuo caso concreto - forse se la tua classe partecipa ad altre operazioni ci sarà più classe globale (o una classe chiamante che la usa) che sarà in grado di decidere meglio se può andare avanti o meno.

D'altra parte, la tua classe non dovrebbe essere in grado di dire se la lezione di chiamata può fare qualche altro lavoro in caso di fallimento, quindi è necessario lanciare la tua eccezione nel costruttore, sì. Questo è quello che penso - sì :). Quindi, se la tua classe rappresenta un elemento del batch, molto probabilmente il chiamante catturerà l'eccezione e continuerà. Se si tratta di una sorta di classe di punti di ingresso - probabilmente vuoi gestire con grazia l'eccezione (o non lanciarla affatto), mostra all'utente un messaggio di errore e fornisci dettagli (registro) affinché il team Dev sia in grado di raccontare Easilly dove era il problema.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top