Private
Public Access
1
0
Files
u-desk/docs/04-功能迭代/GO-DESK-2.数据库客户端/知识库/规范/编码规范.md
绝尘 a5d30684ed 重构:文件系统模块化架构,增强 Markdown 渲染
- 拆分 FileSystem.vue 为模块化组件架构
- 新增 Markdown Mermaid 图表渲染支持
- 新增 180+ 编程语言代码高亮
- 修复编辑/预览模式切换渲染问题
- 优化亮色/暗色模式主题适配
- 新增 TypeScript 类型定义
2026-02-04 03:32:46 +08:00

6.0 KiB
Raw Blame History

编码规范

状态:已确定
最后更新2026-01-28


一、通用规范

1.1 开发优先原则(最高优先级)

1.1.1 主动性确定性编程

原则:主动控制执行时机和状态,确保在确定的状态下执行操作,而非通过防御性检查和重试来弥补时机问题。

具体要求

  1. 使用 Vue 响应式系统确保状态一致性

    • 优先使用 refreactivecomputed 管理状态
    • 通过 watchnextTick 确保在正确时机执行
    • 避免手动同步状态,依赖 Vue 的响应式机制
  2. 使用模板引用Template Refs直接获取 DOM

    • 优先使用 :ref 绑定获取 DOM 元素
    • 避免通过 querySelector 等 DOM 查询方式
    • 通过 ref Map 管理多个元素引用
  3. 确保执行时机正确

    • 使用 nextTick 等待 DOM 更新完成
    • 使用 requestAnimationFrame 等待渲染完成
    • 在正确的生命周期钩子中执行操作
  4. 减少防御性编程

    • 移除不必要的重试循环
    • 移除过多的条件检查和兜底逻辑
    • 确保数据在操作前已准备好,而非通过检查来避免错误
  5. 代码简洁直接

    • 直接表达意图,避免过度抽象
    • 减少中间变量和临时状态
    • 使用明确的函数名和变量名

示例对比

// ❌ 防御性编程(不推荐)
const findContainer = async (tabKey, retryCount = 8) => {
  for (let i = 0; i < retryCount; i++) {
    await new Promise(resolve => setTimeout(resolve, 250))
    const container = document.querySelector(`.code-editor[data-tab-key="${tabKey}"]`)
    if (container) {
      const rect = container.getBoundingClientRect()
      if (rect.width > 0 && rect.height > 0) {
        return container
      }
    }
  }
  return null
}

// ✅ 主动性确定性编程(推荐)
const editorContainers = ref(new Map())

// 在模板中直接绑定
<div :ref="el => setEditorContainerRef(el, tab.key)"></div>

const findContainer = async (tabKey) => {
  await nextTick()
  await new Promise(resolve => requestAnimationFrame(resolve))
  const containerInfo = editorContainers.value.get(tabKey)
  return containerInfo?.container || null
}

1.1.2 其他优先原则

  • 简洁优先:代码要简洁,避免过度设计;优先使用简单方案,避免不必要的高级特性
  • 易于维护:代码结构清晰,便于维护;减少中间层和抽象,直接表达意图
  • 减少AI味避免明显的AI生成代码特征避免过度注释和文档
  • 降低幻觉:避免不必要的高级特性;优先使用简单、直接的方案

1.2 注释规范

  • 必要注释:只保留必要的注释,便于维护
  • 中文注释:使用中文编写注释
  • 避免冗余:不写显而易见的注释

二、Go后端规范

2.1 方法参数(设计美学约束)

  • 参数限制方法参数不得超过3个硬性约束不可违反
  • 超过限制:必须使用结构体/对象封装参数
  • 设计美学:参数过多严重影响代码可读性和维护性,完全不可接受
  • 示例
    // ❌ 9个参数完全不可接受
    func SaveDbConnection(id uint, name, dbType, host string, port int, username, password, database, options string) error
    
    // ✅ 使用结构体封装
    type SaveConnectionRequest struct {
        ID uint
        Name string
        Type string
        Host string
        Port int
        Username string
        Password string
        Database string
        Options string
    }
    func SaveDbConnection(req SaveConnectionRequest) error
    

2.2 返回值

  • 禁止类型:不返回 RetResult<Void> 类型
  • 错误处理:统一使用 error 返回错误

2.3 代码签名

  • 作者标识:新增文件使用 JueChen 作为代码签名

2.4 架构约束

  • 分层架构API → Service → Repository → Infrastructure
  • 职责分离:每层只负责自己的职责
  • 依赖方向:只能依赖下层,不能依赖上层

三、前端规范

3.1 样式规范

  • Arco基础样式:优先使用 Arco Design 提供的基样式
  • 避免自定义:避免过度自定义样式和硬编码样式
  • 主题兼容:确保切换主题时样式正常

3.2 组件规范

  • 不包含title<a-card> 元素不包含 title 属性
  • 简洁设计:组件设计要简洁,避免过度复杂

3.3 事件规范

  • 统一格式:事件参数使用对象格式
  • 类型定义:所有事件都有 TypeScript 类型定义
  • 命名规范:事件名称使用 kebab-case

四、文档规范

4.1 文档编写

  • 精简准确:文档内容要精简、准确、无幻觉
  • 直接回复:优先直接回复,不创建过多报告文件
  • 必要文档:只创建必要性和长久性文档

4.2 代码签名

  • 文档签名:文档使用 JueChen 作为签名(本地新增文件)

五、工具使用

5.1 命令行优先

  • 文件操作:文件更名、复制等优先使用命令行
  • Git Bash:执行类似命令时使用 Git Bash

六、检查清单

开发优先原则检查

  • 是否使用了 Vue 的响应式系统管理状态?
  • 是否使用了模板引用而非 DOM 查询?
  • 是否在正确的时机执行操作(通过 nextTickrequestAnimationFrame 等)?
  • 是否移除了不必要的重试循环?
  • 是否移除了过多的条件检查和兜底逻辑?
  • 代码是否简洁直接,易于理解?
  • 是否避免了防御性编程模式?

代码检查

  • 方法参数不超过3个
  • 不返回 RetResult<Void> 类型
  • 代码风格简洁,易于维护
  • 必要注释已添加

前端检查

  • 使用 Arco 基础样式
  • 避免过度自定义样式
  • 事件参数使用对象格式
  • 所有事件有类型定义

文档检查

  • 文档内容精简准确
  • 不创建过多报告文件
  • 必要文档已创建