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:
Kopiuj
@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:
Kopiuj
@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