存储库和服务之间的区别?

时间:2009-09-17 17:00:56

标签: design-patterns

存储库和服务之间有什么区别?我似乎没有抓住它。

我说的是通过数据访问层进行数据访问,通常使用linq到sql。

我经常看到使用简单CRUD方法的存储库,以及具有更多业务特定方法的服务。

我们可以以this博客文章为例。如果你看一下底部的接口(图像),他有两个存储库和两个服务。如何知道放在哪里?

正如我所说,对于类似CRUD的操作和服务而言,存储库似乎更多是面向业务的。

由于

4 个答案:

答案 0 :(得分:108)

存储库是存储数据的位置。该服务是操纵数据的。

在实际情况比较中,如果您的钱存储在银行的保险库中,则保管库就是存储库。存款,取款等的出纳员就是服务。

答案 1 :(得分:65)

存储库本质上是持久性的外观,它使用集合样式语义(添加,更新,删除)来提供对数据/对象的访问。这是一种将数据/对象与应用程序其余部分存储方式分离的方法。

服务提供操作您的应用程序所需的协调或其他“服务”。它们的不同之处在于,服务通常不知道如何从持久性访问数据,而存储库通常访问您可能拥有的任何服务的数据/对象。

答案 2 :(得分:12)

我会说,作为第一次尝试,在一般意义上(直到你给出更多背景,如果你有一个):

  • 存储库是您放置一些全局对象的地方,稍后将使用。
  • 服务是一个业务逻辑代码,是否明确(并且最好与Presentation层和数据库层分开?)

答案 3 :(得分:2)

以 MVC 应用程序为例。控制器向服务发出指令,服务与存储库对话以对数据库中的数据进行一些 CRUD。

这是使用DI(依赖注入:这就像一个孩子告诉父亲给他钱但不关心钱是如何获得的,因此获得钱的方法是从孩子的知识中抽象出来的)< /p>

Repository 在厨房准备菜肴

服务调用一个或多个厨师(存储库中的方法)以获得特定的定制餐