0

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

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

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

我使用以下代码....完美运行,但我的问题是...

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

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

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();
    }

}
4

1 回答 1

0

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

于 2011-03-21T17:29:18.473 回答