应用服务组合
Application Services Composition
我有一个 Customer 实体,它具有对城市的引用:
public class Customer
{
public int CustomerId { get; set; }
public int CityId { get; set;}
}
然后,以下应用服务:
public class CustomerService
{
private readonly ICustomerRepository customerRepository;
public CustomerService(ICustomerRepository customerRepository)
{
this.customerRepository = customerRepository;
}
public void RegisterCustomer(Customer customer)
{
//Do another things...
customerRepository.Save(customer);
}
}
要注册新客户,服务使用者必须有权访问城市列表以放入 CityId,例如获取城市列表以填充组合框。
因此有必要提供列表城市操作。
我应该将此操作添加到 CustomerService 吗?
喜欢:
public class CustomerService
{
private readonly ICustomerRepository customerRepository;
private readonly ICityRepository cityRepository;
public ServicoCliente(
ICustomerRepository customerRepository,
ICityRepository cityRepository)
{
this.customerRepository= customerRepository;
this.cityRepository= cityRepository;
}
public void RegisterCustomer(Customer customer)
{
customerRepository.Save(customer);
}
public List<City> ListCities()
{
return cityRepository.GetAll();
}
}
或者创建一个新服务:
public class CityService
{
private readonly ICityRepository cityRepository;
public CityService(ICityRepository cityRepository)
{
this.cityRepository= cityRepository;
}
public List<City> ListCities()
{
return cityRepository.GetAll();
}
}
在后一种情况下,消费者应该引用两个服务才能完成一个操作:RegisterCustomer。
遵循哪种方法?这样做的优缺点是什么?
这是代码组织问题,与DDD关系不大
public class CustomerService {
public List ListCities()
{
return cityRepository.GetAll();
}
}
这里有一个明显的不匹配——您不希望从客户服务 public 接口方法到 return 城市。这打破了最小惊奇原则,将导致未来几代开发人员进行大量搜索和摸不着头脑。
对我来说,专职服务似乎是个更好的主意。
我有一个 Customer 实体,它具有对城市的引用:
public class Customer
{
public int CustomerId { get; set; }
public int CityId { get; set;}
}
然后,以下应用服务:
public class CustomerService
{
private readonly ICustomerRepository customerRepository;
public CustomerService(ICustomerRepository customerRepository)
{
this.customerRepository = customerRepository;
}
public void RegisterCustomer(Customer customer)
{
//Do another things...
customerRepository.Save(customer);
}
}
要注册新客户,服务使用者必须有权访问城市列表以放入 CityId,例如获取城市列表以填充组合框。
因此有必要提供列表城市操作。
我应该将此操作添加到 CustomerService 吗?
喜欢:
public class CustomerService
{
private readonly ICustomerRepository customerRepository;
private readonly ICityRepository cityRepository;
public ServicoCliente(
ICustomerRepository customerRepository,
ICityRepository cityRepository)
{
this.customerRepository= customerRepository;
this.cityRepository= cityRepository;
}
public void RegisterCustomer(Customer customer)
{
customerRepository.Save(customer);
}
public List<City> ListCities()
{
return cityRepository.GetAll();
}
}
或者创建一个新服务:
public class CityService
{
private readonly ICityRepository cityRepository;
public CityService(ICityRepository cityRepository)
{
this.cityRepository= cityRepository;
}
public List<City> ListCities()
{
return cityRepository.GetAll();
}
}
在后一种情况下,消费者应该引用两个服务才能完成一个操作:RegisterCustomer。
遵循哪种方法?这样做的优缺点是什么?
这是代码组织问题,与DDD关系不大
public class CustomerService {
public List ListCities() { return cityRepository.GetAll(); }
}
这里有一个明显的不匹配——您不希望从客户服务 public 接口方法到 return 城市。这打破了最小惊奇原则,将导致未来几代开发人员进行大量搜索和摸不着头脑。
对我来说,专职服务似乎是个更好的主意。