MVC - zirkuläre Abhängigkeit

8

Ich brauche die Ansicht, um einen Verweis auf den Controller zu halten, weil er den Controller als Ereignis-Listener registrieren muss. Ich brauche den Controller, um einen Verweis auf die Ansicht zu halten, denn nach einem Klick auf die Schaltfläche muss ich in der Lage sein, die ausgewählten Dateien in einer Liste abzurufen. (Ich habe eine Liste von Dateien und eine Schaltfläche 'Cluster hinzufügen', also wenn die Schaltfläche geklickt wird, muss ich die ausgewählten Dateien holen)

Kurz gesagt, ich habe:

%Vor%

Ich bin mir sicher, dass es hier ein schlechtes Design gibt, ich kann einfach nicht herausfinden, wie ich es vermeiden kann.

    
Shmoopy 02.06.2012, 19:29
quelle

4 Antworten

3

Eine mögliche Lösung:

  • Geben Sie dem Controller einfach eine addView(View view) Methode
  • Geben Sie für View ebenfalls eine addController(Controller controller) -Methode ein.
  • Machen Sie es Teil Ihrer Dokumentation, dass diese vor der Verwendung festgelegt werden müssen.
  • Stellen Sie sicher, dass die Referenzvariablen vor der Verwendung nicht null sind, da sie nicht im Konstruktor festgelegt werden.
Hovercraft Full Of Eels 02.06.2012, 19:31
quelle
5

Ich bin mir nicht sicher, welche Java-Technologien Sie verwenden, aber in GWT-Anwendungen - und mit dem MVP-Muster - muss die View keinen Verweis auf den Controller haben: Die gesamte Kommunikation zwischen dem Controller (oder Presenter) und die Ansicht erfolgt über eine Schnittstelle, die von der View implementiert wird. In Ihrem speziellen Fall sollte Ihr Code wie folgt aussehen:

Definieren Sie eine Display-Schnittstelle:

%Vor%

Lassen Sie die Ansicht diese Schnittstelle implementieren:

%Vor%

Und machen Sie alle notwendigen Bindungen in der Steuerung:

%Vor%     
Carlos Gavidia 02.06.2012 20:21
quelle
1

Nun, ich glaube, Sie können die Kapselung und auch den lazy-Initialisierungsprozess verwenden. Ich bin sicher, dass Sie die Ansicht nicht im selben Moment benötigen, wenn der Controller initialisiert wird oder umgekehrt. Wenn nicht, können Sie auch die obige Antwort in Verbindung mit der lazy-init-Eigenschaft für Beans erhalten.

    
dharam 02.06.2012 19:35
quelle
0

Um Ansicht und Controller richtig zu verbinden, klicken Sie bitte auf die * .aspx Seite und wählen Sie "Gehe zum Controller" Menü. Fügen Sie nun in dem respektierten Controller eine Methode mit der folgenden Syntax hinzu.

%Vor%

Dabei ist viewname der Name Ihrer Ansicht für ex. in .net ist der Name der Seite ohne Aspx-Erweiterung Wenn Sie nun mit der rechten Maustaste auf Ansicht klicken und das Menü "Zur Ansicht" auswählen, wird Sie bestätigt, dass Sie die Ansicht und den Controller gut verknüpft haben.

    
Prajwal 05.06.2012 08:19
quelle