如何实现面向领域驱动架构的查询策略?

2026-05-27 06:150阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计4154个文字,预计阅读时间需要17分钟。

如何实现面向领域驱动架构的查询策略?

在《.NET应用框架架构设计实践 - 概述》的评论部分,有网友提出了一个面向领域驱动架构实践中的常见问题:如何使用聚合根访问查询,例如那些通用的查询如何实现?

在上一篇文章《.NET应用框架架构设计实践 - 概述》的评论部分,有网友提出了一个在面向领域驱动架构的实践中比较常见的问题:“DDD使用聚合根访问,那例如那些通用查询如何实现?难道都要经过聚合根多步得到么?DDD如何实现关联表的查询,例如3表关联查询?”这个问题比较泛,涉及的内容也比较多,我就单独一篇文章介绍一下我对这个问题的看法。关于上面问题中的“通用查询”- 呃,这个定义比较模糊,我只能给出我的一些想法或者经验性的东西,我在本文中的经验与观点并不一定会100%适合您的应用场景,但我想应该还是具有一定指导性意义的。

聚合与聚合根

我想,还是从聚合根谈起吧。聚合根是DDD中的概念,不管是经典的DDD架构,还是基于事件驱动的CQRS架构,其实它们之间绝大部分概念都是相通的,比如实体、值对象、服务、工厂、仓储以及聚合/聚合根等。根据我的理解,聚合根是一个实体,它保持着与其它实体/值对象的引用,并与这些实体/值对象一起,来表达领域的通用语言中的一个唯一的无二义的逻辑概念。比如最常见的“客户(Customer)”,在“在线销售”的领域中,“客户”不仅包含它所指代的那个个人(或者是组织)的名称、联系电话、联系电邮,还会包含它的联系地址(Contact Address)以及送货地址(Delivery Address),那么就Address而言,在此我们可以将其视为值对象,因为我们只关心地址本身所包含的信息。在这里,“客户(Customer)”不仅是实体,而且是“客户-地址”所组成的对象集合(聚合)的聚合根。

阅读全文

本文共计4154个文字,预计阅读时间需要17分钟。

如何实现面向领域驱动架构的查询策略?

在《.NET应用框架架构设计实践 - 概述》的评论部分,有网友提出了一个面向领域驱动架构实践中的常见问题:如何使用聚合根访问查询,例如那些通用的查询如何实现?

在上一篇文章《.NET应用框架架构设计实践 - 概述》的评论部分,有网友提出了一个在面向领域驱动架构的实践中比较常见的问题:“DDD使用聚合根访问,那例如那些通用查询如何实现?难道都要经过聚合根多步得到么?DDD如何实现关联表的查询,例如3表关联查询?”这个问题比较泛,涉及的内容也比较多,我就单独一篇文章介绍一下我对这个问题的看法。关于上面问题中的“通用查询”- 呃,这个定义比较模糊,我只能给出我的一些想法或者经验性的东西,我在本文中的经验与观点并不一定会100%适合您的应用场景,但我想应该还是具有一定指导性意义的。

聚合与聚合根

我想,还是从聚合根谈起吧。聚合根是DDD中的概念,不管是经典的DDD架构,还是基于事件驱动的CQRS架构,其实它们之间绝大部分概念都是相通的,比如实体、值对象、服务、工厂、仓储以及聚合/聚合根等。根据我的理解,聚合根是一个实体,它保持着与其它实体/值对象的引用,并与这些实体/值对象一起,来表达领域的通用语言中的一个唯一的无二义的逻辑概念。比如最常见的“客户(Customer)”,在“在线销售”的领域中,“客户”不仅包含它所指代的那个个人(或者是组织)的名称、联系电话、联系电邮,还会包含它的联系地址(Contact Address)以及送货地址(Delivery Address),那么就Address而言,在此我们可以将其视为值对象,因为我们只关心地址本身所包含的信息。在这里,“客户(Customer)”不仅是实体,而且是“客户-地址”所组成的对象集合(聚合)的聚合根。

阅读全文