3
나는 매우 비슷하지만 계층적인 엔티티가 4 개 있습니다. 각각은 이전에 대한 외래 키를 가지고 있으며 다음 키의 콜렉션을 포함합니다. 각각에 대해 약간 다르고 두 방법저장소 패턴 : 동일한 저장소 다루기
구현 :
지금, 이러한 엔티티는 4 명 개의 동일한 저장소를 갖는다.
필요에 따라 기능을 확장하면서 동시에 4 개 모두를 하나로 병합 할 수있는 디자인 패턴이 있습니까?
나는이 작업을 수행하려고 :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 작업이 비슷한 방식으로 계속합니다.
그러나 가장 최적의 솔루션처럼 보이지 않았으므로 이제 인터페이스와 클래스 (예 : 저장소 당 2 개)의 혼란으로 되돌아갔습니다.
는
그들은 분리되어 있어야합니다. 우려의 분리. 단일 책임 원칙. 바로 지금 그들은 밀접하게 관련되어 있지만 미래에는 누가 압니다. 그때까지는 리팩터링과 재 작성없이 너무 빨리 분리 할 수 없습니다. –
이것은 Entity framework query builder에 대한 질문과 같습니다. 그렇습니다.하지만 모든 시간과 노력의 가치가 있습니다. 대부분의 경우 그렇지 않습니다. 그러나 어이, 아직도 재미있는 질문. –