Jeśli chodzi o oddzielenie logiki od widoku to nie ma tutaj zbytniej różnicy od Javy webowej. Możesz sobie zrobić nawet standardowo:
model, serwisy, konwertery i walidatory i wystawić jakieś x serwisów dla widoku w JavaFX. Do poziomu serwisów może to wyglądać niemal identycznie jak w standardowej javie webowo springowo hibernateowo webowej.
Czy view to np. pojedynczy Label
wyświetlający czas rozwiązywania sudoku
Z większymi komercyjnymi aplikacjami w JavaFX nie miałam styczności, ale kiedyś robiłam to sobie tak, że kontroler właśnie trzymał sobie elementy widoku typu
TextField, Label itd... i zarządzał swoim oknem oraz trzymał też referencję do serwisów z których korzystał. Miał też metody podpięte pod dane przyciski i akcje i np. gdy użytkownik coś klikał wywołuje się metoda w kontrolerze, który zmienia na widoku co ma zmienić i/lub wywołuje też akcje na serwisie. Jako ciekawostka to z adnotacją @FXML
te podpięte metody mogą być nawet prywatne. Używałam JavaFX w połączeniu z Springiem i miałam tam fabrykę tych kontrolerów, które miały scope prototype
i implementowały interfejs z metodą ala setDialog(FXDialog dialog)
. FXDialog jako zwykła klasa helper, która dziedziczy po Stage i używa FXMLLoader żeby załadować tego JavaFX XMLa, tworzy Scene i wywołuje controller.setDialog(this);
. Była też fabryka tych FXDialogów coś na zasadzie:
@Bean
@Scope("prototype")
public FXDialog about() {
return FXDialog.with()
.controller(cf.aboutController())
.fxmlResource("About.fxml")
.owner(primaryStage)
.build();
}
@Bean
@Scope("prototype")
public FXDialog main() {
return FXDialog.with()
.controller(cf.mainWindowController())
.fxmlResource("MainWindow.fxml")
.owner(primaryStage)
.build();
}
a żeby zainicjować z poziomu jakiegoś kontrolera ekran:
@FXML
public void showAbout() {
screens.about().show();
}
Czy view to np. tablica Button
, które odpowiada za widok planszy
Jeju wy teraz kłócicie się zero jedynkowo co uznać za słówko view
. Życie nie jest takie zero jedynkowe. View to znaczy widok.
TextInput, Button albo Label to może być część widoku albo mogą czasem stanowić widok sam w sobie. Mapę tych buttonów możesz
sobie oczywiście opakować dodatkową klasą pt PlanszaSudoku i wystawić metody dla kontrolera ułatwiające czyszczenie planszy czy coś tam - możesz też nie opakowywać i w kontrolerze trzymać np. 20pól buttonów. Mniejsza o słówko view, liczy się koncepcja.
Pozdrawiam