さまざまなタイプのオブジェクトを追加、検索、更新、および削除できる汎用リポジトリ インターフェイスを使用しています。次に、2 つの具体的なリポジトリを実装し、アプリケーションを変更せずにそれらを切り替えることができます。すべてが見事に切り離されています。しかし、私は思わぬ障害にぶつかりました。リポジトリ メソッド内のコードが間違っているように感じ、それを改善する方法がわかりません。ここに私のコードのスニペットがあります:
public class OracleRepository<T> : IRepository<T> where T : new()
{
public IQueryable<T> GetAll()
{
if (typeof(T) == typeof(Object1))
{
return (IQueryable<T>)DataAccess.GetAllObject1().AsQueryable();
}
if (typeof(T) == typeof(Object2))
{
return (IQueryable<T>)DataAccess.GetAllObject2().AsQueryable();
}
throw new NotImplementedException();
}
}
問題は、私の DataAccess (データリーダーからオブジェクトを作成する) が一般的ではなく、サポートするオブジェクトの種類ごとに特定のメソッドを持っていることです。
上記を書き直して、ジェネリックなどを使用して if-then-elseif のリストを回避できますか?