SuperAPI AI 工具集

dotnet-cqrs-query-generator

编程与开发

查看项目

更新于 10-16 02:10

技能介绍

用途

dotnet-cqrs-query-generator 用于在 .NET 整洁架构(Clean Architecture)项目中生成遵循 CQRS 模式的查询代码,即只读操作。资料强调其生成的是 Query、Handler 与 Response DTO,用于读取数据而不改变状态。

主要能力

该技能声明遵循以下核心原则:

  • 查询永不修改状态,属于只读操作。
  • 读取使用 Dapper,绕过 EF Core 以获得更好性能。
  • 返回 DTO 而非实体,即投影到响应模型。
  • 使用针对具体用例优化的直接 SQL 查询。

资料提供了查询类型的快速参考:

  • GetById:按 ID 获取单个实体,返回 Result<EntityResponse>。
  • GetAll:获取全部实体(支持可选过滤),返回 Result<IReadOnlyList<EntityResponse>>。
  • GetPaged:分页列表,返回 Result<PagedList<EntityResponse>>。
  • Search:过滤或搜索结果,返回 Result<IReadOnlyList<EntityResponse>>。
  • Exists:检查实体是否存在,返回 Result<bool>。

使用方式

该技能按可复用的文件与目录结构组织生成结果。示例的目录结构为 /Application/{Feature}/ 下按查询类型分文件夹,每个文件夹包含 Query 文件(含 Query + Validator + Handler)以及 Response DTO 文件。例如 Get{Entity}ById 文件夹下包含 Get{Entity}ByIdQuery.cs 和 {Entity}Response.cs。

资料给出了以下模板,每个模板都包含命名空间、引用、Query 记录、Validator(基于 FluentValidation)与 Handler(通过 ISqlConnectionFactory 创建 IDbConnection 并用 Dapper 执行查询):

  • 按 ID 查询(Get By ID Query):使用 QueryFirstOrDefaultAsync 查询单条记录,未找到时返回 Result.Failure(EntityErrors.NotFound)。
  • 查询全部(Get All Query):使用 QueryAsync 获取列表,按名称升序排序。
  • 按父级 ID 查询(Get By Parent ID Query):按 OrganizationId 过滤,使用 INNER JOIN 关联 organization 表。
  • 分页查询(Paginated Query):接收 PageNumber、PageSize 与可选 SearchTerm,先执行 COUNT 查询总数,再用 OFFSET/FETCH 获取分页数据,返回 PagedList<T>;Validator 要求 PageNumber 大于 0、PageSize 在 1 到 100 之间。
  • 多映射联结查询(Query with Multi-Mapping):通过 LEFT JOIN 子表并使用 Dapper 的 splitOn 与字典聚合父子结构,Response 中包含嵌套的 Children 列表。
  • 聚合报表查询(Aggregate Report Query):使用 CTE(WITH AggregatedData)对部门、用户、评估进行聚合统计(COUNT DISTINCT、AVG、ROUND),并可按 StartDate/EndDate 过滤;Validator 校验 EndDate 需大于 StartDate。

资料还提供了 PagedList<T> 共享模型示例,包含 Items、PageNumber、PageSize、TotalCount 以及计算属性 TotalPages、HasPreviousPage、HasNextPage。

适用场景

适用于采用 .NET 整洁架构、遵循 CQRS 模式的项目中生成只读查询相关代码,尤其是需要基于 Dapper 直接编写优化 SQL、返回 DTO 而非领域实体的读取场景,包括单条查询、列表查询、按父级关联查询、分页查询、多表联结映射以及聚合报表查询。

限制

资料未说明该技能的具体安装方式、命令行用法、依赖版本要求、支持的 .NET 版本、数据库类型支持范围(示例中使用 ILIKE、RETURNING 等语法特征未在本段资料中明确限定)、收费与价格信息,也未提供实际部署或运行效果数据。以上内容暂未提供。