Service Class应该引用其他Service Class还是仅引用其他Repository Class?

时间:2011-11-09 02:19:54

标签: c# wcf architecture repository

我有一个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这样的Service类是否应该更多地与同一层中的接口,或者诸如Repository层之类的较低层?为什么?

1 个答案:

答案 0 :(得分:1)

两个版本都是一样的。 接口名称不应建议实现细节。

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

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

如果您正在裁判如何进行依赖注入,我将传递该服务,以防您在AddressService中进行一些缓存或其他处理。