后端与接口
使用 C++ 或 Elixir/Phoenix 开发后端时…
适用于使用 C++ 或 Elixir/Phoenix 开发后端服务时,统一现代语言特性、内存管理、错误处理、领域建模和 Phoenix 生产实践。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 59/100 ×0.15
适用场景
使用 C++ 或 Elixir/Phoe特定
解决思路
- C++ 命名约定:对 classes 和 structs 使用 PascalCase。
- C++ 命名约定:对 variables 和 methods 使用 camelCase。
- C++ 命名约定:对 constants 和 macros 使用 SCREAMING_SNAKE_CASE。
- C++ 内存管理:优先使用智能指针(`std::unique_ptr`、`std::shared_ptr`)而不是裸指针。
- C++ 内存管理:对独占所有权使用 `std::unique_ptr`。
- C++ 内存管理:仅在需要共享所有权时使用 `std::shared_ptr`。
- C++ 内存管理:对所有资源管理实现 RAII。
- C++ 内存管理:避免不必要的堆分配。
- C++ 现代特性:在能提升可读性时使用 `auto` 做类型推断。
- C++ 现代特性:利用 range-based for 循环。
- C++ 现代特性:对可能不存在的值使用 `std::optional`。
- C++ 现代特性:对类型安全的 union 使用 `std::variant`。
- C++ 现代特性:应用 structured bindings 写出更清晰的代码。
- C++ 现代特性:使用 `std::move` 实现移动语义。
- C++ 错误处理:使用 exceptions 进行错误处理。
- C++ 错误处理:为领域特定错误定义自定义 exception types。
- C++ 错误处理:在合适边界捕获 exceptions。
- C++ 错误处理:确保所有代码的 exception safety。
- C++ 最佳实践:全面强制 const-correctness。
- C++ 最佳实践:避免 C-style casts;使用 `static_cast`、`dynamic_cast` 等。
- C++ 最佳实践:使用 Google Test 或 Catch2 编写 unit tests。
- C++ 最佳实践:使用 Doxygen comments 编写文档。
- Elixir/Phoenix 核心理念:遵循 domain-driven design,采用 PragDave 哲学。
- Elixir/Phoenix 核心理念:使用函数式编程并显式处理错误。
- Elixir/Phoenix 核心理念:拥抱 "let it crash" 原则。
- Elixir/Phoenix 代码组织:使用 Phoenix contexts 围绕业务领域组织代码。
- Elixir/Phoenix 代码组织:保持 contexts 聚焦于单一领域。
- Elixir/Phoenix 代码组织:使用 bounded contexts 防止耦合。
- Elixir/Phoenix 代码组织:为每个 context 实现清晰的 public APIs。
- Elixir/Phoenix 模式匹配与控制流:大量使用 pattern matching 进行数据提取。
- Elixir/Phoenix 模式匹配与控制流:用 `with` statements 应用 "railway-oriented programming"。
- Elixir/Phoenix 模式匹配与控制流:用 pipe operator 清晰地串联操作。
- Elixir/Phoenix 模式匹配与控制流:显式处理所有 pattern match 分支。
- Elixir/Phoenix 错误处理:返回 tagged tuples(`{:ok, result}` 或 `{:error, reason}`)。
- Elixir/Phoenix 错误处理:使用 `with` statements 串联可能失败的操作。
- Elixir/Phoenix 错误处理:实现合适的 supervision trees。
- Elixir/Phoenix 错误处理:显式处理预期错误。
- Elixir/Phoenix Contexts:在 contexts 中分组相关功能。
- Elixir/Phoenix Contexts:定义 contexts 之间的清晰边界。
- Elixir/Phoenix Contexts:将 contexts 用作业务逻辑的 API 层。
- Elixir/Phoenix Contexts:保持 controllers 轻薄,委托给 contexts。
- Elixir/Phoenix LiveView:将 LiveView 作为主要 UI 技术。
- Elixir/Phoenix LiveView:为可复用 UI 实现 function components。
- Elixir/Phoenix LiveView:在 LiveView modules 中处理 events。
- Elixir/Phoenix LiveView:在 assigns 中适当管理状态。
- Elixir/Phoenix 数据验证:使用 `Ecto.Changeset` 在边界处进行验证。
- Elixir/Phoenix 数据验证:即使在数据库上下文之外也使用 changesets。
- Elixir/Phoenix 数据验证:定义清晰的验证规则。
- Elixir/Phoenix 数据验证:返回有用的错误消息。
适用边界 · 注意事项
- 不适用于非 C++ 或非 Elixir/Phoenix 技术栈的项目,不要把约定直接套用到其他语言/框架。
- 未采用 Phoenix Contexts、Ecto 或 LiveView 的项目不适用对应实践。
- 如果团队已有强制编码规范,应优先遵循项目规范,不要盲目照搬。