Реализация MVC с Windows Forms
где я могу найти хороший пример о том, как полностью реализовать шаблон MVC в Windows Forms?
Я нашел много учебников и примеров кода на различных сайтах (например, Код Проекта и .NetHeaven), но многие из них более представительны для шаблона наблюдателя, чем MVC. Поскольку приложение, которое я хочу разработать, предназначено для школьного проекта, я неохотно использую фреймворки, такие как PureMVC или MVC#.
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 на три сущности:
- класс презентатора / контроллера - это то, с чего вы на самом деле начинаете при разработке формы. Именно здесь должна находиться большая часть/вся ваша "бизнес" логика.
- интерфейс представления (IView), который содержит методы, свойства и события. Этот интерфейс все что ведущий знает о вашей форме.
- в конце, когда вы закончите реализацию презентатора и представления (включая модульные тесты), вы можете создать фактический класс формы и заставить его реализовать интерфейс 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. Он поставляется с исходным кодом. Вы можете найти его здесь. Удачи вам!
Comments