Diese Frage ist ein Follow-up von Wie Sie darauf hinweisen, dass a Methode war erfolglos . Das xxx () Tryxxx () -Muster ist etwas, das in vielen Bibliotheken sehr nützlich sein kann. Ich frage mich, was der beste Weg ist, beide Implementierungen anzubieten, ohne meinen Code zu duplizieren.
Was ist das Beste?
%Vor%oder
%Vor%Ich würde instinktiv annehmen, dass das erste Beispiel korrekter ist (Sie wissen genau, welche Ausnahme passiert ist), aber könnte der Versuch / Fang nicht zu teuer sein? Gibt es eine Möglichkeit, die Ausnahme im zweiten Beispiel zu fangen?
Making TrySomething nur fangen und schlucken die Ausnahme ist eine wirklich schlechte Idee. Der halbe Punkt des TryXXX-Musters ist, den Leistungseinbruch von Ausnahmen zu vermeiden.
Wenn Sie in der Ausnahme nicht viele Informationen benötigen, können Sie die DoSomething-Methode einfach TrySomething aufrufen und bei einem Fehler eine Ausnahme auslösen. Wenn Sie Details in der Ausnahme benötigen, benötigen Sie möglicherweise etwas aufwendiger. Ich habe nicht getimt, wo der Hauptteil der Leistungseinbußen von Ausnahmen liegt - wenn es das Werfen und nicht das Erschaffen ist, könnten Sie eine private Methode schreiben, die eine ähnliche Signatur wie TrySomething hat, aber eine Ausnahme oder null zurückgibt:
%Vor%Zeit dies, bevor Sie sich dazu verpflichten!
Das erste Beispiel ist korrekt, wenn Sie nur die Ausnahme abfangen und nichts tun, sondern falsch zurückgeben.
Sie können TrySomething so ändern, dass er wie folgt aussieht.
%Vor%So würde DoSomething aussehen
%Vor%Wenn Sie TrySomething mit throwException nicht öffentlich zugänglich machen wollten, können Sie es zu einem privaten Mitglied machen.
Ausnahmen könnten teuer werden, und Sie könnten eine RegEx-Überprüfung der Zeichenfolge durchführen, um zu verhindern, dass einer ausgelöst wird. Es hängt davon ab, was Sie versuchen zu tun.
Tags und Links design-patterns try-catch return-value