Wenn ich eine Layer-Anwendung habe und meine Datenschicht möglicherweise eine OptimisticConcurrencyException trifft, wie sollte die aufrufende Ebene oder die untere Ebene damit umgehen?
Die aufrufende Ebene hat keine Ahnung, was eine OptimisticConcurrencyException ist. Soll ich also eine benutzerdefinierte Ausnahme implementieren und die OptimisticConcurrencyException abfangen und meine benutzerdefinierte Ausnahme auslösen?
Einige Hinweise dazu würden sehr geschätzt werden.
OptimisticConcurrencyException
ist eine Ausnahme, die zur Datenschicht gehört und daher darin enthalten sein sollte. Es ist unwahrscheinlich, dass die aufrufende Ebene damit umgehen kann.
Ich würde eine allgemeinere Ausnahme wie DataSourceException
erstellen, die einen Kontext enthalten würde, z. B. welche Funktion fehlgeschlagen ist (und mit welchen Parametern) und warum. Ich würde auch die ursprüngliche Ausnahme als innere Ausnahme einschließen.
Lesen Sie meinen Blog-Eintrag zum Abfangen von Ausnahmen: Ссылка
Ich habe auch einige andere Einträge zur Ausnahmebehandlung geschrieben, klicken Sie auf das Ausnahmetag.
Aktualisieren
Ich würde die folgenden Projekte erstellen:
Sie müssen dies aus der Perspektive der aufrufenden Ebene betrachten. Die Schicht hat die Datenschicht aufgefordert, eine Aufgabe auszuführen. Wenn die OptimisticConcurrencyException
von Ihrer Datenschicht gehandhabt werden können und der Vertrag eingehalten wird, fangen Sie ihn auf jeden Fall ab und machen Sie dann weiter und führen Sie den Auftrag aus.
Wenn dies jedoch für den Job, zu dem Sie aufgefordert werden, fatal ist, und wenn der Aufrufer dies nicht erwartet oder nicht weiß, ist es in Ordnung, wenn Sie eine eigene Ausnahmeklasse erstellen, fangen die Ausnahme, die der aufrufenden Ebene fremd ist, und stattdessen diese auslöst. Dies kann die aufrufende Ebene kennen und kann als Nebeneffekt der Verwendung dieser Funktion / API gut dokumentiert werden.
Tags und Links .net c# exception-handling exception