Шаблон MVP: следует ли разделить несколько докладчиков или они могут общаться напрямую? - PullRequest
4 голосов
/ 23 февраля 2009

У меня есть пользовательский интерфейс, который выглядит так:

    +--------+---------------+
    | model1 | model details |
    | model2 |     here,     |
    | model3 | loaded as the |
    |        | user selects  |
    |        | a model from  |
    |        |   the left.   |
    |        |               |
    +--------+---------------+

Я использую шаблон MVP для управления этим пользовательским интерфейсом.

Я здесь много упрощаю, но чтобы разделить и победить, я хотел бы разделить Presenter на две части: одну, которая обрабатывает пользовательские жесты в представлении слева (пользователь изменяет список моделей в этом представлении, например, сортировка) и другой Presenter, который обрабатывает жесты пользователя в представлении справа (пользователь изменяет отдельную модель в этом представлении).

Если докладчик слева взаимодействует со всем списком моделей, докладчик справа взаимодействует только с одной моделью: той, которую пользователь выбирает из списка слева. IOW пользовательский интерфейс движется слева направо.

После того, как пользователь выбирает (то есть щелкает) модель слева, моя текущая реализация выглядит примерно (примерно):

LeftPresenter.onModelClick = function(event) {
    var model = this.getModelFromEvent(event);
    this.view.setSelectedModel(model); // updates list widget on left
    RightPresenter.setSelectedModel(model); // notify the other Presenter
}

RightPresenter.setSelectedModel = function(model) {
    // lazy load the model from the db, and update the
    // view when the model fires the "loadComplete" event
    model.bind('loadComplete', this.view.setModel);
    model.lazyLoad();
}

Вот часть, которую я не очень понимаю относительно шаблона MVP или любого шаблона MVC GUI в этом отношении:

  1. Может ли пользовательский интерфейс управляться несколькими ведущими, как это?
  2. Следует ли разделить несколько докладчиков или они могут напрямую общаться друг с другом, как показано здесь?

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

1 Ответ

1 голос
/ 23 февраля 2009

1. Может ли пользовательский интерфейс управляться несколькими Ведущие как это?

Да

2. Если несколько докладчиков отделены или они могут общаться непосредственно друг с другом, как показано здесь

То, как я справляюсь с этим, у меня есть фреймворк, похожий на этот

Когда происходит событие, UI_Object обрабатывает событие, создавая и запуская объект Command. Каждый UI_Object реализует интерфейс просмотра, найденный в UI_Views, и регистрируется в UI_View. Командные объекты могут получить доступ к зарегистрированному объекту пользовательского интерфейса в UI_View через интерфейсы.

Например, в одном из моих приложений для резки металла есть экранный элемент, называемый HOLD, который содержит все детали, которые не были размещены на листе металла для резки. Часть может попасть в трюм несколькими способами. Загружен из файла детали, созданного редактором форм, созданного на нашем экране CAD или взятого из листа металла.

Каждая из этих операций инкапсулирована в отдельные объекты Command, реализующие шаблон проектирования Command. Когда объект команды выполняется, он вызывает.

CuttingScreen.Refresh
CADScreen.Refresh
ShapeEditor.Refresh

Каждый из них обновляет соответствующий экран, обновляя удержание.

Теперь я могу добавить метод в интерфейс моего приложения. MyCuttingApplication.HoldRefresh, который в свою очередь вызовет все три обновления.

Но важным моментом является то, что ваше представление вызывает команду, которая использует интерфейс, реализованный этим представлением, для обновления. Что объект вида регистрируется на нижнем уровне.

...