我正在編寫一個應用程序來創建文件的「目錄」,這些文件可以歸因於其他元數據文件,例如附件和縮略圖。誰應該負責關閉流
我試圖抽象接口到目錄到一個目錄的使用者不需要知道用於存儲文件的底層文件系統的點。所以我創建了一個名爲IFileSystemAdaptor
的界面,如下所示。
public interface IFileSystemAdaptor:IDisposable
{
void WriteFileData(string fileName, Stream data);
Stream ReadFileData(string filename);
void DeleteFileData(string filename);
void ClearAllData();
void WriteMetaFileData(string filename, string path, Stream data);
Stream ReadMetaFileData(string filename, string path);
void DeleteMetaFileData(string filename, string path);
void ClearMetaFilesData(string filename);
}
基本上我IFileSystemAdaptor接口公開文件的平面列表中,也可以與其他元數據文件相關聯。
正如你所看到的,我使用了對通用Stream
對象的引用來將接口抽象爲文件的數據。通過這種方式,目錄的一個實現可以從硬盤返回文件,而另一個實現可以從Web服務器返回數據。
現在我正試圖弄清楚如何讓我的程序保持打開狀態。有什麼成員應該關閉流的經驗法則?流的消費者應該關閉它,還是應該由原創流的成員負責關閉它。
最佳答案!謝謝! – 2010-09-17 21:59:38
一般來說,雖然我會添加第四個規則:當在構造函數或工廠方法中接受流(或其他IDisposable)時,如果構造對象可能比其他實際知道封裝流/對象,應該提供一個*選項*以讓構造對象的Dispose方法也處理封裝的流/對象。 – supercat 2013-11-18 23:12:43