MVC in Java

8

Hier geht es um eine Schulaufgabe, also versuche ich, Dinge nach dem Buch zu machen. Ich habe das Gefühl, dass ich Java beherrsche, aber gute Programmierpraxis, Designmuster usw. sind für mich ziemlich neu.

Ich habe mein Modell gemacht und es funktioniert gut. Es enthält eine Schülerklasse, die (offensichtlich) eine Reihe von Feldern mit Schülerinformationen enthält. Jetzt möchte ich, dass diese Informationen in ein paar JLabels angezeigt werden. Es ist am einfachsten, ein ganzes Studentenobjekt an die GUI zu übergeben und JLabel.settext.getname () usw. mehrmals zu verwenden, und ohne Zweifel wird dies perfekt funktionieren. Aber ich finde, dass das Schülerobjekt ein Teil des Modells ist, und indem ich es an die GUI übergebe, verwende ich kein MVC-Muster mehr. Bin ich gleich hier?

Ich habe ein Controller-Objekt für die Übergabe von Daten an und aus dem Modell und der GUI erstellt, aber um nur Zeichenfolgen an die Labels zu übergeben oder den JLabel-Text über den Controller zu setzen, brauche ich entweder viele Setter in der GUI oder I müsste alle JLabels globale Felder machen, die sich auch nicht gut anfühlen.

Irgendwelche Ratschläge dazu?

    
Berend Vervelde 27.12.2008, 10:32
quelle

3 Antworten

1

Die GUI sollte sich um alle Schnittstellen kümmern. Ich nehme an, Sie haben eine Klasse, die Ihre GUI ist, um mit Ihren JLabels "Sachen" für den Schüler zu machen. Übergeben Sie einfach Ihre Studenteninstanz an diese Klasse und lassen Sie sie tun, was sie tun muss. Wenn es fertig ist, wird es eine Controller-Methode aufrufen, um alles Notwendige zu tun.

OOD behandelt die Objekte, die Sie manipulieren möchten. Sie müssen die Objekte nicht auseinander brechen, um MVC zu übergeben. Du solltest das wirklich weitergeben, wenn das ein allgemeiner Fall ist. Das Modell definiert die Datenobjekte, mit denen Sie arbeiten werden ... oder genauer gesagt, das System arbeitet mit (Controller) und die Benutzer arbeiten mit (GUI). Diese Klassen sind so gebaut, dass sie herumgereicht werden können. Sie müssen viel mehr Arbeit tun, wenn Sie alle Informationen entkapseln hehe:)

    
Arthur Thomas 27.12.2008, 10:48
quelle
4

Beachten Sie, dass die Swing-Komponenten alle das MVC-Muster intern verwenden, so dass sie bereits ein Modell haben. Dies ist bei komplexen Widgets, wie JTable, von größerer Bedeutung, bei denen Sie definitiv möchten, dass Ihr Modell die TableModel -Schnittstelle implementiert.

Die große Frage ist, wie Sie Ihr Domänenmodell mit den internen Modellen der einzelnen Swing-Komponenten abstimmen können. Eine Möglichkeit hierfür sind die Methoden setModel() und getModel() in Ihrer GUI-Klasse, die zwischen ihnen übersetzen, d. H.% Co_de% verwendet Ihr Modell und ruft setModel() für die einzelnen JLabels usw. auf.

    
Michael Borgwardt 27.12.2008 10:49
quelle
0

Die Ansicht benötigt Ihr Modell, um die Benutzeroberfläche zu erstellen (vom Modell abzurufen) und Aktualisierungen von ihr zu empfangen (Modell für Modell). Idealerweise wird das Modell der Ansicht nur lesbar präsentiert. Controller stellen die Methoden bereit, mit denen die Ansicht das Modell aktualisieren kann, um eine klare Trennung der Probleme zu ermöglichen.

Es gibt viele verschiedene Formen und Interpretationen dessen, was MVC genau ist, versuchen Sie es zu googeln. Außerdem können Sie MVC häufig auf verschiedenen Ebenen in Ihrer Anwendung finden (z. B. Swing-Modell, Ihr Domänenmodell, ...).

Bei MVC und MVC-Varianten ist es am wichtigsten, dass Sie einzelne Submuster (Observer, Facade, ...) erklären und die von Ihnen getroffenen Designoptionen (Vorteile / Nachteile) verteidigen können, anstatt zu implementieren das einzige und einzige MVC-Muster, falls es existiert.

Also wäre mein Rat für Ihre Aufgabe, wenn möglich natürlich, etwas zu implementieren, das gut funktioniert, inspiriert von dem, was Sie auf MVC und seinen Untermustern gelesen haben, und erst danach zu sehen, wie gut es einigen zustimmt oder nicht. traditionelle "Beschreibungen von MVC-Mustern, die Sie finden können.

    
eljenso 27.12.2008 12:32
quelle

Tags und Links