es6 class 是面向对象语法糖,模块组织靠 es6 module;class 封装高内聚实体,module 管理暴露与依赖;需按领域分层、合理导出、避免反模式。

ES6 Class 本身不是模块组织工具,而是面向对象的语法糖;真正承担模块组织职责的是 ES6 Module(import/export)。Class 要发挥结构化作用,必须嵌入模块体系中——用 class 封装逻辑单元,再用 module 管理其暴露、复用与依赖关系。
用 Class 封装高内聚的业务实体
把具有明确职责、状态和行为的对象建模为 class,避免零散函数或裸对象:
- 用户管理模块中,定义
User类封装身份验证、权限检查、会话刷新等操作,而非一堆独立函数 - 订单服务中,
OrderProcessor类聚合创建、校验、支付回调处理,内部调用私有方法(如#validateStock()),对外只暴露submit()和cancel() - 避免“类即模块”的误区:一个
.js文件可以导出多个 class(如Product、Category),也可只导出一个 class 并设为 default
按领域分层,Class 与 Module 协同分工
目录结构体现关注点分离,class 落在对应层级中,module 负责聚合与导出:
PigX UI Pro 前端开发指南 - Vue 3 + TypeScript + Element Plus。当用户提到 PigX UI、PigX 前端、lgb-mgui 项目、Vue 3 企业级后台开发、Element Plus 后台开发时使用此技能。
-
src/domains/order/下:Order.js(实体类)、OrderService.js(含createOrder()等业务方法的 service 类)、OrderRepository.js(封装 API 调用的适配器类) -
src/shared/中统一导出可复用类:export { ApiClient } from './network/ApiClient.js'; export { EventBus } from './events/EventBus.js'; - 入口模块(如
app.js)不直接实例化深层 class,而是导入 domain 层的聚合模块:import { checkout } from '@/domains/order/checkout.js';
合理使用导出方式,控制类的可见性
导出策略直接影响模块边界清晰度和 Tree Shaking 效果:
- 优先命名导出:如
export class PaymentGateway { ... },便于按需导入、重命名、类型推导,也利于测试时直接导入类本身 - 默认导出仅用于该文件的主类(如 React 组件文件中的
export default ProductCard),避免import X from '...'时无法从名字判断内容 - 不导出内部辅助类:若
OrderService内部使用RetryPolicy类,且该类不被外部消费,就不要 export,保持封装性
避免常见反模式
Class + Module 混搭容易踩坑,需主动规避:
- 不要在 class 内部 import 全局模块(如直接
import axios from 'axios'),应通过构造函数注入依赖,提升可测试性与解耦度 - 避免 class 成为“上帝对象”:一个类不应同时处理 UI 渲染、网络请求、本地存储——这些应拆到不同模块,由 class 协调调用
- 不把 class 当作配置容器:常量、枚举、类型定义应放在
constants.js或types.js中导出,而非塞进某个 class 的 static 属性里
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










