Реализация MVC с помощью Windows Forms
где я могу найти хороший пример того, как полностью реализовать шаблон MVC в Windows Forms?
Я нашел много учебников и примеров кода на различных сайтах (например, Проект Код и .NetHeaven), но многие из них более репрезентативны для шаблона наблюдателя, чем MVC. Поскольку приложение, которое я хочу разработать, предназначено для школьного проекта, я неохотно использую такие фреймворки, как PureMVC или MVC#.
6 ответов
Я считаю, что приложения настолько отличаются друг от друга, и наше понимание того, как приложения должны быть написаны, все еще очень ограничено. Прошлые приложения Windows Forms, над которыми я работал, сильно отличались друг от друга. Некоторые из различий в дизайне, которые я видел, (включая большинство комбинаций):
- непосредственно поговорить с базой данных (2 уровня)
- используйте бэкэнд, который был написан для данного приложения (3 tier)
- используйте набор веб-служб, которые были написаны для использования многими приложениями и не могут быть изменены для вашего приложения. (Сервис-ориентированная архитектура)
- обновления выполняются CRUD операции
- обновления выполняются с помощью команда (отправка команды на сервер)
- много порядков привязка данных / без использования привязки данных
- большинство данных "таблица как" (например, счета-фактуры), которые хорошо работают в стандартных элементах управления сеткой / нуждаются в пользовательских элементах управления для большинства данных пользовательского интерфейса.
- один разработчик / команды из 10 или 20 разработчиков (только на UI)
- много модульного теста с использованием насмешек и т. д. / Нет модульных тестов
поэтому я не думаю, что можно создать одну реализацию MVC (или MVP), которая всегда хорошо подходит.
лучшие посты, которые я видел действительно объяснением MVC и почему an Система MVC построена так, как она есть, это " Построй свою собственную кабину " серия Джереми D Miller. После работы хотя вы должны быть в состоянии понять ваши варианты намного лучше. руководство по интеллектуальному клиенту Microsoft (CAB / Microsoft Composite Application Block) также следует учитывать. Это немного сложно, но он может хорошо работать для приложений, которые хорошо подходят.
выбор реализация MVC/MVP для проекта Winforms дать обзор, который стоит прочитать. Многим нравится PureMVC. Я никогда не использовал его, но я бы посмотрел на него в следующий раз, когда мне понадобится MVC framework.
"Первый Ведущий " - это подход к разработке программного обеспечения, который сочетает в себе идеи Шаблона дизайна Model View Presenter (MVP) и еще один пример MVVM для Windows Forms, который также включает автоматическую привязку на основе свойства имена.
также спросите себя почему вы используете MVC.
- вы хотите, чтобы иметь возможность модульного тестирования как можно больше кода?
- вы пытаетесь разрешить повторное использование как можно большего количества кода?
- вы пытаетесь сделать вашу базу кода легко понять?
- 101 другие причины, которые могут быть допустимыми для данного проекта.
Как только вы очистите свой цели, оно становится проще выбрать ту или иную реализацию.
UPDATE: в дополнение к моему предыдущему ответу ниже, я предлагаю прочитать о "ведущий" подход (особенно статьи PDF)
Я бы рекомендовал MVP (фактически шаблон PassiveView) вместо MVC. Для этого вам не нужны специальные фреймворки, это просто то, как вы организуете свой код.
один подход (который я обычно принимаю) состоит в том, чтобы разделить каждую форму windows на три сущности:
- класс презентатора / регулятора - это то, с чего вы на самом деле начинаете при разработке формы. Именно здесь должна находиться большая часть/вся ваша "бизнес -" логика.
- интерфейс представления (IView), который содержит методы, свойства и события. Этот интерфейс все что ведущий знает о вашей форме.
- в конце, когда вы закончите реализацию presenter и view (включая модульные тесты), вы можете создать фактический класс формы и заставить его реализовать интерфейс IView. Тогда это просто вопрос добавления соответствующих элементов управления в форму и подключения их к интерфейсу.
пример кода (простой псевдокод, просто для иллюстрации):
interface IView
{
string Username { get; set; }
string Password { get; set; }
event EventHandler LogOnButtonClicked;
void InformUserLogOnFailed();
void MoveToMainScreen();
}
class Presenter
{
public Presenter(IView view)
{
this.view = view;
view.LogOnButtonClicked += new EventHandler(OnLogOnButton);
}
private void OnLogOnButton()
{
// we ask some service to verify the username/password
bool isLogOnOk = logOnService.IsUserAndPasswordOk(view.Username, view.Password);
if (isLogOnOk)
view.MoveToMainScreen();
else
{
view.Username = "";
view.Password = "";
view.InformUserLogOnFailed();
}
}
private IView view;
}
class Form : IView
{
public Form()
{
presenter = new Presenter(this);
}
public string Username
{
get { return TextBoxUsername.Text; }
set { TextBoxUsername.Text = value; }
}
public string Password
{
get { return TextBoxPassword.Text; }
set { TextBoxPassword.Text = value; }
}
public void InformUserLogOnFailed()
{
MessageBox.Show("Invalid username or password.");
}
public void MoveToMainScreen()
{
// code for opening another form...
}
private Presenter presenter;
}
вы смотрели PureMVC? Я обнаружил, что никто не может согласиться с тем, как MVC действительно выглядит, как только они начинают строить конкретную реализацию.
Update: вы можете создать свой собственный, начиная с чего-то более простого, такого как MobileMVC. Код Compact Framework должен компилироваться / запускаться OK в Windows. Поскольку это школьное задание, я бы предложил вам потратить некоторое время на изучение того, как MVC на самом деле работает.
возможно, вы захотите взглянуть на Дифференциальные Исполнение.
вот он в SourceForge
IMO, это значительное улучшение на MVC, хотя это все еще довольно необычно.
хороший пример при прокатке собственной реализации MVC с помощью Windows Forms можно найти здесь. Исходный код включен.
когда вы читаете, изучаете и пишете код для этого задания, вы обнаружите, что есть много разногласий о том, как MVC должен быть реализован. Это простой случай, который отражает разделение проблем, а также хороший пример "сантехники", необходимой для подключения этого.
когда вы из школы вы, вероятно, захотите вернуться к структуре, как рекомендовали другие плакаты.
Microsoft Composite Interface Application block начал свою жизнь как реализация MVC (среди других шаблонов, которые он реализовал). Версия выпуска, однако, превратилась в реализацию MVP, что можно утверждать, что это своего рода другая интерпретация концепции MVC.
Если вы готовы проверить код очень полной (и как-то сложной) реализации MVP, вы можете найти MS-CAB в качестве одного из компонентов Microsoft Smart Client Software Factory. Он поставляется с исходным кодом. Вы можете найти его здесь. Удачи!