前言
在软件开发中,底层库的更换或升级是常见的需求,这可能由性能提升、新功能需求或安全性考虑等因素驱动。为了降低迁移成本,良好的设计模式至关重要。
在版本迭代过程中,网络请求库可能会经历从A到B再到C的演进。为了实现业务层的无感切换,需要在各个请求库和业务代码之间封装隔离代码,以实现第三方网络库的灵活更换。
回调接口 (ICallback)
定义了ICallback接口,包含onSuccess和onFailure两个方法,用于处理异步操作的成功和失败情况。
/**
* ICallback 接口定义了处理异步操作成功时的回调逻辑。
* 这个接口通常用于网络请求操作,当操作成功完成时,
* 通过实现此接口的对象的 onSuccess 方法来处理结果。
*/
export interface ICallback {
/**
* 当异步操作成功时调用此方法。
*
* @param result 操作结果的数据,通常是一个字符串类型,可以是 JSON 格式、XML 格式或其他文本格式。
* 具体格式取决于异步操作的上下文和需求。
*/
onSuccess(result: string): void;
/**
* 当异步操作失败时调用此方法。
*
* @param error 错误信息,提供失败操作的描述。
* 这可以是技术性错误(如网络问题、解析错误等)或业务逻辑错误。
*/
onFailure(error: string): void;
}
HTTP响应处理 (HttpCallback)
HttpCallback类实现了ICallback接口,专门为处理HTTP响应结果设计。它将响应字符串解析为JSON对象,并调用onParsedSuccess方法来处理解析后的对象。
import { ICallback } from './ICallback';
/**
* HttpCallback 类是 ICallback 接口的一个实现,专门为处理 HTTP 响应结果设计。
* 它定义了一个从 JSON 字符串解析结果并将其转换为特定类型对象的 onSuccess 方法,
* 然后通过抽象方法 onParsedSuccess 将对象传递给进一步的处理。
* T 泛型允许开发者指定他们希望从 JSON 字符串解析得到的类型。
*/
export abstract class HttpCallback<T> implements ICallback {
/**
* 当异步操作成功时调用此方法。
* 此方法实现了 ICallback 接口的 onSuccess,将字符串结果解析为 JSON 对象,
* 并调用抽象方法 onParsedSuccess 来处理解析后的对象。
*
* @param result 异步操作返回的 JSON 格式的字符串数据。
*/
onSuccess(result: string): void {
// 将 JSON 格式的字符串结果解析为一个对象,对象的类型由泛型 T 指定。
let objResult: T = JSON.parse(result) as T;
// 将解析后的对象传递给抽象方法 onParsedSuccess 进行进一步处理。
this.onParsedSuccess(objResult);
}
/**
* 当异步操作失败时调用此方法。
*
* @param error 错误信息,提供失败操作的描述。
* 这可以是技术性错误(如网络问题、解析错误等)或业务逻辑错误。
*/
onFailure(error: string): void {
}
/**
* 抽象方法,用于处理从 JSON 字符串成功解析后得到的特定类型的对象。
* 具体的处理逻辑需要在子类中实现。
*
* @param objResult 从 J