Примеры сложных супервизорных контроллеров для winforms

2

Извините, если это уже было задано раньше, но я не нашел никакой помощи.

Мне было интересно, есть ли у кого-нибудь хорошие примеры сложных winforms, созданных с использованием шаблона MVP контролирующего контроллера. Я прочитал много примеров, но они действительно простые и имеют дело только с одной формой и одной моделью.

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

Скажем, у меня есть UI: alt text http://img12.imageshack.us/img12/2683/layoutcroped.jpg

Извините за изворотливый макет интерфейса. в основном каждый пользовательский элемент управления имеет собственный объект презентатора и модальный слой.

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

Мой вопрос: передаю ли модель модели пользовательскому элементу управления 2 через интерфейс представления или в презентацию?

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

EDIT: Я думаю, что я мог бы сделать два разных варианта:

и

Я думаю, что Ex1 лучший, поскольку он все еще оставляет ответственных за выполнение. Делать то, что они хотят.

Как вы думаете?

Спасибо.

Теги:
mvp

4 ответа

1

Контроллер Supervising используется при использовании модели с полной версией, и нам нужно, чтобы представления немедленно синхронизировались с ним через наблюдательный/наблюдаемый механизм, в этом случае мы могли бы скрыть возможность проверки и позволить прямую связь между View и Модель.

Изображение 174551

Обратите внимание, что в представлении предлагается обновить его отображение как презентатором (напрямую), так и моделью (через событие). В большинстве случаев представление реагирует на простые изменения в состоянии модели и само обновление, когда задействована более сложная логика - Презентатор берет на себя ответственность за изменение представления в соответствии с правилами приложения.

Итак, для примера, ваш UserControl1 отправит данные в модель через презентатора, и тогда модель сообщит все зарегистрированные виды изменения (отправьте их в модель для обновления соответственно).

Надеюсь, что это поможет.

1

То, как я подхожу к этому, - это подход, ориентированный на события, публикация/подписка.

Образец выглядит примерно так:

  • Пользователь, нажавший кнопку "Изменить" в первом представлении, запускает событие (вы можете назвать его командой) с помощью одного параметра (идентификатор, значение текстового поля в этом случае). Вызывайте событие "EditRequested", скажем. Это "публикация" события, рассказывающая всем, кто хочет знать, что это произошло, и детали. Фактическое опубликование может быть сделано в контроллере/презентаторе.

  • Контроллер/презентатор для второго представления прослушивает вышеупомянутое событие и, когда срабатывает событие, действует соответственно, загружая данные и переключаясь в режим редактирования с использованием параметра (ID) события. Это "подписная" часть шаблона.

В идеале это будет сделано с помощью агрегатора событий (CAB обеспечивает такой же, как и Prism), но вы, вероятно, можете сделать что-то вручную для одного случая. Агрегатор событий устраняет необходимость того, чтобы издатель и подписчик должны были знать друг о друге, улучшая связь.

0

У нас были некоторые серьезные проблемы с этим вопросом. Сначала мы предположили, что первое представление отвечает за создание и настройку второго представления и первого презентатора для сортировки и настройки второго. Это решение было плохим по многим причинам. Сначала второе представление было настроено двумя другими объектами (первый вид и второй ведущий). Второй недостаток связывал взгляды вместе и имел логическую ответственность.

Мы искали решение в течение некоторого времени и решили, что нам нужно, чтобы эта привязка была свободной и исполнялась в презентаторе. Таким образом, мы создали пару w770 > для отображения пары представлений и презентаторов, которая соответствует заданному id (string или guid). Когда пользователь выполняет какое-либо действие на просмотр, этот вызов пересылается ведущему, и принимается решение о том, какая пара должна отображаться.

  • 0
    Такого рода вариация моего первого примера?
  • 0
    Да, это. Но расширен с уровнем абстракции, позволяющим заменить реализацию второй пары.
0

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

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

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

Я не знаю ни одного примера, который мог бы пригвоздить сценарий, который вы начнете излагать, но я бы сосредоточился на различных примерах mvp на сайте Fowler и посмотрел на серию Джереми Миллера Build Your Own Cab. Оба будут немного разочаровывающими, так как ни один из них не сможет быстро решить ваши проблемы, но оба предоставят понимание аспектов этой широкой темы.

Надеюсь, что это поможет! Berryl

Ещё вопросы

Сообщество Overcoder
Наверх
Меню