Есть ли какие-либо проблемы при вводе в эксплуатацию коллекции, состоящей из IEnumerable значений, полученных из шаблона репозитория?

#c# #service #repository-pattern

Вопрос:

В настоящее время разрабатываются оконные приложения с использованием C#, WPF и платформы Prism, а также применяется шаблон репозитория. Но применение шаблона репозитория немного сбивает с толку. Типы, которые я использую, следующие:

 public class Root {  public ModuleCollection ForModule1 { get; set; }  public ModuleCollection ForModule2 { get; set; }  ... }  

Существует корневой каталог, который управляет данными нескольких корневых типов. Свойства элемента ForModule используются в каждом модуле, и существует ForModuleRepository, созданный путем передачи экземпляра корневого типа в качестве аргумента конструктора (например: ForModule1Repository, ForModule2Repository). И у меня есть синглетный сервис, передающий экземпляр репозитория. Модель представления каждого модуля получает соответствующий экземпляр ForModuleRepository через SingletonService DI.

Но корневой каталог используется в нескольких модулях, и такие события, как Добавление и удаление, должны обрабатываться совместно. Например, если экземпляр корневого типа добавлен в корневой каталог в модуле A, содержимое добавленного корневого экземпляра также должно быть отражено в модуле B.

Таким образом, служба пытается предоставить наблюдаемую коллекцию, состоящую из бесчисленных данных, полученных от корневого хранилища. Если коллекция ObservableCollection изменена в определенном модуле, изменение отражается в корневом каталоге. Есть ли какие-либо проблемы с этим способом?

Комментарии:

1. Не уверен, правильно ли я понял ваш сценарий. В случае, если вы пытаетесь синхронизировать несколько экземпляров своего репозитория, я бы сказал, что вы подходите к нему неправильно. Как правило, вы хотите распространять общий экземпляр через приложение. Таким образом, изменения автоматически отражаются (конечно, поскольку каждый компонент или модуль использует один и тот же экземпляр). Этот экземпляр предпочтительно не распространяется с использованием одноэлементного шаблона. Скорее бы вы предпочли агрегацию.

2. затем, могу ли я указать параметр типа коллекции observablecollection в качестве идентификатора корневого типа? правильно ли, что логика обновления RootRepository из-за изменения observablecollection все еще находится внутри singletonservice?

3. Что вы подразумеваете под удостоверением личности? Мне действительно трудно понять ваши объяснения. Даже заголовок-загадка. Вы должны привести простой пример. Также перепишите свой вопрос, чтобы описать проблему, а не спрашивать мнение. Все, что я могу сказать, это то, что вы должны использовать один и тот же экземпляр RootRepository во всех модулях. Я даже не знаю, имеет ли это смысл, так как я не понимаю деталей. Но в целом я могу сказать, что вместо синхронизации нескольких экземпляров с помощью событий вы должны разрешить всем модулям работать с одним и тем же экземпляром, чтобы избежать логики синхронизации и упростить свой код.

4. Спасибо. Ваш совет был полезен. Согласитесь поделиться экземпляром модели (MVVM), чтобы избежать логики синхронизации. Экземпляр модели будет управляться в SingletonService, и, похоже, экземпляр репозитория также будет использоваться внутри SingletonService. (Если быть точным, есть экземпляр репозитория, используемый только внутри Службы, и есть экземпляр репозитория, используемый в конкретной модели представления.)

5. «Если быть точным, есть экземпляр репозитория, используемый только внутри Службы, и есть экземпляр репозитория, используемый в конкретной модели представления» : и это вы должны нарушить. Не используйте новый экземпляр репозитория для каждого класса модели представления И службы. Каждый класс модели представления и класс обслуживания должны использовать один и тот же экземпляр репозитория, т. е. вызывать новый репозиторий() только один раз во всем приложении.