2012-05-02 4 views
1

私はデータアクセスレイヤーを構築しており、異なる環境の2つのプロバイダーを切り替える必要があります。SQL ServerとMySqlのデータアクセスレイヤーを作成する方法

これはどのように構成しますか?私はリポジトリパターンを使用しています。 CarRepositoryクラスとCarクラスです。 CarRepositoryクラスは、データベースの保存、削除、および読み込みを担当します。

私はDatabaseクラスを持っており、データベースに接続し、クエリを実行します(SQL Server用にSqlCommandを送信します)。基になるデータベースのSQL構文は異なり、パラメータ構文も異なります(SQL Serverは@を使用し、MySqlは?を使用します)。

私は、両方のプラットフォームでアプリケーションを動作させるための努力を最小限に抑えることができます。

具体的な方法は、MySqlCarRepositorySqlServerCarRepositoryですが、メンテナンスが多くなります。このシナリオに対する良いアプローチはありますか?多分、さまざまなSQLの味のためのSQL文を含む静的な文字列を持つ静的クラスを保持していますか? (どのようにパラメータの構文について、その後?)

何かアドバイスは

+4

あなたは説明できますか? –

答えて

0

あなたが任意のコード生成ツールを使用することができます(ORM(NHibernateは、Linq2Sqlなど)がオプションではありませんので、予めご了承ください)

歓迎ですか?

私はコードスミスを別の人生で使用し、DBテーブルからPOCOオブジェクト、各オブジェクトとストアドプロシージャのリポジトリクラスを生成するテンプレートを持っていました。テンプレートを微調整してもうまくいきました。ネットにはたくさんの例がありました。

しかし、私はライトを見て前にこれは方法でしたNHibernate

2

私が従うアプローチは、データアクセスの実装を抽象化するためにまずADOプロバイダファクトリを使用することです。だからコードでIDbConnectionなどを使用します。

次に、私はクエリの抽象化を持っています。私は実際のSQLステートメントを含むQueryオブジェクトを使用することができます。これらのQueryオブジェクトは、RawQueryまたは各プロバイダタイプの実装を持つさまざまなクエリビルダ(insert/update/delete/etc)から作成されます。特定の生のクエリは、取得されたgettinがないので、必要なDBに固有のコード化して取得する必要があります。

この「配管」のコーディングには多少の脚の作業があります。実際にはさまざまなプラットフォームが必要な状況はありませんでしたので、アイロンがけが必要な小さなビットをコーディングしていませんでしたが、いくつかのコードを見ることに興味があれば、お気軽にご連絡ください。

+0

私はいくつかのコードを見てみたいと思います。答えにサンプルを挿入したり、Gmailのドットコムでh4mm3rheadにメールしてください。乾杯 –

0

複数のデータベースタイプにアクセスするパターンは、DAO(データアクセスオブジェクト)パターンです。 ORMを使用できない/使用できない場合、これはあなたの特別なニーズに合っている可能性があります。次の記事では、Javaのためのパターンを説明したが、それは、C#のためにまだ非常に関連性がある:ORMはオプションではありませんなぜ

http://java.sun.com/blueprints/corej2eepatterns/Patterns/DataAccessObject.html

関連する問題