Правильная архитектура JavaFX приложения ООП
Пишу простенькое JavaFX приложение. Возник вопрос связанный с его архитектурой.
Есть главный класс MyApplication.java :
public class MyApplication extends Application {
private static MyApplication instance;
private SimpleManager simpleManager;
private Stage stage;
public MyApplication() {
instance = this;
}
@Override
public void init() throws Exception {
super.init();
}
@Override
public void start(Stage stage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("MyApplicationGUI.fxml"));
Scene scene = new Scene(root);
stage.setTitle("MyApplication");
stage.setResizable(false);
stage.setScene(scene);
stage.show();
stage.getIcons().add(new Image(getClass().getResourceAsStream("assets/image/title.png")));
this.stage = stage;
this.simpleManager = new SimpleManager();
}
@Override
public void stop() throws Exception {
super.stop();
}
public Stage getStage() {
return this.stage;
}
public SimpleManager getSimpleManager() {
return this.simpleManager;
}
public static MyApplication getInstance() {
return instance;
}
public static void main(String[] args) {
launch(args);
}
}
Есть FXML файл: MyApplicationGUI.fxml
В нём прописан контроллер: MyController.java
public class MyController implements Initializable {
@FXML
private Button startButton, stopButton;
@Override
public void initialize(URL url, ResourceBundle rb) {
}
@FXML
private void clickStartButton(ActionEvent event) {
//MyApplication.getInstance().getSimpleManager().start(); // ФУ!!! Статик юз - гавнокод.
}
@FXML
private void clickStopButton(ActionEvent event) {
//MyApplication.getInstance().getSimpleManager().stop(); // ФУ!!! Статик юз - гавнокод.
}
}
При нажатии на кнопки в GUI нужно вызывать некие методы из класса SimpleManager.
Их обработка выполняется в классе MyController.java
Конечно можно воспользоваться статичным методом и получить instance главного класса, а из него геттером получить SimpleManager, но это статичный код который фу.
Как правильно построить архитектуру JavaFX приложения, чтобы можно было использовать все "как положено"(ооп), а не статик методами?
P.S. Понятное дело что в пределах данной программой можно было обойтись и "статиком", но это просто пример для наглядности, в нормальной большой программе это уже будет дичь.