Frage

Gibt es eine Alternative zur Verwendung von Ausnahmen, die auch das Prinzip von Parallelitätskonflikten zu Ihrer Anwendungsschicht sind, die auch die Verwendung von Ausnahmen respektieren Befehlsanzentrennung, oder sind Ausnahmen der beste Mechanismus, den wir haben (in Sprachen, die Ausnahmen unterstützen)?

In den Darm meiner Anwendung habe ich eine optimistische Sperrenlogik, die ein paar Ebenen ausführt, wenn ich bestimmte Methoden auf hoher Ebene nenne, z. B. in meinem Fall eine benutzerdefinierte Datenzugriffsschicht, obwohl ich sicherlich offen bin für Hören, wie ORM -Implementierungen dies tun). Auf hohe Stufe ruft die Anwendung so auf, wie sie wie folgt aussehen:

// 'data' is just a placeholder for multiple parameters, including something
// that contains row version information
void Customer.UpdateInformation(object data);

Ich muss in der Lage sein, den Benutzern einer Webanwendung zu erzählen, wenn jemand anderes die Daten aktualisiert hat, an denen sie arbeiten.

Ich würde lieber keinen Wert aus Methoden zurückgeben, die die Daten ändern. In der Vergangenheit habe ich Ausnahmen geworfen (ähnlich wie bei der .NET -Datenadapter -API, die a wirft DbConcurrencyException Wenn es Konflikte erkennt), aber Konflikte sind in einer gewöhnlichen Weise nicht außergewöhnlich. Sie sind eine Tatsache des Lebens: ein vorhersehbarer, erwarteter Teil des Workflows der Anwendung. Qualifizieren sie sich als Exogene Ausnahmen, in Eric Lippers Taxonomie?

War es hilfreich?

Lösung

Meiner Meinung nach sind Ausnahmen der beste Weg, um diese Art von Fehlern zu kommunizieren. Ich denke, Ihre Lösung ist ganz richtig, weil Sie eine bestimmte Art von Ausnahme auswerfen, die Sie auf der Präsentationsebene fangen können. Die Präsentationsebene kann die Informationen in dieser Ausnahme verwenden, um den Benutzer anzuzeigen.

Während Ausnahmen der beste Weg sind, kann es sehr schwierig sein, eine nette Benutzererfahrung zu schaffen. Am einfachsten wäre es, dem Benutzer mitzuteilen, dass es einen Konflikt gab und sich entscheiden würde, ob er seine Änderungen verlieren oder die neuen Änderungen gerne außer Kraft setzen möchte. Es wird schwierig, wenn Sie die Konflikte anzeigen möchten oder den Benutzer auswählen möchten, welche Werte überschreiben und welche nicht. Zumindest ist es sehr schwierig, dies auf generische Weise zu tun. Möglicherweise benötigen Sie eine bestimmte Schnittstelle für die Lösung solcher Konflikte für jeden Bildschirm in Ihrem System, in dem Konflikte auftreten können.

In den Systemen, an denen ich gearbeitet habe, haben wir diese Ausnahmen für die Anzeige für den Benutzer kaum nicht erfasst. Wir haben meistens versucht, diese Konflikte zu verhindern, indem wir die dahinter stehenden Prozesse ändern. Es hängt natürlich vollständig von Ihrem Anwendungstyp und der Art und Weise ab, wie das Unternehmen funktioniert (oder gerne funktioniert), welche Lösung am besten ist.

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