MVVM с EF, вопрос проектирования DataAccess - PullRequest
1 голос
/ 20 января 2010

В первую очередь.Извините за мой английский, я все еще учусь :)

В настоящее время я борюсь с моделью MVVM.

  • Внизу, у меня есть база данных.
  • Поверх этого находится мой DAL, который по сути является структурой сущности ADO.NET.* Обратите внимание, что различные сущности также являются моими бизнес-объектами (поскольку я включаю в них проверку).
  • Кроме того, у меня есть классы репозитория, которые определяют различные запросы, требуемые в приложении.
  • И, конечно же, у меня есть такие вещи, как интерфейс, другие компоненты и модульное тестирование, но я не думаю, что это действительно актуально.

Ситуация следующая (абстрактно): Наверхиз шаблона хранилища есть работник, выполняющий все виды задач.Далее идет интерфейс, который показывает состояние этих различных задач.(Каждое задание содержит тонны подзадач).И интерфейс, и рабочий используют один и тот же репозиторий задач!

Теперь я пытаюсь достичь следующего: рабочий может открыть (или развернуть, если хотите) задачу, обработав все ее подзадачи.В какой-то момент пользователь может развернуть задачу в интерфейсе, увидев все подзадачи.Конечно, было бы здорово увидеть, что подзадачи обновляются после обработки планировщиком.Тем не менее, по умолчанию я не хочу загружать подзадачи в память, когда они не обрабатываются и не показываются.Поэтому подзадачи должны загружаться по требованию.

Теперь мой вопрос, когда один из потребителей открывает репозиторий для подзадач задачи, каков наилучший способ поделиться им с другими потребителями (это необходимо, потому чтоХранилище вызывает события, когда все меняется)?(например, как поделиться репозиторием, созданным работником с интерфейсом).

В частности, вы бы сказали, что он станет свойством объекта «Задача», но поскольку объект «Задача» используется как бизнес-объект, он не должен знать ни один из базовых источников данных (в данном случаеEF) или слой Repository поверх него.

Другой вариант - добавить метод LoadChildTasks в репозиторий Tasks, но это означает, что мне нужно хранить коллекцию внутри, а когда загрузкавызвано, проверьте, не было ли ранее созданного SubTaskRepository для указанной Задачи.Также это будет означать, что, когда и интерфейс, и рабочий отбрасывают свои операции в списке задач, его необходимо вручную разблокировать, поскольку в противном случае он будет храниться в памяти внутренним списком.

1 Ответ

0 голосов
/ 20 января 2010

мы делаем класс репозитория как синглтон-класс.так что он будет распространен во всем приложении.надеюсь, это поможет.Джейн

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