DDD领域驱动设计模式结构图面向接口编程
9.资源库
在刚接触资源库(Repository)时,第一反应便是这就是个 DAO 层,访问数据库,然后吧啦吧啦,但是,当接触的越久,越发认识到第一反应是错的,资源库更多的是对资源的管理,而不仅仅是数据库中的数据,数据库可以作为资源的一部分,但不是全部,我们习惯将对外部系统的调用称为外部资源的获取,这也是将外部系统作为资源的一部分。
对于聚合来讲,资源库的作用是负责将聚合持久化到数据库的(通常是持久化到数据库),并且由于聚合根负责维持聚合的生命周期,也就使得应考虑仅聚合根才应该拥有资源库,这也是与 DAO 层不同的地方。
在分层设计时,考虑将资源库的抽象划分到领域层,属于领域模型对象的一部分,如同设计防腐层的抽象网关般,资源库的抽象作为特殊的网关,当在应用层或是领域层中操作资源库抽象时,将资源库作为管理聚合状态的工具,可以忽视基础设施层中对资源库的具体实现。而在考虑基础设施层中具体实现时,可根据需要选择适合的工具,以此来管理和操作资源。