JavaFX MVC связь между пакетами - PullRequest
0 голосов
/ 30 апреля 2020

Моя команда и я создаем университетский проект. Нам нужно создать приложение, имитирующее знаменитую игру Monopoly в Java. Мы используем JavaFX как библиотеку graphi c. Это мой первый «большой» проект, и теперь, когда мы завершили все MVC части, нам нужно заставить их общаться.

Мой взгляд должен обновляться каждый раз, когда игрок платит деньги или если его пешка движется на доске и во многих других случаях. У нас есть контроллер GameEngine, который связывает все компоненты контроллера / модели.

Мой вопрос (который мучает меня за несколько дней): Если я создаю ViewController, который получает данные из GameEngine, а затем контроллер обновляет представление, является ли это MVC нарушением?

Или лучше создать много методов в моем ViewController, который обновляет отдельные компоненты, которые могут вызываться другими контроллерами? В этом случае, какой будет лучший способ сделать это?

Это часть моего ViewController

public class ViewController {
        @FXML
        private Label playerBalance0;

        @FXML
        private Label playerBalance1;

        @FXML
        private Label playerBalance2;

        @FXML
        private Label playerBalance3;

        @FXML
        private Label playerBalance4;

        @FXML
        private Label playerBalance5;

        private List<Label> playerBalances = new ArrayList<Label>(Arrays.asList(playerBalance0, playerBalance1, 
playerBalance2, playerBalance3, playerBalance4, playerBalance5));

        public void updatePlayerBalances(final Map<Integer, Double> balances) {
           balances.forEach((K, V) -> {
              if (V.equals(0.0)) {
                 this.playerBalances.get(K).setText("");
              } else {
                 this.playerBalances.get(K).setText(String.format("%.0f",  V));
              }
           });
        }

}

Правильно ли, что другие классы дают мне данные для отображения, как в этом фрагменте кода? Или было бы лучше что-то вроде этого:

public class ViewController {
            @FXML
            private Label playerBalance0;

            @FXML
            private Label playerBalance1;

            @FXML
            private Label playerBalance2;

            @FXML
            private Label playerBalance3;

            @FXML
            private Label playerBalance4;

            @FXML
            private Label playerBalance5;

            private List<Label> playerBalances = new ArrayList<Label>(Arrays.asList(playerBalance0, playerBalance1, 
    playerBalance2, playerBalance3, playerBalance4, playerBalance5));

            public void updatePlayerBalances() {
                Map<Integer, Double> balancs = GameEngine.getBalances();
                balances.forEach((K, V) -> {
                  if (V.equals(0.0)) {
                     this.playerBalances.get(K).setText("");
                  } else {
                     this.playerBalances.get(K).setText(String.format("%.0f",  V));
                  }
               });
            }

    }

Заранее благодарю вас и прошу прощения за мой Engli sh.

...