[英]What are the possible data access layer design-patterns for desktop application?
[英]Data Access Layer design patterns
我必須設計一個帶.NET的數據訪問層,它可能會使用多個具有相同關系設計的數據庫管理系統(Mysql和Sql Server)。
基本上,從一個數據庫切換到另一個數據庫必須簡單,所以我希望你向我推薦一些對你有用的網站或書籍,通常的設計模式或信息來實現這種數據訪問層。
謝謝。
我喜歡使用基於接口的Db訪問。 Ado.net的每個數據庫提供程序都實現了基本接口,當您使用它們時,您的代碼可能如下所示:
public static IDbConnection GetConnection(string connectionName)
{
ConnectionStringSettings ConnectString = ConfigurationManager.ConnectionStrings[connectionName];
DbProviderFactory Factory = DbProviderFactories.GetFactory(ConnectString.ProviderName);
IDbConnection Connection = Factory.CreateConnection();
Connection.ConnectionString = ConnectString.ConnectionString;
return Connection;
}
然后,當您需要與db通信時:
public static DataTable Dummy()
{
using (IDbConnection Connection = GetConnection("SiteSqlServer"))
{
IDbCommand Command = Connection.CreateCommand();
Command.CommandText = "DummyCommand";
Command.CommandType = CommandType.StoredProcedure;
Connection.Open();
using (IDataReader reader = Command.ExecuteReader())
{
DataTable Result = new DataTable();
Result.Load(reader);
return Result;
}
}
}
使用此技術,您可以創建完全獨立於數據庫的DAL。 當然,對於一些復雜的情況,這還不夠。 但大多數情況下這將完成工作,並且您不需要各種外部庫。
最簡單的解決方案是使用ORM。 查看LLBLGen。 使用適配器模型,您可以在使用相同的業務對象時在數據提供程序之間切換。 它可以為MySql和Sql Server生成代碼。
總的來說,我是John Nolan 對企業應用程序架構模式的第二個推薦。
更具體地說,我總是建議您在接口后面隱藏數據訪問層,並使用依賴注入在運行時將特定的數據訪問組件注入域邏輯。
您可以使用依賴注入容器或手動執行 。
在技術方面,我會推薦Microsoft的Entity Framework ,因為您的數據訪問需求似乎受限於關系數據庫。 實體框架是微軟官方的OR / M,它提供許多不同的RDBMS以及LINQ支持。
這實際上取決於圖層的大小和您開發的產品類型。 如果它包含得相當好,那么ADO.NET可能是理想的。 如果它是一個更大的DAL層,並且它的多區域dbms的綠地開發,最好使用ORM工具。 它們是快速,高效和成熟的產品,只需更改單個參數即可快速啟用到另一個數據庫的重新定位。 編寫靜態ADO是傳遞給遺留的東西。
有幾個ORM工具可以完成這項工作,所有工作都略有不同,並且取決於您的預算,團隊規模等。他們可以通過編寫像NHibernate這樣的映射類來工作,或者通過反射工作,即屬性標記。
對於免費,即開源,如果你的skint,NHibernate是理想的。 我現在正在使用它,為大型企業產品構建DAL層。 它的優秀,但需要一些時間來掌握。 使用NHibernate,您可以定義映射類,在執行時為您生成db模型。 它支持存儲過程。 缺點是需要一些時間來學習,特別是在正確映射復雜數據方面。 它的優秀。 它有一大堆樣本和其他項目浮動使用它。 看看Koders.com。
如果你有一些預算,那么LLBLGen是理想的選擇。 它是強類型的,也支持存儲過程。
如果某些數據模型已經可用,那么TierDeveloper是理想的選擇。 它基本上是免費的,並且通過從數據庫模型開發一組類來工作。 唯一的缺點是mysql的mapper是第三方。 它是一個企業級產品,可以自由支持ncache,它是一種可能的方法。
如果您迫切希望堅持使用MS,他們將轉向ORM,並擁有一個名為ADO.NET Entity Framework的產品。 從功能上講,它不如上面定義的工具那么完整。 它在成熟時落后約3代。 它在vs sp1中可用。 mysql的連接器是一個成本。
此外,您可以使用LINQ。 如果你還需要連接器,它也將以mysql為目標。
理想情況下,最好的選擇是使用ORM。 如果你不能支持開源,並有預算,那就搞定吧
希望有所幫助。
我發現ADO.NET對此非常有用。 它具有創建獨立於您使用的數據庫的數據訪問層所需的所有功能。
如果您願意學習它, NHibernate旨在處理這種情況
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.