Domain driven design DomainDrivenDesign中的搜索查询和搜索结果

Domain driven design DomainDrivenDesign中的搜索查询和搜索结果,domain-driven-design,Domain Driven Design,我有一个带有新闻帖子的web应用程序。这些新闻帖子应该可以搜索在DDD上下文中,搜索查询和搜索结果是什么类型的建筑块? 这是我的想法 它们都没有身份,因此它们不是实体。但身份的缺失并不意味着他们是价值对象。正如埃里克·埃文斯所说: 然而,如果我们认为这类对象只是缺少标识,那么我们的工具箱或词汇表就没有增加多少内容。事实上,这些对象都有其自身的特点和对模型的意义。这些是描述事物的对象 我想说两者都是价值对象,但我不确定。让我困惑的是我在互联网上找到的例子。通常值对象是其他实体的一部分,它们不是“独

我有一个带有新闻帖子的web应用程序。这些新闻帖子应该可以搜索在DDD上下文中,搜索查询和搜索结果是什么类型的建筑块?

这是我的想法 它们都没有身份,因此它们不是实体。但身份的缺失并不意味着他们是价值对象。正如埃里克·埃文斯所说:

然而,如果我们认为这类对象只是缺少标识,那么我们的工具箱或词汇表就没有增加多少内容。事实上,这些对象都有其自身的特点和对模型的意义。这些是描述事物的对象

我想说两者都是价值对象,但我不确定。让我困惑的是我在互联网上找到的例子。通常值对象是其他实体的一部分,它们不是“独立的”。例如,提供货币或日期范围对象。事件将它们与枚举进行比较

若搜索结果将被视为值对象,那个么它将是由实体组成的值对象。我不确定这是否完全正确

我认为它们不是数据传输对象。因为我们现在不关心在层之间传输数据,而是关心它们在没有层的情况下对模型的意义

我不认为搜索查询是命令。因为这不是要求改变。 如上所述

人们通过发送命令请求对域进行更改


我正在尝试使用和学习DDD,有人能向我澄清这个问题吗?我在推理方面哪里出了问题?

简单的答案是,查询可能不属于您的领域。域模型不是用来提供查询的,它是用来在域中强制执行不变量的。由于查询本质上是只读的,没有不变量可强制执行,那么为什么要使事情复杂化呢?我认为人们在使用DDD时经常出错的地方是,他们认为既然他们在“使用DDD”,系统的每个方面都必须由域模型来处理。DDD可以帮助您处理复杂的业务规则,并且只应在您实际拥有这些规则时应用。此外,您可以而且可能应该有许多模型来支持每个有界上下文。但这是另一种讨论

有趣的是,你提到CQR是因为它代表什么?命令查询责任分离。因此,如果命令使用域模型,并且查询责任与域模型分离,那么这会告诉您要做什么?答案是,做任何最容易查询和显示数据的事情。如果select*from news table filled to DATASE起作用,请执行该操作。如果您更喜欢实体框架,请使用它。查询不需要涉及域模型


我想说的最后一点是,我认为很多人都在为DDD而挣扎,他们将DDD应用于没有太多业务不变量需要实施的情况,而域模型最终看起来很像数据库。确保你在工作中使用了正确的工具,不要让事情过于复杂。此外,您应该只在系统中存在这些不变量的区域应用DDD。这不是一个全有或全无的场景

简单的答案是,查询可能不是您的域的一部分。域模型不是用来提供查询的,它是用来在域中强制执行不变量的。由于查询本质上是只读的,没有不变量可强制执行,那么为什么要使事情复杂化呢?我认为人们在使用DDD时经常出错的地方是,他们认为既然他们在“使用DDD”,系统的每个方面都必须由域模型来处理。DDD可以帮助您处理复杂的业务规则,并且只应在您实际拥有这些规则时应用。此外,您可以而且可能应该有许多模型来支持每个有界上下文。但这是另一种讨论

有趣的是,你提到CQR是因为它代表什么?命令查询责任分离。因此,如果命令使用域模型,并且查询责任与域模型分离,那么这会告诉您要做什么?答案是,做任何最容易查询和显示数据的事情。如果select*from news table filled to DATASE起作用,请执行该操作。如果您更喜欢实体框架,请使用它。查询不需要涉及域模型


我想说的最后一点是,我认为很多人都在为DDD而挣扎,他们将DDD应用于没有太多业务不变量需要实施的情况,而域模型最终看起来很像数据库。确保你在工作中使用了正确的工具,不要让事情过于复杂。此外,您应该只在系统中存在这些不变量的区域应用DDD。这不是一个全有或全无的场景

您确定搜索查询和搜索结果是您的域语言的一部分吗?这不只是你应用程序的技术问题(实现问题)吗?你确定搜索查询和搜索结果是你的领域语言的一部分吗?这不只是你应用程序的技术问题(实现问题)吗?