Правильная архитектура 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. Понятное дело что в пределах данной программой можно было обойтись и "статиком", но это просто пример для наглядности, в нормальной большой программе это уже будет дичь.


Ответы (0 шт):