Реализация 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 на три сущности:

  1. класс презентатора / регулятора - это то, с чего вы на самом деле начинаете при разработке формы. Именно здесь должна находиться большая часть/вся ваша "бизнес -" логика.
  2. интерфейс представления (IView), который содержит методы, свойства и события. Этот интерфейс все что ведущий знает о вашей форме.
  3. в конце, когда вы закончите реализацию 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. Он поставляется с исходным кодом. Вы можете найти его здесь. Удачи!