0
我有一個網站,並希望從MySql跨越到SqlServer。DataProvider Switch/Singleton?
在我的網站,我使用BE層(業務實體),BLL(業務邏輯層),DAL(數據訪問層),當然還有一個Web層(網站)
我已經創建了一個開關在web.config(應用程序設置)中告訴網站使用MySql或SqlServer作爲DataProvider。
使用我的如下因素代碼....這完美的作品,但我的問題是...
- 這是使用多級DAL正確的方式?
- 此線程安全嗎?或者我必須在Factory類中實現Singleton?
請讓我知道你應該做什麼,或者你的opionion是什麼。
namespace MyNameSpace.BE {
public class Product {
public int Id { get; set; }
public int Description { get; set; }
}
}
namespace MyNameSpace.DAL.Base {
public abstract class ProductManager {
public abstract List<Product> GetProductList();
}
}
namespace MyNameSpace.DAL.MySql {
public class ProductManager : Base.ProductManager {
public override List<Product> GetProductList() {
return new List<Product>();
}
}
}
namespace MyNameSpace.DAL.SqlServer {
public class ProductManager : Base.ProductManager {
public override List<Product> GetProductList() {
return new List<Product>();
}
}
}
namespace MyNameSpace.Bll {
/// do I have to use Singleton here ?? or not ?
public static class Factory {
private static ProductManager CreateProductManager() {
if (Config.Settings.Switches.DataProvider == DataProvider.MySql) {
return new DAL.MySql.ProductManager();
} else if (Config.Settings.Switches.DataProvider ==
DataProvider.SqlServer) {
return new DAL.SqlServer.ProductManager();
}
return null;
}
private static ProductManager _ProductManager;
public static ProductManager ProductManager {
get {
if (_ProductManager == null) {
_ProductManager = CreateProductManager();
}
return _ProductManager;
}
}
}
}
/// <summary>
/// for example ASP.NET page
/// </summary>
class MyPage {
public MyPage() {
List<Product> productList = Factory.ProductManager.GetProductList();
}
}
這可以工作,但你可以使用IoC容器做同樣的事情來保存幾行代碼。 – 2011-03-21 17:12:24