Динамическое создание компонентов пользовательского интерфейса в Model-PassiveView-Controller - PullRequest
1 голос
/ 08 января 2012

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

Этот шаблон является еще одной вариацией для модели-вида-контроллера и модели-вида-презентатора. Как и в случае с ними, пользовательский интерфейс разделен между видом, который управляет отображением, и контроллером, который реагирует на жесты пользователя. Существенное изменение в пассивном представлении состоит в том, что представление стало полностью пассивным и больше не отвечает за обновление себя из модели. В результате вся логика представления находится в контроллере. В результате между видом и моделью нет зависимостей в любом направлении.

Пока мой контроллер регистрирует в качестве прослушивателя существующие статические компоненты, созданные самим пассивным представлением при инициализации. Теперь Контроллеру необходимо динамически создавать переменное количество компонентов пользовательского интерфейса , в зависимости от модели (конкретно * , сейчас я говорю о сетке флажков - размеры сетки являются переменными ).

Вот здесь и лежат мои сомнения:

  1. Должен ли этот динамический код создания пользовательского интерфейса быть реализован в контроллере? Это привело бы к менее сложному коду, возникающему из-за того, что представление не было известно о модели, но часть представления была бы определена контроллером. ...
  2. Должно ли представление предлагать общий, независимый от модели способ создания компонентов пользовательского интерфейса по требованию , позволить контроллеру использовать его и регистрировать прослушиватели для извлеченных компонентов пользовательского интерфейса? Здесь Контроллер должен был бы конвертировать туда и обратно между объектами Model и универсальными объектами ( конкретно, строки, целые числа, ... ).

1 Ответ

2 голосов
/ 08 января 2012

Всякий раз, когда представление нуждается в динамическом создании элемента управления, оно, как правило, предназначено для сбора чего-либо. Это означает, что вашему Presenter / Controller не нужно создавать всю логику, но нужно вызвать метод в представлении, которое создаст элементы управления.

На виду:

void PopulateUserOptions(IEnumerable<String> options)
{
    foreach (var item in options)
    {
        \\create and add your controls to the form
    }
}

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

...