9.5 仓储模式
📝 模块更新日志
9.5.1 什么是仓储
在领域层和数据映射层的中介,使用类似集合的接口来存取领域对象,实际上,仓储被用于领域对象在数据库上的操作(实体 Entity 和值对象 Value types)。一般来说,我们针对不同的实体(或聚合根 Aggregate Root)会创建相对应的仓储。
简单来说,仓储就是数据存取操作的载体,但不限定于数据库。
9.5.2 内置仓储
Furion
框架内置了一个数据库操作的仓储,方便大家拓展和集成:
关于依赖注入说明
目前能够被依赖注入解析服务的仓储有:
IRepository
IRepository<TEntity>
IRepository<TEntity, TDbContextLocator>
ISqlRepository
ISqlRepository<TDbContextLocator>
IMSRepository
IMSRepository<TMasterDbContextLocator>
IMSRepository<TMasterDbContextLocator,...TSlaveDbContextLocator8>
IDbRepository<TDbContextLocator>
还有两个私有仓储,也是所有仓储的基类(用于高级自定义开发)
IPrivateRepository<TEntity>
:所有实体仓储的基类IPrivateSqlRepository
:所有数据库操作的基类
除此之后的所有仓储只能通过 rep.Constraint<TRepository>()
进行约束创建,如,只读仓储:
var readRepository = rep.Constraint<IReadableRepository<TEntity>>();
9.5.2.1 非泛型超级仓储
IRepository
:默认非泛型仓储接口,支持切换到任何仓储EFCoreRepository
:默认非泛型仓储实现
9.5.2.2 泛型实体仓储
IRepository<TEntity>
:默认数据库实体仓储接口EFCoreRepository<TEntity>
:默认数据库实体仓储实现
9.5.2.3 泛型多数据库实体仓储
IRepository<TEntity, TDbContextLocator>
:任意数据库的实体仓储接口EFCoreRepository<TEntity, TDbContextLocator>
:任意数据库的实体仓储实现
9.5.2.4 Sql
操作仓储
ISqlRepository
:默认数据库Sql
操作仓储接口SqlRepository
:默认数据库Sql
操作仓储实现