存储库和服务之间有什么区别?我似乎没有掌握它。
我说的是通过数据访问层进行数据访问,通常使用 linq to sql。
我经常看到具有简单 CRUD 方法的存储库,以及具有更多业务特定方法的服务。
我们可以以 this 篇博文为例。如果您查看底部的接口(图像),他有两个存储库和两个服务。一个人怎么知道把什么放在哪里?
正如我所说,存储库似乎更多地用于类似 CRUD 的操作和更面向业务的服务。
谢谢
存储库是存储数据的地方。服务是操纵数据的东西。
在现实世界的情况比较中,如果您的钱存放在银行的保险库中,那么保险库就是存储库。存款,取款等的柜员是服务。
存储库本质上是持久性的外观,它使用集合样式语义(添加、更新、删除)来提供对数据/对象的访问。这是一种将您存储数据/对象的方式与应用程序的其余部分分离的方式。
服务提供操作应用程序所需的协调或其他“服务”。它们的不同之处在于服务通常不知道如何从持久性中访问数据,而存储库通常只访问您可能拥有的任何服务的数据/对象。
repository
= collection
来自 backbone.js
还是 repository
= service
来自 angular
?
在一般意义上,我会说作为第一次尝试(直到你提供更多上下文,如果你有的话):
存储库是您放置一些全局对象的地方,以供以后使用。
服务是明确的业务逻辑代码(理想情况下与表示层和数据库层分开?)
以 MVC 应用程序为例。控制器向服务发出指令,服务与存储库对话以对数据库中的数据进行一些 CRUD。
这是使用DI完成的(依赖注入:这就像一个孩子告诉父亲给他钱但不关心钱是如何得到的,所以得到钱的方法是从孩子的知识中抽象出来的)
存储库使用原始 SQL 查询或通过 ORM(例如 Eloquent、Sequelize、Gorm、Hibernate 等)与数据库通信
服务调用存储库中的一个或多个方法以获得特定结果。(在服务中,您可以调用存储库中名为 findOne() 的示例方法,然后根据结果调用 updateOne())
存储库在执行任何所需的业务逻辑后处理数据访问和服务调用。
@David 的回答肯定对我有所帮助,但我想稍微改变一下他的方法。
银行隐喻:银行将您的钱存放在保险库中,保险库是一个数据库。柜员可以从金库中存取款,柜员就是仓库。客户是要求柜员存取款的人,客户就是服务。
你甚至可以进一步说你的雇主(写支票的人)是控制者:D
控制器将您的支票交给您->您在将支票交给出纳员之前验证以确保一切正确->出纳员存款。
所以通过这种方式你可以看到存储库只关心做数据库操作或事务,许多服务/客户可以去同一个存储库/柜员。
不定期副业成功案例分享