Дизайн winforms


Я пробовал MVP и, похоже, отлично работает с формами окон. В этой книге приведен пример форм Windows с шаблоном MVP (пример расчета заработной платы). Приложение не так сложно, но даст вам представление о том, как его создавать.

Гибкие принципы, шаблоны и практики в C #...

Вы можете получить исходный код в исходном коде

РЕДАКТИРОВАТЬ:

Существуют две вариации шаблона MVP (a) Пассивное представление и (b) контролирующий контроллер

Для сложных сценариев привязки данных я предпочитаю использовать шаблон контроллера Supervising. При контроле над шаблоном контроллера ответственность за привязку данных зависит от вида. Итак, для treeview / datagrid это должно быть в соответствующих представлениях, только просмотр агностической логики должен перейти к ведущему.

Я рекомендую взглянуть на следующую MVP-структуру MVC # - MVP framework

Не идите по имени (это MVP-структура).

Простые winforms MVP видео Winforms дизайн - MVP

Пример работы с выпадающим списком MVP - DropDownList

Простой пример привязки к дереву (привязка бедных людей). В BindTree () можно добавить любую конкретную логику древовидной структуры.

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

public interface IYourView { void BindTree(Model model); } public class YourView : System.Windows.Forms, IYourView { private Presenter presenter; public YourView() { presenter = new YourPresenter(this); } public override OnLoad() { presenter.OnLoad(); } public void BindTree(Model model) { // Binding logic goes here.... } } public class YourPresenter { private IYourView view; public YourPresenter(IYourView view) { this.view = view; } public void OnLoad() { // Get data from service.... or whatever soruce Model model = service.GetData(...); view.BindTree(model); } }

Как уже было дизайн winforms сказано, я всегда работал в шаблоне MVP при использовании Winforms. Но шаблон дизайна, который вы будете использовать, не означает, что вы будете использовать его правильно. На MVP имеется множество анти-шаблонов.

Если вы хотите начать все правильно, вы должны использовать фреймворк для создания интеллектуального клиента. Поэтому я рекомендую использовать этот дизайн и методы: Smart Client Software Factory http://www.codeplex.com/smartclient

Здесь вы расскажите о существующих инфраструктурах смарт-клиента: http://codebetter.com/blogs/glenn.block/archive/2008/05/10/prism-cab-and-winforms-futures.aspx

PS: Мне нравится этот пост на анти-шаблонах MVP: http://blog.mattwynne.net/2007/06/13/mvp-smells/

Надеюсь это поможет

Шаблон Model-View-ViewModel (MVVM) является шаблоном проектирования. По определению шаблон проектирования показывает общее решение в объектно-ориентированном мире, и это решение может применяться на разных платформах (WPF, WinForms, Java Swing и т. Д.). Я согласен с тем, что MVVM лучше всего использовать с WPF, поскольку он использует сильные возможности привязки. Однако Windows Forms также поддерживает привязку данных.

Адаптер Windows Forms WAF показывает, как применить шаблон MVVM в приложении Windows Forms.

Следующий пост представляет вариацию шаблонов проектирования MVP / MVVM под названием MVP-VM, которая представляет собой специально разработанное решение для приложений winforms, которые требуют полного охвата тестирования и используют привязку данных в качестве основного механизма для сохранения презентации с данными модели.

MVVM для.NET Winforms

MVVM (Model View View Model) вводит аналогичный подход для разделения презентации на данные в среде, которая расширяет привязку данных (WPF). Так как.NET framework 2.0 уже предлагает расширенную инфраструктуру связывания данных, которая также позволяет привязывать время проектирования объектов приложения - объект «View Model» может хорошо вписываться в среду на основе MVP.

Я считаю, что MVP - это образец, хорошо подходящий для разработки WinForms (о чем частично свидетельствует его заметное использование в CAB - структура Microsoft вокруг приложений WinForms).

Я использую MVP в приложениях WinForms, прежде всего для извлечения кода из представления, поскольку я не могу / не буду тестировать код View. А также для включения кода, который необходимо повторно использовать (или дублировать), чтобы оставаться вне представления, где его невозможно легко разделить.

В качестве некоторых доказательств эффективности MVP в WinForms я буду ссылаться на свой собственный проект. Я работаю над проектом ExceptionReporter ( http://www.codeplex.com/ExceptionReporter ), где мне действительно нужно повторно использовать код между WPF и WinForms «версия» программного обеспечения. Следовательно, я использую MVP для обеих технологий, что позволяет мне использовать один и тот же Presenter между обеими сборками. И избегайте дублирования этого кода.

Вы упомянули MVVM, работающую для WPF, - я думаю, причина в том, что это связано с надежной поддержкой привязки данных. Если вы не использовали привязку данных в WPF (и это, безусловно, не обязательно), вы можете выбрать MVP. Дело в том, что MVP является сильным выбором для любого клиентского приложения. И, возможно, «лучший» выбор, даже в WPF, если вы планируете использовать код между проектами, которые не являются WPF.

Для получения дополнительной информации о ценности использования MVP в WinForms см. Видео-презентацию Boodhoo об использовании MVP: http://www.bestechvideos.com/2008/06/29/dnrtv-show-14-jean-paul-boodhoo-on-model -view-presenter И статья MSDN того же автора по адресу http://msdn.microsoft.com/en-us/magazine/cc188690.aspx

Метод BindTree кажется мне немного ошибочным. Внезапно «Вид» знает «Модель». Это хорошая вещь? Должно быть много проблем с этими проблемами. Я удивлен, что нет никаких книг об этом. Поскольку в мире.NET есть книги обо всем.

Эти Design не скрывают модель, а точнее определяют взаимодействие между различными слоями приложений. Вы можете полностью изменить бэкэнд и до тех пор, пока вы передаете модель через Bindtree, ваш пользовательский интерфейс будет продолжать работать.

Теперь класс Модель может быть плохой выбор имени в примере, который дает Раджеш. Это может быть TreeData или RecordsData. Однако вы определяете его, он имеет то, что вам нужно, чтобы использовать механизм привязки Winforms для привязки определенного элемента управления к базовым данным.

Здесь вы найдете лучший сайт для просмотра этого материала. Мартин Фаулер собрал множество полезных шаблонов пользовательского интерфейса и шаблонов корпоративного дизайна.

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

В моем собственном приложении (приложения CAD / CAM, используемые для запуска металлорежущих станков) моя структура выглядит так.

  • Формы, реализующие интерфейсы формы
  • UIDLL с представлениями, реализующими интерфейсы представления, которые взаимодействуют с формами через интерфейс формы. Специфические представления регистрируются в UIViewDLL Views, выполняет Command Objects, найденные в командных библиотеках, которые взаимодействуют с Model.
  • Библиотеки команд; списки команд, реализующих ICommand. Команда, взаимодействующая с представлениями, делает это через интерфейсы, открытые в UIViewDLL.
  • UIViewDLL; предоставляет интерфейсы просмотра, используемые командами.
  • Модель; классы и коллекции, которые составляют основные структуры данных моего приложения. Для меня это такие вещи, как материал, режущие пути, форма, листы, факелы и т. Д.
  • Утилита; DLL, которая обычно использует классы полезности, используемые моей компанией, которые охватывают разные приложения. Например, сложные математические функции.

Я задал этот же вопрос двум моим специалистам по технологиям: возможно ли MVVM для WindowsForms? Оба дали мне тот же ответ: « Ни в коем случае! WindowsForms не хватает богатых привязок WPF и Silverlight (OneTime, OneWay, TwoWay, OnewayToSource), а также отсутствует TypeConverters ».

  • Шаблон активатора экрана для WindowsForms - вы можете найти его здесь, портированный с Caliburn.Micro by jagui
  • Rich Bindings и TypeConverters - Truss by Kent Boogaart, делает это независимо от пользовательского интерфейса
  • Команды - WPF Application Framework (WAF) имеет проект WafWinFormsAdapter, который заботится о некоторых материалах MVVM, а именно о командах

Опять же, можем ли мы иметь MVVM для WinForms? Да мы можем. У нас есть все штуки. Мы просто должны склеить их вместе.

Первое хорошее объяснение шаблонов пользовательского интерфейса, которые я читал, было в блоге Джереми Миллера - « Создание собственной CAB». Он описывает общие шаблоны - Пассивный просмотр, MVP и т. Д. И описывает некоторые из способов их реализации на C #.

Вы можете попробовать MugenMvvmToolkit, который позволяет использовать «чистый MVVM» для WinForms. Из-за того, что он поддерживает привязки на всех платформах, все встроенные функции привязки, доступные для платформы WPF, доступны на всех платформах (включая WinForms).


Источник: http://code.i-harness.com/ru/q/9160d



Рекомендуем посмотреть ещё:


Закрыть ... [X]

Дизайнерский подход к WinForms / Песочница / Хабрахабр Интерьер дизайн для дачного участка


Дизайн winforms Дизайн winforms Дизайн winforms Дизайн winforms Дизайн winforms Дизайн winforms Дизайн winforms Дизайн winforms