OOP Decorater Pattern für Varifikationsverhalten

turmaline

Bekanntes Mitglied
Hallo Leute,

ich würde gerne mit Euch Decorator Pattern diskutieren.

Es geht dabei um Verifikationsverhalten von Formularen, das in Java-Backend ausgelagert ist. Das heißt der Benutzer füllt ein Formular aus und klickt speichern oder senden. Senden beinhaltet speichern und exportieren als XML-Dokument. Nun es hört sich alles soweit einfach an, kompliziert wird es deshalb weil es verschiede Prozessschritte existieren zu denen die Formulare ausgefüllt werden können. Zu jedem Prozessschritt gibt es eine in der Datenbank abgelegte Konfiguration. Diese Konfiguration besteht aus den Namen der Felder, Flags (mandatory, visible, editable) und anderen Attributen die hauptsächlich für die GUI interessant sind.

Das Verifikationverhalten basiert auf dieser Konfiguration, nämlich es wird die Konfiguration für einen bestimmten Prozessschritt zu dem das ausgefühlte Formular ausgefüllt wurde gelesen, es wird über die Felder in der Konfiguration iteriert und geprüft ob alle mandatory editable Felder ausgefüllt wurden.

Somit ist der Verifikator eine Komponente, die das zu verifizierende Objekt samt der Feldkonfiguration entgegennimmt und die Konfiguration überprüft.

Nun kann es vorkommen, dass für bestimmte Prozessschritte Sonderbhandlungen in den Verifikationsprozess eingebaut werden müssen. Ich habe vor und habe das schon angefangen zu implementieren für diesen Zweck den Decorator Pattern einzusetzen.

Beispiel für so eine Sonderbehandlung wäre: für einen bestimmten Prozessschritt muss eins der Kontaktfelder ausgefüllt werden, WENN der Ansprechpartner ausgefüllt wurde. Es gibt noch einige Sonderbehandlungen in der Art.

Meine Idee besteht dabei in der Implementierung einer Decorator-Klasse die dann den Verifikationsmethod der Standartkomponente aufruft + eine Sonderbehandlung für jede Sonderbehandlung. Die entsprechende Decorator-Klasse wird dann in einer Mapping-Klasse für den jeweiligen Prozessschritt registriert.

Was sagt Ihr zu meiner Idee? Was gäbe es hier für Alternativen? Was wenn für 5 aus 100 Prozessschritten eine Sonderbehandlung existiert? Wie würdet Ihr das problem lösen?

Würde mich freue wenn Ihr mit mir darüber diskutieren würdet.

Gruß,
madlena
 
N

nillehammer

Gast
Was wenn für 5 aus 100 Prozessschritten
In dem Satz steckt das entscheidende Wort drinnen: "Prozess". Dein Anwendungsfall ist (warum auch immer) mit einfacher Validierung mit bspw. Bean-Validation nicht zu lösen, sondern ist ein wie auch immer gearteter komplexer Prozess, der Schritt für Schritt abgearbeitet werden muss. Dafür bietet sich eher Chain of Command an.
 

turmaline

Bekanntes Mitglied
hm eigentlich nicht. Es geht eben nicht um die Abwicklung des Prozesses an sich in diesem Fall, sondern um die Verifaktaion von mandatory (oder wie auch immer die Bedingung lautet) Felder...
 
N

nillehammer

Gast
Ah ok, aber dann würde ich das Bean-Validation API vorschlagen. Das ist Standard und wird von vielen GUI- und Persistenzframeworks direkt unterstützt. Damit baust Du Dir aus ganz Feingranularen Validatoren die Validierung so zusammen, wie Du möchtest. Die Validatoren kannst Du natürlich auch mit der Konfiguration aus Deiner Datenbank initialisieren. Das wäre dann irgendwie gar kein Pattern (außer es gibt einen Namen für "möglichst feingranular"). Doku gibt's hier: Hibernate Validator
 
B

bygones

Gast
von der Beschreibung her wuerde ich auch eher einen Ansatz ala Dekorator nehmen. Die Frage ist natuerlich inwieweit sich die 100 Schritte unterscheiden bzw die Sonderbehandlungen. Am Ende 100 + X versch. Verifikationen zu haben ist natuerlich recht komplex.

da diese aber in einer DB abgelegt sind gehen ich mal davon aus, dass es eine zentrale Stelle fuer diese gibt und das verhalten generisch ueber die konfiguration geladen wird.

Sind die Sonderbehandlungen auch in der Konfiguration spezifiziert ?
 

turmaline

Bekanntes Mitglied
ja das Verhalten wird generisch geladen, es gibt eine Konfig-Tabelle in der zu jedem Prozessschritt Konfiguration für alle Felder abgelegt ist.
nein, die Sonderbehandlungen sind nicht in der Konfiguation abgelegt. Bei Sonderbehandlungen geht es vor allem um die Kreuzüberprüfungen, beispielsweise es MUSS entweder das Feld "Firma" oder die Zwei Felder "Name" und "Nachname" gefüllt sein.

Im MOment fällt mir nichts Besseres als Dekorator-Einsatz ein...
 

turmaline

Bekanntes Mitglied
oder noch ein anderes Beispiel der Sonderbehandlung:

wenn das Feld "SoUndSo" auf den Wert "SoUndSo" gesetzt, sollte sich der Wert eines anderen bestimmten Feldes im Bereich "so und so" befinden...
 

turmaline

Bekanntes Mitglied
ach so ja, die Hauptfrage von diesem Thread war eigentlich, wie mal so einen Dekorator implementiert, der einen Teil des Verhaltens rausnimmt?? Also nehmen wir an es gibt eine Sonderbehandlung die für fast alle prozessschritte gilt. Diese ist deshalb eine Sonderbehandlung, weil das Verhalten basiert nicht auf der Konfiguration, sondern auf Querabhngigkeit der Felder..
 
B

bygones

Gast
mhm ist ein komplexeres Thema, was wahrscheinlich schwierig ist ohne Code und ohne kompletten Kontext, daher einfach mal hergeraten.

Naiv gesehen wuerde ich sagen es sollte eine Struktur geben, die deine Prozessschritte wiederspiegelt, sagen wir mal "Process" Daneben gibt es eine Struktur die Verifizierung uebernimmt - nennen wir es "ProcessVerification".

Eine Processverification weiss wann fuer sie gesehen ein Process gueltig ist.

Ein Process haelt eine Reihe von ProcessVerifications. Ein Teil dieser wird von der Konfiguration geladen und erstellt und dem Process hinzugefuegt. Die Sonderbehandlungen sind ebenso ProcessVerifications und werden dann manuell (? bisher kommt nicht heraus wann bzw wie entschieden wird, wann eine Sonderbehandlung von noeten ist) ebenso dem Process hinzugefuegt.

Hierbei kann natuerlich eine Konfiguration eine ProcessVerification sein oder mehrere (je nach dem wie generell die Konfigurationen sind).

Benoetigen mehrere Processe die selbe Sonderbehandlung bekommen sie einfach alle die selbe ProcessVerification hinzugefuegt.

Die Verfizierung des Processes selber ist dann die Validierung aller ProcessVerficiations. Geht eine schief ists die Verifikation gescheitert.

Also nicht ganz Dekorator, aber wie gesagt, naiv gesehen recht flexibel.

hilft das ?
 

turmaline

Bekanntes Mitglied
Die Verfizierung des Processes selber ist dann die Validierung aller ProcessVerficiations. Geht eine schief ists die Verifikation gescheitert.

Also nicht ganz Dekorator, aber wie gesagt, naiv gesehen recht flexibel.

hilft das ?

Dein Verständins vom Ganzen ist in der Tat nicht ganz korrekt, aber daran bin ich ja selber schuld ;)
Jedenfalls, es gibt keine Prozesse, es gibt nur Nachrichten, eine Nachricht ist einem bestimmten Prozessschritt zugeordnet. Der größte Teil der Implementierung ist generisch, die Prozesse an sich werden durch einen Zustandsautomaten gesteuert, der definiert welche Nachricht und an wen nach einem bestimmten Prozessschrit gesendet werden soll. Nun das hier ist eine grobe Beschreibung, das Ganze ist um einiges komplizierte und nicht wirklich relevant für den Thread.

Hier geht es um die Verifizierung von der Nachricht. Dieser Teil ist auch generisch und wird von einer unabhängigän Komponente Verifier ausgeführt. Der verifier springt beim Speichern (Erstellen), Importieren (Eingang der Nachricht), Exportieren (Verschicken der Nachricht) ein und bekommt eine Nachricht als Eingangsparameter. Die Nachricht enthält dabei alle für die Verifikation nötige Informationen. Den Verifier kann man beliebig überschreiben und erweitern, je nach dem was genau er prüfen muss.

Und jetzt zu Deiner Idee, verschiedene Verifikationen hinzuzufügen. Die ist keineswegs naiv und ich finde sie gar nicht so schlecht. Wenn man wieder die Entwurfsmuster betrachtet, wäre das so was ähnliches wie Kompositum. Ich werde diesen Ansatz prüfen und schreibe noch einmal zu welchem Schluss ich gekommen bin.

Gruß,
madlena
 

turmaline

Bekanntes Mitglied
mhm ist ein komplexeres Thema, was wahrscheinlich schwierig ist ohne
Hierbei kann natuerlich eine Konfiguration eine ProcessVerification sein oder mehrere (je nach dem wie generell die Konfigurationen sind).

Benoetigen mehrere Processe die selbe Sonderbehandlung bekommen sie einfach alle die selbe ProcessVerification hinzugefuegt.

Die Verfizierung des Processes selber ist dann die Validierung aller ProcessVerficiations. Geht eine schief ists die Verifikation gescheitert.
hilft das ?

Nun Deine Idee war wirklich gut und zur Situation besser passend als Dekorator.
Es gibt also eine Kompositum-Klasse der die Varifikatoren hinzugefügt werden.

Java:
 public boolean verify()
    {
        boolean verify = true;
        for(WimValueObjectVerifier v : verifiers)
        {
            verify &= v.verify();
        }
        return verify;
    }

Nun habe ich ein Problem: die Kinder-Verifikatoren haben dieselbe Attribute wie die Kompositum-Klasse das sie ja von derselben Klasse abgeleitet sind. Allerdigs wollte ich nicht jedem Verifikator dieselben Objekte anhängen und wollte dass sie zentral verwendet werden. Allerdings kenn ich dafür keine generische Lösung: die Kinder-Verifikatoren können ja unabhängig vom Kompositum sowie als Teil des Kompositums verwendet werden. Die Kinder wissen ja nichts von der Kompositum-Klassen, sie sind ja nur ein Teil davon.. Hast Du dafür einen Vorschlg, wie man das lösen könnte?

Java:
        AbstractVerifierComposite verifier = new SaveCompositeVerifier(wrapper, info);
        verifier.addVerifier(new SaveVerifier());
        verifier.addVerifier(contactOptVerifier);
        return verifier;
 

turmaline

Bekanntes Mitglied
Ich würde kein Pattern sondern eine Regelengine vorschlagen, z.B. Drools - JBoss Community. Damit lassen sich sowohl Plausibilisierungen als auch Workflows abbilden.

Die Regelengine darf ich hier nich benutzen, es ist die Entscheidung von meinem Projektleiter und unterliegt nicht der Diskussion (er mag dafür seine Gründe haben, denn es gab angeblich eine Regenengine für das Ganze.. nun nicht mehr)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
mihe7 equals und instanceOf pattern matching Allgemeine Java-Themen 9
L Pattern Eventhandler Allgemeine Java-Themen 5
EinNickname9 Best Practice Singleton und Singleton mit Instanz zu anderer Klasse -Pattern Allgemeine Java-Themen 30
Z MVC Pattern - sinnvolle Integration Allgemeine Java-Themen 6
J Meinung zum verwendeten Design Pattern Allgemeine Java-Themen 4
Kirby.exe Filename nach bestimmtem Pattern durchsuchen Allgemeine Java-Themen 5
Meeresgott Best Practice "Spezifisches" Factory Pattern ? Allgemeine Java-Themen 1
H Strategy Pattern - changeColor() Methode - input rgd oder hex einlesen Allgemeine Java-Themen 1
M Vaadin MVP Pattern Allgemeine Java-Themen 1
N Java MVC Pattern richtig anwenden Allgemeine Java-Themen 24
M OOP Design Pattern - "extends Observable implements Observer" Allgemeine Java-Themen 0
K Factory Pattern: Mit Generics umgehen Allgemeine Java-Themen 6
perlenfischer1984 Welches Design Pattern ist geegneit. Allgemeine Java-Themen 7
perlenfischer1984 Hilfe bei Design (Pattern) Allgemeine Java-Themen 5
J Compilerfehler bis in java.util.regex.Pattern... Allgemeine Java-Themen 2
B MVC-Pattern größeres Beispiel Allgemeine Java-Themen 16
GreenTeaYT Verstehe nicht ganz das Observer Pattern in einer Arrayliste? Allgemeine Java-Themen 3
L Erste Schritte Java Date Format Pattern bestimmten Allgemeine Java-Themen 2
D Pattern mit Pattern vergleichen Allgemeine Java-Themen 3
D OOP Design Pattern für GUI - Datenbank Anwendung Allgemeine Java-Themen 1
S Hilfe bei geeignetem Pattern (Decorierer) Allgemeine Java-Themen 2
F Welches Design Pattern? Allgemeine Java-Themen 3
J Pattern aus String entfernen Allgemeine Java-Themen 2
S Pattern.Match Suche: For Schleife einbinden und in Liste schreiben Allgemeine Java-Themen 3
D Variablen zur Laufzeit global speichern (Registry Pattern?) Allgemeine Java-Themen 6
Rudolf State Pattern als Enum? Allgemeine Java-Themen 10
M massenhaft verschiedene Date-Pattern Allgemeine Java-Themen 3
Guybrush Threepwood Pattern gesucht: Punkt ohne Leerzeichen dahinter Allgemeine Java-Themen 3
T HTML Tag Position mittels Pattern ermitteln Allgemeine Java-Themen 7
X Datentypen Prozentualer Abgleich zwischen 2 Strings (Pattern?) Allgemeine Java-Themen 3
H Pattern.compile Syntax Allgemeine Java-Themen 15
B RegEx: (Um-)formulieren eines Pattern zur Identifizierung komplexer URLs Allgemeine Java-Themen 7
D [Drag&Drop] Design-Pattern-Frage Allgemeine Java-Themen 4
T Pattern für Benutzer-Gruppen, RMI Allgemeine Java-Themen 5
E Super erzwingen, konzept/pattern gesucht. Allgemeine Java-Themen 8
H Problem mit der Klasse Pattern - Regulärer Ausdruck Allgemeine Java-Themen 2
Eldorado Meinung zu einem abgewandelten MVC-Pattern Allgemeine Java-Themen 2
R Matcher - Pattern mit belibigem Anfang Allgemeine Java-Themen 2
H Bestimmten String mit Pattern und Matcher herauslesen => kein erfolg Allgemeine Java-Themen 9
I Pattern zum Erweitern existierender Objekte Allgemeine Java-Themen 4
I Template Method pattern mit "geschützten Methoden" Allgemeine Java-Themen 5
T Pattern: Passive View Allgemeine Java-Themen 2
K Verständnisprobleme bei Observer-Pattern mit größerem Datenmodell Allgemeine Java-Themen 32
T Pattern: Greedy, Reluctant, Possessive Allgemeine Java-Themen 4
S Hilfe bei Pattern Allgemeine Java-Themen 5
N Registry Pattern Allgemeine Java-Themen 7
Tandibur Denkfehler bei Pattern.matches? Allgemeine Java-Themen 3
Tandibur pattern dynamisch vorkompilieren Allgemeine Java-Themen 9
A Observer Pattern: feuern bei neuer Referenz-Zuweisung? Allgemeine Java-Themen 8
N Pattern Allgemeine Java-Themen 11
Iron Monkey Pattern - Matcher - Problem Allgemeine Java-Themen 3
ruutaiokwu welches design pattern? frage an die oo-experten unter euch... Allgemeine Java-Themen 3
G Accordion Design Pattern Frage Allgemeine Java-Themen 2
hdi Hilfe beim Design (Stichwort OO, Pattern, ...) Allgemeine Java-Themen 11
U Verständnisschwierigkeiten Observer Pattern Allgemeine Java-Themen 18
H2SO3- String(pattern) von SimpleDateFormat auslesen Allgemeine Java-Themen 7
M Problem mit Pattern Allgemeine Java-Themen 3
N Welches design pattern? Allgemeine Java-Themen 8
B Pattern gesucht, Programm Optionen, Casten vermeiden Allgemeine Java-Themen 3
D Welches Pattern kann ich nutzen? Allgemeine Java-Themen 9
J Suche regex-Pattern fuer Liste von Zahlen zwischen 0-100 Allgemeine Java-Themen 6
G Sequenzdiagramm Dao Pattern Allgemeine Java-Themen 3
D Observer/Observable Pattern vs. Listener-Konzept Allgemeine Java-Themen 4
S regex-Pattern Ausdruck negieren Allgemeine Java-Themen 2
J Pattern eines Textes Allgemeine Java-Themen 4
M Java Garbage Collector Frage (Singleton Pattern) Allgemeine Java-Themen 13
Y Pattern Problem Allgemeine Java-Themen 2
G UML-Diagramme mit DAO Pattern Allgemeine Java-Themen 7
S Pattern regex Allgemeine Java-Themen 2
G Composite, Design Pattern, printTree Allgemeine Java-Themen 42
J Regex Pattern Problem Allgemeine Java-Themen 12
P MVC Pattern Allgemeine Java-Themen 31
C Pattern für Kommunikation gesucht Allgemeine Java-Themen 3
G Frage zu MVC Pattern Allgemeine Java-Themen 6
J Pattern und Regex Allgemeine Java-Themen 2
L Wie Pattern anwenden um Cipher zu nutzen Allgemeine Java-Themen 2
S Singleton Pattern mit Generics Allgemeine Java-Themen 4
M MVC Design Pattern - Verständniss Fragen Allgemeine Java-Themen 3
F Typüberprüfung in Superklasse - geeignetes Pattern? Allgemeine Java-Themen 11
M Java Pattern hilfe Allgemeine Java-Themen 6
N Observer Pattern Allgemeine Java-Themen 2
G Problem mit MVC-Pattern (Controller als anonyme Unterklasse) Allgemeine Java-Themen 2
F Design Pattern zur Realisierung von Mehrfachvererbung? Allgemeine Java-Themen 8
M Pattern aus Properties Allgemeine Java-Themen 3
I Composite Pattern für Ausgabe von Ausdruck Allgemeine Java-Themen 3
G mit Pattern strings filtern ein kleines problemchen ;) Allgemeine Java-Themen 2
M nach einem Pattern splitten Allgemeine Java-Themen 2
F Composite Pattern in Java? Allgemeine Java-Themen 1
G problem mit dem observer pattern Allgemeine Java-Themen 3
C Matcher/Pattern ersetzten für JDK 1.3 Allgemeine Java-Themen 2
M Pattern: Summary of regex constructs: Backslash Allgemeine Java-Themen 2
G Scanner und Abbruchbedingung/Pattern Allgemeine Java-Themen 2
F suche im Classpath mit Pattern *.gif Allgemeine Java-Themen 16
G Frage zum Observer Pattern Allgemeine Java-Themen 4
D Design Pattern: Singleton Allgemeine Java-Themen 4
M Pattern, Matcher, Split Allgemeine Java-Themen 2
B Algorithmus für Arbeit mit fehlenden Listenelementen? Allgemeine Java-Themen 1
kodela Eingabe für TextArray bedingt sperren Allgemeine Java-Themen 3
Karl_Der_Nette_Anfänger Hat wer ne Lösung für verknüpfte Postleitzahlen? (Baum/Wurzel Struktur) Allgemeine Java-Themen 11
R 11 GB File lesen ohne zu extrahieren Filedaten Bereich für Bereich adressieren dann mit Multi-Thread id die DB importieren Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben