Шаблон разработки UI для Windows Forms (как MVVM для WPF)

Вам нужно будет генерировать sql динамически:

declare @tablename varchar(50) 

set @tablename = 'test' 

declare @sql varchar(500)

set @sql = 'select * from ' + @tablename 

exec (@sql)
152
задан Matt Hamilton 12 March 2009 в 23:20
поделиться

7 ответов

Я судил MVP, и это, кажется, работает отлично с формами окон также. Эта книга имеет пример форм окон с шаблоном MVP (демонстрационное приложение платежной ведомости). Приложение не то, что комплекс, но даст Вам общее представление о том, как пойти о создании его.

Гибкие Принципы, Шаблоны и Методы в C#...

можно получить исходный код в РЕДАКТИРОВАНИЕ Исходного кода

:

существует два изменения MVP шаблона (a) Passive представления и (b) наблюдения контроллера

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

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

не идет именем (это - платформа MVP).

Простое видео MVP winforms Winforms - MVP

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

Простой treeview обязательный пример (бедный обязательный человек). Можно добавить любую treeview определенную логику в 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);
   }
}
91
ответ дан Bharath theorare 4 November 2019 в 18:04
поделиться

Как это уже сказало, я всегда работал в шаблоне MVP при использовании Winforms. Но шаблон разработки, который Вы будете использовать не, означает использование права. Существуют загрузки антишаблона, присоединенного к MVP.

, Если Вы хотите к запускам все хорошим способом, необходимо использовать платформу для создания умного клиента. Таким образом, я рекомендую использовать тот дизайн и методы: Умная Фабрика клиентского программного обеспечения http://www.codeplex.com/smartclient

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

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

Hope это помогает

14
ответ дан alexl 4 November 2019 в 18:04
поделиться

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

Они Дизайн не о сокрытии модели скорее точно определение взаимодействий между различными слоями приложений. Можно изменить бэкенд полностью и, пока Вы передаете Модель через Bindtree, Ваш UI продолжит работать.

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

лучший сайт для просмотра для этого вида материала здесь . Martin Fowler собрал разнообразие полезного шаблона разработки UI и шаблонов разработки предприятия.

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

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

  • Формы, реализовывая интерфейсы формы
  • UIDLL с реализацией представлений просматривают интерфейсы, которые взаимодействуют с формами через интерфейс формы. Определенные представления регистрируют себя в Представлениях UIViewDLL, выполняет Объекты команды, найденные в библиотеках команды, которые взаимодействуют с Моделью.
  • библиотеки Command; списки команд, реализовывая ICommand. Команда, которые взаимодействуют с представлениями, делает так через интерфейсы, представленные в UIViewDLL.
  • UIViewDLL; представляет Интерфейсы Представления, используемые командами.
  • Модель; классы и набор, которые составляют базовые структуры данных моего приложения. Для меня это вещи как материал, cuttingpaths, форма, листы, факелы, и т.д.
  • Утилита; DLL, которому использовала наиболее часто используемые служебные классы моя компания, которые охватывают другое приложение. Например, сложные математические функции.
3
ответ дан RS Conley 4 November 2019 в 18:04
поделиться

Можно использовать Архитектура предприятия, Шаблоны и Методы как начальная точка, хотя они немного датированы.

Под Общим руководством существует Архитектура приложения для.NET: Разработка Приложений и Сервисов , который является хорошим введением в.NET пути и разделенное на уровни приложение N-tier.

сопроводительный текст http://i.msdn.microsoft.com/ms954595.f00aa01%28en-us%2CMSDN.10%29.gif

Для более формальных "шаблонов", существует Шаблоны Решения для предприятия Используя Microsoft.NET . alt text
(источник: microsoft.com )

Для именования некоторых,

Three-Layered Services
3
ответ дан Glorfindel 4 November 2019 в 18:04
поделиться

Первое хорошее объяснение шаблонов разработки UI, которые я прочитал, было в блоге Jeremy Miller - Здание Ваш Собственный CAB. Это описывает общие шаблоны - Пассивное Представление, MVP, и т.д. и обращается к некоторым способам, которыми Вы могли бы реализовать их в C#.

2
ответ дан Jeremy 4 November 2019 в 18:04
поделиться

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

я использую MVP в WinForms для извлечения кода из Представления - потому что я не могу протестировать код Представления. И также включить код, который должен быть снова использован (или дублирован) остаться вне Представления, где это не может быть совместно использовано.

я могу обратиться к своему собственному проекту, где я использую шаблон MVP ExceptionReporter.NET . Хотя я уверен, что не использую его отлично.

Вы упомянули 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

4
ответ дан PandaWood 4 November 2019 в 18:04
поделиться

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

MVVM для .NET Winforms

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

5
ответ дан 23 November 2019 в 22:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: