我需要实现将从某些远程数据源检索数据的逻辑。现在我需要决定 - 我需要哪个概念:提供者,存储库或服务。
其实我不太了解那之间的所有巨大差异。是的,我知道存储库更具有数据特性,不应包含任何业务逻辑。除管理数据外,其他人的提供者可能包含一些业务规则。除了管理数据之外,服务还可以包含一些业务逻辑。那么服务和提供商之间有什么区别。
从另一个角度来看,我认为使用服务是一种更好的方法来表明它是远程访问的抽象。
总之:所有这些方法看起来都很合理,我完全与它混淆了。如果有人能帮助我,我将非常感激。
答案 0 :(得分:12)
存储库和服务不是互斥的。事实上,它们经常一起使用。
服务层位于域对象之上,为业务操作提供了一个粗粒度的接口。它通常描述您的应用程序的用例。服务层使用存储库来获取域对象,并尽可能将进一步的执行委托给它们。
Repository的作用类似于持久域对象的集合。它提供了使用某些标准查找正确对象的方法。它还提供了保存这些对象的方法。
野外存储库的实现有很大不同。存储库可以提供类似
的方法List<Person> findPersonByName(String name)
或使用标准对象的更通用的方法
List<Person> find(Criteria criteria)
补充阅读:service layer,repository
我不熟悉提供者模式。
答案 1 :(得分:0)
所有这些方法看起来都很合理,我完全混淆了 它
难怪你很困惑,因为人们似乎诉诸服务和提供商的任何事情,而这些日子却相反;)
更精确地定义了存储库模式:它是一组相同类型的对象,您可以从中查询,添加或删除,作为内存中的集合出现给调用者,但实际上映射到后面的持久存储场景。
如何找到一个真正描绘您的物品的名称,而不是使用淡化的概念?我完全是为所有开发人员都能识别的模式和共享习语,但是当它们不再具有任何精确性时,我看不到单词的使用......
答案 2 :(得分:0)
简单来说,您的服务服务S使用Repository R进行数据库CRUD或搜索操作。 假设您有不同的服务S1,S2,S3,每个服务具有相同的契约(接口)但实现不同,您需要一个提供者选择在哪个上下文中使用哪个。 您可以使用依赖注入覆盖提供者模式,这样您的代码就不那么耦合了,并且不能用于实现服务,您的客户端将使用DI容器实例化适当的服务
答案 3 :(得分:0)
存储库封装了一个特定的数据逻辑来获取数据,例如ICustomerRepository可以拥有SqlCustomerRepository,MySqlCustomerRepository实现。但是, DataProvider 抽象数据逻辑并使用配置的方法来解析数据。数据可以来自数据库,平面文件或NoSql数据库。此外,与注入服务的存储库实现不同,DataProvider的配置可以在上下文中更改。另一方面,正如Nefron解释服务对实体中定义的业务逻辑进行操作。