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();
}
}
이 방법이 효과적이지만 IoC 컨테이너를 사용하여 몇 줄의 코드를 절약 할 수 있습니다. –