呼び出し元のクラスのジェネリック型に基づいて、2つのデータメソッドのいずれかを呼び出す必要があるアプリに取り組んでいます。たとえば、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メソッドは1つだけでした。Tのタイプに応じて、2つのメソッドのいずれかを呼び出す必要があります。
私はこのようなことを避けようとしています:
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 { }
これらのFoosandBarsは、Linq-to-SQLで使用されるDBMLアイテムです。