考慮下面的FetchData
方法。它旨在避免每次要從數據庫獲取一些數據時都複製數據庫查詢代碼。從DbDataReader讀取/序列化時避免代碼複製?
List<MyData> myData = new List<MyData();
FetchData((IDataReader reader) =>
{
myData.Add(new MyData(reader.GetString(0), reader.GetInt32(1)));
}, "usp_get_my_data");
它的工作原理,但它會很好,如果這個對象的創建可以以某種方式生活的FetchData
方法內。
有沒有更好的方法?
也許FetchData
可以進行修改,以直接返回某種類型X的名單?
protected void FetchData(Action<IDataReader> processor, String query)
{
using (var connection = CreateConnection())
{
connection.ConnectionString = ConnectionString;
connection.Open();
using (var command = connection.CreateCommand())
{
command.CommandType = CommandType.StoredProcedure;
command.CommandText = query;
using (IDataReader reader = command.ExecuteReader())
{
while (reader.read())
{
processor(reader);
}
}
}
}
}
的問題將是FetchData需要到現在的,這將是創造實現這一目的的東西。爲什麼不使用某種類型的接口將對象創建作爲實際對象的一部分(在這種情況下爲MyData),並將其傳遞給FetchData。 –
你的意思是像工廠?還有一個允許使用不同數據類型的模板? – l33t
傳遞給FetchData的處理器Action應該存在於MyData onbject中。 –