2011-03-08 34 views
1

您認爲用於將某種文件類型讀入我的應用程序的「理想」設計模式是什麼?.Net數據讀取器的設計模式

我希望能夠在各個地方重複使用代碼,所以很清楚我希望將它放在單獨的dll中,但是,儘管我沒有問題將代碼文件或流傳遞到代碼中,但推薦的設計模式是處理讀取的數據。

從內存管理的角度來看,將所有數據讀入數組並將其傳遞出來顯然是不理想的,但我能想到的唯一方法是在讀取記錄時引發事件,但是,並不覺得「正確」,因爲我會擔心一些事件可能會誤入歧途。

我敢肯定,這樣做的確有一種非常光滑的方式,但我不能爲了我的生活而想到它。

謝謝

+0

查看http:// MSDN。 microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.aspx – 2011-03-08 08:13:38

回答

1

什麼是格式?如果是文字,通過TextReader將是理想的;和xml,一個XmlReader。如果是任意二進制,則傳入Stream

對於大數據,理想的方法儘可能是以非緩衝的方式讀取數據 - 即不要將它全部加載到內存中。迭代器塊可以在這裏很有用,例如這裏只是一個例子,顯示讀數線(但它很容易能夠從數據流中的內置yield return對象):

public IEnumerable<string> ReadLines(TextReader source) 
    { 
     string s; 
     while ((s = source.ReadLine()) != null) 
      yield return s; 
    } 

很顯然,在一般情況下,更多的加工每件物品可能都是必需的!

呼叫者現在有你的數據的延遲加載後臺,無緩衝源,例如:

using(var file = File.OpenRead(path)) 
{ 
    foreach(var customer in YourSpiffyParser(file)) 
     DoSomethingFun(customer); 
} 

和處理流/ TextReader的等使他們能夠在一個裝飾鏈比其他的東西用它文件;網絡流,內存中的流,壓縮/加密流等。

0

很難定義這樣一般的東西。您必須指定更多您真正需要的內容或文件類型。然後,你可以看看.NET框架本身,也有很多的 「XXXReader」 類,例如:

  • BinaryReader在
  • 的TextReader
  • 的StreamReader
  • StringReader
  • 的XmlReader
  • XmlTextReader
  • IDataReader
  • EventLogReader
  • XamlReader
  • EntityDataReader

而且每一個都是從別人真的不一樣......有些是抽象的,有些則不是,等...