存储库
作者:Edward Hieatt 和 Rob Mee
使用类似集合的接口访问域对象,在域层和数据映射层之间进行中介。
有关完整描述,请参见 P of EAA 页面 322
具有复杂域模型的系统通常会受益于一个层,例如数据映射器 (165) 提供的层,该层将域对象与数据库访问代码的细节隔离开来。在这样的系统中,在映射层之上构建另一个抽象层来集中查询构建代码可能是有价值的。当存在大量域类或繁重的查询时,这一点变得更加重要。在这些情况下,尤其是在添加此层有助于最大限度地减少重复的查询逻辑。
存储库在域层和数据映射层之间进行中介,充当内存中的域对象集合。客户端对象以声明方式构建查询规范,并将它们提交给存储库以满足。可以将对象添加到存储库中,也可以从存储库中删除对象,就像它们可以从简单的对象集合中添加和删除一样,存储库封装的映射代码将在后台执行适当的操作。从概念上讲,存储库封装了数据存储中持久化的对象集以及对它们执行的操作,从而为持久层提供更面向对象的视图。存储库还支持实现域层和数据映射层之间的干净分离和单向依赖关系的目标。
您还可以在 领域驱动设计 中找到对这种模式的良好描述。