Правильно ли я реализовал пассивный просмотр MVP? - PullRequest
0 голосов
/ 06 сентября 2018

В настоящее время я работаю над настольным приложением, использующим JavaFX (обратите внимание, что я не использую Screen Builder, я создаю свое представление непосредственно в коде). Я хотел бы реализовать вариант пассивного представления шаблона MVP (Model View Presenter).

Поскольку я не смог найти четких примеров ... Я попытался создать базовую настройку самостоятельно.

Основной класс

public class Main extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage stage) throws Exception {

        Model model = new Model();
        View view = new View(stage);
        Presenter presenter = new Presenter(model, view);
    }
}

Модель

public class Model {

    private StringProperty labelText;

    public Model() {
        this.labelText = new SimpleStringProperty();
    }

    public String getLabelText() {
        return labelText.get();
    }

    public StringProperty labelTextProperty() {
        return labelText;
    }

    public void setLabelText(String labelText) {
        this.labelText.set(labelText);
    }
}

Посмотреть

public class View {

    private Button button;
    private Label label;

    public View(Stage stage) {

        label = new Label("This is a test");
        label.setLayoutX(50);
        label.setLayoutY(50);
        button = new Button("Click me");
        button.setLayoutX(200);
        button.setLayoutY(50);

        Pane pane = new Pane();
        pane.getChildren().addAll(label, button);

        Scene scene = new Scene(pane, 400, 200); //Standard size 1200, 800
        stage.setScene(scene);
        stage.show();
    }

    public Button getButton() {
        return button;
    }

    public void setButton(Button button) {
        this.button = button;
    }

    public Label getLabel() {
        return label;
    }

    public void setLabel(Label label) {
        this.label = label;
    }
}

Presenter

public class Presenter implements EventHandler<ActionEvent> {

    private Model model;
    private View view;

    public Presenter(Model model, View view) {
        this.model = model;
        this.view = view;

        //Register action listener for button
        this.view.getButton().setOnAction(this);

        //Register change listeners of model
        this.model.labelTextProperty().addListener(new ChangeListener<String>() {
            @Override
            public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
                //Update view
            }
        });
    }

    @Override
    public void handle(ActionEvent event) {

        if (event.getSource() == this.view.getButton()) {
            //Update model
        }
    }
}

Я подумал, что при реализации модели пассивного просмотра следует учитывать следующее:

  • Модель и вид полностью разделены
  • Просмотр создает и отображает только элементы пользовательского интерфейса
  • Модель содержит данные приложения и логику для изменения этих данных
  • Presenter обновляет модель, а также вид
  • Presenter регистрирует прослушиватели событий действия и, при необходимости, обновляет модель (View -> Presenter -> Model)
  • Presenter прослушивает изменения модели и, при необходимости, обновляет представление (Модель -> Presenter -> Представление)

Используя эту информацию, я попытался построить эту базовую структуру для настройки модель-представление-презентатор. Правильно ли я реализовал пассивный вид?

1 Ответ

0 голосов
/ 06 сентября 2018

Выглядит нормально для меня. Не уверен, что пассивный в MVP относится к. Итак, ответ на ваш вопрос: да, вы, кажется, сделали все правильно.

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