gpt4 book ai didi

domain-driven-design - CQRS 查询端实现

转载 作者:行者123 更新时间:2023-12-02 03:12:21 25 4
gpt4 key购买 nike

我有点困惑在哪里实现应用程序的查询端,atm 我有下一个架构:

Product.UI.Web.Admin (MVC)
Product.Application
-CommandHandlers (e.g OrdersCommandHandler)
-Commands (e.g CreateOrder)
Product.Domain
-Model (Behavior-rich models / repository interfaces)
Product.Infrastructure (Base interfaces / classes)
Product.Persistence
-ReadModel (EF Generated models)
--Implementation (Repository implementations: FindByID / Save)
  1. 我应该将 Queries 命名空间放在 Product.Application 中并且它们应该从那里直接访问数据库吗? (UI <= Product.Application <= Database)
  2. 我应该创建新程序集 Product.Queries 并且 Product.UI.Web.Admin 应该直接访问它吗? (UI <= Product.Queries)
  3. 我是否应该在 Product.Application 中添加 Queries 命名空间并创建新的程序集 Product.Reporting 并让 Application 程序集通过 Queries 命名空间使用 Reporting 程序集? (UI <= Product.Application.Queries <= Product.Reporting)

所有这三个解决方案都将 DTO 返回给 UI。

我正在考虑解决方案 #3,因为它可以很容易地在查询中使用域服务 来构建结果,而且它将使用 Product.Reporting 作为数据访问可以使用 ADO.Net、Entity Framework 或 NHibernate 来实现。或者我误解了什么。

请指导我并帮助我解决问题,谢谢。

更新我来到了第四个变体。

  1. 创建了 Product.Infrastructure.Queries 程序集,我有数据库 (dbcotnext) 和 ReadModel(EF 生成的模型和通用查询接口(interface))命名空间。
  2. 在 Product.Application 中添加了 DataModel 命名空间,我有 DTO 返回到 UI
  3. 在 Product.Application 中添加了 Queries 命名空间,在那里我实现了通用查询并使用 dbcontext 检索数据、映射到 DTO 并返回到 UI。

最佳答案

我想我只是在这里应用依赖倒置原则,并有类似 Application.Queries 的东西来定义接口(interface)和 Infrastructure.Queries 来实现这些接口(interface)。但是,我也看到了直接进入 Application 层的基础设施问题。例如,这就是 Vaughn Vernon 在 com.saasovation.collaboration.application.calendarCalendarEntryQueryService 中所做的。 SaasOvation 协作 BC。

关于domain-driven-design - CQRS 查询端实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39213411/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com