关于Service / Repository层的Java Persistence层

时间:2014-08-14 16:38:31

标签: java service architecture repository persistence

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

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

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

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

谢谢。

1 个答案:

答案 0 :(得分:12)

服务层封装了应用程序的业务逻辑和计算。单词服务用于强调使用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   /
                           ---------------------------