簡體   English   中英

數據訪問層設計模式

[英]Data Access Layer design patterns

我必須設計一個帶.NET的數據訪問層,它可能會使用多個具有相同關系設計的數據庫管理系統(Mysql和Sql Server)。

基本上,從一個數據庫切換到另一個數據庫必須簡單,所以我希望你向我推薦一些對你有用的網站或書籍,通常的設計模式或信息來實現這種數據訪問層。

謝謝。

我推薦Martin Fowler的企業應用程序架構模式。

他的網站上也有一系列模式

DataMapper模式也很重要。

我喜歡使用基於接口的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM