Winforms MVP с несколькими представлениями и одним докладчиком - PullRequest
7 голосов
/ 19 марта 2012

Я пытаюсь разработать систему управления проектами в своем приложении по шаблону Model View Presenter (MVP) .У меня такой вопрос, я видел множество примеров MVP , но я не видел ни одного с одним Presenter и несколькими представлениями.Например, когда пользователь открывает проект, одни и те же данные проекта могут быть просмотрены с помощью древовидной структуры, таблицы данных и диаграммы.Как мне справиться с этим?

Ответы [ 3 ]

3 голосов
/ 19 марта 2012

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

2 голосов
/ 19 марта 2012

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

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

Я бы предложил сохранитьСоотношение вашего докладчика и просмотра составляет 1: 1.Если вы хотите иметь несколько представлений для одних и тех же данных, то именно ваша модель должна совместно использоваться докладчиками, поэтому вы отображаете одни и те же данные по-разному.

1 голос
/ 22 мая 2012

Вы почти всегда должны иметь один экземпляр презентатора для каждого экземпляра представления.

Допустим, вы открываете CustomerView и его CustomerViewPresenter. Это один экземпляр каждого.

Вы открываете другой CustomerView и другой экземпляр CustomerViewPresenter. Это два экземпляра каждого.

Это не значит, что данный докладчик всегда должен использовать один и тот же вид, на самом деле это не так. Докладчик должен общаться с одним интерфейсом просмотра. Вы должны иметь возможность поменять реальное представление на фиктивное представление для тестирования.

...