2011-03-21 5 views
0

나는 웹 사이트를 가지고 있으며 MySql에서 SqlServer로 단계를 넘기고 싶다. 내 웹 사이트에서DataProvider 스위치/싱글 톤?

나는 내가 스위치를 만들었의 물론 BE 층 (사업체), BLL (비즈니스 로직 계층), DAL (데이터 액세스 계층) 및 웹 레이어 (웹 사이트)

를 사용 web.config (앱 설정)에서 MySQL 또는 SqlServer를 DataProvider로 사용하도록 웹 사이트에 지시합니다. 내가 완벽하게 작동하지만, 내 질문입니다 folowing 코드를 .... 사용

...

  • 이 다 DAL 계층을 사용할 수있는 권리 방법이 있나요?
  • 이 스레드는 안전합니까? 아니면 Factory 클래스에서 Singleton을 구현해야합니까?

당신이해야 할 일이나 귀하의 취향을 알려주십시오.

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 컨테이너를 사용하여 몇 줄의 코드를 절약 할 수 있습니다. –

답변

0

IoC (Inversion of Control) 컨테이너를 사용하는 것이 좋습니다. 하나의 그러한 IoC 컨테이너는 Microsoft Unity에서 찾을 수 있습니다.