2011-06-16 13 views
0

<a href="http://martinfowler.com/eaaCatalog/repository.html" rel="nofollow">Martin Fowler</a>によると、リポジトリパターン論争

... "Clientオブジェクトが 仕様宣言クエリを作成し、 満足のためのリポジトリにそれらを提出する" ...

なぜ?その時点での利点は何ですか?

1つの短所があります。データベースクエリは、ネクタイ上に広がって隠れています。そのため、デバッグが難しくなります。

答えて

2

利点は、 "what"(宣言的な仕様)が "how"または実装の詳細から切り離されていることです。したがって、クライアントは、リレーショナルデータベース、Webサービス、オブジェクトデータベース(Mongoなど)、XMLデータストアなどを照会するかどうかを知る必要はありません。

RDBMSを使用しているとします。それでも、クライアントは、データベースがOracle、MS SQL、SQLite、mySQL、PostGresなどであるかどうかを知る必要性から隔離されています。これは、 "あなたはMS SQLを使用しない"というコマンドを使用すると、または何でも)山から降りる。

追加のレイヤーでオーバーヘッドが発生します。しかし、(1)(N)HibernateのようなORMツールは、あなたが使用しているバックエンドのために生成されたクエリを最適化する上で非常に優れています。(2)データベースの読み込みコストに比べてオーバーヘッドは無視できます。サービスコール。

"N + 1"の問題を回避するために、LINQからNHibernateに変換しています(つまり、 "master"データベースレコードごとに1つのクエリ/ヒットを生成し、さらに "child"レコードごとにクエリ/ヒットを生成します)。 そしてBTW ... NHibernateへのLINQのようなものがあります。

関連する問題

 関連する問題