Thin Controller

9

Ich bekomme meine Füße nass mit Javafx. Das mache ich.

%Vor%

Problem:

Beim Versuch, die Benutzeroberfläche zu codieren, sind die meisten statischen Benutzeroberflächen in der fxml beschränkt. Aber es gibt Szenarien, in denen ich selbst Elemente hinzufüge, entferne, zeige, verstecke usw.

Ich mache das im Controller, da ich mit fx die Controller-Methode in der Ansicht konfigurieren kann, in der es eine bestimmte Aktion / ein Ereignis aufruft. All dieser Code befasst sich mit dem Erstellen / Bearbeiten von dynamischen UI und gehört in die Ansichtsebene. Aber es endet im Controller, der die Controller fett macht.

javafx bietet Javascript-Integration. Dies ist eine Möglichkeit, diesen Code für die Versionsverwaltung zu abstrahieren. Aber das würde nicht so perfekt Javascript in den Mix hinzufügen.

Wie würde ich den Code in Java oder fxml abstrahieren, damit ich das Thin Controller Paradigm nicht durchbrich?

BEARBEITEN

@assylias

Einverstanden, ich habe darüber nachgedacht und so werden Java-Klasse und fxml zusammen zu einem wiederverwendbaren Widget. Aber dann, wie verbinde ich das in FXML. FXML versteht nichts als einen Controller. Nehmen wir an, ich verbinde diese Sichtklasse mit fx: controller in fxml und nenne sie nicht Controller. Ich habe so etwas.

Diese Sichtklasse hat nichts anderes als Sichtmanipulationscode. Dann würde ich eine andere Controller-Klasse erstellen. Aber dann würde ich erwarten, irgendwie die Formulardaten in diesen Controller zu füllen. Dies sollte nur geschehen, wenn der Benutzer das Formular abgeschickt hat. In gewisser Weise muss ich javafx irgendwie sagen, dass sich die UI-Manipulationsanfrage / das Ereignis von der tatsächlichen Datenmanipulationsanforderung / -ereignis unterscheidet.

Ihre Gedanken, tut mir leid, wenn es ausführlich war. Versucht, es in so wenigen Worten wie möglich zu artikulieren.

    
ShaggyInjun 05.02.2013, 18:17
quelle

2 Antworten

1

Ich denke, die einfachste Lösung ist, daran zu denken, dass der in FXML angegebene Controller ein View-Controller ist. Der Zweck besteht darin, Code zum Ändern und Aktualisieren der Ansicht zu enthalten, der keinen herkömmlichen MVC-Controllercode oder keine Geschäftslogik enthält.

Zum Beispiel verwende ich in einem Projekt, an dem ich gerade arbeite, JavaFX mit Akka Schauspieler . Die Anwendung ist in Scala geschrieben. Die JavaFX-View-Controller enthalten jeglichen Code, der zum Ändern der Ansicht erforderlich ist. Ein Bildschirm enthält ein Login-Formular. Wenn der Benutzer auf die Anmeldeschaltfläche klickt, erstellt der Ansichtscontroller einfach eine Nachricht mit dem Benutzernamen und dem Kennwort und sendet diese Nachricht an den für die Geschäftslogik zuständigen Akteur. Wenn dieser Akteur feststellt, dass ein Fehler vorliegt, sendet er eine Nachricht zurück an den View-Controller, und der View-Controller kann entscheiden, welche Art von Aktualisierungen auf dem Bildschirm vorgenommen werden müssen.

Ich habe festgestellt, dass die Verwendung von akka actors mit JavaFX die Programmierung der Anwendung aus mindestens zwei Gründen erheblich vereinfacht.

  1. Da die Verwendung eines Akteursystems das Senden von Nachrichten zwischen Akteuren vorschreibt, gibt es eine natürliche Grenze zwischen dem Präsentationscode und dem Geschäftscode. Die Nachrichten, die hin und her geschickt werden, bilden diese natürliche Grenze.
  2. Die Verwendung von Aktoren ersetzt die Komplexität der Arbeit mit Threads / Aufgaben vollständig. Es eliminiert vollständig die Notwendigkeit, javafx.concurrent.Task für lange laufende Prozesse zu codieren.
axiopisty 27.01.2014 17:09
quelle
0

Wie wäre es, wenn Sie Ihren Ansichts-Manipulationscode in die Hauptklasse einfügen?

Hauptklasse:

%Vor%

Controller:

%Vor%

Nachteile: Sie benötigen Getter für alle Knoten, die Sie manipulieren möchten, in der Controller-Klasse.

    
invariant 05.02.2013 21:05
quelle

Tags und Links