Frage

Ich folge dem Scheitern Sie schnell Rektor. Ich frage mich, ob es eine gute Praxis ist, eine Assertion -Klasse vorhanden zu haben, um meine Konstruktor -Paramaterargumente zu überprüfen.

Zum Beispiel:

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

und in Gebrauch:

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

Ist diese gute Praxis, die Ausnahme in eine andere Klasse zu laden, oder ist es besser, die Ausnahme direkt in den Konstruktor zu werfen?

War es hilfreich?

Lösung

Nach dem, was ich gelesen habe (am Ende des Artikels), sagt Martin, dass es gut ist, beide Dinge zu tun - schnell scheitern, die sinnvolle Ausnahme und "langsamer Fehler" liefert - geben Sie dem Benutzer die Abneigung, den Kontakt zu unterstützen und fortzusetzen und fortzufahren mit Die Aufgaben, die unabhängig von der Ausnahme erfolgreich erledigt werden können.

Das Beispiel für das Stapelsystem war in diesem Fall sehr schön - obwohl 1 Element aus der Charge möglicherweise Failling sein kann, möchte der Benutzer höchstwahrscheinlich, dass der Rest wohl ist. Deshalb werfen Sie eine Ausnahme, die vom globalen Handler (der globale Handler beschließt, mit dem nächsten Element fortzufahren und den Fehler zu aggregieren, damit er dem Benutzer angezeigt und dem Entwicklerteam eine Benachrichtigung senden kann).

Auf diese Weise werden beide fertiggestellt - die meisten Benutzer arbeiten und das Fast -Fail -Prinzip wird ebenfalls abgefeuert.

Es hängt also von Ihrem konkreten Fall ab. Wenn Ihre Klasse an anderen Operationen teilnimmt, gibt es möglicherweise eine globalere Klasse (oder eine Anruferklasse, die sie verwendet), die besser entscheiden kann, ob er weitergehen kann oder nicht.

Andererseits sollte Ihre Klasse nicht in der Lage sein zu erkennen, ob die Anrufklasse im Falle eines Fehlers eine andere Arbeit erledigen kann, sodass Sie Ihre Ausnahme in den Konstruktor einlegen müssen, ja. Das denke ich - ja :). Wenn Ihre Klasse also ein Gegenstand der Stapel darstellt, wird der Anrufer höchstwahrscheinlich die Ausnahme und fordern fort. Wenn es sich um eine Art Einstiegspunktklasse handelt, möchten Sie wahrscheinlich die Ausnahme anmutig behandeln (oder überhaupt nicht), zeigen Sie dem Benutzer eine Fehlermeldung und geben Sie Details (Protokoll) an, damit das Entwicklerteam das gleiche Tell erkennen kann wo das Problem war.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top