Застрял с проблемой архитектуры MVVM - PullRequest
0 голосов
/ 16 декабря 2010

Я создаю приложение Silverlight, используя шаблон MVVM, но я не понимаю, чего мне здесь не хватает ...

  1. ViewsProject (приложение Silverlight) содержит пользовательские элементы управления и страницу. Ссылки ViewModelsProject.
  2. ViewModelsProject (библиотека классов Silverlight) содержит внутренний код представлений. Также здесь будет присутствовать бизнес-логика. Он будет ссылаться на проект Models.

  3. ModelsProject (библиотека классов Windows) содержит: объектную модель Ado.net локальной базы данных и WCF RIA DomainService, основанную на объектной модели. Его целью является получение данных из локальной базы данных, а сущности предоставляются через службу домена.

  4. Веб-проект: содержит xap для ViewsProject.

Я все сделал правильно до сих пор? Если да, то, пожалуйста, помогите мне понять:

Как я называю методы доменный сервис в ViewsModel проект? Если я ссылаюсь на ModelsProject, я получаю сообщение об ошибке только проекты Silverlight могут быть добавлено. Если я изменю ModelsProject на проект библиотеки классов Silverlight тогда я не могу добавить модель сущности моя база данных.

Ответы [ 3 ]

1 голос
/ 17 декабря 2010

Чтобы клиентские проекты использовали службу WCF RIA, необходимо установить ссылку на службы WCF RIA в свойстве проекта.

Что касается модульности и разделения в архитектуре проекта при использовании WCF RIA Services, Вы можете использовать библиотеки классов WCF RIA.

alt text

0 голосов
/ 17 декабря 2010

Я разработал ответ.

Измените ViewModelsProject (библиотека классов Silverlight) на тип приложения Silverlight. Установите флажок Включить службы Ria при создании проекта.

В классе модели представления добавьте, используя ModelsProject. Скомпилируйте ViewModelsProject.

Все методы службы WCF Ria появятся в коде.

0 голосов
/ 16 декабря 2010

Нет особого смысла в том, чтобы отделять ваши взгляды от ваших моделей представления IMHO. Я видел этот подход ранее, но модель представления (по крайней мере, на мой взгляд) представляет собой более подходящую для представления абстракцию данных, чем модель предметной области. ViewModel предоставляет слой косвенности, позволяющий изменять презентацию без того, чтобы модель делала то же самое, но она представляет собой нечто большее, чем гибрид адаптера / контроллера и живет рядом с представлением.

Чтобы ответить на ваш вопрос, хотя ...

Как правило, ваш SL-проект вызывает вашу службу домена (обычно веб-службу), передавая команду от вашего представления к модели представления. Затем команда viewmodel прямо или косвенно выполнит вызов веб-службы. Этот веб-сервис не должен быть библиотекой классов SL, поскольку он расположен на веб-сервере вдали от вашего клиента.

Я чувствую ваше мышление с точки зрения настольного приложения здесь. Помните, что проект SL работает на стороне клиента, а ваших данных там нет. Чтобы соединить все это, вам понадобится удаленный сервис для получения данных. Обычная ссылка на библиотеку не годится, так как данные не на клиенте.

HTH, Stimul8d

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...