Вопрос

Я хотел бы начать коллекцию лучших практик MVVM-Light (W / RIA). Есть несколько предметов, которые я обнаружил, чтобы быть полезными лучшими практиками или лучшими подходами, но хотелось бы услышать от других, используя инструментарий MVVM-Lightkit и посмотреть, что они также нашли.

Пожалуйста, опубликуйте свои лучшие практики как ответы на этот вопрос.

Это было полезно?

Решение

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

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

Очистные идеи:

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

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

Для смены:

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

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

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

Для просмотров:

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

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

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

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

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

Для RIA Domainservices:

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

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

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

Для структуры сущности:

  1. Держите 1-к-1 матч объектовContext на сумму домена. Пытаясь разделить этому другому пути вызывает проблемы.
  2. Не используйте атрибут [Состав], если вы не намерены тратить много времени, тщательно создают вашу вставку, обновление и удаление логики.
  3. Используйте отдельный сервис для обслуживания пользовательских типов обратно к вашему клиенту RIA. Не добавляйте их в свой доменсервис для вашего объекта EntityFramework
  4. Выполните логику обновления / интеграции на стороне сервера (например, обновление других систем) в функции PersistChangeSet, а не в функциях вставки, обновления, удаления. Это помешает вам случайно потянуть в сущность через недвижимость навигации, что оставит вашу отдельную версию не обновленную.
  5. Создайте дополнительный контекст, чтобы найти текущие значения во время логики обновления / интеграции.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top