[英]Java Persistence layer in regards to Service/Repository layers
我需要在Java EE环境中对三个软件体系结构层(下面列出)进行可靠的解释,这是我从多个上下文中获取的。 简而言之,这就是我所获得的:
在浏览了多篇文章之后,我对服务层和持久层之间的区别位置感到困惑 - 它们是否重叠或是彼此的同义词? 我从来没有在真正相同的背景下听到过它们。
所有这些层是否总是使用/容易区分?
谢谢。
Service层封装了应用程序的业务逻辑和计算。 服务这个词用来强调使用面向服务的设计原则建模的业务逻辑层可以被不同的消费者使用,例如,Web表示层,API集成层,远程移动客户端,其他服务等等。上。 服务的示例可以是PayrollService
, DiscountService
, OrderService
等。这允许业务逻辑被编写一次并在不同技术,位置和应用程序的多个地方消费。
持久层负责向服务层提供数据访问操作。 为了遵循松散耦合的原则,服务层不应该担心数据的存储方式和位置 - 只需要它可以在需要时访问所需的数据。 服务层应该简单地将所需的业务逻辑应用于数据,使得数据访问代码与业务逻辑代码(在任何严肃的企业应用程序中)分离。
存储库是一种常用于实现持久层的设计模式。 在许多其他方面,它允许将应用程序数据建模和管理为域模型(技术团队成员和业务用户共享对业务域的共同理解的方式)。 这允许使用域驱动设计 ,确保技术和非技术用户共享一个共同的术语,并且技术工件尽可能地模仿他们的现实对应物。 存储库模式也很有用,因为它允许服务层通过一致的接口访问所有(或至少大多数)数据源(大多数提供基于存储库的持久层的框架在所有存储库上提供基本的CRUD方法)。 存储库的示例可以是OrderRepository
, PersonRepository
, DepartmentRepository
等OrderRepository
Fowler的网站对存储库模式有一个很好的概述 。
也就是说,存储库不是设计和实现持久层的唯一方法 - 它也可以通过其他方式实现,最简单的方法是使用本机数据访问技术,如JDBC,ODBC,ADO.NET等。
现在,为了回答这个问题, 服务和持久层应该在一个正确构建的软件系统中分开,以提供系统的业务逻辑和数据访问组件之间的松散耦合(如果您同意业务逻辑和数据访问是两个独立的问题)。 有关将各个应用问题封装为单独组件的入门知识,请参阅SOLID原则 。 这两层之间的任何重叠都会很糟糕,因为它会导致硬耦合,可能的代码重复,分散的错误,代码不灵活等。
存储库是一种设计模式,也是实现持久层的可能方式之一,尽管还有其他方法可以实现持久层。 以下视觉描述可能有所帮助:
------------------------------- -------------------------------
| 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 /
---------------------------
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.