2010-03-31 3 views
1

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

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

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

ответ

3

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

Сохраняя ViewModel отдельно, у вас будет несколько преимуществ.

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

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

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

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

Pros:

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

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

  • Все, что я читал в MSDN, заключается в том, что Microsoft вкладывает гораздо больше ресурсов в WPF, чем в старые Window Forms.

Минусы:

  • Большой кривой обучения. Не удивляйтесь, если потребуется несколько месяцев, прежде чем разработчики без предварительного опыта с 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, если сможете пройти эту кривую обучения.

0

Рассмотрим глядя, используя шаблон MVVM.

1

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

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

1

Общие рекомендации для минимизации времени под водой:

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

  2. Прочитайте статью Bea Stollnitz по телефону how to debug data binding in WPF. Установите свою VS-среду так, чтобы вы всегда могли видеть окно «Вывод» во время тестирования вашего пользовательского интерфейса.

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

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

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

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

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

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

1

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

Microsoft All-In-One Code Framework

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

Сегодня 12 марта 2010 года Проект имеет более 360 примеров кода, которые крышка 24 разработки Microsoft технологии, такие как Azure, Windows 7 и Silverlight 3. Коллекция растет на шесть образцов в неделю. Вы можете найти актуальный список образцов в Образец кода кода «все-в-одном» Каталог.

http://1code.codeplex.com/

Смежные вопросы