0

Web サイトを持っていて、MySql から SqlServer にステップオーバーしたいと考えています。

私の Web サイトでは、BE レイヤー (ビジネス エンティティ)、BLL (ビジネス ロジック レイヤー)、DAL (データ アクセス レイヤー)、そしてもちろん Web レイヤー (Web サイト) を使用しています。

Web.config (アプリ設定) にスイッチを作成して、Web サイトに MySql または SqlServer を DataProvider として使用するように指示しました。

私は次のコードを使用しています....これは完全に機能しますが、私の質問は...

  • これは複数の 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();
    }

}
4

1 に答える 1

0

制御の反転 (IoC) コンテナーを使用することをお勧めします。このような IoC コンテナーの 1 つが Microsoft Unity にあります。

于 2011-03-21T17:29:18.473 に答える