【问题标题】:In Hexagonal architecture, can a service rely on another service, or is that tight coupling?在六边形架构中,一个服务可以依赖另一个服务,还是紧密耦合?
【发布时间】:2022-01-09 07:42:41
【问题描述】:

我正在创建一个银行应用程序。目前,有一个主要服务,交易服务。该服务允许通过 id 获取交易,并创建交易。为了创建交易,我首先要检查交易是否有效,通过检查它试图从中扣除的账户的余额,看看他们是否有足够的余额。我现在在做

TransactionController 调用 TransactionServiceTransactionService 创建Transaction,然后检查这是否是一个有效的交易。此时,我创建了一个AccountsService,它查询AccountsRepository,返回一个Account。然后我根据Account.balance > Transaction.amount进行比较。

我意识到TransactionService create 方法依赖于AccountService get 方法。此外,AccountService 永远不会直接从控制器调用。

这是构建架构的好方法,还是有更优雅的方法?

【问题讨论】:

    标签: java rest hexagonal-architecture


    【解决方案1】:

    在你的情况下,我会说没关系,因为我猜如果Account.balance < Transaction.amount 你真的不想继续交易。所以你必须在某个时候从AccountService 获取所需的数据,这是没有办法的。

    如果您只是想触发一些副作用任务(例如发送电子邮件或其他内容),您可以依赖基于事件的方法,TransactionService 将在该方法上发布事件,而假设的 NotificationsService 将对其做出反应在某个时间点做它的事。

    【讨论】:

      【解决方案2】:

      你的逻辑看起来不错。如果您只需要来自 Transaction 服务(或其他 Service)的 Account Service,这是有效的。如果逻辑没有意义,则无需从 Controller 调用 Account Service。事实上,从控制器调用的某些服务可能会调用许多其他服务 - 例如电子邮件服务、短信服务等。

      【讨论】:

        【解决方案3】:

        我不会创建帐户服务。我会从交易服务中调用帐户回购。除此之外,在知道它是否有效之前,我不会创建一个事务对象。我会在创建交易之前检查条件。

        【讨论】:

          猜你喜欢
          • 2011-02-01
          • 2020-07-09
          • 2011-06-07
          • 2014-09-04
          • 1970-01-01
          • 2017-10-31
          • 2022-12-20
          • 2018-11-19
          • 1970-01-01
          相关资源
          最近更新 更多