Ich habe einen Klassenangestellten. Ich möchte es validieren (), bevor ich es speichere, um sicherzustellen, dass alle Felder mit gültigen Werten gefüllt sind. Der Benutzer der Klasse kann Validate () aufrufen, bevor sie Save () aufrufen, oder sie können Save () direkt aufrufen, und Save () ruft dann Validate () auf und löst wahrscheinlich eine Exception aus, wenn die Validierung fehlschlägt.
Nun, meine (Haupt-) Frage ist das;
Wenn meine Validate () - Funktion einen einfachen Bool zurückgibt, wie sage ich dann dem Benutzer der Klasse, was falsch ist, dh "Email nicht ausgefüllt", "ID nicht eindeutig" usw. Für die Zwecke von diesem möchte ich nur die Fehlerzeichenfolgen an den menschlichen Benutzer weitergeben, aber das Prinzip ist das gleiche, wenn ich eine Liste von Fehlercodes haben wollte (abgesehen davon, dass die Verwendung einer Bitmap logischer ist).
Mein spezifisches Programm ist in C #, aber das sieht nach einer ziemlich generischen "Best Practice" -Frage aus und ich bin mir sicher, dass ich die Antwort darauf wissen sollte. Jeder Rat wurde dankbar angenommen.
Ich könnte ein Struct erzeugen, nur um von dieser Methode zurückzukommen, einschließlich eines Bool und eines String-Arrays mit Fehlermeldungen, aber es scheint einfach klobig.
Warum scheint es klobig? Das Erstellen eines geeigneten Typs zum Einkapseln der Informationen ist perfekt. Ich würde nicht unbedingt eine Zeichenfolge verwenden, um solche Informationen zu kodieren. Ein enum könnte besser geeignet sein.
Eine Alternative wäre die Unterklasse des Rückgabetyps und die Bereitstellung einer zusätzlichen untergeordneten Klasse für jeden Fall - falls dies angemessen ist. Wenn mehr als ein Fehler gemeldet werden kann, ist ein Array in Ordnung. Aber ich würde das auch in einen eigenen Typ einkapseln.
Das allgemeine Muster könnte so aussehen:
%Vor%Ich würde dem Muster der TryParse-Methoden folgen und eine Methode mit dieser Signatur verwenden:
%Vor%Eine andere Option besteht darin, den Validierungscode aus dem Objekt in seine eigene Klasse zu ziehen, möglicherweise aufbauend auf dem Spezifikationsmuster.
%Vor%Ich habe einen guten Ansatz gefunden, einfach eine Methode (oder eine Eigenschaft, da C # eine gute Unterstützung dafür hat) zu haben, die alle Validierungsfehlermeldungen in einer Art vernünftigem, einfach zu verwendendem Format, wie einer Liste von Saiten.
Auf diese Weise können Sie auch sicherstellen, dass Ihre Validierungsmethode bools zurückgibt.
Ich stimme Chris W. zu. Ich habe die gleichen Fragen gestellt, bevor ich Rockys Expert C # Business Objects gelesen habe.
Er hat eine hervorragende Möglichkeit, Geschäftsvalidierungsregeln zu handhaben. Die Validierung wird durchgeführt, nachdem jede Eigenschaft festgelegt wurde. Wenn eine Regel verletzt wird, wird der Status des Objekts InValid.
Ihre Business Class kann die IDataError-Schnittstelle implementieren. Wenn Sie Ihre UI-Steuerelemente mit den Eigenschaften Ihres Geschäftsobjekts verknüpfen, werden Sie Ihr ErrorProvider-Steuerelement über alle fehlerhaften Regeln für Ihr Objekt informieren.
Ich würde wirklich empfehlen, dass Sie sich die Zeit nehmen und den Validierungsabschnitt anschauen.
Wir verwenden die Spring-Validierung zusammen mit einem Windows Forms-Fehleranbieter.
Also gibt unsere Validierungsfunktion ein Wörterbuch mit einer Kontroll-ID und einer Fehlermeldung (für jeden Validierungsfehler) zurück. Der Fehleranbieter zeigt die Fehlermeldung in einem Popup-Feld in der Nähe des Steuerelements an, das den Fehler verursacht hat.
Ich habe in der Vergangenheit einige andere Validierungsschemata verwendet - aber dieses funktioniert wirklich gut.
Tags und Links c#