gpt4 book ai didi

repository - 使用 CQRS 的 DDD 中的通用存储库模式,它有意义吗?

转载 作者:行者123 更新时间:2023-12-04 01:21:43 24 4
gpt4 key购买 nike

存储库模式让我很困扰

存储库的实际用途是什么?我将其理解为 Domain.Model 的一部分,它提供了在聚合上执行命令的方法,仅此而已。

现在,如果您使用的是为 CUD 提供方法的通用基础存储库,您可能会说您的域不是通用的,因此存储库不是通用的,我同意,但仅从一个角度来看,发出的查询不是命令。

我认为通用存储库消除了对 Domain.Repositories 的需求,至少在 DDD 与 CQRS 混合的情况下是这样(我知道我听起来可能会引起争议,这也正是我的想法)。但是,如果您将命令与查询分开,那么您将拥有仅包含 CUD 操作的 WriteRepositories。因此到处都有很多重复项。

想象一下

CustomerRepository : ICustomerRepository
{
void Add(CustomerAggregate agg);
void Update(CustomerAggregate agg);
}


BookRepository : IBookRepository
{
void Add(BookAggregate agg);
}


SubscriptionsRepository : ISubscriptionsRepository
{
void Add(SubscriptionAggregate agg);
void Update(SubscriptionAggregate agg);
void Delete(SubscriptionAggregate agg);
}

......另外5个 repo

那么在使用 CQRS 模式的 DDD 上下文中,如果有 Command.Stack + Query.Stack,通用存储库是否有意义?如果是这样,它是否消除了对 Domain.Repositories(命令存储库)的需要?

最佳答案

What is the actual purpose of a repository ?

Evans(the blue book)的第 6 章非常详细地介绍了存储库模式。存储库“提供内存集合的错觉......”

A REPOSITORY lifts a huge burden from the client, which can now talk to a simple, intention-revealing interface, and as for what it needs in terms of the model

They decouple application and domain design from persistence technology, multiple database strategies, or even multiple data sources.

它不是域模型的一部分,不直接支持命令执行。相反,它是一种抽象,将了解域行为的代码(通过聚合根的 API)与了解如何执行数据查找以及在持久表示和内存表示之间进行转换的代码分开。

I understand it as a part of Domain.Model, something that provides means of executing commands on aggregates and that is it.

不是吗?聚合根是域模型的一部分,知道如何组装它们的工厂也是如此。

但是存储库实际上并不是领域模型的一部分;域模型根本不使用存储库;应用层使用它们,基础设施层提供实现。

So does a generic repository makes sense in the context of DDD using CQRS pattern

嗯,推广 CQRS 模式的人不是 a big fan of generic repository interfaces .

关于repository - 使用 CQRS 的 DDD 中的通用存储库模式,它有意义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53197011/

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