我有四个非常相似但是具有层次结构的实体。每个实体都有一个对前一个实体的外键,并包含下一个实体的集合。
现在,这些实体有四个相同的存储库:
这两种方法的实现会稍有不同。
是否有一种设计模式可以让我将所有四个实体合并为一个,同时允许我在需要时扩展功能?
我尝试过这样做:
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操作的流程类似。
然而,它似乎并不是最优解决方案,因此我又回到了当前拥有的接口和类混合的杂糅状态(每个存储库有两个)。
谢谢