SuperAPI AI 工具集

hotchocolate-best-practices

编程与开发

查看项目

更新于 10-15 20:12

技能介绍

用途:在 .NET 中实现或审查 HotChocolate GraphQL 服务端时提供编码规范,仅适用于 HotChocolate 16.6 或更新版本,旧版本需先查阅迁移指南。该技能聚焦实现层(解析器、数据访问、DataLoader、分页);模式设计(SDL 形状、命名、可空性)属于配套技能 graphql-schema-design,任务同时涉及设计与实现时可两者并用。

主要能力与核心原则:采用实现优先方式,编写普通 C# 静态解析器类并使用 [QueryType]、[MutationType]、[ObjectType<T>]、[DataLoader] 等特性,由 HotChocolate 推断模式,不使用 schema-first SDL 绑定,仅在特性无法表达时使用描述符/Configure 覆盖。所有数据访问都经过 DataLoader:关系字段解析器不直接查询 DbContext 或仓储,避免 N+1 并利用请求级缓存;顶层 byId 字段同样使用 DataLoader 以支持批量合并。DataLoader 由源生成器生成,编写带 [DataLoader] 的静态方法,不手写继承 BatchDataLoader/GroupedDataLoader 的类。投影通过 QueryContext<T> 传递,DataLoader 接受 QueryContext<TValue> 参数并将键固定进投影(query.Include(x => x.Id));读取父属性的解析器用 [Parent(requires: nameof(...))] 声明。分页基于游标且有序,使用 PagingArguments 与 ToPageAsync/ToBatchPageAsync,排序以键结尾,非根类型分页走批量分页 DataLoader,不使用偏移分页。

项目设置:引用 HotChocolate.AspNetCore、HotChocolate.Data,以及作为仅分析器包的 HotChocolate.Types.Analyzers(IncludeAssets 与 PrivateAssets 按资料配置)。Properties/ModuleInfo.cs 中写一行 [assembly: Module("RecommendationTypes")],显式命名模块而非依赖程序集名默认值;通用服务器设置放在共享的 AddDefaultSettings 扩展中,主链只保留模式相关选择。

参考文件按任务加载:dataloaders.md、pagination.md、resolvers.md、subgraph.md、server-setup.md、mutations.md、filtering.md、sorting.md。限制:仅针对 16.6+;具体收费、平台与效果资料未提供。