用途
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 等语法特征未在本段资料中明确限定)、收费与价格信息,也未提供实际部署或运行效果数据。以上内容暂未提供。