【发布时间】:2018-07-04 12:44:30
【问题描述】:
我有一个存储库,可以获取不同类型的 IEnumerable。
我可以通过使用来做到这一点:
switch (returnType)
{
case ReturnType.HR:
_repo.GetSystemManuals();
break;
case ReturnType.Finance:
_repo.GetPrivateRecords();
break;
case ReturnType.Dev:
_repo.GetTimeLine();
break;
case ReturnType.Admin:
_repo.GetLedger();
break;
case ReturnType.Support:
_repo.GetRoster();
break;
}
但这违反了SOLID的开/关原则。
我想到的一种方法是创建一个字典,
private static readonly IDictionary<S95Type, IQueryable<Customer>> ReqTypeMapper
= new Dictionary<S95Type, IQueryable<HR>>();
ReqTypeMapper.Add(ReturnType.HR, _repo.GetHR()());
但不确定如何执行具有不同返回类型的不同方法..
【问题讨论】:
-
Open/Close 与 switch 语句无关。没有扩展,没有对类型的修改。另一方面,repository 并不是数据层的不同名称。它应该处理一个 single 实体,而不是很多。
-
@PanagiotisKanavos,如果我将来有不同的类型,我将不得不在我当前的课程中进行修改。只是想了解是否有更好的方法。
-
您没有存储库,您正在尝试创建工厂或 DI 容器。回购应该与单个实体一起处理。如果您想将不同的 repos 传递给不同的客户端,让他们接受
IRepository<T>并使用 DI 容器来生成适当的实例 -
repo 的类型是什么?
-
@Simons 换句话说,IOfficeRepository 打破了单一职责原则,试图成为每个人的仓库
标签: c# .net enums solid-principles