Jetzt möchte ich aber einige identisch bestückte Panels zu der “V” hinzufügen (Instanzen einer Klasse)
mittels add auch das funktioniert bestens.
Auszug der “View”
//.
panel1 = new MakeGui01(String name1);
panel2 = new MakeGui01(String name2);
panel3 = new MakeGui01(String name3);
//.
Auszug der “UnterView” (MakeGui01)
public class MakeGui01 extends JPanel
{
JPanel panel3 = new JPanel (new BorderLayout());
//..
//..
//jetzt jede Menge Buttons und Label auf diesem Panel
//.
//.
add (panel3);
}
Nur, wie handle ich jetzt die Events der Elemente (hier Buttons auf dem panel3)??
Die “C” kennt die Instanzen der “UnterView” ja nicht
du könntest für MakeGui01 auch einen eigenen Controler schreiben, der nur mit einer bestimmten MakeGui01 verbunden ist. Und für jede Instanz von MakeGui01 gibt es eine eigenständige Instanz von dem Controller
d.h. die “V” erstellt ein MakeGui01 sowie eine Controller Instanz und eine Mitteilung über den “echten” Controller
der echte “Controller” bekommt dann die Instanzen der “Untercontroller”?
“C” sollte die Subcontroller-Instanzen zu MakeGui01 erzeugen und halten. Die Subcontroller erzeugen ihre View-Objekte (MakeGui01). Zur Verbindung von Haupt- und Subview könnte der Hauptcontroller die Subviews bei seinen Subcontrollern anfordern.
Der Haupt-Controller könnte bei seiner Initialisierung seinen Haupt-View erzeugen und dabei alle GUI-Elemente initialisieren, die nur direkt dem Haupt-View zugeordnet sind. Anschließend könnte der Haupt-Controller alle Sub-Controller initialisieren lassen. Die Sub-Controller erzeugen bei ihrer Initialisierung ihre eigenen View-Objekte (MakeGUI01). Bei deren Initialisierung werden auch hier alle GUI-Elemente der Sub-View erzeugt.
Am Ende der Initialisierung des Hauptcontrollers sind also alle GUI-Elemente und Controller initialisiert wobei die Steuerung der View-Initialisierung vom jeweiligs zuständigen Controller vorgenommen wurde.
Im Anschluss daran, schnappt sich der Haupt-Controller die Sub-Views über eine von der Sub-Controller-Klasse bereitgestellte Methode und übergibt sie seinem Haupt-View zur Einbindung.
Ja danke schön!
alles eingebaut und funktioniert!!
vielleicht noch eine Frage am Rande, mittelfristig soll die View als Client irgendwo extern z.B. anderer PC laufen.
jetzt gibt es aber dort zwei drei Felder die die Eingabe lokal prüfen sollen (extern ja kein Problem).
D.h. für diese Felder wäre der Listener ja Lokal
nach einem positiven Test müssen die Daten dann ja doch zumController gesendet werden, wie geht das denn jetzt?
ich würde einfach eine set methode im Controller einbauen, ist das ok so?
Ich bin mir nicht sicher was du da hast aber nach MVC sieht mir das nicht aus. Ist aber auch zu wenig Code da um irgendwelche vernünftigen Aussagen zu treffen. Nur mal soviel: In MVC stellt kann es gut und gerne mehrere Controller geben, das sind die Listener. Der Controller ist in erster Linie dafür zuständig Benutzerinteraktionen oder von der View zum Model weiterzuleiten. Die Praxis Controller instanziert View und Model macht die Sache mMn nur unübersichtlich und nicht flexibel.
[QUOTE=mugsaway]Ja danke schön!
alles eingebaut und funktioniert!!
vielleicht noch eine Frage am Rande, mittelfristig soll die View als Client irgendwo extern z.B. anderer PC laufen.
jetzt gibt es aber dort zwei drei Felder die die Eingabe lokal prüfen sollen (extern ja kein Problem).
D.h. für diese Felder wäre der Listener ja Lokal
nach einem positiven Test müssen die Daten dann ja doch zumController gesendet werden, wie geht das denn jetzt?
ich würde einfach eine set methode im Controller einbauen, ist das ok so?[/QUOTE]
Wie soll denn die Kommunikation zwischen View und Controller stattfinden, falls der View Remote läuft?
Tja da bin ich mir auch noch nicht absolut im klaren drüber, weil im prinzip probiere ich im moment einige sachen aus, so als gerüst.
im1. schritt werde ich wohl einem linux pc als server laufen lassen und dann mit einem browser den server anwählen
wie ich dann die VIEW auf den PC implementiere als servlet, applet, oder html oder sonstwie, weiß ich noch nicht.
wie aber auch immer soll (zumindest dort wo es bekannt ist) die Eingabefelder auf mögliche Fehler früh abgefangen werden. Es macht m.E. nicht wirklich Sinn das der Server (Model, Controller) dann die Eingaben auf Korrektheit überprüft, wenn das die View selbest schon könnte.
der Controller muß auf dem Server laufen.
leider noch nicht ich bin im moment noch in dr schmierzettelphase und probiere
Sachen aus, die für (mein) Verständnis wichtig sind
ich neige dazu immer wieder in die prozedurale denkweise abzugleiten (weil ich das Jahrelang gemacht habe)
Vor zig Jahren als von MVC noch keine Rede war hatte ich mal eine IBM SNA Anwendung simuliert
die IBM schickte immer einen Datensatz der dann auf einem IBM Terminal (Kosten > 10.00DM)dargestellt wurde. Ich habe die mal so simuliert, das man die Daten auch auf einem einfachen (dummen) Terminal (Kosten < 500DM)darstellen konnte.
das war exakt das gleiche Prinzip Daten und Ansicht trennen.
Da war es sehr wichtig eine 100%ige Trennung vorzunehmen(MVC hätte da 100%ig drauf gepasst)
Nach wie vor bin ich aber der Ansicht, das man nicht alles immer 100%ig machen kann.
was ist z.B. wenn man von irgendeinem Server ein Formular anfordert und dann beim wegsenden erst der Server prüft, ob die Eingabe ok wäre, für meinen Geschmack könnte zusätzlich zum Formular noch einige Bytes gesendet werden die der Client (View) als Referenztest nutzen kann.
[QUOTE=mugsaway]Tja da bin ich mir auch noch nicht absolut im klaren drüber, weil im prinzip probiere ich im moment einige sachen aus, so als gerüst.
im1. schritt werde ich wohl einem linux pc als server laufen lassen und dann mit einem browser den server anwählen
wie ich dann die VIEW auf den PC implementiere als servlet, applet, oder html oder sonstwie, weiß ich noch nicht.
wie aber auch immer soll (zumindest dort wo es bekannt ist) die Eingabefelder auf mögliche Fehler früh abgefangen werden. Es macht m.E. nicht wirklich Sinn das der Server (Model, Controller) dann die Eingaben auf Korrektheit überprüft, wenn das die View selbest schon könnte.
der Controller muß auf dem Server laufen.
Gruß gü[/QUOTE]
Eine syntaktische Validierung kann durchaus auf dem Client geschehen. Die meisten Feldkomponenten sehen dafür Möglichkeiten vor. Fachliche Validierung sollte auf dem Server durchgeführt werden.
Bevor du ein Entwurfsmuster im Detail planst, solltest du dir Gedanken über deine Gesamtarchitektur machen. Eine gründliche Anforderungsermittlung ist für eine gute Entscheidungsgrundlage unerlässlich.
Einige Rahmenbedingung hast du schon genannt: View auf dem Client, Controller auf dem Server, Oberflächentechnologie egal. Hier könntest du dir mal Vaadin ansehen. https://vaadin.com/home
Damit könntest du im Prinzip MVVM umsetzen. Für die Oberfläche wird GWT verwendet.
danke, das mit dem GWT hatte ich schon mal irgendwo gelesen (eclipse, google…) meine ich
man kann dann glaube ich alles in java programmieren.
Ich denke mal ich mache zuerst das MVC fertig.
übrigens im Nachhinein war das eigentlich klar mit den Controllern das funktioniert perfekt!!
jetzt sind auch alle Controller wieder nebeneinander auf einer Ebene und mit den Instanzen ist es kein problem
Danke nochmal für den Hinweis!
das war 2Minuten arbeit Die GUI01 in den Controller zu legen.
So schlecht kann dann das programm auch nicht strukturiert sein
leider muß ich gleich weg wollte aber noch das Konzept irgendwie mit Bleistift zu Papier bringen.
Ich melde mich wieder
Wenn Du auf der Client-Seite möglichst wenig fachlichen Ballast haben möchtest und trotzdem zeitnah Vorgänge visualisieren musst, dann schau Dir doch mal OpenDolphin an. Da muss man sich auch keine Gedanken um den Transport machen. Funzt mit JavaFX, GWT, Swing…