我正在編寫一個用於編目文件的應用程序,並將這些文件與元數據相關聯。一個相冊程序將是我想要做的一個很好的比較。試圖瞭解如何抽象我的數據訪問層
我想抽象出我的程序和存儲文件的文件系統之間的接口,以及存儲文件的元數據的數據庫。這是爲了允許模擬和單元測試。另外,我希望能夠創建我的工具的多個實現,可以利用不同的數據庫格式和/或文件系統結構。
例如,我創建了一個接口IFileSystemAdaptor
,該接口用於讀取和寫入文件和相關元文件(縮略圖和附件)到文件系統。 IFileSystemAdaptor
的實際實現決定文件的存儲位置和結構。
public interface IFileSystemAdaptor
{
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, Stream data);
void DeleteMetaFileData(string filename, string path);
void ClearMetaFilesData(string filename);
}
所以現在我試圖做一些類似的連接到數據庫。我有一個fairly complex structure of classes,我想讀取和寫入數據庫。我希望能夠實現連接到SQL Server數據庫的實現,以及另一個使用無服務器數據庫(如SQL Lite)的實現。
我該如何抽象我的類和數據庫之間的數據訪問層,以支持多種數據庫類型?另外我怎樣才能允許我的類中的繼承關係反映在數據庫中?我更喜歡遵循「class table inheritance」模式的數據庫格式(請參閱我的其中一個previous questions)。
是的,我也得出這個結論。我當然不想重新發明輪子。我一直在尋找SubSonic,現在我正在考慮NHibernate。我遇到的一個問題是我想要選擇允許「Class Table Inheritance」(http://martinfowler.com/eaaCatalog/classTableInheritance.html)的解決方案。從我看到的亞音速總是希望將類中的所有屬性(繼承或不繼承)存儲在該類的相應表中。 NHibernate可以將繼承關係反映到不同的表中嗎? – 2010-09-14 22:26:44
我這麼認爲。 nhibernate是.NET中最成熟的ORM之一。從2003年開始,它已經從Java Hibernate移植過來。看看這篇文章(不知道它是否有幫助):http://ayende.com/Blog/archive/2009/04/10/nhibernate-mapping-ndash-inheritance.aspx – jgauffin 2010-09-15 05:02:27
你也可以看看流利的nhibernate如果你不想使用XML文件將你的表映射到你的類。 http://wiki.fluentnhibernate.org/Fluent_mapping#Subclasses – jgauffin 2010-09-15 05:08:35