using System;
using System.Data;
using System.Configuration;
using System.Reflection;
using Common;
namespace BLL
{
public class Customers
{
public DataTable GetAllCustomers()
{
string AssemblyName =
ConfigurationSettings.AppSettings
["DALAssembly"];
string TypeName = "DAL.CustomersData";
IDbCustomers cd =
//(IDbCustomers)=
Assembly.Load(AssemblyName).
CreateInstance(mytype);
DataTable dt = cd.GetCustomers();
return dt;
}
public DataSet GetCustomerOrders()
{
// 待定
return null;
}
}
}
您可以看到,程序集使用從配置文件中讀取的名稱進行加載,并創建和使用 CustomersData 類的實例。
一些可能的改進
要了解我所建議的方法的示例,請查看 NET Pet Shop v3.0 示例應用程序。建議您下載此示例并深入了解它,不僅是為了解決可移植性問題,同時也是為了解決其他相關問題(如緩存和性能優化)。
在為可移植應用程序設計數據訪問層的過程中,一個需要注意的重要問題是如何與其他層進行信息通信。在本文的示例中,我只使用了一個普通的 DataTable 實例;在生產環境中,您可能希望根據必須表示的數據類型(您必須處理分層結構等)考慮不同的解決方案。在這里,我不希望從頭開始,建議您查閱 Designing Data Tier Components and Passing Data Through Tiers 指南,它詳細描述了不同情況以及所建議的解決方案的優點。
如我簡介中所述,在設計階段,應該考慮您的目標數據源所公開的特定特性以及總體數據訪問。這應該涵蓋存儲過程、XML 序列化等事項。關于 Microsoft® SQL Server™ 2000,您可以在下面的網址中找到有關如何優化使用這些特性的介紹:.NET Data Access Architecture Guide。強烈建議您閱讀一下該指南。
我總是收到許多關于 Data Access Application Block 以及它如何與參數關聯(如本文所述)的請求。這些 .NET 類充當 SQL Server .NET 數據提供程序之上的抽象層,并使您能夠編寫更多優秀代碼與數據庫服務器進行交互。下面是一段演示可行操作的代碼:
DataSet ds = SqlHelper.ExecuteDataset(
connectionString,
CommandType.StoredProcedure,
"getProductsByCategory",
new SqlParameter("@CategoryID", categoryID));
此方法還有一個外延,您可以在 GotDotNet 上的開放源代碼 Data Access Block 3.0 (Abstract Factory Implementation) 示例中找到。此版本實現相同的抽象工廠模式,并使您能夠根據可用的 .NET 數據提供程序使用不同數據源。
結論
您現在應能夠根據選擇的特定數據源構建不需要修改的業務邏輯類,并可以利用給定數據源的唯一特性獲得更好的效果。這是有代價的:我們必須實現多組類,以便封裝特定數據源的低級別操作,以及可以為每個特定數據源(存儲過程、函數等)構建的所有可編程對象。如果希望獲得高性能和高可移植性,就必須付出這樣的代價。
文章來源于領測軟件測試網 http://www.kjueaiud.com/