首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DataProvider开关/单点开关?

DataProvider开关/单点开关?
EN

Stack Overflow用户
提问于 2011-03-21 16:56:51
回答 1查看 428关注 0票数 0

我有一个网站,想从MySql转到SqlServer。

在我的网站中,我使用了BE层(业务实体)、BLL (业务逻辑层)、DAL (数据访问层),当然还有Web层(网站)。

我在web.config (应用程序设置)中创建了一个开关,告诉网站使用MySql或SqlServer作为DataProvider。

我用的是折页码..。效果很好但我的问题是..。

  • 这是使用多DAL层的正确方式吗?
  • 这个线程安全吗?或者我必须在工厂类中实现Singleton ?

请让我知道你应该做什么,或者你的工作是什么。

代码语言:javascript
复制
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();
    }

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-03-21 17:29:18

我建议您使用反转控制(IoC)容器。在Microsoft中可以找到这样一个IoC容器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5380950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档