面向对象设计前端网络请求模块的核心是职责分离:Request类封装HTTP请求细节,Service类定义语义化业务接口,Interceptor类管理横切逻辑,DataMapper类负责响应数据转换,四者通过组合与接口抽象实现高内聚低耦合。

用面向对象思想设计前端网络请求模块,核心是把“请求行为”和“业务逻辑”分离,让请求本身可复用、可配置、可拦截、可扩展,同时不绑定具体业务场景。关键不是堆砌 class,而是通过职责划分和接口抽象达成高内聚低耦合。
封装请求核心:一个内聚的 Request 类
Request 类只做一件事:发起标准 HTTP 请求并统一处理底层细节(如 fetch / axios 实例、默认 headers、超时、错误格式化)。它不关心业务含义,也不处理响应数据映射——那是上层的事。
- 构造时接收可选配置(baseURL、timeout、headers),内部创建独立的 fetch 封装或 axios 实例
- 提供 send(method, url, data, config) 方法,返回 Promise,统一抛出结构化错误(如 { code: 'NETWORK_ERROR', message })
- 不直接暴露原生 fetch 或 axios,避免业务代码绕过封装,破坏一致性
定义请求契约:用接口抽象业务请求行为
为每个业务域(如用户、订单、文件)定义独立的 Service 类,它们不继承 Request,而是组合使用它。每个 Service 只暴露语义化方法(如 login(), getUserInfo()),内部调用 this.request.send()。
- Service 类只包含该领域专属逻辑:路径拼接、参数转换、token 注入、特定错误码映射
- 方法签名清晰(如 login({ username, password })),不暴露 URL 或 method 等底层细节
- 不同 Service 之间零依赖;替换 UserAPI 不影响 OrderAPI
解耦拦截与扩展:用策略模式管理中间件
把鉴权、日志、重试、缓存等横切关注点抽成独立的 Interceptor 类,每个实现统一接口(如 { onRequest(config), onResponse(response), onError(error) })。Request 类持有拦截器列表,按序执行。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
- 添加拦截器用 request.use(new AuthInterceptor()),不修改 Request 源码
- 业务 Service 可按需启用:new UserService().use(new CacheInterceptor())
- 拦截器之间无依赖,可自由组合、开关、测试
隔离响应数据:用 DataMapper 解耦 API 响应结构
后端返回的原始数据(如 { data: { user_id: 123 }, code: 0 })不直接暴露给组件。每个 Service 方法返回前,调用对应 Mapper(如 UserMapper.fromApi(data))转成前端约定模型({ id: 123, name: '' })。
- Mapper 是纯函数或轻量类,只做字段映射、类型转换、默认值填充
- Service 和 Mapper 一一对应,但 Mapper 可复用(如多个接口共用同一个 UserMapper)
- 当后端字段变更,只需改 Mapper,Service 方法签名和调用方完全不受影响
这样组织后,Request 是稳定内核,Service 是业务门面,Interceptor 是插拔能力,Mapper 是数据翻译官——各司其职,改一处不影响其他,测试也容易单独覆盖。

















