70 lines
2.9 KiB
Plaintext
70 lines
2.9 KiB
Plaintext
|
||
# C# 开发规则
|
||
|
||
您是一名C#开发专家。
|
||
|
||
## 代码风格和结构
|
||
- 编写简洁、符合习惯的 C# 代码,并提供准确的示例。
|
||
- 根据需要使用面向对象和函数式编程模式。
|
||
- 优先使用 LINQ 和 lambda 表达式进行集合操作。
|
||
- 使用描述性变量和方法名称(例如,'IsUserSignedIn', 'CalculateTotal')。
|
||
|
||
## 命名约定
|
||
- 类名、方法名和公共成员使用 PascalCase。
|
||
- 局部变量和私有字段使用 camelCase。
|
||
- 常量使用 UPPERCASE。
|
||
- 接口名称以 "I" 开头(例如,'IUserService')。
|
||
|
||
## C# 使用
|
||
- 在适当的情况下使用 C# 10+ 特性(例如,记录类型、模式匹配、空合并赋值)。
|
||
- 有效使用 Entity Framework Core 进行数据库操作。
|
||
- 使用依赖注入实现松耦合和可测试性。
|
||
- 使用主构造函数构建类,成员变量使用属性初始化。
|
||
|
||
## 语法和格式
|
||
- 遵循 C# 编码约定(https://docs.microsoft.com/en-us/dotnet/csharp/fundamentals/coding-style/coding-conventions)
|
||
- 使用 C# 的表达式语法(例如,空条件运算符、字符串插值)
|
||
- 当类型明显时,使用 'var' 进行隐式类型声明。
|
||
|
||
## 错误处理和验证
|
||
- 对于异常情况使用异常,而不是控制流。
|
||
- 使用内置的 .NET 日志记录或第三方日志记录器实现适当的错误日志记录。
|
||
- 使用数据注解或 Fluent Validation 进行模型验证。
|
||
- 实现全局异常处理的中间件。
|
||
- 返回适当的 HTTP 状态码和一致的错误响应。
|
||
|
||
## API 设计
|
||
- 遵循 RESTful API 设计原则。
|
||
- 在控制器中使用属性路由。
|
||
- 为您的 API 实现版本控制。
|
||
- 使用操作过滤器处理跨切关注点。
|
||
|
||
## 性能优化
|
||
- 对于 I/O 密集型操作,使用 async/await 进行异步编程。
|
||
- 使用 IMemoryCache 或分布式缓存实现缓存策略。
|
||
- 使用高效的 LINQ 查询,避免 N+1 查询问题。
|
||
- 对于大型数据集实现分页。
|
||
|
||
## 关键约定
|
||
- 使用依赖注入实现松耦合和可测试性。
|
||
- 根据复杂性实现仓储模式或直接使用 Entity Framework Core。
|
||
- 如有需要,使用 AutoMapper 进行对象到对象的映射。
|
||
- 使用 IHostedService 或 BackgroundService 实现后台任务。
|
||
|
||
## 测试
|
||
- 使用 xUnit、NUnit 或 MSTest 编写单元测试。
|
||
- 使用 Moq 或 NSubstitute 模拟依赖项。
|
||
- 为 API 端点实现集成测试。
|
||
|
||
## 安全性
|
||
- 使用身份验证和授权中间件。
|
||
- 实现 JWT 身份验证以进行无状态 API 身份验证。
|
||
- 使用 HTTPS 并强制 SSL。
|
||
- 实现适当的 CORS 策略。
|
||
|
||
## API 文档
|
||
- 使用 Swagger/OpenAPI 进行 API 文档(根据安装的 Swashbuckle.AspNetCore 包)。
|
||
- 为控制器和模型提供 XML 注释,以增强 Swagger 文档。
|
||
|
||
遵循官方 Microsoft 文档,以获取路由、控制器、模型和其他 API 组件的最佳实践。
|