Files
saas-mbr/docs/architecture.md
T

4.8 KiB
Raw Blame History

架构总览(abacus 动静分离微服务)

权威来源:docs/architecture.md · 编码约束见 docs/coding-standards.md · AI 工作流见 docs/agent-guide.md

1. 总体形态:前后端分离 + 动静同包发布

两个仓库协作,共享一份 docs/ 文档中心(本目录):

D:\workBuddySpace\member\
├── docs/                       ← 团队文档单一权威(本目录)
├── abacus-static-framework/    ← Vue 3 前端底座(src/framework 只读 / src/subsystem 业务可写)
└── abacus.springboot.example/  ← Spring Boot Maven 微服务模板(业务写在 src/main/java 与 resources/sql

交付链路(动静分离):

前端源码 ──npm run build:prod──► 产物输出到后端 resources/html/vue/<应用名>/
                                     │
后端 mvn packageassembly.xml     │
                                     ▼
              *-bin.zip = jar + doc + sql + html  ← 一个发布单元,一起发版
  • 前端产物不打进 jar,随 zip 的 html/ 目录部署(Nginx/容器托管静态资源,Java 进程提供 API)。
  • 开发期前端 vite.config.ts server.proxy 反代后端,替代 Nginx 联调。

2. 前端底座(abacus-static-framework

选型
框架 Vue 3.5 + TypeScript 5 + Vite 6
UI Element Plus(通用)+ vxe-table(仅表格)
状态 Pinia
代码生成 unplugin-auto-import / unplugin-vue-components(自动引入,无需手写常见 import)

关键机制:

  • 只读/可写分区src/framework/** 只读共享;业务只写 src/subsystem/**api / router / views / extend 及自建 components / hooks / store / styles / types / utils)。
  • 请求管线framework/utils/request.ts):统一响应体解包、服务别名映射、token 自动刷新、commonParam 审计头——业务无感,详见 coding-standards.md §6
  • 动态菜单权限permissionStore.filterAsyncRoutesurl === path 匹配后端菜单与 subsystem/router/dynamicRouter.ts,过滤后 addRoute
  • 运行时配置window.frameBaseConfig(含 backendServices 服务别名映射)由宿主注入,public/data/data.js 声明当前子系统(currentSubsystem / currentSubsystemName)。

3. 后端模板(abacus.springboot.example

选型
构建 Maven,父工程 abacus.framework:abacus.springcloud.pom:1.5.0artifactId abacus.springboot.<应用名>
框架 Spring Boot + abacus 系列(config 2.1.0 / commons 1.6.5 / fundation 3.4.4 / business.service / asyncTool 1.0.0
注册/配置中心 Nacosbootstrap.ymlextension-configs 引入 abacus-database / discovery / acas / redis / actuator / xxljob 公共配置)
数据库 MySQL / SQL Server(jtds+mssql) / Oracle / 达梦,Druid + JPA;多数据源由 Nacos abacus-database.yml 提供
定时任务 XXL-JOB 2.3.0application-xxljob.yml
消息队列 Kafka(配置经 Nacos 公共配置)
接口文档 springdocspringdoc.packages-to-scan
监控 Actuator + Prometheusbase-path /services/actuator

分层(包前缀 abacus.springboot.<应用名>.):api(+api/view) / controller / dao / esb / pi / impl / repository / wsi / config / util / vo,职责与扫描配置见 coding-standards.md §5.1

统一响应体 {status, message, data, errorCode}abacus.commonsResultResponseBodyWrapper 包装(Application.java 注册 @Beanabacus.responseExcludePath 排除白名单 URI)。

4. 关键一致性:APP_NAME 四处

应用名(APP_NAME)必须同时一致于:① bootstrap.yml spring.application.nameNacos 注册)② application.yml 扫描包前缀(abacus.controllerPackages / abacus.entitypackages / springdoc.packages-to-scan)③ 前端 api/<别名>/*.ts 的 URL 首段 ④ vite.config.ts build.outDir 目录名。漏配任一处将静默失败,排查见 coding-standards.md §3

5. 接口契约速览

契约项 约定
响应体 {status, message, data, errorCode}status===200 前端自动解包 data
异常码 业务首位 9、系统首位 5
URL 首段=服务别名 → backendServices 映射真实服务名
分页 响应 {data, total}vxe-grid 的 result/total
Excel ArrayBuffer 响应不解包
鉴权 Bearer token<10min 自动刷新 + 并发队列

6. 治理体系

  • 前端仓库:.project.agents/CLAUDE.md / AGENTS.md / SELF_CONSTRAINTS.md / VIBECODING_GUIDE.md / docs/context/{PRD,ARCHITECTURE,ROADMAP,CONVENTIONS,UIUX}.md
  • 后端仓库:.project.agents/(同构,无 UIUX.md
  • 单源化:共享约束只存在于 docs/,仓库内 CONVENTIONS 用指针引用,禁止复制正文。