我正在开发一个应用程序,我需要根据调用类的泛型类型调用两种数据方法之一。例如,如果 T 是 Foo 类型,我将调用 data.GetFoo():
private static List<T> GetObjectList(DateTime mostRecentProcessedReadTime)
{
using (MesReportingDal data = new MesReportingDal())
{
return data.GetFoo(mostRecentProcessedReadTime); // Notice GetFoo()
}
}
如果 T 是 Bar 类型,我将调用 data.GetBar():
private static List<T> GetObjectList(DateTime mostRecentProcessedReadTime)
{
using (MesReportingDal data = new MesReportingDal())
{
return data.GetBar(mostRecentProcessedReadTime); // Notice GetBar()
}
}
在此之前,我只需要一个 DAL 方法,因为所有类型都以相同的方式检索。我现在需要调用两种方法之一,具体取决于 T 的类型。
我试图避免这样的事情:
private static List<T> GetObjectList(DateTime mostRecentProcessedReadTime)
{
using (MesReportingDal data = new MesReportingDal())
{
if (T is Foo) { return data.GetFoo(mostRecentProcessedReadTime); }
if (T is Bar) { return data.GetBar(mostRecentProcessedReadTime); }
}
}
这违反了 OCP。有没有一种优雅的方式来处理这个问题,所以我可以摆脱我的 if 语句?
编辑 - 这就是类型的样子
public partial class Foo1 : IDataEntity { }
public partial class Foo2 : IDataEntity { }
public partial class Bar1 : IDataEntity { }
public partial class Bar2 : IDataEntity { }
这些 Foos 和 Bars 是用于 Linq-to-SQL 的 DBML 项。