Wujies 无界平台
开始使用

为什么是无界创镜

大多数后台框架把「业务模块」编译在宿主里:加一个商城要改菜单、改路由、改权限、重新打包,升级时整站一起停。无界创镜把这件事反过来做:平台足够小,业务足够独立。

三个核心判断

平台只做底座

用户、角色、部门、菜单、租户、字典、参数、日志、文件存储,这些是所有业务都绕不开的能力,留在宿主。商城、会员、支付、考试、社交、图床、报价、企业库,这些是「可以选装」的能力,做成应用。

判断标准只有一句:这段代码是不是每个部署都必须有? 不是,就应该是应用。

应用是完整交付物,不是一个 Java 模块

一个应用包同时包含:

  • 后端 jar:独立的类加载器、独立的 Spring 子上下文、独立的 Mapper;
  • 前端 ESM:后台按 appCode 远程加载,不需要把业务页面编进宿主;
  • 数据库迁移:建表、字典、站点配置随包执行;
  • 菜单清单:app.json 声明,安装时幂等写入,卸载时可回收。

所以「安装一个应用」等于交付一整套垂直功能,而不是让客户自己拼依赖。

生命周期不重启

安装、升级、停用、启用、卸载都在运行期完成:

  1. 落位产物(jar + 前端目录 + migrations);
  2. 执行迁移脚本;
  3. 卸载旧插件(关闭子上下文、注销路由与 Mapper);
  4. 加载新插件(新建类加载器与子上下文);
  5. 同步菜单并刷新前端路由。

这条链路是平台最重要的不变量,也是插件运行时存在的原因。

和传统 RuoYi 项目的区别

维度传统单体后台无界创镜
新业务上线改宿主、重新打包、重启装应用,热加载
业务之间直接依赖、共享 Service通过平台 SPI 或事件解耦
菜单手写 SQL / 页面配置app.json 声明,安装时同步
数据库全部混在平台库迁移脚本随应用走,卸载可删
前端所有页面编进一个工程后台宿主 + 远程 ESM
交付整个仓库应用包(可签名、可校验)
多租户业务表自行处理平台统一租户上下文

代价与边界

这套架构不是没有成本,选择它之前需要接受:

  • 调试链路更长:一个问题可能出在宿主、插件类加载器、子上下文、前端远程产物四层。
  • 依赖必须显式:应用之间是运行期硬依赖,装错顺序会启动失败;必须在清单里声明。
  • 安全边界更重:插件是任意 Java 代码,包签名与上传校验不是可选项。
  • 不适合超小项目:只有一个业务、永远不扩展的系统,用单体更省事。

什么时候适合用

  • 需要按客户选装功能的 SaaS 或私有化交付;
  • 业务模块多、迭代节奏不同,希望独立发布;
  • 有二次开发需求,但不希望每个客户都维护一个 fork;
  • 能接受「平台 + 应用」的运维模型,并愿意为签名、迁移、监控投入。

如果只是做一个内部管理系统,且业务不会拆分,直接使用 RuoYi-Vue-Plus 会更轻。

目录