Die Antwort lautet natürlich "es kommt darauf an", aber angesichts Ihres Anwendungsfalls würde ich nein sagen. Hier ist der Grund:
C # ist eine wunderbare - Kratzer, die beste - objektorientierte Sprache. Es ist in der Tat so gut, dass ich manchmal versucht werde, eine fanatisch puristische Vision von dem umzusetzen, was als einfaches Projekt begann. Das passiert mir beim Schreiben von JavaScript, Objective-C oder PHP-Code nicht so sehr.
Wenn ich in diesen "Modus", diese Art von Lähmung, gerate, kann eines der Symptome eine Besessenheit von Ausnahmebehandlung und Generika und Metaprogrammierung sein. Manchmal alle drei zusammen. Es ist weitaus wahrscheinlicher, dass ich ein Problem habe, wenn ich an etwas Neuem, relativ Unbekanntem oder mit schlechten Spezifikationen und Zielen arbeite. Anstatt mich in den Implementierungsdetails festzumachen , denke ich, warum sollte ich versuchen, etwas zu schaffen, das die meisten Szenarien berücksichtigt, die ich vernünftigerweise vorwegnehme? Wenn ich mich dann um die Details kümmere, wird der Grundstein gelegt und ich werde ein paar stumpfe kleine Methoden schreiben und so weiter. Vielleicht wird jemand anderes am UI-Code arbeiten, ich werde ihnen nur diese netten Dienste und diese Verträge anbieten ...
Das ist mir leider noch nicht passiert. Was dazu neigt, ist, dass ich diesen Weg beschreite und an "Infrastruktur" arbeite - Dinge wie:
- Schreiben meiner eigenen IoC-Container-Schnittstellen oder anderweitiges Herumschrauben
Castle.Windsor
- Festlegen, wie mit der Typzuordnung in der Anwendung umgegangen werden soll
- Schreiben der Kontrollflusslogik für abstrakte Basisklassen, die Aufrufen von abstrakten Mitgliedern mit Ausnahmebehandlung ähneln,
Interceptors
und Umschließen von Aufrufen
- Erstellen von abstrakten Basisklassen für
IRepository
, IUnitOfWork
, IDomainService
, ICrossCuttingValidation
, usw.
- Der Versuch, ein hierarchisches Objektmodell für etwas zu beschreiben, dessen Natur einen solchen Meta-Ansatz leugnet ( wie
IFrameworkException
)
Wenn Sie sich nicht sicher sind, ob die Beschreibung einer Ausnahme genau genug für Ihren Geschmack ist, verweigern Sie wirklich die Implementierung einer anderen wichtigen Funktion. Die Art der Ausnahme ist ebenfalls aussagekräftig - es handelt sich nicht um eine ereignisgesteuerte Ausnahme, sie tritt offensichtlich weit entfernt von einer Eingabemethode (wie einer Benutzeroberfläche oder einer Pipe oder etwas anderem) auf und ist wahrscheinlich deterministischer Natur - wie in, können Sie nicht Vorhersagen, was ein Benutzer eingeben wird, aber Sie können vorhersagen, welche Baugruppe Sie laden möchten oder was nicht.
Übrigens, wenn Sie die Beschreibung so sehr stört, können Sie dann keine Erweiterungsmethode schreiben, um sie im entsprechenden Bereich zu überschreiben?
Das ist wirklich nur meine Art, meine eigene Überabstraktions- und Analyse-Lähmung auf Sie zu projizieren, aber ich denke, es könnte angemessen sein. Ich würde sagen, um auf der sicheren Seite zu bleiben, nur eine Unterklasse und Exception
wann:
- Sie haben tatsächlich eine Laufzeitausnahme festgestellt, die Sie im Allgemeinen behandeln möchten
- Die Laufzeitausnahme kann zur Entwurfszeit nicht vernünftigerweise ausgeschlossen werden
- Die Ausnahme wird durch die große Anzahl vorhandener
Exception
Unterklassen noch nicht gut abgedeckt
- Sie haben tatsächlich eine Vorstellung davon, wie Sie mit der Ausnahme umgehen möchten ODER wenn nicht, nur weil sie so kompliziert ist, dass Sie darüber nachdenken und darauf zurückkommen müssen
- Ihre Idee geht über die Änderung ihrer Metadaten, ihres Umfangs, ihrer inneren Ausnahme usw. hinaus und befasst sich mehr mit dem zugrunde liegenden Objekt oder Ereignis, das die Ausnahme erzeugt, und / oder den Mitteln, um tatsächlich damit umzugehen
- Sie haben bereits geschrieben oder sind nicht für den Großteil der eingabebezogenen Seite von Dingen wie der Benutzeroberfläche verantwortlich