如何将ABP框架下的存储库改写为支持长尾词查询的存储库?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1846个文字,预计阅读时间需要8分钟。
数据库+Repository是类似集合的接口,领域层和应用层使用它来访问数据持久性系统(数据库),通过读写业务对象(通常是聚合)+常见的数据库原则是在领域层定义一个数据库接口
存储库Repository 是一个类似于集合的接口,领域层和应用程序层使用它来访问数据持久性系统(数据库),以读写业务对象(通常是聚合)
常见的存储库原则是:
不要在存储库中包含领域逻辑
- 在领域层定义一个存储库接口(因为它被用于领域层和应用层),在基础设施层实现(启动模板中的EntityFrameworkCore项目)
- 不要在存储库中包含业务逻辑。
- 存储库接口应该是独立于数据库提供者/ ORM的。例如,不要从存储库方法返回DbSet。DbSet是 EF Core 提供的一个对象
- 为聚合根创建存储库,而不是为所有实体。因为,子集合实体(聚合的)应该通过聚合根访问
虽然这个规则在一开始看起来很明显,但是很容易将业务逻辑泄露到存储库中
示例:从存储库中获取不活跃的问题public interface IIssueRepository : IRepository<Issue, Guid>
{
Task<List<Issue>> GetInActiveIssuesAsync();
}
IIssueRepository 扩展了标准 IRepository<...> 接口,添加GetInActiveIssuesAsync 方法。
本文共计1846个文字,预计阅读时间需要8分钟。
数据库+Repository是类似集合的接口,领域层和应用层使用它来访问数据持久性系统(数据库),通过读写业务对象(通常是聚合)+常见的数据库原则是在领域层定义一个数据库接口
存储库Repository 是一个类似于集合的接口,领域层和应用程序层使用它来访问数据持久性系统(数据库),以读写业务对象(通常是聚合)
常见的存储库原则是:
不要在存储库中包含领域逻辑
- 在领域层定义一个存储库接口(因为它被用于领域层和应用层),在基础设施层实现(启动模板中的EntityFrameworkCore项目)
- 不要在存储库中包含业务逻辑。
- 存储库接口应该是独立于数据库提供者/ ORM的。例如,不要从存储库方法返回DbSet。DbSet是 EF Core 提供的一个对象
- 为聚合根创建存储库,而不是为所有实体。因为,子集合实体(聚合的)应该通过聚合根访问
虽然这个规则在一开始看起来很明显,但是很容易将业务逻辑泄露到存储库中
示例:从存储库中获取不活跃的问题public interface IIssueRepository : IRepository<Issue, Guid>
{
Task<List<Issue>> GetInActiveIssuesAsync();
}
IIssueRepository 扩展了标准 IRepository<...> 接口,添加GetInActiveIssuesAsync 方法。

