データベースにアクセスするためのいくつかの異なる方法をインターフェースするインターフェース IDatabase があります。たとえば、RESTful または MySqlDirectConnect を使用します。
次に、データベースからデータを取り出す必要があるメンバー変数 A、B、C を持つクラス foo があります。
public class foo
{
private string a;
private int b;
private int c;
}
最初は、すべてのメンバー変数に対して Get メソッドを作成するつもりでした。Generics を使用して、使用するインターフェイスを指定します。
public string GetA<T>() where T: IDatabase
{
//example might be GetA<RESTful>();
}
public int GetB<T>() where T: IDatabase
{
//example might be GetB<MySQL>();
}
等々....
私が見る問題は、データベースが変更された場合、戻ってこれらすべてのメソッドを変更する必要があることです。場合によっては、クラス foo に約 20 個の変数があり、それぞれに Get() メソッドが含まれていることがあります。
そこで、照会したいインターフェイスと変数の両方を指定できる、本当に汎用的な GetValue() を作成したいと思います。
次の行に沿ったもの:
public object GetValue<T>(the class variable I want to query) where T: IDatabase
{
//query database using type T and return it to the variable specified
}
メソッド内のすべてのメンバー変数に条件を付けることは避けたいと思います。
それで、これは可能ですか?