【问题标题】:Where to call another microservice: Service or Repository layer?在哪里调用另一个微服务:服务层还是存储库层?
【发布时间】:2021-11-28 18:36:07
【问题描述】:

我有一个非常简单的问题。调用另一个微服务的最佳设计是什么,将其放入服务层或存储库层?

我的项目有层Controller -> Service -> Repository。假设从MicroserviceA我想调用MicroserviceB,我应该在哪一层调用?

我知道repository是用来和持久化数据交互的(主要是调用DB),但是,也用来调用另一个服务?

我在互联网上找到了多个定义和示例,例如 this answer,上面写着:

存储库负责将您的数据从存储格式映射到您的业务对象。它应该处理如何从存储读取和写入数据(删除,更新)。

另一方面,服务层的目的是将业务逻辑封装到一个地方,以促进代码重用和关注点分离。

还有this answer

Repository 层用于访问数据库,有助于扩展对数据库的 CRUD 操作。而服务层由应用程序的业务逻辑组成,并且可以使用存储库层来实现涉及数据库的某些逻辑。

所以我可以认为对另一个微服务的调用可以在服务层完成,因为它是业务逻辑的一部分,不涉及数据库,但另一方面,另一个微服务是否可以被视为“存储”,然后是存储库必须将响应映射到业务模型?

谢谢。

【问题讨论】:

    标签: architecture microservices repository-pattern


    【解决方案1】:

    这将是一个固执己见的答案,其他人可能不同意,但我认为这里的存储库模式应该关注抽象数据持久性,而不是与服务依赖关系。至少我认为在用于访问数据库的同一存储库模式中实现服务依赖是错误的。

    为了对服务依赖进行建模,我通常会实现一个专用组件,该组件代表服务连接器,并抽象出在业务逻辑中使用所需的通信并处理版本控制问题等。这类似于创建客户端库组件。组件提供的接口应该尽可能简单,并且可以根据业务组件的需要进行定制,或者在多个地方使用时具有更一般的性质。这样的客户端库甚至可能由最初提供服务的团队提供。

    【讨论】:

      猜你喜欢
      • 2017-02-02
      • 2015-02-14
      • 2011-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-30
      • 2012-01-29
      相关资源
      最近更新 更多