当前位置: 首页 > 知识库问答 >
问题:

用域驱动设计体系结构中的数据填充域对象

高自怡
2023-03-14

以前,我会将存储库注入到服务层。所以我的问题是--可以将存储库注入域对象,以便它们能够执行业务规则吗?

共有1个答案

陈君之
2023-03-14

不,将存储库注入域对象是不行的:)

可以接受的是,但只有在确实没有其他方法的情况下,才可以通过double-dispatch方法将存储库或其他域对象(如服务)传递到AR方法中来执行某些功能:

public void ApplyDiscount(IDiscountService service)
{
    _discount = service.Discount(customerType);
}

正如我在其他帖子中提到的,我倾向于将AR视为物理计算器。有输入,通过键盘,有输出,通过屏幕。当计算器在做它的巫术时,它不与其他任何东西交互,也不要求额外的信息。也就是说,可能会有例外,如上面的示例,但我猜折扣可以由操作脚本(服务层)决定:

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)));
    }
}
 类似资料:
  • 我正在学习DDD概念,为了加强我的理解,我正在研究一些现实世界的例子。 我知道一个聚合应该只有一个通过根实体的入口点,一个聚合应该只有一个存储库(如果我完全理解错了,请纠正我) 现在假设有特定类型的消耗品,并且这些消耗品是从配送中心发送的。发送特定类型的消耗品取决于它们的数量,我的意思是,如果其中一个消费者对A型和B型的临界数量为10,并且这些项目的数量低于10,那么配送中心发送A型和B型消耗品。

  • 刚开始使用域驱动设计,我了解到您应该将模型保持在有效状态,并且在创建类的新实例时,建议将所有必需的属性作为构造函数参数。 但是,当使用自动递增的键时,当我从持久层调用Add方法时,我只有这个新ID。如果我在没有密钥的情况下实例化对象,我认为它们将处于无效状态,因为它们需要某种唯一标识符。 我应该如何实现我的架构,以便在创建我的实体的新实例之前拥有我的id?

  • 我是QLDB新手,似乎在多区域体系结构方面发现了一些有点冲突的信息。我看到它在特定区域具有高可用性;然而,不清楚当整个区域发生故障时会发生什么,或者我如何在一个热门的多区域应用程序中使用它。 假设应用程序位于US-East-2和US-West-2中,具有延迟路由规则。每一个都需要从同一个分类账中写入和读取。这是可能的,还是账本需要存在于单个区域中,并且只有一个区域可以完全访问,而另一个区域只能访问

  • 本文向大家介绍谈一下领域驱动设计相关面试题,主要包含被问及谈一下领域驱动设计时的应答技巧和注意事项,需要的朋友参考一下 主要关注核心领域逻辑。基于领域的模型检测复杂设计。这涉及与公司层面领域方面的专家定期合作,以解决与领域相关的问题并改进应用程序的模型。在回答这个微服务面试问题时,您还需要提及DDD的核心基础知识。他们是: DDD主要关注领域逻辑和领域本身。 复杂的设计完全基于领域的模型。 为了改

  • 我正在阅读领域驱动设计中的存储库和Microsoft微服务架构模式,他们都同意我应该为每个聚合根拥有一个存储库。我大体上同意这一点,但我有一个命名问题。 聚合是存储库作为... 实体是??? 值是??? 在我的特定场景中,我有一个营销网站上下文中产品对象的存储库。 Product是ProductInfo营销信息实体(Aggregate Root)、ProductSpec和ShippingInfo实

  • null 到目前为止,很容易。如果我们试图将规范应用到存储库,而又不破坏DDD模式或存在性能问题,那么问题就会出现。 应用规范的可能方法: 1)经典方法:在领域层使用领域模型进行规范 null null 3)与2)类似,但将规范作为持久层的一部分 这不起作用,因为域层需要参考规范。它仍将取决于持久层。 我们将在持久层中拥有业务逻辑。这也违反了DDD模式 4)与3类似,但使用抽象规范作为接口 nul