Впровадження MVC за допомогою форм Windows


102

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

Я знайшов багато навчальних посібників та прикладів коду на різних сайтах (наприклад, The Code Project та .NetHeaven), але багато хто є більш репрезентативним для моделі спостерігачів, ніж MVC. Оскільки програма, яку я хочу розробити, стосується шкільного проекту, я не бажаю використовувати рамки, такі як PureMVC або MVC # .



Відповіді:


115

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

  • Безпосередньо поговоріть із базою даних (2-х рівневий)
  • Використовуйте резервний текст, написаний для даної програми (3-х рівневий)
  • Використовуйте набір веб-служб, які були написані для використання багатьма програмами і не можуть бути змінені для вашої програми. (Сервісно-орієнтована архітектура)
  • Оновлення, здійснювані операціями CRUD
  • Оновлення виконуються за допомогою шаблону команд (відправка команд на сервер бекенда)
  • Багато звичок використання прив'язки даних / відсутність використання прив'язки даних
  • Більшість даних є "подібними до таблиці" (наприклад, рахунки-фактури), які добре працюють у стандартних елементах управління сіткою / потребують спеціальних елементів управління більшості даних інтерфейсу користувача
  • Один розробник / команди з 10 або 20 розробників (лише в інтерфейсі)
  • Багато тестування одиниць з використанням макетів тощо / без тестування одиниць

Тому я не думаю, що можливо створити одну реалізацію MVC (або MVP), яка завжди добре підходить.

Найкращі пости, які я бачив, як справді пояснюють MVC і чому система MVC побудована таким, яким він є, - це серія "Побудуй свій власний CAB" від Джеремі Д Міллера . Після роботи, хоча це, ви повинні мати можливість зрозуміти свої варіанти набагато краще. Слід також враховувати інтелектуальне керівництво Майкрософт (CAB / Microsoft Composite Application Block) . Він трохи складний, але може добре працювати для додатків, які добре підходять.

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

" Presenter First " - це підхід до розробки програмного забезпечення, який поєднує ідеї моделі дизайну Presenter Presenter (MVP) та тестової розробки . Це дозволяє почати з написання тестів мовою клієнта. Наприклад:

"Коли я натискаю кнопку" зберегти ", файл слід зберегти, а попередження про збережений файл має зникнути."

У мене немає досвіду використання "Presenter First", але я спробую, коли отримаю шанс, оскільки це виглядає дуже перспективно.

Інші запитання щодо переповнення стека, які ви, можливо, захочете подивитися тут і тут .

Якщо ви думаєте використовувати WPF в будь-якій точці, подивіться на модель Model-View ViewModel (MVVM) . Ось дуже гарне відео, яке ви повинні подивитися: Джейсон Долінгер на Model-View-ViewModel .

Шаблон дизайну MVVM (Model View View Model) для Winforms дає ще один варіант, який може полегшити перетворення на WPF за потреби. Magical.Trevor - це ще один зразок MVVM для Windows Forms, який також включає автоматичне прив'язування на основі імен властивостей.


Також запитайте себе, чому ви використовуєте MVC.

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

Як тільки ви зрозумієте свої цілі , вам стає легше вибрати ту чи іншу реалізацію.


@AgnelKurian, CAB був набором зразкового коду від Microsoft про те, як створювати додатки - це в основному історія.
Ян Рінроуз

Ха-ха! Так, зараз я пам’ятаю ті «Блоки програм».
Агнел Куріан

45

ОНОВЛЕННЯ: Окрім попередньої моєї відповіді нижче, пропоную прочитати про підхід "Перший презентатор" (особливо статті PDF)

Я б рекомендував MVP (власне шаблон PassiveView) замість MVC. Для цього вам не потрібні спеціальні рамки, це просто спосіб організації вашого коду.

Один із підходів (який я зазвичай використовую) - це розділити кожну форму вікон на три об'єкти:

  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;
}

7
Це реалізація варіанту MVP під назвою PassiveView. У пасивному вигляді погляд не повинен обирати свого ведучого. Для подібного прикладу (але з точки зору НАДАЛЬНО пасивного) перевірте цей зразок danieleteti.it/?p=221 (приклад мовою Delphi)
Daniele Teti

6

Ви подивилися на PureMVC ? Я виявив, що ніхто не може погодитися з тим, як MVC насправді виглядає, як тільки вони починають будувати конкретну реалізацію.

Оновлення: Ви можете створити свій власний, починаючи з чогось простішого, наприклад, MobileMVC . Compact Framework код повинен компілювати / запускати OK у Windows. Оскільки це шкільне завдання, я б запропонував вам витратити певний час, вивчаючи, як MVC насправді працює.


У мене є шкільне завдання для дуже простого додатка для управління книжковим магазином, і я дуже неохоче використовую таку структуру, як PureMVC. Шукаю щось простіше.
kjv


2

Хороший приклад прокрутки власної реалізації MVC за допомогою Windows Forms можна знайти тут . Вихідний код включений.

Коли ви читаєте, вивчаєте та пишете код для цього завдання, ви виявите, що існує багато розбіжностей щодо того, як MVC має бути реалізований. Цей простий випадок, який відображає розділення проблем, а також хороший приклад "сантехніки", необхідної для підключення цього питання.

Коли ви закінчите школу, ви, ймовірно, захочете потрапити на рамки, як рекомендували інші плакати.


2

Блок Microsoft Composite Interface Application розпочав своє життя як впровадження MVC (серед інших моделей, які він реалізував). Версія випуску, однак, перетворилася на реалізацію MVP, що можна стверджувати, що є різновидом іншої інтерпретації концепції MVC.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.