- 新增 docs/02_Architecture/AR09_Object_Naming_Standard.md(规范性文件,非设计稿): 十节结构 —— 原理 / 判据 / 对象术语表 / 五层命名规范 / 命名模式库 / 如何检查(人工五问 + 6 个机器守卫)/ 如何修复(迁移顺序 + 改名六步法)/ 现状问题登记(逐条带 file:line)/ 反例库 / 修订记录。 核心判断:名称即契约,改名前先查已靠名字建立的协议表 - 02_Architecture/README.md 登记 AR09,并说明其规范性定位(约束新增代码, 与 TOP_CODING_RULES.md 的 G03 配套),与 AR01–AR08 设计稿区别 - 收入本轮讨论与调研文档:对象命名标准化清单、对象标准化与解耦总则、 六层架构与三对象建设重点阶段性复盘、目录结构化迁移说明、 AionUi 对照分析两篇 Co-Authored-By: Claude Code <noreply@anthropic.com>
13 KiB
对象命名标准化清单
日期:2026-09-17 性质:代码目录、文件名、变量名、函数名的对象命名标准化清单 关联文档:
docs/对象标准化与解耦总则.mddocs/2026-09-17_六层架构与三对象建设重点阶段性复盘.md
一、结论
当前代码目录整体上已经开始围绕对象收口, 但命名层面仍然处于新旧术语混用的过渡态。
最准确的判断是:
- 目录结构基本清楚
- 对象落点已经清楚
- 命名标准还不统一
- 旧词残留仍在持续污染对象边界
当前最主要的问题不是“找不到代码在哪”, 而是:
看名字时,仍然经常不知道它到底指的是专员、技能、应用、默认助手,还是历史遗留概念。
二、当前对象落点是否清楚
1. 后端主模型落点是清楚的
- 专员:
backend-go/internal/model/specialist.go - 技能:
backend-go/internal/model/skill_definition.go - 应用:
backend-go/internal/model/app_definition.go - 连接器:
backend-go/internal/connector/*
其中三大对象模型命名基本准确:
2. 前端 catalog store 方向也是清楚的
specialistCatalogskillCatalogappCatalog
对应文件:
这一层说明:对象目录化方向是正确的。
三、当前命名不清晰的主要问题
3.1 旧术语和新术语混用
当前代码中同时混着:
roleassistantspecialistskillappworkercapability
这会导致以下问题:
- 同一个对象被多个词指代
- 同一个词被多个对象复用
- 页面层很容易把对象边界重新写乱
典型例子
技能模型已经叫 SkillDefinition,
但字段仍叫 RoleKind:
skill_definition.go:L5-L25
这说明:
- 模型名是新的
- 字段语义还是旧的
这类命名会误导人以为 role 仍然是正式一级对象。
3.2 文件名与真实职责不完全一致
最典型的是:
这个文件名叫 capability_definition,
但里面做的是:
skillDefinitionReqactionDefinitionReqListSkillDefinitions
问题不只是不好看,
而是它在语义上制造了一个模糊的一级概念:capability。
当前系统正式对象语言应是:
specialistskillappconnectoraction(底层)
不应再让 capability 作为主要文件名继续扩散。
3.3 历史静态目录变量名不准
最典型的旧变量在: workbench.js:L99-L105 workbench.js:L1434-L1443
包括:
availableSkillsbusinessAppsconnectors
其中问题最大的是:
businessApps实际装的是专员目录,不是应用目录availableSkills现在更像静态 fallback,不是正式生产技能目录
所以这些名字会把开发者带偏。
3.4 页面局部变量有失真
例如: SmartAssistantPage.vue:L311-L334
这里:
const app = specialistCatalog.getByKey(key)
拿到的是专员对象,却命名成 app。
这类局部变量不会影响编译, 但会持续破坏对象认知。
3.5 路由参数协议不统一
应用目录里拼路由时使用: appCatalog.js:L135-L145
specialistskillprompt
但工作台页面读取的是: SmartAssistantPage.vue:L602-L626
app_specialistapp_skillapp_prompt
这已经不是风格差异, 而是入口协议不统一。
3.6 默认助手概念没有完全收口
当前存在:
- API 文件名:
assistant.js - 默认技能 key:
smart-assistant - 默认专员 key:
general-assistant
见:
这说明“assistant”当前同时在承担:
- 默认聊天接口名
- 默认技能语义
- 默认专员语义
需要明确边界,不然以后越做越乱。
四、标准命名原则
4.1 正式对象术语
对外和对内统一如下:
- 专员:
specialist - 技能:
skill - 应用:
app - 连接器:
connector - 动作:
action
4.2 非正式或历史兼容词的处理原则
以下词允许保留在历史兼容层, 但不再继续扩散为新的正式命名:
rolebusinessAppsavailableSkillscapability(除非明确表示“泛能力总称”,不能再充当对象级文件名)assistant(除非明确指聊天接口或默认助手)
4.3 命名优先级
命名时遵守:
对象准确性 > 历史兼容性 > 书写简短
意思是:
- 宁可名字长一点
- 也不要再用会误导对象边界的旧词
五、标准化建议
5.1 P0:立即统一入口协议和最容易误导人的命名
A. 统一应用入口 query 参数
当前应统一为一套,
不要一边写 specialist/skill/prompt,
一边读 app_specialist/app_skill/app_prompt。
建议二选一,但必须全链路统一。
推荐统一成:
app_specialistapp_skillapp_prompt
原因:
- 一眼能看出这是“应用带入工作台”的预置参数
- 不会和普通页面 query 混淆
B. 修正页面里的失真变量名
例如:
const app = specialistCatalog.getByKey(...)
应改成:
const specialist = ...
这类改动优先级很高, 因为它们会直接影响后续开发者理解对象边界。
C. 停止新增 businessApps / availableSkills 这类旧变量名
现有代码可暂时保留兼容, 但后续新增代码禁止继续使用这些命名。
5.2 P1:统一文件名与对象职责
A. capability_definition.go
当前建议拆或改名:
方案 1:
skill_definition.goaction_definition.go
方案 2:
- 保留文件不拆,但改名为
skill_and_action_definition.go
不建议继续用:
capability_definition.go
因为它已经不能准确表达该文件实际职责。
B. assistant.js
当前如果它只是默认聊天接口, 建议更明确地表达为:
smartAssistant.js或assistantChat.js
而不是继续模糊地叫 assistant.js。
5.3 P1:统一 store 与 fallback 的命名语义
A. availableSkills
如果继续保留作为静态补丁源, 建议改名为:
staticSkillCatalog或legacySkillCatalog
不要再叫:
availableSkills
因为现在真正“可用技能目录”已经是后端 + skillCatalog。
B. businessApps
如果继续保留作为专员静态兼容源, 建议改名为:
staticSpecialistCatalog或legacySpecialistCatalog
不要再叫:
businessApps
因为它和 app 已经明确冲突。
5.4 P2:统一字段语义
A. RoleKind
当前字段: skill_definition.go:L13
建议后续迁移为更准确的名字,例如:
object_kind或owner_kind
如果业务语义是“这个技能归属于哪类对象”。
如果短期不迁字段, 至少要在文档中明确:
RoleKind是历史兼容字段- 不再代表正式
role概念
B. assistant 的语义边界
需要明确规定:
assistant只用于默认通用助手的聊天接口语义specialist才是正式对象名
否则会继续出现:
- 默认助手既像 skill 又像 specialist
- 页面里又再抽象成 role
六、按文件的具体清单
6.1 后端
backend-go/internal/model/skill_definition.go
问题:
RoleKind仍带旧语义
建议:
- 文档先标记为历史兼容字段
- 后续统一迁移为更准确字段名
backend-go/internal/api/capability_definition.go
问题:
- 文件名与实际职责不匹配
capability不是当前正式对象主词
建议:
- 重命名或拆分
backend-go/internal/api/router.go
优点:
/api/specialists/api/skills/api/apps/api/connectors
这层命名已经较清楚: router.go:L39-L49
建议:
- 保持这层对象 API 命名不再回退
6.2 前端
frontend/src/config/workbench.js
问题:
- 是历史静态大杂烩
businessApps命名错误availableSkills命名已过时
建议:
- 不再作为生产目录源
- 继续降级为静态 fallback
- 变量名按对象真实语义重命名
frontend/src/views/workbench/SmartAssistantPage.vue
问题:
- 局部变量名存在失真
currentRolePresentation仍有旧role心智残留
建议:
- 局部变量全部改成对象准确名
- 将
role presentation逐步收敛为currentObjectPresentation或明确区分:currentSpecialistPresentationcurrentSkillPresentationdefaultAssistantPresentation
frontend/src/api/assistant.js
问题:
- 文件名语义太宽
建议:
- 仅在确认其职责是“默认助手聊天接口”后保留
- 否则改名为更准确的接口文件名
frontend/src/store/appCatalog.js
优点:
normalizeRemoteAppnormalizeCustomAppresolveOpenRoute
这套命名整体清楚: appCatalog.js:L22-L145
问题:
- 路由 query 命名与工作台读取不一致
建议:
- 先统一 query 协议
frontend/src/store/specialistCatalog.js
优点:
- 命名整体比较准确
normalizeSpecialist / getByKey / getByPath清楚
见: specialistCatalog.js:L17-L87
建议:
- 继续作为专员目录的标准写法模板
七、执行顺序
建议按下面顺序做命名清理:
-
统一入口协议
- app query 参数统一
-
清理页面级失真变量
- 特别是
SmartAssistantPage.vue CurrentObjectChip.vuePlusMenu.vue
- 特别是
-
清理历史静态变量名
businessAppsavailableSkills
-
清理文件名级旧词
capability_definition.goassistant.js
-
最后处理字段迁移
- 如
RoleKind
- 如
这样做的原因是:
- 先收敛入口协议,避免继续产生新分叉
- 再清局部变量,马上提升可读性
- 最后再碰数据库字段,避免一次性改太重
八、最终判断
当前代码不是“命名完全混乱”, 而是:
目录已经开始清楚,但命名标准还没有真正收口。
最核心的问题不是技术能力, 而是术语迁移还没做完。
后续只要坚持:
对象名必须准确
旧词只做兼容
页面变量不得歪曲对象语义
路由 / API / store 使用同一套对象协议
这套代码的可读性会明显上一个台阶。