MVVM-Light + RIA Услуги лучшие практики [закрыто
-
26-09-2019 - |
Вопрос
Я хотел бы начать коллекцию лучших практик MVVM-Light (W / RIA). Есть несколько предметов, которые я обнаружил, чтобы быть полезными лучшими практиками или лучшими подходами, но хотелось бы услышать от других, используя инструментарий MVVM-Lightkit и посмотреть, что они также нашли.
Пожалуйста, опубликуйте свои лучшие практики как ответы на этот вопрос.
Решение
Базовое использование MVVM-Light
- Infialize DispatcherHelper в функции applation_startup applation_startup app.cs
- Создание просмотра модер из базового бассейна
- Всегда создайте класс ViewModellocator, который содержит все модели вашего просмотра и связаны в ваших ресурсах приложений
- Используйте RelayCommands для выставления функций на ваш взгляд
- Узнайте, когда использовать DispatchHelper.
Очистные идеи:
- При необходимости добавьте к вашему ViewModel, чтобы очистить объект вашего DomainContext на Cleanup ()?
- Вызовите функцию CleanupsomeVM () вашего ViewModellocator () для очистки просмотра модернов, когда они больше не нужны в приложении.
Я хотел бы услышать от других, когда / Как вы используете функции очистки. По мере роста моего приложения я чувствую необходимость добавления некоторых функций очистки для лучшего управления использованием клиента памяти.
Для смены:
- Аннотация Реализация службы / запроса к интерфейсу.
- Создание 2 классов для каждой услуги эксплуатации услуг (1 для дизайна, 1 для производства)
- В каждом ViewModel внедряйте свой собственный класс услуг (используйте iSindesignMode), чтобы создать реализации Blackable Service по мере необходимости.
- Используйте статическую переменную для удержания вашего DomainContext в пределах класса Indvelation Service.
- Добавьте DispatcherHelper.initialize () в конструкторе просмотрамодельцев, но только когда в режиме проектирования. Смеси не загружает приложение при загрузке страницы, и это работает вокруг этого.
Для добавленной бизнес-логики:
- Сначала добавьте бизнес-логику в модели, затем в ViewModel.
- Используйте частичные методы модели для добавления логики для соответствующих событий изменения / обновления.
- Добавление свойств только для чтения (только Gotter), чтобы обеспечить сводные и расчетные значения на вашей модели.
Для просмотров:
- Всегда связывайте корня к объекту локатора.
- Попробуйте сохранить кодовую логику для макета или пользовательской пользовательской логики. Избегайте ссылки на ваш ViewModel.
Для коллекций:
- Используйте CollectionViewsource для коллекций на ваших просмотрах, с источником объекта DomainContext
- Нанесите всю фильтрацию, сортировку и группирующую логику в CollectionViewsource в вашем ViewModel.
- После ServiceCalls вызовите .view.refresh () на свои объекты CollectionViewsource по мере необходимости для обновления пользовательского интерфейса.
Для координации ViewModel (логика контроллера)
- Использовать сообщения экономно, слишком много сложности может быть трудно управлять.
- Используйте классы NotificationMessage и PropertyChangedMessageMessageMessageMessage, чтобы отправить / получать с.
Для RIA Domainservices:
- Реализуйте любую регистрацию в функции изменений сохранения, а не логика обновления / вставки / удаления.
- Во время вставки, обновления, удаления функций, если вам нужно ссылаться на другое сущность через свойство навигации, сначала проверяйте EntityStatus, либо загрузите объект из другого контекста, чтобы предотвратить конфликты EntityStatus.
Для отладки / тестирования:
- Проверьте окно вывода для ошибок привязки и исправьте их. Ошибки связывания не работает с пользователем, но разлагают производительность приложений и ожидаемое поведение.
- Создание модульных тестов в Silverlight для проверки любой добавленной модели / бизнес-логики
- Создать модульный тестовый проект для тестирования логики и функций и функций серверов
Для структуры сущности:
- Держите 1-к-1 матч объектовContext на сумму домена. Пытаясь разделить этому другому пути вызывает проблемы.
- Не используйте атрибут [Состав], если вы не намерены тратить много времени, тщательно создают вашу вставку, обновление и удаление логики.
- Используйте отдельный сервис для обслуживания пользовательских типов обратно к вашему клиенту RIA. Не добавляйте их в свой доменсервис для вашего объекта EntityFramework
- Выполните логику обновления / интеграции на стороне сервера (например, обновление других систем) в функции PersistChangeSet, а не в функциях вставки, обновления, удаления. Это помешает вам случайно потянуть в сущность через недвижимость навигации, что оставит вашу отдельную версию не обновленную.
- Создайте дополнительный контекст, чтобы найти текущие значения во время логики обновления / интеграции.