Можно ли смою архитектуру немного улучшить?
Попытаюсь объяснить "на пальцах":
У каждого репозитория имеется свой собственный Provider, который по названию сервера возвращает репозиторий.
Provider'у на вход передается IRepoFactory необходимого репозитория и IConnectionRepostiroy.
Provider по serverName обращается в IConnectionRepostiroy, а далее создается репозиторий IRepoFactory.Create(connectionString).
Таким образом реализован провайдер. С помощью него я хотел скрыть использование фабрик и т п вещей.
А вот так реализуется у меня фабрика:
public class ProjectRepositoryFactory : IProjectRepositoryFactory
{
private readonly IContextFactoryProvider<InetStatContext> _contextFactoryProviderctory;
/// <summary>
/// Конструктор
/// </summary>
/// <param name="contextFactoryProviderctory"></param>
public ProjectRepositoryFactory(IContextFactoryProvider<Context> contextFactoryProviderctory)
{
_contextFactoryProviderctory = contextFactoryProviderctory ?? throw new ArgumentNullException(nameof(contextFactoryProviderctory));
}
/// <summary>
/// Создать репозиторий
/// </summary>
/// <param name="connectionInfo"></param>
/// <returns></returns>
public IProjectRepository Create(ConnectionInfo connectionInfo)
{
return new ProjectRepository(_contextFactoryProviderctory.CreateContextFactory(connectionInfo.StatDbConnectString));
}
}
/// <summary>
/// Провайдер фабрик контекстов
/// </summary>
/// <typeparam name="T"></typeparam>
public class ContextFactoryProvider<T>: IContextFactoryProvider<T> where T: DbContext
{
/// <summary>
/// Создать фабрику контекстов
/// </summary>
/// <param name="connectionString"></param>
/// <returns></returns>
public IContextFactory<T> CreateContextFactory(string connectionString)
{
return new ContextFactory<T>(connectionString);
}
}
В итоге получается, что у каждого репозитория есть своя фабрика, свой провайдер и т д.
Это все работает, но мне кажется, что можно как-то красиво все через дженерики сделать, однако есть беспокойство, что может потеряться гибкость, так как имея сейчас на каждый репозитории свой провайдер и фабрику, я волен делать все, что угодно.