Модели доступа к данным WPF / .NET - рекомендации по ресурсам - PullRequest
1 голос
/ 31 марта 2010

Мы находимся на ранних стадиях разработки / подготовки к переносу / обновлению довольно большого "устаревшего" 3-уровневого клиент-серверного приложения на новую версию. Мы рассматриваем использование WPF вместо Winforms, поскольку это направление, в котором Microsoft продвигает развитие будущего, и мы хотели бы максимально увеличить жизненный цикл / продолжительность приложений. Тем не менее, во время переписывания мы хотели бы внести как можно больше изменений в нашу модель доступа к данным / представления данных, чтобы как можно раньше повысить производительность.

Я проводил некоторые исследования в этом направлении, но подавляющее большинство ресурсов, которые я обнаружил, которые обсуждают WPF, фокусируются только на простых приложениях для отслеживания данных или на самых основах дизайна / элементов управления пользовательского интерфейса. Несколько пунктов, которые даже обсуждают представление данных, довольно элементарны в глубине.

  • Существуют ли какие-либо книги / статьи / рекомендуемое чтение / другие ресурсы, рекомендуемые для разработки, связанные с бизнес-приложениями крупного уровня предприятия?
  • Есть ли какие-то "ошибки", которых следует / можно было бы избежать?
  • Общие советы по минимизации времени под водой

Ответы [ 5 ]

4 голосов
/ 31 марта 2010

Я занимаюсь разработкой крупного WPF-приложения для всего предприятия почти 2 года. Как и при любой разработке пользовательского интерфейса, важно понять, как лучше всего разработать шаблон пользовательского интерфейса для конкретной технологии, которую вы используете. Из моего опыта работы с WPF шаблон проектирования Model-View-ViewModel является наиболее распространенным. Когда вы поймете силу связывания данных в WPF, легко понять, почему такой шаблон, как M-V-VM, так принят. Даже если вы не будете следовать шаблону M-V-VM (или его разновидности) слово в слово, поймите решение общей картины, к которому обращается шаблон. По сути, храните файл UI / XAML (View) в отдельном файле, а весь программный код / ​​логика (ViewModel) - в другом файле. Представление просто реагирует на изменения в ViewModel.

Отделяя ViewModel, вы получите несколько преимуществ.

  • Легко создавать автоматизированные тесты для объекта ViewModel, поскольку в нем нет графических компонентов. Это просто объект с методами / свойствами.

  • Проще разделить работу между разработчиками (например, один разработчик создает View, а другой разработчик создает ViewModel).

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

Ниже приведены некоторые плюсы и минусы WPF и оконных форм из моего опыта:

Плюсы:

  • Гораздо лучший внешний вид и удобство пользовательского интерфейса для конечных пользователей. WPF позволяет вам полностью контролировать внешний вид любого элемента пользовательского интерфейса. (например, список, содержащий изображение / кнопку / текст для каждой строки).

  • Связывание данных поразительно. Привязка элементов управления вашего пользовательского интерфейса в файле XAML для указания на конкретные свойства в вашем классе ViewModel, и все просто работает. Пользовательский интерфейс просто реагирует на любые изменения свойств ViewModel. Полное разделение! Вы действительно увидите преимущества этого, если захотите, чтобы несколько окон / пользовательских элементов управления отображали одну и ту же информацию одновременно и автоматически синхронизировали.

  • Все, что я прочитал в MSDN, - это то, что Microsoft вкладывает гораздо больше ресурсов в WPF, чем в старые формы окон.

Минусы:

  • Большая кривая обучения. Не удивляйтесь, если разработчикам, не имеющим предварительного опыта работы с WPF, потребуется несколько месяцев, чтобы создать несколько сложный пользовательский интерфейс. Это совершенно новая технология, и у нее будет время для обучения.

  • Некоторые общие пользовательские элементы управления еще не были разработаны Microsoft (например, замаскированное текстовое поле, сетка данных). Однако Visual Studio 2010 поставляется с сеткой данных и работает хорошо. Кроме того, на рынке имеется множество сторонних контролей.

Лучшие ресурсы, которые я могу придумать:

  • «Pro WPF в C # 2008» - эта книга потрясающая. Это более 1000 страниц. Это покрывает почти всю область WPF. Используйте это как справочник. Это прямо к делу с простыми для понимания примерами.

  • Ссылка на статью Джоша Смита о шаблоне Model-View-ViewModel: http://msdn.microsoft.com/en-us/magazine/dd419663.aspx#id0090016

    Как я упоминал ранее, не зацикливайтесь на чьей-то версии шаблона M-V-VM. Еще важнее понять, как WPF позволяет вам легко создавать ModelView, а представление автоматически реагирует на изменения.

Удачи! Вы не пожалеете WPF, если сможете пройти эту чертову кривую обучения.

1 голос
/ 30 апреля 2010

Я нашел этот ресурс, предоставляющий несколько превосходных примеров.

Microsoft All-In-One Code Framework

Microsoft All-In-One Code FrameworkОписывает структуру и структуру методов разработки Microsoft с помощью типичных примеров кодов на трех популярных языках программирования (Visual C #, VB.NET, Visual C ++).Каждый образец тщательно отобран, составлен и задокументирован, чтобы продемонстрировать один часто задаваемый, протестированный или используемый сценарий кодирования на основе нашего опыта поддержки в группах новостей и форумах MSDN.Если вы разработчик программного обеспечения, вы можете наполнить скелет кровью, мышцами и душой.Если вы являетесь тестировщиком программного обеспечения или инженером службы поддержки, таким как мы, вы можете немного расширить примеры кодов, чтобы они соответствовали вашему конкретному сценарию тестирования, или направить своего клиента в этот проект, если вопрос клиента совпадает с тем, что мы собрали.

Сегодня 12 марта 2010 года. Проект содержит более 360 примеров кода, которые охватывают 24 технологии разработки Microsoft, такие как Azure, Windows 7 и Silverlight 3. Коллекция увеличивается на шесть образцов в неделю.Актуальный список образцов можно найти в каталоге образцов All-In-One Code Framework.

http://1code.codeplex.com/

1 голос
/ 01 апреля 2010

Общие советы по минимизации времени под водой:

  1. Изучите привязку данных, как только сможете. Используйте привязку данных в каждом создаваемом вами прототипе. Даже если все, что вы делаете, - играете с тем, как работают макеты панелей или разделители сетки: вставьте XmlDataProvider в ваше окно, создайте тестовые данные XML и привяжите их. Это особенно полезно, если вы используете Kaxaml для создания прототипа. Я не знаю, насколько это будет важно, когда VS 2010 окажется в ваших руках, но если вы используете VS 2008, Kaxaml неоценим.

  2. Прочтите статью Bea Stollnitz о о том, как отлаживать привязку данных в WPF. Настройте среду VS так, чтобы вы всегда могли видеть окно «Вывод» во время тестирования пользовательского интерфейса.

  3. Используйте MVVM и шаблоны данных с самого начала. Представьте, что выделенного кода не существует, и что единственный способ взаимодействия между пользовательским интерфейсом и моделью данных - это привязка данных и команды. Вы довольно быстро отступите от этой позиции, но если вы заставите себя научиться этому из прыжка, вам будет легче все делать.

  4. Представьте, что ваше приложение должно работать на 36-дюймовом широкоэкранном мониторе и телефоне. Будете ли вы использовать фиксированный размер шрифта и измерять его в пикселях? Вы не будете.

  5. Узнайте об общей области действия Grid и определении размера звездочки. Эти две вещи означают, что вы будете использовать Grid везде . Ответ на вопрос «Как заставить этот элемент использовать половину оставшегося места на экране?» есть: с Grid. (Однако ответ на вопрос «Как заставить этот элемент использовать все оставшееся место на экране?»: С DockPanel.)

  6. Помните о том, что WPF не является зрелой технологией, и о последствиях этого. Дело не в том, что он глючит (это не так, хотя есть ошибки) или имеет неадекватную функциональность (опять же, есть проблемы, но не часто критические): дело в том, что существует множество практических рекомендаций XF в WPF статьи и посты в блоге, которые были написаны до того, как мы действительно узнали, что можно поддерживать, а что нет. Валидация - отличный пример. Вы не найдете конца объяснения того, как установить правила проверки и прикрепить их к привязкам. Вы можете не так легко найти сообщения, написанные позже о том, почему в большинстве реальных сценариев вы хотите использовать IDataErrorInfo. Будьте еще более нерешительными при принятии первого найденного вами ответа, чем обычно.

  7. Если вы считаете, что компоновка и внедрение зависимостей являются малоизвестными концепциями архитектуры-космонавта с минимальным применением в разработке программного обеспечения в реальном мире, поймите прямо.

  8. Не волнуйтесь о том, насколько сложны свойства зависимостей. Они могут сделать массу вещей, но с практической точки зрения все, что вам нужно сначала подумать, это уведомление об изменениях и наследование значений. Уведомление об изменении требует, чтобы установщик свойства что-то сделал; это встроено в SetValue. Наследование значений требует, чтобы получатель свойства что-то делал; это встроено в GetValue. Тот факт, что значения свойств могут быть локальными или унаследованными, означает, что вместо значений, хранящихся в полях, они хранятся в виде словарных статей; если данное свойство не имеет локального значения (т. е. нет значения для свойства в словаре DependencyObject), DependencyObject ищет родителя, чтобы получить его значение. Терминология действительно многословна, но идеи очень просты.

1 голос
/ 31 марта 2010

Команда VS2010 ведет блог о получении хорошей производительности, поскольку они переключились на WPF.

У них есть серия WPF в Visual Studio , которая предлагает несколько предложений (особенно вторая часть ).

0 голосов
/ 31 марта 2010

Рассмотрите возможность использования шаблона MVVM.

...