我对领域驱动设计架构中的领域层有点困惑。
我知道这四层是表示层、应用层、域和基础设施,其中基础设施包含数据存储库。
我也明白,域层负责业务规则。在现在过时的贫血模型中,域对象没有任何行为。在 DDD 中,我们应该将行为和业务规则从服务转移到域。
之前,我会将存储库注入(inject)服务层。所以我的问题是 - 可以将存储库注入(inject)域对象以便它们可以执行业务规则吗?
最佳答案
不,将存储库注入(inject)域对象是不行的 :)
什么是可以接受的,但前提是确实没有其他方法,是将存储库或其他域对象(例如服务)传递到 AR 方法中,以通过双调度方法执行某些功能:
public void ApplyDiscount(IDiscountService service)
{
_discount = service.Discount(customerType);
}
正如我在其他帖子中提到的,我倾向于将 AR 视为物理计算器。有输入,通过键盘,有输出,通过屏幕。当计算器在做它的伏都教时,它不会与其他任何东西交互,也不会要求额外的信息。话虽如此,上面的例子中可能会有异常(exception),但我想折扣可以由操作脚本(服务层)决定:
public void RegisterOrderTask
{
private IDiscountService _discountService;
private IOrderRepository _orderRepository;
public void RegisterOrderTask(IDiscountService discountService, IOrderRepository orderRepository)
{
_discountService = discountService;
_orderRepository = orderRepository;
}
public void Execute(OrderDetails details)
{
_orderRepository
.Add(details.CreateOrder()
.SetDiscount(_disocuntService.Discount(details.CustomerType)));
}
}
这些只是一些虚构的想法,但可能会让您思考您的场景:)
关于asp.net - 在领域驱动设计架构中用数据填充领域对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32671398/