Какова цель DataService и IDataService в MVVM Light - PullRequest
12 голосов
/ 07 марта 2012

Я начинаю использовать MVVM Light версии 4 и не могу понять:

  1. Почему я должен использовать DataService и IDataService?
  2. Должен ли я создать службу данных для любого класса в модели?

1 Ответ

17 голосов
/ 08 марта 2012

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

Однако следует учитывать, что это также имеет некоторые недостатки.Причиной реализации службы данных является то, что этот компонент можно использовать повторно и даже можно использовать в других сценариях, таких как приложение MVC.Кроме того, это отделяет задачу получения модели от хранилища данных.

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

Но, прежде всего, выше приведены рекомендации, шаблоны, рекомендации по проектированию и лучшие практики, которые дают вам свободу в разработке приложения, которое наилучшим образомсоответствует вашим требованиям.

Редактировать: размер службы данных

Структура и объем вашей службы данных зависят от вашего приложения и его требований.Он может варьироваться от единого сервиса данных для всех ваших моделей до одного сервиса данных на модель.Кроме того, дизайн ваших интерфейсов обслуживания данных может быть отдельным решением.Один класс обслуживания может реализовывать несколько интерфейсов обслуживания, что позволяет скрывать определенные аспекты (методы) реализации от пользователя.

При проектировании службы данных вам следует изучить шаблоны и репозиторий .Существует несколько примеров реализации.

Если вам просто нужна очень простая единица работы, основанная на одном запросе, вы можете взглянуть на мой блог , где я писал о превращении IQueryable вединица работы шаблона.Однако это подходит только для очень простых случаев, как правило, более полная реализация с хранилищем и правильной единицей работы более целесообразна.

...