【问题标题】:Java Persistence layer in regards to Service/Repository layers关于服务/存储库层的 Java 持久层
【发布时间】:2014-10-08 09:51:26
【问题描述】:

我需要对 Java EE 环境中的三个软件架构层(如下所列)进行深入的解释,我从多个上下文中获取了这些信息。简而言之,这就是我的收获:

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

浏览多篇文章后,我对区别在服务层和持久性层之间的位置感到困惑——它们可能重叠还是彼此的同义词?我从来没有听到他们在相同的背景下被提及。

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

谢谢。

【问题讨论】:

    标签: java service architecture repository persistence


    【解决方案1】:

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

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


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

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


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

    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   /
                               ---------------------------
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-03
      • 1970-01-01
      • 2018-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多