リポジトリとサービスの違いは?


105

リポジトリとサービスの違いは何ですか?つかんでいないようです。

私はデータアクセスレイヤーを介したデータアクセスについて話している。通常はlinq to sqlを使用している。

非常に多くの場合、単純なCRUDメソッドを備えたリポジトリと、よりビジネス固有のメソッドを備えたサービスを目にします。

このブログ投稿を例にとります。下部のインターフェース(画像)を見ると、彼には2つのリポジトリーと2つのサービスがあります。どこに何を置くべきかをどうやって知るのですか?

先ほど申し上げたように、リポジトリはCRUDのような運用向けで、サービスはよりビジネス指向のようです。

ありがとう


元気にできますか?どのような状況で?ほとんどの単語と同様に、これらの単語が使用されているコンテキストは、意味を定義するのに役立ちます。
デビッド

2
注:ここでは、Webサービスなどについて話していません。私はデータレイヤーを介したデータアクセスについて話している。
alexn 2009

回答:


78

リポジトリは本質的にファサードです 永続性のコレクションスタイルのセマンティクス(追加、更新、削除)を使用してデータ/オブジェクトへのアクセスを提供します。これは、アプリケーションの残りの部分からデータ/オブジェクトを格納する方法を分離する方法です。

サービスは、アプリケーションの操作に必要な調整またはその他の「サービス」を提供します。通常、サービスは永続性からデータにアクセスする方法を認識しておらず、リポジトリは通常、所有しているサービスのデータ/オブジェクトにのみアクセスするという点で大きく異なります。


19
リポジトリは、データアクセスに使用されるサービスの一種と言えます。
Ian Ringrose

5
これは、私たちが書くほとんどすべてのレベルで「サービス」であるという意味ではすばらしい定義ですが、リポジトリがオブジェクトのコレクションであることになっているという基本的な意図を失っています。
jlembke

4
ユニットテストを行う場合、データベースを回避するために必要なモックを最小限に抑えるための最小限の抽象化としてリポジトリを考える方が明確かもしれません。
Henry Heikkinen

repository= collectionfrom backbone.jsまたはrepository= servicefrom angular
slideshowp2

159

リポジトリは、データが保存される場所です。サービスはデータを操作するものです。

現実世界の状況比較では、お金が銀行の金庫に保管されている場合、金庫はリポジトリです。預金、引き出しなどの窓口はサービスです。


7
この回答をありがとう!シンプルで簡潔。
alexn 2009

1
上記のコメントに同意しました!実世界の説明も大好きです!
Kleigh

6
んん。そのため、銀行が金庫を取り除くことを決定し、お金を不利な状況に置く場合、窓口係は、リポジトリレイヤーの変更について知らなくても、以前と同様にあなたとやり取りします。
デニス

1
私は顧客がその実装について知りたいのではないかと思います。@ Dennis
Chucky

1
@デニスはい。これは、実際にはリポジトリパターンを使用する主な利点の1つです。サービスで何も変更せずに、リポジトリインターフェースの実際の実装を変更できるはずです。これは、ユニットテストとコードを疎結合にするための大きなメリットがあります。
ウォーレンパークス

12

私は最初の試みとして、一般的な意味で(もしあれば、より多くのコンテキストを与えるまで)言います:

  • 倉庫後で使用するために、いくつかのグローバルオブジェクトを配置する場所です。
  • サービスは、ビジネスロジックのコードで、明示的に(理想的にプレゼンテーション層、およびデータベース層から分離?)

3
次のことを行っても大丈夫でしょうか:私のリポジトリにはすべての複雑なデータベース呼び出しがあり、サービスで依存関係としてリポジトリを挿入します。私のサービスはDB呼び出しがどのように行われるかを認識せず、それを行うリポジトリの関数を呼び出すだけなので、コードを簡単にテストして問題を分離しました。したがって、ビジネスロジックとデータアクセスは分離されています。これは実行可能なアプローチでしょうか?
darophi

1
すべてのロジックがサービスで記述されている場合、コントローラーはサービスのみを呼び出しますか?
Islomkhodja Hamidullakhodjaev
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.