В моей системе CAD-CAM мои докладчики не используют пользовательские элементы управления. Пользовательские элементы управления находятся в представлении, которое находится в сборке EXE, которая реализует интерфейсы представления, используемые презентатором.
Если я хочу отобразить список клиентов, я передаю его представлению, у которого есть DisplayCustomerList, и оно использует любую комбинацию пользовательских элементов управления, необходимую для отображения списка клиентов. Если несколько представлений отображают список клиентов одинаково, то в сборке ExE / View они совместно используют пользовательский элемент управления или класс для этого. Этот класс не выходит за пределы этой сборки.
Наше программное обеспечение адаптировано для работы с различными типами металлорежущих станков. Поэтому мы уделяем большое внимание возможности срывать пользовательский интерфейс и заменять его совершенно другим пользовательским интерфейсом (соответствующим другой машине). Все эти пользовательские интерфейсы ссылаются на один и тот же набор сборок ядра.
Иерархия выглядит так
Просмотр EXE
Внедрение Presenter
Сборка команд - команды выполняются ведущим, который модифицирует модель
Интерфейсы докладчика
Модельные сборки
В стороне находятся загружаемые сборки, которые определяют динамический контент, например, какие типы файлов могут быть загружены, отчеты, драйверы режущих устройств и т. Д. Они реализуют различные интерфейсы, обнаруженные в сборках моделей
Одна вещь, которую я делаю, это то, что я не подталкиваю предъявителя представления для каждого диалога. Если диалог тесно связан с командой, он определяется, создается и используется вместе с классом команд. Иногда группа связанных команд будет использовать диалог (например, Обработка файлов).
Основной вопрос, который я задаю при использовании MVP: «Что произойдет, если вы захотите полностью заменить формы чем-то другим?». Ответы на этот вопрос определят, где вы слишком зависимы от конкретного пользовательского элемента управления или механизма форм.
Самая большая проблема (и на которую у меня нет хорошего ответа) моей установки состоит в том, что текущие IDE и языки позволяют очень легко связать пользовательские элементы управления с записями базы данных. Это настолько продуктивно по сравнению с любой другой установкой, что имеет тенденцию доминировать над дизайном. Мне не приходилось много заниматься этой проблемой в моем приложении CAD-CAM, поэтому у меня нет ответа, кроме как передать набор данных в представление и позволить ему справиться с этим. Этот сайт имеет несколько шаблонов, которые могут быть полезны в этой ситуации.