C# 服务层中依赖关系的建议

C# 服务层中依赖关系的建议,c#,architecture,domain-driven-design,C#,Architecture,Domain Driven Design,在服务类中定义依赖项的推荐体系结构方法是什么 当另一个类ex.OrderService依赖于存储库类ex.CartRepository而不是CartService时,这可以吗?我是否应该始终为每个域对象创建一个存储库和一个服务 public class CartService : ICartService { private IBuyerRepository _buyerRepository; private ICartRepository _cartRepository;

在服务类中定义依赖项的推荐体系结构方法是什么

当另一个类ex.OrderService依赖于存储库类ex.CartRepository而不是CartService时,这可以吗?我是否应该始终为每个域对象创建一个存储库和一个服务

public class CartService : ICartService
{
    private IBuyerRepository _buyerRepository;
    private ICartRepository _cartRepository;
    private IConfigService _configService;  
    private ISimpleDataService _simpleDataService;

    public CartService(IBuyerRepository buyerRepository,
                       ICartRepository cartRepository,
                       IConfigService configService)
    {
        _buyerRepository = buyerRepository;
        _cartRepository = cartRepository;
        _configService = configService;
    }

    public void Save(Cart cart)
    {
        _cartRepository.Save(cart); 
    }
}
OrderService文件:


作为第一步,您的实现是很好的,而且是在一个简单、不太大的领域中

此类实施具有以下特点: 虽然每个http resquest只有一个服务管理它所需的所有存储库,但管理sql事务以保持完整性并不困难

它有太多的缺点: 您可以编写两次或更多次相同的业务规则。。。我们都很懒,所以这是个问题。但是,当某人或您在6个月后在服务实现中第三次调用存储库并忘记一条业务规则时,就会出现重大失败。。。再见,可爱的域名

我的建议是,服务只需调用其存储库,并在需要时调用封装其自身逻辑的其他服务。 要记住的唯一技巧是传播事务以避免发生奇怪的事情

希望有帮助,
Julien

域服务用于协调存储库和域对象之间的交互。我不会说在一个域服务中使用多个依赖项是个问题。是的,我知道。我问的是,是否所有服务层类都应该在Approvaliate另一个域对象服务类而不是repository类上取消标记。在这个例子中,OrderService对cartRepository有依赖关系,但如果我把这种依赖关系放在ICarService接口上,那不是更好吗?我不知道是否有任何明确的规则。我认为在您的订单服务中使用购物车存储库没有任何问题。否则,您可能会使用只在其他服务中使用的方法来混乱您的ICarService。但如果我想在数据库中保存每个对象之前检查服务类中存在的一些验证逻辑,那么可能更好的方法是在OrderService类中插入服务类?
public class OrderService : IOrderService
{
    public OrderService(ICartRepository cartRepository)
    {

    }
}