DDD & Clean Architecture:为什么不在应用层定义存储库?

问题描述 投票:0回答:1

我正在将 Go 与 Clean Architecture 和 DDD 结合使用。我不喜欢我需要在域层定义我的存储库。最后是应用程序层定义了它想要的内容,例如作为应用程序层,我知道我想从任何地方获取或保存

Item
,它是一个域实体。为什么我不在需要的应用程序层中现场定义存储库接口,而不是在域层中定义存储库接口?然后,领域层可以让自己忙于领域业务规则,而不是知道需要持久化事物,对我来说,这更像是应用程序细节。

域仍然可以负责创建聚合。我认为它不需要知道事物是如何持久化的就可以做到这一点。只需让应用程序层将多个实体和/或值对象传递给某个工厂函数即可创建聚合;为什么不呢?

我问过多个法学硕士,但我发现答案并不令人满意。我希望有人能够就这个问题提供一些启示和/或意见。

domain-driven-design clean-architecture
1个回答
0
投票

我的理解是,存储库接口是在域中定义的,因为它们是“战术”DDD 模式。此外,其他域组件(例如域服务)可能需要依赖于存储库接口。该域不应该能够引用应用程序“层”中的类型。

...它不需要知道事物是如何持久化的

不,不是。这就是为什么您在域中定义接口并在其他地方定义实现的原因。域规定了“什么”,而其他层定义了“如何”。

© www.soinside.com 2019 - 2024. All rights reserved.