Question

je suis Fail rapide principale. Je me demande s'il est bon d'avoir une classe Assertion en place afin de vérifier mes arguments constructeur de paramater.

Par exemple:

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

et utilisation:

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

Est-ce une bonne pratique pour décharger le lancement d'exception à une autre classe, ou est-il préférable de jeter l'exception directement dans le constructeur?

Était-ce utile?

La solution

D'après ce que j'ai lu (à la fin de l'article) Martin dit qu'il est bon de faire les deux choses - rapide échouer, fournissant l'exception significative et « échec lent » - permettant à l'utilisateur abillity de laisser SAY support de contact et poursuivre les tâches qui peuvent être accomplies avec succès peu importe l'exception.

L'exemple lot de système était très agréable dans ce cas - même si 1 élément du lot peut être failling, l'utilisateur sera très probablement envie le reste à être empestent avec, c'est pourquoi vous jetez une exception qui est interceptée par le gestionnaire global (le gestionnaire mondial décide de poursuivre l'élément suivant et agrège l'erreur afin qu'il puisse le montrer à l'utilisateur et envoyer un avis à l'équipe de développement).

De cette façon, les deux sont terminées -. La plupart des travaux d'utilisateurs est fait, et le principe échec rapide est tiré et

Donc, cela dépend de votre cas concret - peut-être si votre participe de classe dans d'autres opérations, il y aura la classe plus globale (ou une classe de l'appelant qui l'utilise) qui seront en mesure de mieux décider si elle peut continuer ou non <. / p>

D'autre part - votre classe ne devrait pas être en mesure de dire si la classe appelant peut faire un autre travail en cas de défaillance de sorte que vous devez jeter votre exception dans le constructeur, oui. Voilà ce que je pense - OUI :). Donc, si votre classe représente un élément du lot - l'appelant sera très probablement attraper l'exception et continuer. S'il est une sorte de classe de point d'entrée - alors vous voudrez probablement gérer correctement l'exception (ou pas jeter du tout), montrer à l'utilisateur un message d'erreur et fournir des détails (journal) pour l'équipe de développement pour être en mesure de dire easilly où était le problème.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top