Skip to content
Clone
eeff292
37 lines 2.1 KB Markdown

view/app 架构约定(Atomic Design / Core-3)

本应用是 GitDataAI 工作台前端。分层只回答“放哪里、能不能依赖”, 业务契约写在 TypeScript props 里。

分层

层目录允许做禁止做
基础控件src/ui渲染原生控件、暴露 variant/size/disabled/ref、焦点与键盘读路由、读会话、发请求、做业务校验
展示组合src/components组合 ui,接收 label/error/slots/回调发请求、判断权限、读全局 store
页面区块src/blocks页面级布局(AppShell/顶栏),内容全部由 props 注入自己取数据
业务域src/domains/*请求、缓存、校验、权限、域内组件被 ui/components/blocks 反向依赖
页面src/pages/*路由页面装配沉淀可复用组件
基础设施src/services/*API 客户端与适配、实时、语音、存储渲染 UI

依赖方向固定为 ui → components → blocks 逐级组合,domains/pages 消费系统层; 系统层不得 import domains、pages、services、routing。

判定顺序

  1. 内部包含其他系统组件?是 → 不是 ui。
  2. 承载业务动作、数据请求、校验或权限?是 → 放 domains。
  3. 只服务单个页面?是 → 与该页面同域,不进系统层。
  4. 纯展示但被多处复用?→ components 或 blocks。

API 边界

  • 生成客户端位于 packages/apiclient,由 pnpm exec orval 从仓库根 openapi.json 生成,不要手改。
  • 统一经 src/services/api 调用;响应信封为 { code, message, data, error, error_code, request_id }, data: null 表示成功但无内容,不是失败。
  • 列表响应统一为 { items, total, limit, offset };请求 limit 不得超过服务端上限(空间域 100)。
  • 会话走同源 Cookie;401 跳 /auth/login?callback_url=<当前地址>,不做令牌刷新重放。

资源

  • src/vendor/livekit 为第三方 vendored 代码(含 styles/dist 与许可证),保持原样,不参与格式化与 lint。