2011-03-21 57 views
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(); 
    } 

} 
+0

這可以工作,但你可以使用IoC容器做同樣的事情來保存幾行代碼。 – 2011-03-21 17:12:24

回答

0

我建議您使用控制反轉(IoC)容器。一個這樣的IoC容器可以在Microsoft Unity中找到。