Silverlight 4 WCF RIA Services и MVVM не так просты

[Правовая оговорка: я - ASP.NET разработчик MVC]

Привет,

Я ищу некоторые лучшие практики с реализацией шаблона MVVM с RIA WCF в Silverlight 4.

Я не надеюсь использовать MEF МОК для определения местоположения моего ViewModels. То, что я хотел бы знать, - то, как применить шаблон MVVM с Silverlight 4 и RIA WCF.

Я не хочу использовать другой материал как Призма или Легкий инструментарий MVVM. Я нашел много примеров в Интернете, показывающем, как замечательно перетащить источник данных на представлении, и задание сделано (это напоминает мне о моих первых разработках VB6).

Я пытался реализовать MVVM с RIA WCF, и это не strightforward вообще. Если я понимаю, MVVM должен содержать всю логику, чтобы к модульному тесту это в изоляции, но когда дело доходит до объединения это с RIA WCF это - другая история. У меня есть следующие вопросы.

  1. Я могу использовать сгенерированные метаданные в качестве модели? Было бы легче использовать его это, если я пишу все из царапины.

  2. Поскольку я видел единственный способ, которым я мог добраться, данные через DomainContext или посредством прямой привязки в представлении (локальный ресурс). Я не хочу прямую привязку в представлении, не тестируемом вообще. С другой стороны, я не могу использовать DomainContext, он не выставляет единственного объекта!!! Все, что я имею, является EntitySet, который я могу связать с datagrid. Как я связываю единственный Объект с DataForm от ViewModel?

  3. Как делают меня udpate модель к базе данных?

  4. Как я перешел от одного Объекта до набора, он - объекты. Например, если бы у меня есть Объект Компании, я хотел бы показать DataForm для обновления объекта информация и datagrid для показа адресов компаний. При сохранении формы я хотел бы сохранить информацию к Компании и информацию для адресации, о котором адрес был выбран как активный.

Помогите мне понять, как сделать это хорошо. Или возможно я должен отбросить RIA WCF и сделать это с WCF с нуля?

Что Вы думаете?

8
задан AnthonyWJones 29 April 2010 в 16:17
поделиться

4 ответа

Возможно, вас заинтересует этот сеанс . В нем объясняется, как использовать шаблон MVVM с RIA WCF Services.

9
ответ дан 5 December 2019 в 08:51
поделиться

Я нашел это сообщение полезным:

http://www.astaticstate.com/2010/04/silverlight-4-using-mvvm-patter-ria.html

4
ответ дан 5 December 2019 в 08:51
поделиться

Некоторые случайные ответы ...

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

MVVM требует понимания ролей. «Представление» - это ваш XAML и код программной части. Код программной части должен обрабатывать события из пользовательского элемента управления, но не более того.

ViewModel содержит данные, к которым будет привязан пользовательский элемент управления. Как правило, ViewModel привязан к View как его DataContext, так что все в форме может привязать данные к свойствам в ViewModel. ViewModel должен реализовывать INotifyPropertyChanged и вызывать события изменения свойства для каждого свойства, к которому привязаны данные формы.

Возможно, вы захотите создать ObservableCollection, используя EntitySet в качестве источника. Это будет обрабатывать INotifyCollectionChanged для целей привязки данных.Если сущности в EntitySet также обрабатывают INotifyPropertyChanged, значит, вы в хорошей форме для привязки данных для коллекций.

Вы можете создать свойство для отдельной сущности и привязать к ней данные, предполагая, что уведомление об изменении также реализовано (как для членов сущности, так и для свойства сущности).

Службы RIA будут повторно создавать DomainContext для каждой сборки, что немного помогает в его синхронизации. Тем не менее, он предназначен для обслуживания уровня над ORM, поэтому ваше ORM или другое сопоставление данных все равно придется поддерживать другими способами.

Я не смотрел финальную версию RIA Services, но бета-версия меня не очень впечатлила. Я бы предпочел иметь хорошие классы сущностей, определенные на сервере, и делиться ими с проектом Silverlight. Однако его нелегко настроить и требует некоторого нетривиального WCF, который не полагается на ссылки на службы. (Финальный выпуск служб RIA, возможно, немного убрал это, но ссылка на собственную службу WCF в Silverlight в значительной степени зла, главным образом потому, что она не воссоздает автоматически сгенерированные классы и жестко кодирует URI для службы на стороне сервера. .)

Метаданные были еще одной проблемой с бета-версией RIA Services. Если вы управляете источником сущности, проще прикрепить атрибуты метаданных непосредственно к вашему классу DataContract и отдельным свойствам DataMember. Опять же, это может означать отказ от использования Служб RIA. Написание отдельного класса метаданных, как требовалось для бета-версии RIA, не было хорошим решением.

В итоге я не использовал службы RIA для Silverlight 3 и не пожалел об этом.Вот отличная статья о WCF и Silverlight . Хотя там написано Silverlight 2, он по-прежнему нацелен на любую версию Silverlight.

Я рекомендую MVVM Light. Исходный код доступен на Codeplex, если это проблема. Он обеспечивает поддержку обмена сообщениями и команд, а также ViewModelLocator; хотя последнее требует некоторой работы, чтобы понять, это действительно хорошее расширение базовой модели MVVM.

Надеюсь, это поможет .....

4
ответ дан 5 December 2019 в 08:51
поделиться

Просто подумал, что дам вам знать о проекте, над которым я работаю - только что закончил наш первый релиз. Предоставляет отличный простой способ подойти к MVVM специально для Silverlight + RIA Services. Упрощает многие вещи MVVM и предоставляет еще несколько функций, подобных контроллеру, с классом Notifications. http://slmvvms.codeplex.com/

2
ответ дан 5 December 2019 в 08:51
поделиться
Другие вопросы по тегам:

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