Лучшие практики MVVM-light + RIA Services [закрыто]

15
задан 5 revs, 2 users 100% 6 April 2012 в 17:43
поделиться

1 ответ

Базовое использование MVVM-Light

  1. Инициализируйте DispatcherHelper в функции Application_Startup файла App.cs
  2. Создайте модели представления из базового класса
  3. Всегда создавайте класс ViewModelLocator, который содержит все ваши модели представления и связан с Ресурсы вашего приложения
  4. Используйте RelayCommands для предоставления функций вашему представлению
  5. Узнайте, когда использовать DispatchHelper.

Идеи по очистке:

  1. При необходимости, добавить в ViewModel, чтобы очистить EntitySet вашего DomainContext при Cleanup ()?
  2. Вызвать функцию CleanupSomeVM () вашего ViewModelLocator, чтобы очистить модели просмотра, когда они больше не нужны в применение.

Мне бы хотелось услышать от других, когда и как вы используете функции CleanUp. По мере роста моего приложения я чувствую необходимость добавлять некоторые функции очистки, чтобы лучше управлять использованием клиентской памяти.

Для смешиваемости:

  1. Абстрагирование реализаций службы / запроса к интерфейсу.
  2. Создайте 2 класса для каждого класса реализации службы (1 для проектирования, 1 для производства)
  3. В каждой модели представления реализуйте свой собственный класс службы (используйте IsInDesignMode) для создания реализаций смешиваемых служб по мере необходимости.
  4. Используйте статическую переменную для хранения вашего DomainContext в классе реализации службы.
  5. Добавьте DispatcherHelper.Initialize () в конструктор ViewModels, но только в режиме разработки. Blend не загружает приложение при загрузке страницы, и это работает.

Для добавленной бизнес-логики:

  1. Добавьте бизнес-логику сначала в модель, а затем во ViewModel.
  2. Используйте частичные методы модели, чтобы добавить логику для соответствующих событий изменения / обновления.
  3. Добавьте свойства только для чтения (только средство получения), чтобы предоставить сводные и рассчитанные значения для вашей модели.

Для представлений:

  1. Всегда привязывайте корень к объекту локатора.
  2. Постарайтесь сохранить логику кода программной части только для макета или пользовательской логики пользовательского интерфейса. Избегайте ссылок на вашу ViewModel.

Для коллекций:

  1. Используйте CollectionViewSource для коллекций в ваших ViewModels, с источником EntitySet DomainContext
  2. Примените всю логику фильтрации, сортировки и группировки к CollectionViewSource в вашей ViewModel.
  3. После ServiceCalls вызовите .View.Refresh () для ваших объектов CollectionViewSource по мере необходимости для обновления пользовательского интерфейса.

Для координации ViewModel (логика контроллера)

  1. Используйте сообщения экономно, слишком большая сложность может быть трудной для управления.
  2. Используйте классы NotificationMessage и PropertyChangedMessage для отправки и получения.

Для RIA DomainServices:

  1. Реализуйте любое ведение журнала в функции сохранения изменений, а не в логике обновления / вставки / удаления.
  2. Во время выполнения функций Insert, Update, Delete, если вам нужно ссылаться на другой объект через свойство навигации, либо сначала проверьте EntityStatus, либо загрузите объект из другого контекста, чтобы предотвратить конфликты EntityStatus.

Для отладки / тестирования:

  1. Проверьте окно вывода на наличие ошибок привязки и исправьте их. Ошибки привязки не отображаются для пользователя, но ухудшают производительность приложения и ожидаемое поведение.
  2. Создание модульных тестов в Silverlight для проверки любых добавленных моделей / бизнес-логики
  3. Создание проекта модульных тестов для тестирования логики и функций на стороне сервера

Для Entity Framework:

  1. Сохранять соответствие EntitiesContext 1 к 1 в доменную службу. Попытка разделить это другим способом вызывает проблемы.
  2. НЕ используйте атрибут [Состав], если вы полностью не собираетесь тратить много времени на тщательное построение логики вставки, обновления и удаления.
  3. Используйте отдельную службу для передачи пользовательских типов обратно вашему RIA-клиенту. Не добавляйте их в службу DomainService для объекта EntityFramework
  4. . Выполните логику обновления / интеграции на стороне сервера (например, обновление других систем) в функции PersistChangeSet, а не в функциях Insert, Update, Delete. Это предотвратит случайное включение объекта через свойства навигации, в результате чего ваша отсоединенная версия останется необновленной.
  5. Создайте дополнительный контекст для поиска текущих значений во время логики обновления / интеграции.
25
ответ дан 1 December 2019 в 02:54
поделиться
Другие вопросы по тегам:

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