在 Onion Structure 中,一个基础设施服务可以调用另一个基础设施服务吗?
In Onion Structure, can an infrastructure service call another infrastructure service?
例如基础设施层有两个服务:
Contact
,这是一个 Elasticesearch 服务。
PhoneNumber
这是一项 SQL 服务。
Contact
服务需要获取每个联系人的 phone 号码和 return 给它的调用者,所以它需要调用 PhoneNumber
服务。
请问Contact
是否可以直接调用PhoneNumber
?他们都在基础设施层。
或者,我是不是应该先让Contact
return到domain层的服务,再让domain层服务调用PhoneNumber
?
谢谢!
简短的回答是,在基础架构中,在另一个服务中使用一个服务不是正确的模式,因为这一层中的所有服务都应该是第三方服务,并且在我们的基础架构层中它们之间应该没有关系。
应用层负责从基础设施服务中获取数据。
例如,在这一层中,可以实现以下方法
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
是基础设施层中的两个服务。如果您使用 Repository 模式,更好的名称是 _contactRepository
和 _phoneRepository
。
例如基础设施层有两个服务:
Contact
,这是一个 Elasticesearch 服务。PhoneNumber
这是一项 SQL 服务。
Contact
服务需要获取每个联系人的 phone 号码和 return 给它的调用者,所以它需要调用 PhoneNumber
服务。
请问Contact
是否可以直接调用PhoneNumber
?他们都在基础设施层。
或者,我是不是应该先让Contact
return到domain层的服务,再让domain层服务调用PhoneNumber
?
谢谢!
简短的回答是,在基础架构中,在另一个服务中使用一个服务不是正确的模式,因为这一层中的所有服务都应该是第三方服务,并且在我们的基础架构层中它们之间应该没有关系。
应用层负责从基础设施服务中获取数据。 例如,在这一层中,可以实现以下方法
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
是基础设施层中的两个服务。如果您使用 Repository 模式,更好的名称是 _contactRepository
和 _phoneRepository
。