2009-06-23 13 views
0

Ich möchte eine Dienstprogrammklasse implementieren, die interne Schritte eines Validierungsprozesses sind. Gibt es ein Muster dafür oder sollte ich einen völlig anderen Ansatz verwenden? Ich bin offen für Vorschläge. (Ich Codierung in abap, aber ich glaube nicht, dass das wichtig ist)Möchten Sie eine Dienstprogrammklasse implementieren, deren Methoden Schritte in einem Validierungsprozess darstellen. Gibt es dafür ein Muster oder eine Best Practice?

Edit: Es ist keine Front-End-Validierung von Text, sondern eine Überprüfung, wenn bestimmte Bedingungen angepasst sind. (Der Parameter ist tatsächlich eine Tabelle für jede Zeile i zu überprüfen, ob es Bedingungen angepasst als ein Beispiel ist, wenn es ein gültiger Eintrag in einer anderen Tabelle db ist..)

Somthing wie folgt aus:

Class Validator 
{ 
    private bool flag_error; 

    private Step1 (var a, var b) 
    { 
    //do somthing ... 
    } 

    private Step 2 (var a) 
    { 
    //do somthing ... 
    } 

    private Step 3 (var c) 
    { 
    //do somthing ... 
    } 

    static Check(var a, var b, var c) 
    { 
    Step1(a, b); 
    Step2(a); 
    Step3(c); 
    return flag_error; 
    } 
} 

Usage :

if (Validator.Check(a,b,c)) 
{ 
//do good stuff 
} 
else 
{ 
//do error handling 
}; 

Antwort

2

Design-Entscheidungen hängen wirklich auf die Details. Wird es mehrere Validator-Algorithmus-Implementierungen geben? Versuchen Sie eine Strategy oder Template Method Muster.

Wenn Sie nur diese eine Klasse müssen diese mehrere Schritte ausführen, haben Sie bereits ein Muster umgesetzt, Composed Method. Halte es einfach. Fügen Sie keine komplexeren Ebenen hinzu, wenn sie nicht wirklich benötigt werden.

+0

Thx für diese Antwort. Ich kann damit arbeiten! – Richard

0

Es gibt einen Patten, der in den Sinn kommt. Es ist die

Ich würde eine abstrakte Klasse mit Check wie oben implementiert und die Step Methoden durch die konkreten Klassen implementiert werden.

+0

Ich habe darüber nachgedacht, aber ich sehe nicht die tatsächliche Verwendung dafür. Meine Klasse wird nur verwendet, um bestimmte Aufgaben zu erledigen, ich glaube nicht, dass dies wiederverwendet wird, um die gleichen Schritte mit verschiedenen Algorithmen zu machen. Ich denke, wenn ich die Vorlagenmethode verwende, kann ich keine zusätzlichen Schritte hinzufügen oder? Ich muss sie einmal in der Template-Methode und wieder in der konkreten Klasse implementieren? Warum also nicht nur eine Klasse verwenden und eine Methode hinzufügen? – Richard

+0

"Ich muss sie in der Template-Methode und wieder in der konkreten Klasse Moce impercen" Das ist nicht korrekt implementieren Sie Check in der abstrakten Klasse und die Schritte in der konkreten Klasse. Sie implementieren die Schritte in der abstrakten Klasse nicht. Wenn Sie die Verwendung nicht sehen, ist es wahrscheinlich nicht für diesen Job geeignet. Der einzige Vorteil ist, wenn die Strömung ist immer das gleiche (dh immer step1,2,3 usw.), aber es gibt verschiedene Möglichkeiten, um die Schritte in verschiedenen Kontexten zu tun – hhafez

0

Ich schrieb einmal ein Besuchermuster, die zur Trennung der eigentlichen Validierung von den Feldern ganz gut gearbeitet.

+0

Scheinen mich ziemlich komplex und ich nicht den wirklichen Nutzen über eine einfachere Implementierung sehen . Vielleicht kannst du mir ein paar Hinweise geben. – Richard

0

Ich verwende C# Attribute für die Validierung Zweck. Sie können einen ausführlichen Artikel here finden. Dies hilft Ihnen bei der Implementierung der Validierung nach Konfiguration über Konvention. Mit dieser Technik werden Ihre Validierungsroutinen sehr abstrakt und wiederverwendbar.

+0

thx für die Antwort, aber ich denke nicht das ist, was ich brauche. Mit Validierung meine ich, dass bestimmte Bedingungen in einem Backend-Programm übereinstimmen. (Überprüfen Sie, ob Datenbankeinträge vorhanden sind usw.) – Richard