В первую очередь.Извините за мой английский, я все еще учусь :)
В настоящее время я борюсь с моделью MVVM.
- Внизу, у меня есть база данных.
- Поверх этого находится мой DAL, который по сути является структурой сущности ADO.NET.* Обратите внимание, что различные сущности также являются моими бизнес-объектами (поскольку я включаю в них проверку).
- Кроме того, у меня есть классы репозитория, которые определяют различные запросы, требуемые в приложении.
- И, конечно же, у меня есть такие вещи, как интерфейс, другие компоненты и модульное тестирование, но я не думаю, что это действительно актуально.
Ситуация следующая (абстрактно): Наверхиз шаблона хранилища есть работник, выполняющий все виды задач.Далее идет интерфейс, который показывает состояние этих различных задач.(Каждое задание содержит тонны подзадач).И интерфейс, и рабочий используют один и тот же репозиторий задач!
Теперь я пытаюсь достичь следующего: рабочий может открыть (или развернуть, если хотите) задачу, обработав все ее подзадачи.В какой-то момент пользователь может развернуть задачу в интерфейсе, увидев все подзадачи.Конечно, было бы здорово увидеть, что подзадачи обновляются после обработки планировщиком.Тем не менее, по умолчанию я не хочу загружать подзадачи в память, когда они не обрабатываются и не показываются.Поэтому подзадачи должны загружаться по требованию.
Теперь мой вопрос, когда один из потребителей открывает репозиторий для подзадач задачи, каков наилучший способ поделиться им с другими потребителями (это необходимо, потому чтоХранилище вызывает события, когда все меняется)?(например, как поделиться репозиторием, созданным работником с интерфейсом).
В частности, вы бы сказали, что он станет свойством объекта «Задача», но поскольку объект «Задача» используется как бизнес-объект, он не должен знать ни один из базовых источников данных (в данном случаеEF) или слой Repository поверх него.
Другой вариант - добавить метод LoadChildTasks в репозиторий Tasks, но это означает, что мне нужно хранить коллекцию внутри, а когда загрузкавызвано, проверьте, не было ли ранее созданного SubTaskRepository для указанной Задачи.Также это будет означать, что, когда и интерфейс, и рабочий отбрасывают свои операции в списке задач, его необходимо вручную разблокировать, поскольку в противном случае он будет храниться в памяти внутренним списком.