Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 比较存储库、提供者和服务_Oop_Design Patterns_Architecture - Fatal编程技术网

Oop 比较存储库、提供者和服务

Oop 比较存储库、提供者和服务,oop,design-patterns,architecture,Oop,Design Patterns,Architecture,我需要实现从远程数据源检索数据的逻辑。现在我需要决定——我需要哪个概念:提供者、存储库还是服务 其实我不太明白这两者之间有多大的区别。是的,我知道存储库是更具体的数据,不应该包含任何业务逻辑。另一方面,提供者除了管理数据外,还可能包含一些业务规则。除了管理数据外,服务还可以包含一些业务逻辑。那么服务和提供者之间的区别是什么呢 从另一个角度来看,我认为使用服务是更好的方法,可以表明它是远程访问的抽象 总之:所有这些方法看起来都是合理的,我对此完全感到困惑。如果有人能帮我,我将不胜感激 存储库和服务

我需要实现从远程数据源检索数据的逻辑。现在我需要决定——我需要哪个概念:提供者、存储库还是服务

其实我不太明白这两者之间有多大的区别。是的,我知道存储库是更具体的数据,不应该包含任何业务逻辑。另一方面,提供者除了管理数据外,还可能包含一些业务规则。除了管理数据外,服务还可以包含一些业务逻辑。那么服务和提供者之间的区别是什么呢

从另一个角度来看,我认为使用服务是更好的方法,可以表明它是远程访问的抽象


总之:所有这些方法看起来都是合理的,我对此完全感到困惑。如果有人能帮我,我将不胜感激

存储库和服务不是相互排斥的。事实上,它们经常一起使用

服务层位于域对象之上,并为业务操作提供了一个课程粒度接口。它通常描述应用程序的用例。服务层使用存储库获取域对象,并在可能的情况下将进一步的执行委托给它们

存储库的作用类似于持久性域对象的集合。它提供了使用某些条件查找正确对象的方法。它还提供了保存这些对象的方法

存储库在野外的实现差别很大。存储库可以提供如下方法

列出findPersonByName(字符串名称)
或者使用标准对象的更通用的方法

列表查找(标准)
增读:

我不熟悉提供者模式

所有这些方法看起来都是合理的,我完全搞不懂 它

难怪你会感到困惑,因为现在人们似乎为了任何事情求助于服务和提供商,而事实恰恰相反;)

不过,存储库模式的定义更为精确:它是一组类型相同的对象,可以从中查询、添加或删除,在调用者看来是内存中的集合,但实际上映射到后台的持久存储


找一个能真正描述你的对象的名字,而不是用一堆被冲淡的、破烂的概念,怎么样?我完全支持所有开发人员都能立即识别的模式和共享习惯用法,但我看不到单词的用途,因为它们不再意味着任何精确的东西…

简单地说,您的服务使用存储库R进行数据库CRUD或搜索操作。 假设您有不同的服务S1、S2、S3,每个服务都有相同的契约(接口),但实现不同,您需要一个提供者来选择在什么上下文中使用哪一个服务。
您可以使用依赖项注入覆盖提供程序模式,这样您的代码就不那么耦合,也不需要负责实例化服务,您的客户端将使用DI容器实例化适当的服务,存储库将封装特定的数据逻辑以获取数据,例如,icCustomerRepository可以有SqlCustomerRepository、MySqlCustomerRepository实现。但是,DataProvider提取数据逻辑并使用配置的方法解析数据。数据可以来自数据库、平面文件或NoSql数据库。此外,数据提供者的配置可以在上下文中更改,这与注入服务的存储库实现不同。另一方面,正如Nefron解释的那样,服务在实体中定义的业务逻辑上运行

一般的“外部”操作如“EmailSender”类如何?它的后缀是什么?一方面,它不是存储库,不是数据提供者,另一方面,它不是内部应用程序依赖关系,因此根据您的回答,我们不能将其称为服务。
List<Person> findPersonByName(String name)
List<Person> find(Criteria criteria)