gpt4 book ai didi

c# - 服务类应该引用其他服务类还是只引用其他存储库类?

转载 作者:太空宇宙 更新时间:2023-11-03 14:10:18 25 4
gpt4 key购买 nike

我有一个 WCF 服务类 PersonService,它可以将 Person 和他/她的地址信息保存到数据库中的 Person 和 Address 表中。
下面是两个版本的实现:

版本 1(存储库版本)

    [ServiceContract]
class PersonService
{
private IPersonRepository _personRepository;

//by referencing other **repository**
private IAddressRepository _addressRepository;

private PersonService(IPersonRepository personRepository, IAddressRepository addressRepository)
{
_personRepository = personRepository;
_addressRepository = addressRepository;
}

public void Add(Person person){
_personRepository.Add(person);

//by calling method from the **repository** layer
if(!_addressRepository.Contains(person.Address))
{
_addressRepository.Add(person.Address);
}
}
}

版本 2(服务版本)

[ServiceContract]
class PersonService
{
private IPersonRepository _personRepository;

//by referencing other **service**;
private IAddressService _addressService;

private PersonService(IPersonRepository personRepository, IAddressService addressService)
{
_personRepository = personRepository;
_addressService = addressService;
}
public void Add(Person person)
{
_personRepository.Add(person);

//by calling method from the **service** layer
if (!_addressService.Contains(person.Address))
{
_addressService.Add(person.Address);
}
}
}

哪一个是更好的做法?像 PersonService 这样的服务类应该与其同一层的接口(interface)更多地耦合,还是应该与 Repository 层等较低层的接口(interface)耦合?为什么?

最佳答案

两个版本是一样的。接口(interface)名称不应暗示实现细节。

PersonService 类不关心谁在实现接口(interface)(存储库或服务),只要它获得实现接口(interface)的对象即可。

最后,这就是您使用接口(interface)而不直接使用实现它的类的原因。

如果您正在裁判如何进行依赖项注入(inject),我会通过该服务,以防您在 AddressService 中进行一些缓存或其他处理。

关于c# - 服务类应该引用其他服务类还是只引用其他存储库类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8059660/

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