Welches Pattern kann ich nutzen?

Status
Nicht offen für weitere Antworten.

diggaa1984

Top Contributor
hallo, bissel unglücklich die Themenwahl, aber ich versuch mein Glück :D

Also folgender Sachverhalt:
Ich habe in einem MVC-Gebilde einen Controller, welcher die reine Datenmanipulation beinhaltet. Er wird nur durch andere Controller aufgerufen. Sprich wenn jemand nen Knopf drückt oder nen Menüeintrag etc. wird der jeweilige ViewController angesprochen, und dieser ruft bei Bedarf (wenn die Funktion des Buttons es vorsieht) den Datencontroller auf, und soll ihm mitteilen was der Nutzer grad machen möchte (neuer Datensatz, Datensatz löschen, Datensatz ändern, alle ändern etc.).

Bei jeder Manipulation prüfe ich ob gewissen Sachen eingehalten werden (null-prüfung und weiss der geier was), daher einen zentralen Daten-Controller.

So der Aufruf für den Datencontroller sah in meiner Vorstellung grob so aus:
Code:
public class DataController {
    
    //Befehle
    //irgendwie n public Enum "request" mit den möglichen Befehlen drin (ADD, REMOVE, ADDALL, CHANGE, REMOVEALL ...

    public boolean handleRequest(request r, FooData d) {
        switch(r) {
            .... //aufruf privater Methoden für spezifischen Befehl
        }
    }
}

der Controller beinhaltet also alle Befehle die von aussen aufgerufen werden können.

Mir schwirrte nun immer der Begriff "Command-Pattern" durch den Kopf, was ich so recht noch nicht genutzt hab. Aber mir scheint als wäre es das richtige, doch wenn ich mir das hier anschaue, zweifel ich ein wenig. Das Auslagern der Befehle in extra Klassen is mir suspekt. In meiner Variante wäre doch alles beim Controller gut aufgehoben.

Eventuell gibts ein anderes Pattern, was mehr in meine Vorstellung passt, oder soll ich einfach meine Idee umsetzen? :D

Bitte um eure Meinung.
 

diggaa1984

Top Contributor
war ich ja gar nich so verkehrt mit meiner Intuition etwas derart aufzubauen. Muss ich nur nochma das Umfeld dieses Controllers gestalten, da war ich mir bisher net ganz sicher, aber das Sun-Tut was du gelinkt hast sah ganz gut aus. :###
 

Marco13

Top Contributor
Naja, ist schwer da was zu sagen, wenn man den Zusammenhang nicht genau kennt. Reicht der Controller nur "geprüfte" aufrufe an das Modell weiter? Kann der Controller direkt ein Listener für die View sein? Um wie viele Requests geht es? Dort ein switch mit 1000 case's zu machen wäre unschön.... Vielleicht kann man die ja noch irgendwie gruppieren ... also (sinngemäß!!!) nicht
Code:
 enum request {ADD, REMOVE, ADDALL, CHANGE, REMOVEALL ... }

    public boolean handleRequest(request r, FooData d) {
        switch(r) {
            .... //aufruf privater Methoden für spezifischen Befehl
        }
sondern vielleicht
Code:
    public void add(Item ... items) { ... }
    public void remove(Item ... items) { ... }
    public void change(Item ... items) { ... }
oder so - aber wie gesagt, das ist nur Stochern im Trüben...
 

byte

Top Contributor
Der Switch ist in der Tat Käse. Mach pro Operation ein Command (oder auch schlicht Action genannt).

Wenn Du Swing verwendest, kannst Du auch ganz einfach Swing Actions dafür benutzen. Das hat den Vorteil, dass Du diese direkt an verschiedenen Teilen der GUI einbinden kannst (MenuBars, ToolBars, ...).
Mit Hilfe einer Enum hast Du dann noch eine komfortable Factory für Deine Actions:

Code:
public enum Actions {
    ADD(new AddAction()),
    REMOVE(new RemoveAction()),
    CHANGE(new ChangeAction());
    
    private MyAction action;
    
    private Actions(MyAction action) {
        this.action = action;
    }
    
    public MyAction action() {
        return action;
    }
    
    public void perform(Object arg) {
        action().actionPerformed(new ActionEvent(arg, 0, ""));
    }
    
    public MyAction delegate(final String name, final Icon icon, final Object argument) {
        return new MyAction(name, icon) {
            public void actionPerformed(ActionEvent e) {
                Actions.this.perform(argument);
            }
        };
    }
    
    public void enable() {
        action.setEnabled(true);
    }
    
    public void disable() {
        action.setEnabled(false);
    }
}
 

diggaa1984

Top Contributor
Reicht der Controller nur "geprüfte" aufrufe an das Modell weiter?
Ja, da ich versch. View-Controller habe (zwecks CardPanel-Nutzung), und diese allerdings beide Optionen zum Manipulieren der Daten bieten wollte ich an dieser Stelle die Prüfungen ob Manipulation stattfinden darf (wie zB. null-prüfung) nicht doppelt coden, und hab mich daher für den DatenController entschieden. Was nun doppelt wäre, ein einfacher Request an den Datencontroller, aber lieber so, also doppelte Prüfalgorithmen.

Kann der Controller direkt ein Listener für die View sein?
aus oben genannter Hierarchie eher weniger

Um wie viele Requests geht es?
grob geschätzt 10, viel mehr sollten es nicht werden.

Wenn Du Swing verwendest, kannst Du auch ganz einfach Swing Actions dafür benutzen. Das hat den Vorteil, dass Du diese direkt an verschiedenen Teilen der GUI einbinden kannst (MenuBars, ToolBars, ...).
das würde ganz spontan für mich bedeuten, das ich diese Aufrufe in den ViewControllern spare, und ein Klick automatisch durch das SwingFramework ne Action auslöst, die gleich direkt den DatenController anspricht?

Kannst mir mal bitte nen groben Ablauf angeben wie das nacheinander angesprochen wird von den Methoden her?
Hab noch net so die Erfahrung mit den Actions, aber wenn das mehr dem Konzept von Swing entspricht, hab ich nix dagegen das gleich für mein Programm zu verwenden. Aber das wäre dann schon CommandPattern oder, da es so aussieht also ob die einzelnen Actions extern beheimatet sind.
 

diggaa1984

Top Contributor
*nochmal rauswühl*

dachte grad Actions und ActionsListener ham was miteinander zu tun, aber dem scheint ja net so, sind nur artverwandt ^^ ... kurz zu Actions die API belesen, und denke schon, dass dies die bessere Wahl wäre, da ich damit im Notfall gleich GUI-weit komponenten deaktivieren kann und so weiter. Sicherlich nicht verkehrt, auch wenn SUN die geringere Performanz des Ganzen erwähnt.

Da ich noch lange net am Programmieren bin, sondern noch am planen, noch kurz was zu fragem :D

Ich verstehe das mit dem Enum (speziell mit: ADD(new ...Action())) so, dass immer wenn ich eine Action aus dem Enum an eine Komponente hänge, das System eine neue Action erstellt, und ich quasi 5 Action-Objekte habe die alle das selbe machen; oder wird beim enum nur ein Objekt erzeugt, und jede Nutzung stellt nur eine Referenz dar? (also speziell in dem Fall, mit explizitem Konstruktor).

Wären es mehrere Objekte, wäre das ja nicht nötig, auch wenns performanztechnisch nicht ins Gewicht fällt. Ein Actionobjekt für die jeweilige Action würde ja reichen, und ich würde dass dann per setAction an die Komponenten weiterleiten.


Und weiterhin würde ich dann in der actionPerformed der Actions direkt den Datencontroller ansprechen, und den jeweiligen View-Controller überspringen, welcher den Aufruf ja nur weiterleiten würde, ohne nötige Prüfungen. Ist ja in dem Sinne noch einigermaßen MVC-Konform, oder? :D


Und nochma zur Absicherung: ActionListener unterscheidet sich von den Actions nur dahingehend, dass er keine GUI-weiten PropertyChange-Broadcasts sendet?

Nachtrag: An welcher Stelle in dieser Swing-Action-Geschichte könnte ich denn diese ganzen Methoden des Enums aufrufen? Muss da nochma nachlesen wie scheint :D
 

Landei

Top Contributor
dachte grad Actions und ActionsListener ham was miteinander zu tun, aber dem scheint ja net so, sind nur artverwandt
Action erbt von ActionListener, sie sind also mehr als "artverwandt": Überall wo ein ActionListener verlangt wird, kannst du auch eine Action übergeben.
 

Marco13

Top Contributor
Ich verstehe das mit dem Enum (speziell mit: ADD(new ...Action())) so, dass immer wenn ich eine Action aus dem Enum an eine Komponente hänge, das System eine neue Action erstellt, und ich quasi 5 Action-Objekte habe die alle das selbe machen; oder wird beim enum nur ein Objekt erzeugt, und jede Nutzung stellt nur eine Referenz dar? (also speziell in dem Fall, mit explizitem Konstruktor).

Letzteres. "ADD" ist EIN konstantes Objekt - und zu diesem Objekt gehört EINE Action. Ich bin nicht 100% sicher, ob so eine Verbindung von Konstanten und Aktionen der Weisheit letzter Schluss ist, aber hab' gerade keine Zeit, darüber zu philosophieren...

Und weiterhin würde ich dann in der actionPerformed der Actions direkt den Datencontroller ansprechen, und den jeweiligen View-Controller überspringen, welcher den Aufruf ja nur weiterleiten würde, ohne nötige Prüfungen. Ist ja in dem Sinne noch einigermaßen MVC-Konform, oder? :D

MVC-Konform ... naja ... MVC ist kein "festes Schema", sondern eher eine abstrakte Idee, der man folgen sollte - wenn die View über eine Action direkt das Model verändert, dann ist die Action eben ein "kleiner Controller" - das ist erstmal nicht "falsch" - über den oben erwähnten Punkt müßte man aber nochmal nachdenken...
 

diggaa1984

Top Contributor
Marco13 hat gesagt.:
wenn die View über eine Action direkt das Model verändert, dann ist die Action eben ein "kleiner Controller" - das ist erstmal nicht "falsch" - über den oben erwähnten Punkt müßte man aber nochmal nachdenken...


Ne die Action würde den Kontrollfluss in den Datencontroller lenken, und vielleicht nen Objekt zusammenstellen, damit der Datencontroller gleich alle nötigen Infos zum Manipulieren hat. Ob er dann manipuliert, wird erst dort entschieden.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
perlenfischer1984 Welches Design Pattern ist geegneit. Allgemeine Java-Themen 7
F Welches Design Pattern? Allgemeine Java-Themen 3
ruutaiokwu welches design pattern? frage an die oo-experten unter euch... Allgemeine Java-Themen 3
N Welches design pattern? Allgemeine Java-Themen 8
G Welches Problem besteht bei den Typparametern? Allgemeine Java-Themen 5
S Programm entwickeln, welches ein Dreieckspuzzle lösen kann Allgemeine Java-Themen 5
Z Welches GUI Framework für Java ist aktuell? Allgemeine Java-Themen 16
D Verkauf von einem Programm welches ich in Java geschrieben habe Allgemeine Java-Themen 4
U Welches ist das richtige Entwurfsmuster Allgemeine Java-Themen 2
S Byte Array welches in Laufzeit aufgelöst wird // Objekt Array Allgemeine Java-Themen 3
T WeakReference/PhantomReference: Mitbekommen WELCHES Objekt nun GC'ed wird Allgemeine Java-Themen 2
P "Komplexe" Datenbankabfragen, welches ist der bessere Weg Allgemeine Java-Themen 4
A Welches Speichermanagement für einen Kalkulator Allgemeine Java-Themen 7
T Welches Tuturial soll ich paralell lesen ? Allgemeine Java-Themen 3
R Welches User-Verzeichnis wählen für Configurationsdateien - Windows Allgemeine Java-Themen 2
G Gleiche Packages in verschiedenen JAR Dateien - Welches Package wird verwendet? Allgemeine Java-Themen 5
E Welches Dateiformat für gespeicherte Einstellungen? Allgemeine Java-Themen 20
N Servlet welches PDF erzeugt Allgemeine Java-Themen 10
A Erkennen welches Fenster bei windowDeactivated aktiviert wird? Allgemeine Java-Themen 2
ARadauer Welches Programm hört auf Port? Allgemeine Java-Themen 3
P Textfiles laden - egal welches Encoding Allgemeine Java-Themen 9
André Uhres Welches Werzkeug benutzt ihr um eure Mails zu lesen? Allgemeine Java-Themen 47
A Welches Programmdesign? Allgemeine Java-Themen 6
F welches array ist im jedem programm? Allgemeine Java-Themen 6
Z Testen welches BS benutzt wird Allgemeine Java-Themen 3
T Welches Webframew0rk für pure Java? Allgemeine Java-Themen 13
M Welches Linux zum Java testen? Allgemeine Java-Themen 5
D Welches Fenster ist im moment aktiv? Allgemeine Java-Themen 11
K Welches Betriebssystem ist in Benutzung? Allgemeine Java-Themen 11
M Welches Objekt ruft die Methode auf? Allgemeine Java-Themen 12
S Welches Verschlüsselungsverfahren Allgemeine Java-Themen 9
G Welches Java GUI Buch würdet Ihr empfehlen Allgemeine Java-Themen 2
W VersionsVerwaltung welches Tool Verwendet ihr Allgemeine Java-Themen 12
D Welches Linux in Verb. mit Java Allgemeine Java-Themen 9
S Welches LookAndFeel ist das? Allgemeine Java-Themen 2
Chucky Java Buch - nur welches? online oder kaufbuch? Allgemeine Java-Themen 18
P Welches JRE braucht meine Applikation? Allgemeine Java-Themen 3
W welches layout? Allgemeine Java-Themen 3
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 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
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
turmaline OOP Decorater Pattern für Varifikationsverhalten Allgemeine Java-Themen 13
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
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
B Pattern gesucht, Programm Optionen, Casten vermeiden Allgemeine Java-Themen 3
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

Ähnliche Java Themen

Neue Themen


Oben