gpt4 book ai didi

spring - 在服务中使用多个服务或多个存储库?

转载 作者:行者123 更新时间:2023-12-03 16:50:36 25 4
gpt4 key购买 nike

假设我们有两个实体,EntityAEntityB .两个实体都有一个存储库来查询数据库,EntityARepositoryEntityBRepository .他们俩也有服务,EntityAServiceEntityBService .

现在在EntityBService中有一个方法,这也需要使用 EntityA .这样做的正确方法是什么?

  • EntityBService使用 EntityARepository直接地?
  • EntityBService使用 EntityAService ?

  • 我可以看到直接使用存储库可能会非常方便,但如果不仅有两个实体,它似乎也会变得有点困惑。

    是否有围绕此主题或建议的通用设计模式?

    最佳答案

    TLDR;这取决于!

    如果你想遵循领域驱动设计,我认为区分 service 是个好主意。和 repository .有不同的定义,可能在细节上有所不同,但我会坚持 Martin Fowler 对 Repository 的定义。 :

    (...) A Repository mediates between the domain and data mapping layers, acting like an in-memory domain object collection. (...)



    service :

    A Service Layer defines an application's boundary [Cockburn PloP] and its set of available operations from the perspective of interfacing client layers. It encapsulates the application's business logic, controlling transactions and coor-dinating responses in the implementation of its operations.



    值得指出的是 service不只是 repository + 业务逻辑。对于最简单的场景 repository只访问单个数据库,但对于创建单个实体的高级场景可能需要访问多个数据库,因此 repository作用是从 service 中删除这个 woffle层。

    这是你可以想出的:
  • 使用 EntityARepository直接在 EntityBService如果您要做的只是获取 EntityA没有任何与 EntityA 相关的业务逻辑.这是一个简单的例子:

  • EntityBService performs operation on EntityB, but it depends on purely EntityA state.


  • 使用 EntityAServiceEntityBService如果要求 EntityA涉及到EntityA相关的一些业务逻辑.这是一个简单的例子:

  • EntityBService performs operation on EntityB and EntityA and later needs to be created if it doesn't exist - creation involves a business logic like checking is it allowed (e.g. based on user role).

    关于spring - 在服务中使用多个服务或多个存储库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58340656/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com