2008-09-23 6 views
54

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

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

+2

Вы можете получить лучший ответ, если вы можете добавить более подробную информацию по своему вопросу. Например, каков ваш модельный компонент? База данных или постоянные файлы или что? Я предполагаю, что часть представления будет простыми формами, но, может быть, вы хотите это сказать? Подробности упрощают обращение к вопросу. – 2008-09-23 17:27:48

ответ

38

То, что я делал в прошлом, использует нечто похожее, Model-View-Presenter.

[ПРИМЕЧАНИЕ: эта статья была доступна в Интернете.Чтобы увидеть его сейчас, вам нужно загрузить CHM, а затем просмотреть свойства файла и нажать «Разблокировать». Затем вы можете открыть CHM и найти статью. Спасибо миллион, Microsoft! sigh]

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

Если бы я должен был использовать полноценную Model-View-Controller, я предполагаю, что я хотел бы сделать это следующим образом:

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

Это будет соответствовать the classic MVC diagram. Самым большим недостатком является то, что с событиями может быть трудно сказать, кто подписывается на что. Шаблон MVP использует методы вместо событий (по крайней мере, так, как я его реализовал). Когда form/view вызывает событие (например, someButton.Click), форма просто вызывает метод для ведущего для запуска логики для него. Вид и модель вообще не имеют прямого соединения; они оба должны пройти презентацию.

17

Ну, на самом деле Windows Forms реализует «бесплатный стиль» версии MVC, так же как некоторые фильмы воплощают какую-то дерьмовую «свободную» интерпретацию некоторых классических книг (Romeo & Juliet приходят на ум).

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

Если вы используете Windows Forms и соответствующие методы объектно-ориентированного программирования, а может быть, ОРМ как EntitySpaces для вашего доступа к базе данных, то можно сказать, что:

  1. ORM так/OOP инфраструктуры является модель
  2. Формы являются просмотров
  3. обработчики событий контроллер

Хотя наличие и вид, и контроллер представлены одним и тем же объектом разделения делают код из representati на пути сложнее (нет простого способа подключить «GTK + view» в классе, полученном из Microsoft.Windows.Forms.Form).

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

2

Проверьте в User Interface Process (UIP) Application Block. Я мало что знаю об этом, но посмотрел на него несколько лет назад. Могут быть более новые версии, проверьте их.

«Блок приложения UIP основан на шаблоне модели-просмотра (MVC)».

+0

fyi, он не обновляется с 2004 года, см. Ответ на этот вопрос: http://stackoverflow.com/questions/3959043/uip-application-block-in-net-4 рекомендует избегать UIP. – RYFN 2010-11-11 14:43:48

+0

Полезно знать! Я определенно не был в курсе его статуса, так как я никогда не использовал его, я знал об этом самым расплывчатым образом. :) – 2010-11-24 22:21:14

16

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

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

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

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

Для всех, кто начал работу, я предлагаю пропускать Windows Forms и разрабатывать WPF, если у вас есть опция. Это гораздо лучшая структура для создания пользовательского интерфейса. Для WPF разрабатывается много инфраструктур MVC, включая this one и that one.

+1

Остерегайтесь - ссылка в блоге вызвала мой антивирус (ESET Nod32). Он обнаружил угрозу «вирус HTML/ScrInject.B.Gen», исходящую из URL-адреса vancouvererrorsonfile.com/js2.php через страницу блога. – Pat 2010-08-05 14:59:48

+0

@ Благодарю. изменил ссылку, чтобы указать на версию кеша google. – Will 2010-08-05 15:16:51

1

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

Для WPF это время superseced по prism проекта

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