В архитектуре (JavaFX) MVC с отдельным элементом управления нормально ли, что большинство ваших обработчиков событий просто вызывают методы просмотра? - PullRequest
0 голосов
/ 07 мая 2020

Итак, я изучаю программирование на JavaFX и MVC. Элемент управления также является собственным классом и не интегрирован в представление (я слышал, что это один из способов go). Я хочу, чтобы он был отделен от представления, но поскольку я пытаюсь инкапсулировать все и оставить все частным с ограниченным доступом к элементам управления / узлам, я обнаружил, что использую методы, чтобы делать почти все внутри моего объекта почти полностью при использовании обработчиков событий в элементе управления.

Пример (Не настоящая программа, просто написал ее здесь, потому что у меня нет коротких примеров.):

Просмотр:

public class SamplePane extends BorderPane {

private TextField tfScoreOne;
private Button btnScore, btnPenalty;
private int scoreOne;

   public SamplePane() {
    // Some constructor
   }

   public void giveScore() {
      scoreOne++;
      tfScoreOne.textProperty().setValue("Score: " + Integer.toString(scoreOne);
   }

   public void takeScore() {
      scoreOne--;
      tfScoreOne.textProperty().setValue("Score: " + Integer.toString(scoreOne);
   }
}

public void btnScoreAddHandler(EventHandler<ActionEvent> handler) {
    btnOneAdd.setOnAction(handler);
}

public void btnPenaltyAddHandler(EventHandler<ActionEvent> handler) {
    btnOneAdd.setOnAction(handler);
}

Элемент управления:

public class SampleController {

   public ModuleSelectionController() {
      // Some contorller stuff again
      samplePaneObj.btnScoreAddHandler(btnScoreHandler);
      samplePaneObj.btnPenaltyAddHandler(btnScoreHandler);
   }

   private class btnScoreHandler implements EventHandler<ActionEvent> {
        public void handle(ActionEvent arg0) {
            samplePaneObj.giveScore();
        }
   }

   private class btnPenaltyHandler implements EventHandler<ActionEvent> {
        public void handle(ActionEvent arg0) {
            samplePaneObj.takeScore();
         }
   }

}

Это в основном псевдокод, так что простите меня, если есть какие-то ошибки, но вы поняли? Кажется очень произвольным просто вызывать методы, но без передачи TextField в примере трудно не делать все без метода, выполняющего всю работу.

Но достаточно ли этого развязанного для MVC? Я действительно не хочу нарушать инкапсуляцию - это основная проблема, поэтому я не могу опубликовать элементы управления c и работать с ними непосредственно в контроллере.

Это все нормально? Я хочу убедиться, что понимаю это правильно.

1 Ответ

1 голос
/ 07 мая 2020

Здесь слишком много можно сказать об этом. Я бы посоветовал вам взглянуть на структуру приложений JavaFX и прочитать ее документацию. Я многому у него научился. Например, посмотрите здесь: https://github.com/sialcasa/mvvmFX Не делайте ошибки и попробуйте самостоятельно вывести некоторые шаблоны реализации из всех примеров hello world на inte rnet. Все они не учат вас, как все должно быть сделано, чтобы хорошо масштабироваться для реальных проектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...