nex_docus/docs/code-structure-audit-2026-0...

6.9 KiB
Raw Blame History

代码结构审计与优化记录2026-04-08

本文依据 docs/code-structure-standards.md 对当前仓库进行前后端结构审计,并记录本轮已落地的优化项。

1. 审计范围

  • 后端:backend/app/api/v1backend/app/services
  • 前端:frontend/src/pagesfrontend/src/utilsfrontend/src/components

2. 主要结构问题

2.1 后端 Router 过厚

以下问题在多个 router 中重复出现:

  • 项目存在性校验
  • 读权限/写权限/成员角色判断
  • 项目文档数量统计
  • 公开项目与私密项目访问分支

受影响较明显的文件:

  • backend/app/api/v1/projects.py
  • backend/app/api/v1/files.py
  • backend/app/api/v1/preview.py
  • backend/app/api/v1/search.py
  • backend/app/api/v1/git_repos.py

这类问题违反了“Router 只做协议转换”和“副作用与规则应收口”的要求,导致:

  • 权限规则难以统一演进
  • 同一类修改影响多个入口
  • 新增接口时容易复制旧逻辑继续膨胀

2.2 前端文档页承担过多页面级编排

frontend/src/pages/Document/DocumentPage.jsx 在审计前同时承担了:

  • 文件树加载
  • URL deep link 同步
  • 搜索与节点展开
  • Markdown 文件加载
  • PDF URL 组装
  • Markdown 内链解析
  • TOC 生成
  • 页面展示渲染

这已经明显超过“页面入口必须薄”的建议范围,属于页面入口和页面编排层混杂。

2.3 前端认证存储边界分散

access_token 与登录态清理逻辑分散在:

  • request.js
  • ProtectedRoute.jsx
  • userStore.js
  • 多个页面文件

这违背了“前端基础设施应收口”的要求,也增加了未来切换 token 策略时的修改面。

3. 本轮已落地优化

3.1 后端新增项目域服务

新增:

  • backend/app/services/project_service.py

收口能力:

  • 项目存在性查询
  • 项目成员查询
  • 项目角色解析
  • 项目读权限校验
  • 项目角色权限校验
  • 项目写权限校验
  • 项目文档数量统计
  • 项目序列化补充 doc_count

3.2 后端 Router 瘦身

已切换到项目域服务的文件:

  • backend/app/api/v1/projects.py
  • backend/app/api/v1/files.py
  • backend/app/api/v1/preview.py
  • backend/app/api/v1/search.py
  • backend/app/api/v1/git_repos.py

效果:

  • 权限判断不再散落在每个 handler 内
  • projects.py 的列表序列化不再自己统计文档数
  • preview.py 的公开/私密访问逻辑集中复用
  • files.py 的读写权限边界更明确

3.3 前端抽离文档页编排层

新增:

  • frontend/src/pages/Document/useDocumentBrowser.js
  • frontend/src/pages/Document/documentBrowserUtils.jsx

抽离后的职责:

  • 文件树加载与状态维护
  • URL 参数驱动的文档打开
  • Markdown/PDF 切换
  • 搜索与节点展开
  • TOC 生成
  • Markdown 内链解析

frontend/src/pages/Document/DocumentPage.jsx 现在主要保留:

  • 页面布局
  • Git 操作 UI
  • 分享设置 UI
  • Markdown 渲染输出

3.4 前端认证存储收口

新增:

  • frontend/src/utils/authStorage.js

已接入:

  • frontend/src/utils/request.js
  • frontend/src/components/ProtectedRoute.jsx
  • frontend/src/stores/userStore.js
  • frontend/src/pages/Preview/PreviewPage.jsx
  • frontend/src/pages/Document/DocumentPage.jsx

3.5 继续下沉编辑页与浏览器副作用

新增:

  • frontend/src/pages/Document/useDocumentEditorWorkspace.js
  • frontend/src/utils/browserIO.js
  • frontend/src/pages/ProjectList/useProjectExport.js
  • frontend/src/pages/ProjectList/useProjectShare.js
  • frontend/src/pages/ProjectList/useProjectCollaboration.js
  • frontend/src/pages/ProjectList/useProjectGitRepos.js

本轮继续优化后:

  • DocumentEditor.jsx 中的树加载、URL 同步、文件打开、刷新流程已下沉到工作区 hook
  • 项目导出、文件名解析、复制链接等浏览器能力已从页面中抽出为通用工具
  • ProjectList.jsxDocumentPage.jsx 不再自己维护复制降级实现
  • ProjectList.jsx 中的导出轮询、分享设置、成员协作、Git 仓库管理已各自收口为稳定子流程

3.6 补齐后端文件用例与预览页编排层

新增:

  • backend/app/services/project_export_service.py
  • backend/app/services/project_file_service.py
  • frontend/src/pages/Preview/usePreviewBrowser.js
  • frontend/src/pages/Preview/previewBrowserUtils.js

本轮继续优化后:

  • projects.py 中的导出任务状态管理、过期清理与 ZIP 打包流程已下沉到独立导出服务
  • files.py 的保存、创建、删除、重命名、移动流程已通过项目文件服务统一编排
  • backend/app/mcp/server.py 不再复制文件写入后的索引、日志、通知逻辑,改为复用同一文件用例服务
  • PreviewPage.jsx 中的密码校验、目录树加载、文档切换、搜索、TOC 与 PDF/Markdown 模式切换已下沉到页面级 hook

4. 验证结果

已执行:

  1. python3 -m py_compile backend/app/services/project_service.py backend/app/api/v1/projects.py backend/app/api/v1/files.py backend/app/api/v1/preview.py backend/app/api/v1/search.py backend/app/api/v1/git_repos.py
  2. npm run build(在 frontend/ 下)

结果:

  • 后端语法校验通过
  • 前端生产构建通过
  • 仍存在 Vite 默认的大包告警,属于性能优化项,不影响本轮结构改造正确性

5. 剩余建议

以下问题已在审计中确认,但未在本轮一并处理,以控制风险:

5.1 前端仍有超大页面待继续下沉

重点文件:

  • frontend/src/pages/Document/DocumentEditor.jsx
  • frontend/src/pages/ProjectList/ProjectList.jsx
  • frontend/src/pages/Preview/PreviewPage.jsx 已完成一轮下沉,但页面内仍保留部分响应式布局与渲染分支,可后续继续压薄

建议方向:

  • 将上传/导出/重命名/移动等流程拆为页面级 controller 或 hook
  • 将下载、文件名解析、Blob 导出等浏览器副作用进一步沉到可复用基础模块

5.2 前端构建产物体积偏大

构建结果中仍存在明显的大 chunk 警告,建议后续评估:

  • 文档页与编辑页按路由拆包
  • PDF/Markdown 编辑器相关库延迟加载
  • 搜索与预览相关能力按场景拆分

5.3 后端入口层仍有剩余热点

虽然项目导出和文件编排已下沉,但以下热点仍值得继续优化:

  • backend/app/api/v1/projects.py 仍包含较多成员管理与分享配置流程,可继续按主题拆出更明确的 use case
  • backend/app/api/v1/files.py 仍承载上传、导入、导出等多类文件主题,后续可继续按“编辑文件 / 传输文件 / 读取文档”拆分

6. 结论

本轮优化重点完成了两件事:

  1. 后端将重复的项目访问规则从 router 中收口到项目域服务
  2. 前端将文档浏览页的页面级编排从页面入口中拆出,并统一认证存储边界

这两项改动都直接对应结构规范中的高优先级问题,属于低风险、可验证、后续可继续扩展的结构优化。