SuperAPI AI 工具集

dotnet-repository-pattern

编程与开发

查看项目

更新于 10-16 02:08

技能介绍

用途

该技能用于生成 .NET 清洁架构(Clean Architecture)项目中的仓储(Repository)代码,为数据访问提供抽象层。它按照仓储模式生成接口与实现,使领域层不直接依赖具体的数据访问技术。

主要能力

  • 分层结构:接口定义在 Domain 层,实现放在 Infrastructure 层,实现使用 EF Core。
  • 按聚合根组织:仓储以聚合根(Aggregate Root)为单位,而非按单个实体。
  • Unit of Work 集成:命令方法只做跟踪,不调用 SaveChanges,统一通过 IUnitOfWork 提交。
  • 查询方法:提供 GetByIdAsync、GetByIdWithDetailsAsync、GetByNameAsync、GetByOrganizationIdAsync、GetAllActiveAsync、ExistsAsync、ExistsByNameAsync 等模板。
  • 命令方法:提供 Add、AddRange、Update、Remove、RemoveRange 等仅跟踪、不保存的方法。
  • 子实体访问:支持通过聚合根访问子实体,如 Get{ChildEntity}ByIdAsync、Get{ChildEntities}By{Entity}IdAsync。
  • 规约模式:提供 ISpecification、BaseSpecification 及具体规约示例,并支持 GetAsync、GetFirstOrDefaultAsync、CountAsync 等基于规约的查询。
  • 泛型仓储基类(可选):提供抽象 Repository<T> 基类,供具体仓储继承并扩展实体专属方法。
  • 依赖注入注册:提供 AddPersistence 示例,注册 DbContext、IUnitOfWork、各仓储以及用于 Dapper 查询的 ISqlConnectionFactory。
  • 查询优化模式:包含 AsNoTracking 只读查询、避免过度 Include 的示例。

使用方式

技能以模板形式给出代码,开发者按项目命名空间与实体名称替换占位符(如 {name}、{Entity}、{Aggregate}、{ChildEntities} 等)即可。仓储结构示例:

/Domain/{Aggregate}/
└── I{Entity}Repository.cs          # 接口(Domain 层)

/Infrastructure/Repositories/
└── {Entity}Repository.cs           # 实现(Infrastructure 层)

接口模板包含查询方法与命令方法,实现模板使用 ApplicationDbContext 与 EF Core 的 Set<T>()、FirstOrDefaultAsync、Include、AnyAsync、ToListAsync 等 API。规约模式部分定义了 ISpecification<T> 与 BaseSpecification<T>,并给出 Active{Entities}Specification、{Entities}ByOrganizationSpecification 等示例。注册部分示例使用 AddDbContext、UseNpgsql、UseSnakeCaseNamingConvention,并注册 IUnitOfWork 与各仓储。

适用场景

适用于采用 .NET 清洁架构、使用 EF Core 作为 ORM、希望将数据访问逻辑与领域层解耦的项目。适合需要按聚合根组织仓储、使用 Unit of Work 统一提交、或引入规约模式进行复杂查询的团队。

限制

资料未提供该技能的安装命令、收费方式、支持平台、版本要求或实际运行效果等信息,暂未提供。代码模板中的占位符需开发者自行替换,具体数据库提供程序与命名约定以项目实际配置为准。