领域驱动设计库

问题描述

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

谢谢。

解决方法

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

领域驱动设计上下文中的 REPOSITORY 模式参考是 Eric Evans 的“蓝皮书”的第 6 章。在那一章中,他讨论了生命周期管理模式。

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

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

动机主要是为了将开发人员的重点分开;思想的分离使开发“业务规则”的开发人员能够专注于领域,而不会被存储和检索问题分心。

,

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

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