领域驱动设计仓库

3

我从零开始学习DDD课题,在许多DDD示例中,我看到“仓库接口”位于域中。实际上,这个仓库的真正目的是什么?它到底解决了什么问题?它是否对持久化层实现有任何影响或关联?

谢谢。


请查看 https://abbasamiri.github.io/2020/10/25/repository_in_-domain_driven_design.html。 - Abbas Amiri
这被称为“控制反转”。通过这种方式,领域层不依赖于持久化层。 - Maxime Gélinas
2个回答

5
这个仓库的真正目的是什么?它到底是做什么或解决什么问题的? 在领域驱动设计的背景下,REPOSITORY模式的参考资料是Eric Evans的“蓝皮书”第6章。那是他讨论生命周期管理模式的章节。 仓库是一个门面,旨在支持DOMAIN ENTITIES(第5章模式)似乎被保存在某个内存集合中的幻觉。因此,当你的进程需要一个实体时,它会向仓库请求它(通常提供标识符作为提示)。 这是一种信息隐藏,在Parnas 1971的意义上;我们可以自由地在存储在内存中的瞬态集合和存储在磁盘上、关系数据库中或键/值存储中的持久集合之间切换。只有仓库的实现需要担心管道的具体细节。 动机主要是为了分离开发人员的焦点;这种思想上的分离允许专注于领域的“业务规则”的开发人员,而不会被存储和检索的问题所分散注意力。

1

仓库接口位于领域层,而仓库本身在基础设施层中实现。在领域层定义仓库接口可以轻松地在基础设施层的不同实现之间切换,因为它们都遵循相同的接口。

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


你好 @tlouarn,能否请您提供一个在领域层和基础设施层之间实现通信的示例? - James

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接