Как бы вы реализовали MVC в приложении Windows Forms?


Я не разрабатываю слишком много приложений для рабочего стола / Windows Forms, но мне пришло в голову, что может быть какая-то польза от использования шаблона MVC (Model View Controller) для разработки Windows Forms .NET.

кто-нибудь реализовал MVC в Windows Forms? Если у вас есть какие-либо советы по дизайну?

6 58

6 ответов:

Что я сделал в прошлом, это использовать что-то подобное, Model-View-Presenter.

[Примечание: эта статья была доступна в интернете. Чтобы увидеть его сейчас, вам нужно загрузить CHM, а затем просмотреть свойства файла и нажать разблокировать. Затем вы можете открыть CHM и найти статью. Огромное спасибо, Microsoft! вздох]

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

Если бы я использовал полноценный Model-View-Controller, я думаю, я бы сделал это так:

  • форма view. Он отправляет команды в модель, вызывает события, на которые контроллер может подписаться, и подписывается на события модели.
  • The контроллер - это класс, который подписывается на события и отправляет команды на вид и модели.
  • The модель вызывает события, на которые подписано представление.

Это будет соответствовать классическая диаграмма MVC. Самым большим недостатком является то, что с событиями может быть трудно сказать, кто подписывается на что. Вместо этого шаблон MVP использует методы событий (по крайней мере, так, как я это реализовал). Когда форма / представление вызывает событие (например, someButton.Нажмите), форма просто вызывает метод на презентаторе, чтобы запустить логику для него. Вид и модель не имеют никакой прямой связи, они оба должны пройти через ведущего.

ну, на самом деле Windows Forms реализует "свободную" версию MVC, так же как некоторые фильмы реализуют какую-то дерьмовую "свободную" интерпретацию некоторых классических книг (Ромео и Джульетта приходят на ум).

Я не говорю, что реализация Windows Forms плоха, это просто... отличающийся.

Если вы используете Windows Forms и правильные методы ООП, и, возможно, ORM, как EntitySpaces для доступа к базе данных, то вы могли бы сказать, что:

  1. ОРМ/ООП инфраструктура-это модель
  2. формы представления
  3. обработчики событий-это контроллер

хотя наличие как представления, так и контроллера, представленного одним и тем же объектом, затрудняет отделение кода от представления (нет простого способа подключить "GTK+ view" в классе, производном от Microsoft.Окна.Формы.Форма.)

Что вы можете сделать, если вы не достаточно внимательны. Это сохранить код формы полностью отдельный от вашего контроллера/кода модели, только написав GUI связанные вещи в обработчиках событий, и все другие бизнес-логики в отдельном классе. В этом случае, если вы когда-либо хотели использовать GTK+ для написания другого слоя представления, вам нужно будет только переписать код GUI.

Windows Forms не разработан с нуля, чтобы использовать MVC. У вас есть два варианта.

во-первых, вы можете свернуть свою собственную реализацию MVC.

Во-вторых, вы можете использовать платформу MVC, предназначенную для Windows Forms.

первый просто начать делать, но чем дальше вы получаете, тем сложнее это. Я бы предложил искать хорошую, уже существующую и хорошо протестированную структуру MVC, предназначенную для работы с Windows Forms. Я верю этот блог пост - это достойная отправная точка.

для тех, кто начинает, Я бы предложил пропустить Windows Forms и разработать против WPF, если у вас есть возможность. Это гораздо лучшая структура для создания пользовательского интерфейса. Существует много фреймворков MVC, разрабатываемых для WPF, в том числе этот и этого.

согласно Microsoft, блок приложений UIP, упомянутый @jasonbunting, " архивирован.- Вместо этого посмотри на Блок Интеллектуальных Клиентских Приложений или еще новее Smart Client Software Factory, который поддерживает как WinForms, так и WPF SmartParts.

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

"блок приложений UIP основан на шаблоне model-view-controller (MVC)."

взгляните на MS Patterns and Practices Smart Client application block, который имеет некоторые рекомендации и классы, которые помогут вам реализовать модель представления presenter patter в windows forms - взгляните на включенное справочное приложение.

для WPF это заменяется на присм проект

подход к фабрикам программного обеспечения-отличный способ узнать лучшие практики