【问题标题】:In Onion Structure, can an infrastructure service call another infrastructure service?在洋葱结构中,一个基础设施服务可以调用另一个基础设施服务吗?
【发布时间】:2020-11-08 06:42:16
【问题描述】:

例如基础设施层有两个服务:

  1. Contact,这是一项 Elasticesearch 服务。
  2. PhoneNumber 这是一个 SQL 服务。

Contact 服务需要获取每个联系人的电话号码并返回给调用者,所以它需要调用PhoneNumber 服务。

我想知道Contact是否可以直接调用PhoneNumber?它们都在基础设施层。

或者,我应该先让Contact回到domain层的服务,然后让domain层的服务调用PhoneNumber

谢谢!

【问题讨论】:

    标签: onion-architecture


    【解决方案1】:

    简短的回答是,在基础架构中,在另一个服务中使用一个服务不是正确的模式,因为这一层中的所有服务都应该是第三方服务,并且在我们的基础架构层中它们之间不应该有任何关系。

    应用层负责从基础设施服务中获取数据。 例如,在这一层,可以实现以下方法

    List<string> GetPhoneNumbers(string contactName)
    {
      var phoneNumbers = new List<string>();
    
      var contacts = _contactService.GetContacts(contactName);
      foreach(var contact in contacts)
      {
        var phoneNumber = _phoneService.GetPhoneNumber(contact)
        phoneNumbers.Add(phoneNumber);
      }    
      return phoneNumbers;
    }
    

    _contactService_phoneService 是基础设施层中的两个服务。如果您使用存储库模式,它们的更好名称将是 _contactRepository_phoneRepository

    【讨论】:

      猜你喜欢
      • 2010-11-25
      • 1970-01-01
      • 2018-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-21
      • 2011-01-05
      • 2021-01-08
      相关资源
      最近更新 更多