Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.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
与服务/存储库层相关的Java持久性层_Java_Service_Architecture_Repository_Persistence - Fatal编程技术网

与服务/存储库层相关的Java持久性层

与服务/存储库层相关的Java持久性层,java,service,architecture,repository,persistence,Java,Service,Architecture,Repository,Persistence,我需要一个关于JavaEE环境中的三个软件架构层(如下所列)的详细解释,这是我从多个上下文中获得的。简而言之,这就是我得到的: 服务层:包含前端后面的服务,其功能适合在软件生命周期内重复使用 持久性层:处理前端后面的操作,介于前端和存储库层之间 存储库层:在后端包装数据创建/检索的数据处理操作 在浏览了多篇文章之后,我对服务层和持久层之间的区别感到困惑——它们会重叠还是同义?我从来没有听人在完全相同的背景下提到过他们 所有这些层是否始终使用/易于区分 谢谢。服务层封装了应用程序的业务逻辑和计

我需要一个关于JavaEE环境中的三个软件架构层(如下所列)的详细解释,这是我从多个上下文中获得的。简而言之,这就是我得到的:

  • 服务层:包含前端后面的服务,其功能适合在软件生命周期内重复使用
  • 持久性层:处理前端后面的操作,介于前端和存储库层之间
  • 存储库层:在后端包装数据创建/检索的数据处理操作
在浏览了多篇文章之后,我对服务层和持久层之间的区别感到困惑——它们会重叠还是同义?我从来没有听人在完全相同的背景下提到过他们

所有这些层是否始终使用/易于区分


谢谢。

服务层封装了应用程序的业务逻辑和计算。服务一词用于强调一点,即使用建模的业务逻辑层可供不同的使用者使用,例如web表示层、API集成层、远程移动客户端、其他服务等。服务的示例可以是
PayrollService
DiscountService
OrderService
,等等。这使得业务逻辑可以编写一次,并在不同的技术、位置和应用程序的多个位置使用

持久层负责向服务层提供数据访问操作。为了遵守松耦合的原则,服务层不应该担心数据存储的方式和位置,只需在需要时访问所需的数据即可。服务层应该简单地将所需的业务逻辑应用于数据,以便数据访问代码与业务逻辑代码分离(在任何严肃的企业应用程序中)


存储库是一种常用于实现持久层的设计模式。除此之外,它还允许将应用程序数据作为域模型进行建模和管理(技术团队成员和业务用户共享对业务域的共同理解的一种方式)。这允许通过确保技术用户和非技术用户共享一个通用术语和尽可能接近真实世界的技术工件来使用。存储库模式也很有用,因为它允许服务层通过一致的接口访问所有(或至少大多数)数据源(大多数提供基于存储库的持久性层的框架在所有存储库上提供基本的CRUD方法)。存储库的示例可以是
OrderRepository
PersonRepository
部门存储库
,等等。Martin Fowler的网站有一个

这就是说,存储库不是设计和实现持久层的唯一方法——它也可以用其他方法实现,最简单的方法是使用本机数据访问技术,如JDBC、ODBC、ADO.NET等


现在,为了回答这个问题,服务持久性层应该在一个架构正确的软件系统中分开,以在系统的业务逻辑和数据访问组件之间提供松散耦合(如果您同意业务逻辑和数据访问是两个独立的关注点)。有关将单个应用程序问题封装为单独组件的入门知识,请参阅。这两个层之间的任何重叠都是不好的,因为它将导致硬耦合、可能的代码复制、分散的错误、代码不灵活等

Repository是一种设计模式,也是实现持久性层的可能方法之一,尽管还有其他实现持久性层的方法。以下视觉描述可能会有所帮助:

 -------------------------------                 -------------------------------
|       W e b   l a y e r       |               |        A P I   l a y e r      |
 -------------------------------                 -------------------------------
 -------------------------------------------------------------------------------
|                          S e r v i c e   l a y e r                            |
 -------------------------------------------------------------------------------
 -------------------------------------------------------------------------------
|                      P e r s i s t e n c e   l a y e r                        |
 -------------------------------------------------------------------------------
                                ---------------------------
                               /                          /
                               ---------------------------
                             /                           /
                             ---------------------------
                           /   D a t a   S t o r e s   /
                           ---------------------------