harmonyos 鸿蒙隔离层设计-kb88凯时官网登录

来自:
时间:2024-04-27
阅读:
免费资源网 - https://freexyz.cn/

在软件开发中,底层库的更换或升级是常见的需求,这可能由性能提升、新功能需求或安全性考虑等因素驱动。为了降低迁移成本,良好的设计模式至关重要。

h<a href=https://www.freexyz.cn/tag/arm.html target=_blank class=infotextkey>arm</a>onyos <a href=https://www.freexyz.cn/tag/harmonyos.html target=_blank class=infotextkey>鸿蒙</a>隔离层设计

在版本迭代过程中,网络请求库可能会经历从a到b再到c的演进。为了实现业务层的无感切换,需要在各个请求库和业务代码之间封装隔离代码,以实现第三方网络库的灵活更换。

回调接口 (icallback)

定义了icallback接口,包含onsuccessonfailure两个方法,用于处理异步操作的成功和失败情况。

/**
 * 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 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 从 json 字符串解析得到的特定类型的对象。
   */
  protected abstract onparsedsuccess(objresult: t): void;
}

http请求处理器接口 (ihttprequest)

ihttprequest接口定义了postget两个方法,用于发送post和get请求。

// 引入 icallback 接口的声明
import { icallback } from './icallback';
/**
 * ihttprequest 接口定义了处理 http 请求所需的方法。
 * 该接口包含一个 post 方法,用于发送 post 请求到指定的 url。
 */
export interface ihttprequest {
  /**
   * 发送一个 post 请求到指定的 url。
   *
   * @param url 请求的目标 url 地址。
   * @param params 一个包含请求参数的 map 对象,键和值都是字符串类型。
   * @param callback 一个回调函数,用于处理请求完成后的结果。
   *                 这个回调函数遵循 icallback 接口定义的签名。
   */
  post(url: string, params: map, callback: icallback): void;
  /**
   * 发送一个 get 请求到指定的 url。
   * @param url  这个回调函数遵循 icallback 接口定义的签名。
   * @param callback 一个回调函数,用于处理请求完成后的结果。
   *                 这个回调函数遵循 icallback 接口定义的签名。
   */
  get(url: string, callback: icallback): void;
}

http请求处理 (httphelper)

  • httphelper类实现了单例模式,用于管理网络请求。
  • 提供了init方法来初始化网络请求处理器。
  • post和get方法用于发送post和get请求,它们代理到具体的网络请求处理器。
import { icallback } from './icallback';
import { ihttprequest } from './ihttprequest';
/**
 * 代理类,用于网络请求管理
 */
export class httphelper implements ihttprequest {
  /**
   * 存储 ihttpprocessor 接口的实际实现。
   * 这个属性由 init 方法设置,用于指定 httphelper 应该代理到哪个具体的网络请求处理器。
   */
  private static mihttpprocessor: ihttprequest;
  /**
   * 私有构造函数,防止外部直接通过 new 关键字创建实例。
   */
  constructor() {
    // 初始化逻辑可以在这里实现
  }
  //单例
  private static instance: httphelper;
  /**
   * 获取 httphelper 的单例实例。
   * @returns {httphelper} httphelper 的单例实例。
   */
  public static obtain(): httphelper {
    if (!httphelper.instance) {
      httphelper.instance = new httphelper();
    }
    return httphelper.instance;
  }
  /**
   * 初始化代理类,设置它应该使用的网络请求处理器。
   * @param httpprocessor 实现 ihttpprocessor 接口的对象。
   */
  public static init(httpprocessor: ihttprequest): void {
    httphelper.mihttpprocessor = httpprocessor;
  }
  /**
   * 发送一个 post 请求。
   * 这个方法代理到 mihttpprocessor 的 post 方法,实现了网络请求的功能。
   * @param url 请求的 url 地址。
   * @param params 包含请求参数的 map 对象。
   * @param callback 处理请求结果的回调函数。
   */
  post(url: string, params: map, callback: icallback): void {
    // 代理到 ihttpprocessor 实例的 post 方法
    httphelper.mihttpprocessor.post(url, params, callback);
  }
  /**
   * 发送一个 get 请求。
   * 这个方法代理到 mihttpprocessor 的 get 方法,实现了网络请求的功能。
   * @param url 请求的 url 地址。
   * @param callback 处理请求结果的回调函数。
   */
  get(url: string, callback: icallback): void {
    // 代理到 ihttpprocessor 实例的 get 方法
    httphelper.mihttpprocessor.get(url, callback);
  }
}

具体的网络实现 (httptoolrequest)

  • httptoolrequest类是ihttprequest的一个具体实现,使用了三方网络请求库(httptool)来发送网络请求。
  • 它实现了post和get方法,用于处理post和get请求,并使用回调来处理响应。
import http from '@ohos.net.http';
import { httpmanager } from '@xufeng/httptool/src/main/ets/http/httpmanager';
import { requestmethod } from '@xufeng/httptool/src/main/ets/http/requestoptions';
import { homepagenewindexbean } from '@xufeng/httptool/src/main/ets/model/newsmodel';
import { tongue } from '../bean/tongue';
import { icallback } from './icallback';
import { ihttprequest } from './ihttprequest';
/**
 * httptoolrequest 类实现了 ihttprequest 接口,用于执行网络 post 请求。
 * 可以使用第三方 sdk 来处理实际的网络请求。
 */
export class httptoolrequest implements ihttprequest {
  /**
   * 发送一个 post 请求到指定的 url,并处理响应。
   *
   * @param url 请求的目标 url 地址。
   * @param params 一个 map 对象,包含了请求的参数。
   * @param callback 实现 icallback 接口的回调函数,用于处理请求完成后的结果。
   */
  post(url: string, params: map, callback: icallback): void {
    let headers: record = {
      "x-apispace-token": 'x-apispace-token信息',
      "content-type": 'application/x-www-form-urlencoded',
    };
    httpmanager.getinstance().request({
      method: requestmethod.post,
      url: url,
      header: headers,
      extradata:params
    }).then((response) => {
      console.log("response:"   json.stringify(response))
      callback.onsuccess(json.stringify(response))
    }).catch((err) => {
      console.log("err:"   json.stringify(err))
      callback.onfailure(json.stringify(err))
    })
  }
  /**
   * 发送一个 get 请求到指定的 url,并处理响应。
   *
   * @param url 请求的目标 url 地址。
   * @param params 一个 map 对象,包含了请求的参数。
   * @param callback 实现 icallback 接口的回调函数,用于处理请求完成后的结果。
   */
  get(url: string, callback: icallback): void {
    httpmanager.getinstance().request({
      method: requestmethod.get,
      url: url
    }).then((response) => {
      console.log("response:"   json.stringify(response))
      callback.onsuccess(json.stringify(response))
    }).catch((err) => {
      console.log("err:"   json.stringify(err))
      callback.onfailure(json.stringify(err))
    })
  }
}

业务层调用

通过httphelper初始化使用的三方网络请求处理器,并发送post请求。

httphelper.init(new httptoolrequest());
let posturl: string = 'https://eolink.o.apispace.com/rkl/common/tongue/gettonguelist'
let params: map = new map();
params.set('pagesize', '5')
params.set('page', '1')
httphelper.obtain().post(posturl, params, new (class http extends httpcallback {
  onparsedsuccess(tongue: tongue): void {
    console.log("tongue=========="   json.stringify(tongue));
  }
}));
免费资源网 - https://freexyz.cn/
返回顶部
顶部
网站地图