Keines der Beispiele, die ich für Repository-Muster betrachtet habe, beinhaltet jede Art von Fehlerbehandlung. Warum ist das? Sag zum Beispiel, ich habe das:
%Vor%Eine Instanz, in der wir eine Einschränkung verletzen. Ich fange die DbUpdateException ... Wo würde diese Fehlerbehandlung live, wenn nicht im Repository selbst?
In den meisten Fällen muss sich ein Repository nicht um die Behandlung von Ausnahmen kümmern. Die Klassen, die die Repositorys konsumieren, sollten das handhaben. Warum würde in Ihrem Beispiel null zurückgegeben werden sollen, wenn ein Einfügefehler auftritt? Ist das nicht weniger klar als nur eine Ausnahme zu werfen?
Nehmen wir beispielsweise an, wir möchten einen Datensatz über das Repository einfügen und dann die neue ID ausdrucken. Nehmen Sie an, dass der Einsatz aus irgendeinem Grund fehlschlägt.
%Vor% Nach dem Muster in Ihrer Frage erhalten Sie eine NullReference
-Ausnahme in der zweiten Zeile, wenn% code_% fehlschlägt. Das ist ein bisschen seltsam. Es ist klarer, das Insert
in der ersten Zeile zu sehen. Es ist auch besser, auf DbUpdateException
zu zählen, wobei entweder immer eine gültige Instanz zurückgegeben oder eine Ausnahme ausgelöst wird.
In einem richtig entworfenen System sollten die Beschränkungen niemals verletzt werden können. Machen Sie Ihre Entitäten intelligenter: Verwenden Sie zum Beispiel keine automatischen, selbst implementierten Setter.
Das Repository ist nicht der Ort, um eine Datenvalidierung durchzuführen. Der richtige Ort ist:
Diese Ausnahmen sollten nur dann auftreten, wenn Sie Ihre unit Integrationstests ausführen und Sie einen Fehler erhalten, der anzeigt, dass Ihre Datenbankeinschränkungen nicht mit Ihrer Entität oder Ihrer Entität übereinstimmen falsch implementiert. Also solltest du definitiv nicht catch
haben.
Tags und Links c# entity-framework-4 domain-driven-design ddd-repositories