Ausnahmebehandlung in einer mehrschichtigen Anwendung

8

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.

    
David 17.12.2010, 19:03
quelle

2 Antworten

7

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:

  • Project.Web & lt; --- verwendet den Dienst über die Spezifikationsschnittstellen.
  • Project.Service & lt; - implementiert alles in der Spezifikation
  • Project.Service.Specification & lt; --- Platzieren Sie hier Ausnahmen (Klassen) und Schnittstellen, die Ihre Dienste definieren (oder Repositories, wenn Sie keine Dienste verwenden).
jgauffin 17.12.2010, 19:26
quelle
4

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.

    
Moo-Juice 17.12.2010 19:21
quelle