DataProvider Switch / Singleton? - PullRequest
       9

DataProvider Switch / Singleton?

0 голосов
/ 21 марта 2011

У меня есть веб-сайт, и я хочу перейти с MySql на SqlServer.

На своем веб-сайте я использую слой BE (бизнес-объекты), BLL (уровень бизнес-логики), DAL (уровень доступа к данным) и, конечно, веб-уровень (веб-сайт)

I 'Мы создали переключатель в файле web.config (настройки приложения), чтобы указать веб-сайту использовать MySql или SqlServer в качестве DataProvider.

Я использую следующий код ...., который отлично работает, но мой вопрос ...

  • Это правильный способ использования многоуровневого DAL-уровня?
  • Безопасна ли эта тема?или я должен внедрить Singleton в классе Factory?

Пожалуйста, дайте мне знать, что вы должны делать, или каково ваше мнение.

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

}

1 Ответ

0 голосов
/ 21 марта 2011

Я рекомендую вам использовать контейнер Inversion of Control (IoC).Один из таких контейнеров IoC можно найти в Microsoft Unity.

...