Вопрос

Мы довольно успешно используем шаблон MVP и Winforms.Однако всегда всплывает вопрос о MVP:

Что такое хорошо детализация для докладчиков?

Что я имею в виду под этим, так это:В Winforms мелкая детализация обычно довольно хорошо работает для пользовательских элементов управления.Таким образом, легко повторно использовать пользовательские элементы управления и использовать их в качестве строительных блоков при разработке более сложных графических интерфейсов.Однако наличие одинаковой (тонкой) детализации у докладчиков, по-видимому, является проблемой.

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

С другой стороны, мелкозернистые докладчики по-видимому, это ограничивает возможность повторного использования элементов управления в различных ситуациях.Например, иногда при редактировании представления может потребоваться сразу сохранить клиента;иногда ему нужно связать это с чем-то другим;иногда is просто нужно это подтвердить;и так далее.Это часто зависит от более сложного элемента управления.Но существует также изрядная доля общего поведения.

Обратите внимание, что в обоих случаях 1-presenter-1-view достижим.То, что считается "1-view", меняется.

Что обычно считается лучшими практиками для обеспечения детализации презентаций с использованием MVP и Winforms?

  • Детализированные докладчики и настраиваемый поведение с помощью опций или что-то в этом роде?
  • Грубозернистые презентаторы и низкая возможность повторного использования презентатора?
  • Что-то еще?

Отказ от ответственности:В основном мы используем Контролирующий контроллер, но я думаю, что это также применимо к пассивному просмотру.Извините также за длинный вопрос.

Это было полезно?

Решение

Мы используем MVP для всех наших клиентов, и этот разговор, безусловно, всплывает не раз.Насколько чистым должен быть наш код, лежащий в основе классов и докладчиков?Сказав это, мы решили использовать крупнозернистый подход к презентации.По сути, каждая форма будет иметь свой собственный презентатор и будет получать и устанавливать свойства любого из элементов управления в определенной форме только с использованием его представления.Элементы управления заполнением - например, вызов базы данных для заполнения выпадающего списка - находятся в классе общедоступной службы.Любая проверка введенных пользователем данных находится в классе BO, который может быть повторно использован любым и / или всеми ведущими.Я надеюсь, что это поможет.

Другие советы

В моей CAD-CAM системе мои докладчики не используют пользовательские элементы управления.Пользовательские элементы управления находятся в представлении, которое находится в исполняемой сборке, реализующей интерфейсы представления, используемые докладчиком.

Если я хочу отобразить список клиентов, я передаю его в представление, в котором есть DisplayCustomerList, и оно использует любую комбинацию пользовательских элементов управления, необходимую для отображения списка клиентов.Если несколько представлений отображают список клиентов одинаково, то в сборке ExE / View они совместно используют пользовательский элемент управления или класс для этого.Этот класс не выходит за пределы этой сборки.

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

Иерархия выглядит следующим образом

Просмотр EXE Реализация презентатора Сборка команд - презентатор выполняет команды, которые изменяют модель Интерфейсы презентатора Сборки моделей

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

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

Основной вопрос, который я задаю при использовании MVP, - "Что произойдет, если захочется полностью заменить формы чем-то другим?".Ответы на этот вопрос позволят определить, где вы слишком зависимы от конкретного пользовательского элемента управления или механизма формирования.

Самая большая проблема (и на которую у меня нет хорошего ответа) моей настройки заключается в том, что текущие IDE и языки позволяют очень легко привязывать пользовательские элементы управления к записям базы данных.Это настолько производительно по сравнению с любой другой установкой, что имеет тенденцию доминировать в дизайне.Мне не часто приходилось сталкиваться с этой проблемой в моем CAD-CAM приложении, поэтому у меня нет другого ответа, кроме как передать набор данных в представление и позволить ему обработать его. Этот сайт имеет некоторые шаблоны, которые могут быть полезны в этой ситуации.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top