关于Service / Repository层的Java Persistence层

问题描述 投票:4回答:1

我需要在Java EE环境中对三个软件体系结构层(下面列出)进行可靠的解释,这是我从多个上下文中获取的。简而言之,这就是我所获得的:

  • 服务层:包含前端后面的服务,其功能适合在软件生命周期中重复使用
  • 持久层:处理前端后面的操作,介于前端和存储库层之间。
  • 存储库层:包装后端数据创建/检索的数据处理操作。

在浏览了多篇文章之后,我对服务层和持久层之间的区别位置感到困惑 - 它们是否重叠或是彼此的同义词?我从来没有在真正相同的背景下听到过它们。

所有这些层是否总是使用/容易区分?

谢谢。

java service architecture repository persistence
1个回答
14
投票

Service层封装了应用程序的业务逻辑和计算。单词Service用于强调使用Service-oriented design principles建模的业务逻辑层可以由不同的消费者使用的点,例如,Web表示层,API集成层,远程移动客户端,其他服务等。服务的示例可以是PayrollServiceDiscountServiceOrderService等。这允许业务逻辑被编写一次并在不同技术,位置和应用程序的多个地方消费。

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


存储库是一种常用于实现持久层的设计模式。在许多其他方面,它允许将应用程序数据建模和管理为域模型(技术团队成员和业务用户共享对业务域的共同理解的方式)。这允许使用Domain-driven design,确保技术和非技术用户共享一个共同的术语,并且技术工件尽可能地模仿现实世界的对应物。存储库模式也很有用,因为它允许服务层通过一致的接口访问所有(或至少大多数)数据源(大多数提供基于存储库的持久层的框架在所有存储库上提供基本的CRUD方法)。存储库的例子可能是OrderRepositoryPersonRepositoryDepartmentRepository等.Martin Fowler的网站有excellent overview of the repository pattern

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


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

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

 -------------------------------                 -------------------------------
|       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   /
                           ---------------------------
© www.soinside.com 2019 - 2024. All rights reserved.