2009-02-25 3 views
3

データアクセスレイヤDALを設計する必要があります.Netエンタープライズライブラリバージョン3.5データアクセスアプリケーションブロック(DAAB) 私のアプリケーションでは、登録、課金、注文管理、ユーザー管理、 C#ビジネスエンティティを使用してモジュールオブジェクトをデータベーステーブルにマップしてから、Listコレクションをクライアントに返します。DALデザインに関する質問

明日私たちが他のデータアクセスフレームワークを使用することに決めたら、最小限のコード変更しか行わないようにDALを設計したいと思います。 これを受けて、クラス構造をどのように設計するのですか? は私が

など、私はDbManagerBaseはExecuteReaderの、は、ExecuteNonQueryなどのパブリックメソッドを持っているでしょうIDbManagerBaseと呼ばれるインタフェースを実装し、このクラスの既存の.NET DAAB のラッパーになるクラスDbManagerBaseを持つことになり、クライアントのクラスすなわち思いました。 RegistrationDAL、UserManagermentDALは、それぞれのメソッドの内部に次のコードを持ちます。 IDbManagerBase obj = new DbManagerBase() obj.ExecuteReader(myStoredProcName) 。 。 。 これは良いOOPSデザインですか?私はより良いアプローチを教えてもらえますか?または私はここで継承を使用する必要がありますか? DbManagerBaseクラスとRegistrationDAL、UserManagermentDALクラスのすべてのメソッドを静的にすることはできますか?静的メソッドを使用していれば、上記のインターフェイスコードは意味をなさないでしょうか?

答えて

2

質問のいくつかに答えるために:

iがstaticとして DbManagerBaseクラスと RegistrationDAL、UserManagermentDAL クラスのすべてのメソッドを持つことができますか?

私はおそらく、DALのインスタンス化をより柔軟に制御できる柔軟性を持たせるために静的ではないアプローチを行っています(たとえば、工場からそのインスタンスを作成することもできます)別のDBにもっときれいな方法で話しているDAL。また、インスタンスメンバーであるため、すべてのオブジェクトにDbManagerBaseのインスタンスを作成する必要はありません。私はあまりにも多くの場所でデータベース固有の概念についての知識を焼くには注意でしょう

のExecuteReader、のExecuteNonQueryとobj.ExecuteReader(myStoredProcName)を有する

についてIDbManagerBase。ストアドプロシージャをサポートしないDBもありますので注意してください。

別のポイントは、DALを実装する前に、NHibernateやSubsonicのような他のオープンソースのDALでいくつかのコードを読んでいることでしょう。あなたのビジネス上の問題を解決し、開発時間を大幅に短縮することは可能です。

あなたが階層化DALアーキテクチャの小さな例を探しているなら、私のlittle project on github(それは非常に基本的なものですが、あなたは難解なデータベースの多くをサポートするためのインターフェースを構築する方法を示します)

があります