У меня есть четыре очень похожих, но иерархических объекта. Каждый из них имеет внешний ключ к предыдущему и содержит коллекции следующих.Образец репозитория: Работа с идентичными репозиториями
Сейчас эти объекты имеют четыре одинаковых репозиториев:
Реализации этих двух методов будет немного отличаться для каждого.
Есть ли шаблон дизайна, который позволит мне объединить все четыре в один, в то же время позволяя мне расширить функциональность при необходимости?
Я пытался сделать это:
public class DivisionRepository : IDivisionRepository
{
private DbContext dbContext;
private IDbSet<PrimaryDivision> primaryDivisionsEntitySet;
private IDbSet<SecondaryDivision> secondaryDivisionsEntitySet;
private IDbSet<TertiaryDivision> tertiaryDivisionsEntitySet;
private IDbSet<QuaternaryDivision> quaternaryDivisionsEntitySet;
public DivisionRepository(DbContext dbContext)
{
this.dbContext = dbContext;
this.primaryDivisionsEntitySet = dbContext.Set<PrimaryDivision>();
this.secondaryDivisionsEntitySet = dbContext.Set<SecondaryDivision>();
this.tertiaryDivisionsEntitySet = dbContext.Set<TertiaryDivision>();
this.quaternaryDivisionsEntitySet = dbContext.Set<QuaternaryDivision>();
}
public IDivision Find(Type type, object id)
{
if (type == typeof(PrimaryDivision))
{
return this.primaryDivisionsEntitySet.Find(id);
}
else if (type == typeof(SecondaryDivision))
{
return this.secondaryDivisionsEntitySet.Find(id);
}
else if (type == typeof(TertiaryDivision))
{
return this.tertiaryDivisionsEntitySet.Find(id);
}
else if (type == typeof(QuaternaryDivision))
{
return this.quaternaryDivisionsEntitySet.Find(id);
}
throw new ArgumentException("The type provided was incorrect.");
}
операции CRUD продолжают аналогичным образом.
Однако, это не похоже на наиболее оптимальное решение, поэтому я вернулся обратно к hodgepoda интерфейсов и классов, которые у меня есть сейчас (по два на каждый репозиторий).
Спасибо
Они должны оставаться отдельными. Разделение проблем. Принцип единой ответственности. Сейчас они, похоже, тесно связаны, но в будущем, кто знает. К тому времени, может быть, слишком поздно отделять их без большого количества рефакторинга и повторной записи. –
Это похоже на вопрос о сборщиках запросов структуры Entity, да, это можно сделать ... но стоит ли это все время и усилия, в большинстве случаев это не так. Но эй, еще интересный вопрос. –