ES6 class继承可有效解决表单校验逻辑重复问题:通过BaseValidator基类封装通用判重、参数组装、提示生成,子类按业务定制规则与约束,并无缝集成Element Plus表单。

在复杂业务系统中,表单校验逻辑往往高度重复:多个模块(如应用、服务、组件)都需校验“名称不能重名”“标识需英文且唯一”等规则,各自写一套接口调用 + 提示拼接 + 规则组合,导致代码膨胀、维护困难。ES6 的 class 继承配合合理的抽象设计,能将这类逻辑清晰分层——把通用判重、格式校验、提示组装抽成基类,再按业务实体定制子类,既复用又可扩展。
提取共性:定义校验基类(BaseValidator)
所有资源的校验都绕不开几个核心动作:构造请求路径、组装参数、执行异步判重、生成错误提示。把这些封装进基类,避免每个表单都手动拼 URL 或写重复的 axios 调用。
- 基类接收必要参数:资源类型(如 "applications")、中文名(如 "应用")、附加筛选条件(如所属租户 ID)
- 提供统一方法 checkNameExist() 和 checkKeyExist(),内部自动拼接 API 路径(如 /api/applications/nameOrKeyExisted),并注入 extraParams
- 错误提示模板固化:`${entityName}名称已存在`、`请输入${entityName}标识`,子类无需重复写文案
按需定制:子类专注业务差异
不同资源的校验约束不同——比如“服务”要求标识支持下划线,“组件”要求名称允许含空格但不能以数字开头。这些差异由子类覆盖基类方法实现,不破坏通用流程。
从零开始编排 SpringBoot+Vue 全栈项目工作流,适用于新建全栈项目或完整脚手架请求,触发后依次调用 product‑spec‑builder(需求调研)等模块。
- 继承基类后,重写 getValidationRules() 方法:返回包含 name/key 字段规则的对象,其中重名校验规则直接引用基类提供的异步 validator 函数
- 对特殊字符限制,可在子类中扩展正则校验项,例如:{ pattern: /^[a-z0-9_]+$/, message: '标识只能包含小写字母、数字和下划线' }
- 若某资源需“跨域判重”(如全局唯一 vs 租户内唯一),子类传入不同的 extraParams 即可,基类自动透传
与 Vue 表单无缝集成
实际项目中,校验规则最终要喂给 Element Plus 的 el-form。基类可直接返回符合其 schema 的 rules 对象,子类实例化后一键注入。
立即学习“Java免费学习笔记(深入)”;
- 基类方法 toElementRules() 返回形如 { name: [...], key: [...] } 的结构,字段名与表单 prop 严格对应
- Vue 组件中只需:rules: new ApplicationValidator('applications', '应用', { tenantId: 'xxx' }).toElementRules()
- 无需在每个组件里 import 多个 validator 函数或手写 rule 数组,逻辑集中、修改一处全量生效
扩展能力:支持链式校验与缓存优化
真实场景中,用户快速输入时频繁触发判重请求会拖慢体验。继承结构天然支持在子类中增强行为,而不影响其他模块。
- 基类提供默认的防抖机制(如节流 300ms),子类可选择关闭或调整阈值:new ServiceValidator(...).debounceTime = 500
- 对已校验过的值做内存缓存(如 Map 存储 name → Promise),相同输入直接复用结果,避免重复请求
- 若后台支持批量判重接口,子类可重写 batchCheck() 方法,基类保持单条逻辑不变,兼容旧场景

















