领域驱动设计存储库

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

我正在从头开始学习 DDD 主题,在许多 DDD 示例中我看到“存储库接口”位于域中。该存储库的真正目的实际上是什么/它到底做什么或解决什么问题?这与持久层实现相对应或有某种联系吗?

谢谢你。

domain-driven-design ddd-repositories
2个回答
6
投票

这个存储库的真正目的是什么/它到底做什么或解决什么问题?

领域驱动设计背景下存储库模式的(权威)参考是 Eric Evans 的“蓝皮书”第 6 章。 在这一章中,他讨论了生命周期管理模式。

存储库是一个外观,旨在支持域实体(第 5 章模式)保存在某个内存集合中的错觉。 因此,当您的流程需要一个实体时,它会向存储库请求该实体(通常提供一个标识符作为提示)。

Parnas 1971的意义上来说,这是一种信息隐藏形式;我们可以在存储在内存中的瞬态集合和存储在磁盘、RDBMS 或键/值存储中的持久集合之间自由切换。 只有存储库的实现需要担心管道的细节。

其动机主要是为了分散开发人员的注意力;思想的分离允许致力于“业务规则”的开发人员专注于领域,而不会因存储和检索的问题而分心。


1
投票

存储库接口位于域层,存储库本身在基础设施层实现。在域层中定义存储库接口允许在基础设施实现之间轻松切换,因为知道所有基础设施都遵循相同的接口。

最终,应用程序层将从基础设施层调用存储库实现。更进一步,您甚至可以基于存储库接口定义一个应用程序接口,然后定义一个应用程序实现,您可以从基础设施层注入所选的存储库实现。

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