Реализация MVC с Windows Forms



где я могу найти хороший пример о том, как полностью реализовать шаблон MVC в Windows Forms?

Я нашел много учебников и примеров кода на различных сайтах (например, Код Проекта и .NetHeaven), но многие из них более представительны для шаблона наблюдателя, чем MVC. Поскольку приложение, которое я хочу разработать, предназначено для школьного проекта, я неохотно использую фреймворки, такие как PureMVC или MVC#.

28   6  

6 ответов:

Я считаю, что приложения настолько отличаются друг от друга, и наше понимание того, как приложения должны быть написаны, все еще очень ограничено. Прошлые приложения Windows Forms, над которыми я работал, настолько отличались друг от друга. Некоторые из различий в дизайне, которые я видел (включая большинство комбинаций):

  • непосредственно поговорить с базой данных (2 уровня)
  • используйте серверную часть, которая была написана для данного приложения (3 уровень)
  • используйте набор веб-служб, которые были написаны для использования многими приложениями и не могут быть изменены для вашего приложения. (Сервис-ориентированная архитектура)
  • обновление делается с помощью CRUD операции
  • обновления выполняются с помощью команда (отправка команд на серверную часть)
  • много порядков привязка данных / без использования привязки данных
  • большинство данных "таблица как" (например, счета-фактуры), которые хорошо работают в стандартных элементах управления сеткой / нуждаются в пользовательских элементах управления для большинства данных пользовательского интерфейса.
  • один разработчик / команды из 10 или 20 разработчиков (только на UI)
  • много модульного теста с использованием насмешек и т. д. / Нет модульных тестов

поэтому я не думаю, что можно создать одну реализацию MVC (или MVP), которая всегда хорошо подходит.

лучшие посты, которые я видел на самом деле объяснением MVC и почему an Система MVC построена так, как она есть, это "Построй свою собственную кабину" серия Джереми Д Миллер. После работы хотя вы должны быть в состоянии понять ваши варианты намного лучше. руководство по интеллектуальному клиенту Microsoft (CAB / Microsoft Composite Application Block) также следует учитывать. Это немного сложно, но он может хорошо работать для приложений, которые имеют хорошую подгонку.

выбор реализация MVC/MVP для проекта Winforms дать обзор, который стоит прочитать. Многие люди любят PureMVC. Я никогда не использовал его, но я бы посмотрел на него в следующий раз, когда мне нужна структура MVC.

"Первый Ведущий " - это подход к разработке программного обеспечения, который сочетает в себе идеи Шаблона дизайна Model View Presenter (MVP) и разработка на основе тестов. Это позволяет начать с написания тестов на языке заказчика. Например:

"когда я нажимаю затем нажмите кнопку " Сохранить файл должен быть сохранен и несохраненный файл предупреждение должно исчезнуть."

У меня нет опыта использования "Presenter First", но я дам ему попробовать, когда у меня будет шанс, так как это выглядит очень многообещающе.

другие вопросы переполнения стека, которые вы можете посмотреть, являются здесь и здесь.

Если вы думаете об использовании WPF в любой момент взглянуть на Model-View ViewModel (MVVM) узор. Вот очень хорошее видео, которое вы должны посмотреть:Джейсон Dolinger на модель-представление-модель представления.

MVVM (Model View View Model) шаблон дизайна для Winforms дайте еще один вариант, который может облегчить преобразование в WPF, если это когда-либо понадобится. волшебно.Тревор является еще одним примером MVVM для Windows Forms, который также включает автоматическую привязку на основе свойства имена.


также спросите себя почему вы используете MVC.

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

Как только вы ясны на вашем цели, оно становится проще выбрать ту или иную реализацию.

обновление: в дополнение к моему предыдущему ответу ниже, я предлагаю прочитать о "ведущий" подход (особенно статьи в формате PDF)

Я бы рекомендовал MVP (PassiveView pattern на самом деле) вместо MVC. Вам не нужны какие-либо специальные механизмы для этого, это просто, как вы организуете свой код.

один подход (который я обычно беру) состоит в том, чтобы разделить каждую форму windows на три сущности:

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

обновление: вы можете построить свой собственный, начиная с чего-то более простого, такого как MobileMVC. Компактный рамках код должен компилироваться/работать нормально в Windows. Поскольку это школьное задание, я бы предложил вам потратить некоторое время на изучение того, как MVC на самом деле работает.

возможно, вы захотите взглянуть на Дифференциальные Исполнение.

вот он в SourceForge

ИМО, это огромное улучшение на MVC, хотя это все еще довольно необычно.

хороший пример при прокатке собственной реализации MVC с помощью Windows Forms можно найти здесь. Исходный код включен.

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

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

Microsoft Composite Interface Application block начал свою жизнь как реализация MVC (среди других реализованных шаблонов). Версия релиза, однако, превратилась в реализацию MVP, которая может быть утверждена как своего рода другая интерпретация концепции MVC.

Если вы готовы проверить код очень полной (и как-то сложной) реализации MVP, вы можете найти MS-CAB в качестве одного из компонентов Microsoft Smart Client Software Factory. Он поставляется с исходным кодом. Вы можете найти его здесь. Удачи вам!

    Ничего не найдено.

Добавить ответ:
Отменить.