NHibernateでリポジトリパターンが必要なのはなぜですか?


13

私はあなたの最初のNHibernateベースの公式アプリケーションを読んでいます

チュートリアルはわかりやすくてわかりやすいですが、Repositoryパターンを使用する理由を知りたいと思います。

様々でAddUpdateRemoveのメソッドProductRepositoryの実装は、コードはほとんど同じである-彼らはすべてのトランザクションを使用している、との違いは、「肉」、すなわちコールであるsession.Saveint型Add、メソッドsession.Deleteremove方法。(ページはHTMLのアンカーを欠いていますが、のような関連するコードのページを検索することができpublic void Removepublic void Add

そのコードは「間違っていると感じる」だけです。

作者がリポジトリパターンを使用しているのはなぜですか-NHibernateを使用するためのデモンストレーションのためだけなのか、それとも必要なのか、またはその他の理由がありますか?

追伸 私のバックグラウンドはActiveRecordを使用したRuby on Railsからのものですので、NHibernateがどのように機能するか、またはどのように使用されるかを理解しようとしています。


1
ACtive Recordパターンを好む場合は、キャッスルアクティブレコードを使用して、NHibernate castleproject.org/activerecordの
ベンロビンソン

3
これは重要な質問です。それを使用するかどうかについては、議論が続いています。Ayendeは、それを使用しないために彼の引数を書いた新しいシングルトンであるリポジトリ

回答:


10

リポジトリパターンは必要ありません。他のすべてのパターンと同様に、ビジネスニーズに対して行う必要がある「アーキテクチャ」の決定です。一般に、リポジトリパターンは「エンティティ永続性インゴランス」を実装するために使用されます。つまり、エンティティは、保存デバイス(データベース、XML、テキストファイルなど)で永続化する方法について何も知りません。たとえば、エンティティAddressがある場合、永続ロジックは含まれません(address.Saveやaddress.Updateなどは見つかりません)が、エンティティを永続化を担当するリポジトリメソッドに渡します。変更


はい、いいえと思います。NHibernateセッション自体は、一般的なリポジトリの一種です。そのため、追加のリポジトリを追加することは、一般に、ファサードをセッションオブジェクトに追加すること以上のことはありません。

実際に私の答えは、それはそれです、ビジネスニーズに対する単なる建築の決定メイクすることができ、「...リポジトリパターンが必要とされていません」のような始まる

私はそれに完全に同意します。しかし、セッション自体がリポジトリであるという点を見落としていました。それだけです。

9

リポジトリパターンを使用する利点は、データアクセスレイヤーをモックすることです。これにより、DALコードを呼び出さずにビジネスレイヤーコードをテストできます。他にも大きな利点がありますが、これは私にとって非常に重要なようです。


2
ActiveRecordパターンに+1を指定すると、モック用にDALを分離することが非常に難しくなり、通常、独自のデータベースを必要とする単体テストになります(この場合、単体テストは統合テストになります)。
MattDavey
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.