Basic Использование MVVM-Light
- DispatcherHelper инициализировать в функции Application_Startup файла App.cs в
- Создать ViewModels из BaseClass
- Всегда Создать класс ViewModelLocator, который содержит все модели просмотра и привязан к вашему приложению Ресурсы
- Использовать RelayCommands для отображения функций на ваше вид
- Узнайте, когда использовать диспетчер отправки.
Clean-Up Идеи:
- При необходимости, добавьте к вашему ViewModel, чтобы очистить EntitySet вашего DomainContext на Cleanup()?
- Вызовите функцию ViewModelLocator CleanupSomeVM(), чтобы очистить режимы просмотра, когда они больше не нужны в приложении.
Мне бы хотелось услышать от других о том, когда/как вы используете функции CleanUp. По мере увеличения моего приложения, я чувствую необходимость добавления некоторых функций очистки для лучшего управления использованием памяти клиента.
Для смешиваемости:
- РеФеРаТ Услуги/Запрос Реализации к интерфейсу.
- Создайте 2 класса для каждого класса обслуживания Реализация (1 для проектирования, 1 для производства)
- В пределах каждой вашей модели ViewModel реализуйте свой собственный класс обслуживания (используйте IsInDesignMode) для создания реализаций Blendable Service при необходимости.
- Используйте переменную Static для хранения домена DomainContext в классе Implmentation Service.
- Добавить DispatcherHelper.Initialize() в конструктор ViewModels, но только в режиме разработки. Blend не загружает приложение при загрузке страницы, и это работает вокруг этого.
Для бизнес-логики Добавлено:
- Добавить бизнес-логики в модели, а затем в ViewModel.
- Используйте частичные методы Модели, чтобы добавить логику для соответствующих событий изменения/обновления.
- Добавить свойства только для чтения (только геттер), чтобы предоставить сводные и расчетные значения для вашей модели.
Для Просмотры:
- Всегда Свяжите корень локатора объекта.
- Старайтесь поддерживать логику кода только в макете или пользовательской логике пользовательского интерфейса. Избегайте ссылок на ViewModel.
Для коллекций:
- Использование CollectionViewSource для коллекций в ваших ViewModels с источником DomainContext в EntitySet
- Применить все Фильтрация, сортировка и группировка логики к CollectionViewSource в вашей ViewModel.
- После ServiceCalls вызовите .View.Refresh() на объекты CollectionViewSource, если необходимо обновить интерфейс.
Для ViewModel координации (контроллер Logic)
- Используйте сообщения скупо, слишком много сложностей может быть трудно управлять.
- Используйте классы NotificationMessage и PropertyChangedMessage для отправки/получения с помощью.
РИА DomainServices:
- Реализация любого входа в систему функции сохранения изменений, а не обновление/вставки/удаления логики.
- Во время вставки, обновления, удаления функций, если вам нужно обратиться к другому объекту через свойство навигации, сначала проверьте EntityStatus или загрузите объект из другого Контекста, чтобы предотвратить конфликты EntityStatus.
Для отладки/тестирования:
- Проверьте окно вывода для брошюровки ошибки и исправлять их. Ошибки связывания прерываются молча пользователю, но ухудшают производительность приложений и ожидаемое поведение.
- Создание модульных тестов в Silverlight для проверки всех добавляемых модель/Business Logic
- Создание проекта Test Unit для тестирования серверной логики и функции
Для Entity Framework:
- Хранить 1- to-1 Match of EntitiesContext to Domain Service. Попытка разбить это по-другому вызывает проблемы.
- НЕ используйте атрибут [Композиция], если вы полностью не намерены тратить много времени на тщательное построение логики вставки, обновления и удаления.
- Используйте отдельную услугу для обслуживания пользовательских типов обратно к вашему клиенту RIA. Не добавляйте их в свой DomainService для вашего объекта EntityFramework.
- Выполнение логики обновления/интеграции на стороне сервера (например, обновление других систем) в функции PersistChangeSet, а не в функциях Insert, Update, Delete.Это предотвратит случайное вытягивание объекта с помощью свойств навигации, что приведет к тому, что ваша отдельная версия не будет обновлена.
- Создайте дополнительный контекст, чтобы найти текущие значения во время логики обновления/интеграции.
Рассмотрите возможность превратить это в вики сообщества, чтобы каждый мог редактировать. –
Я не думаю, что это как com-wiki. Ответчик заслуживает репутацию этого хорошего вопроса. – Shimmy