HarmonyOS IOC实现方案

有IOC实现方案可参考吗?

HarmonyOS
2024-12-25 08:31:10
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
zxjiu

IOC控制反转,是面向对象编程中的一种设计原则,用来减低代码间的耦合度。通过装饰器利用Reflect Metadata三方库在声明的时候添加和读取元数据。reflect-metadata的使用,在ts文件中Ts的官方使用是一样的。

简单实现可参考:https://juejin.cn/post/7036895697865555982#heading-15

参考代码:

import "reflect-metadata";

// 定义两个symbol 类型的 metadataKey
const ParamsTypeMetaKey = "design:paramtypes";
const ReturnTypeMetaKey = "design:returntype";

// Design-time type annotations, 注意区别使用的字符串作为 metadataKey
function ParamTypes(...types:ESObject[]) {
  return Reflect.metadata(ParamsTypeMetaKey, types);
}
function ReturnType(type:ESObject) {
  return Reflect.metadata(ReturnTypeMetaKey, type);
}

// 定义一个数据解析的方式元数据
function ParseMethod(type:ESObject) {
  return Reflect.metadata("data:parse", type);
}

class P {}
export class Point {
  private x: number;
  private y: number;
  constructor(x:number, y:number) {
    this.x = x;
    this.y = y;
  }

  @ReturnType("[number, number]")
  getCoord() {
    return [this.x, this.y];
  }

  // 采用装饰器的方式进行元数据定义
  @ParamTypes(Number)
  @ReturnType(P)
  @ParseMethod("JSON")
  moveX(x: number) {
    this.x = x;
    console.log('success', this)
    return this;
  }
}

const p = new Point(1, 1);
// 通过metadataKey 从 target 上读取对应属性名的元数据。这里的属性是一个函数
const des:ESObject = Reflect.getMetadata(ReturnTypeMetaKey, p, "getCoord");
console.log("type is ", des); // type is [number, number]
const moveXReturnType:ESObject = Reflect.getMetadata(ReturnTypeMetaKey, p, "moveX");
console.log("moveXReturnType is: ", moveXReturnType); // moveXReturnType is: Cannot get source code of funtion
const moveXParamsType:ESObject = Reflect.getMetadata(ParamsTypeMetaKey, p, "moveX");
console.log("moveXParamsType is: ", moveXParamsType); //moveXParamsType is: function Number() { [native code] }
const moveXParseMethod:ESObject = Reflect.getMetadata("data:parse", p, "moveX");
console.log("moveXParseMethod is: ", moveXParseMethod); // moveXParseMethod is: JSON
分享
微博
QQ
微信
回复
2024-12-25 11:30:50
相关问题
HarmonyOS NEXT app项目是否有ioc框架?
553浏览 • 1回复 待解决
HarmonyOS 列表实现方案
220浏览 • 1回复 待解决
HarmonyOS NFC方案如何实现
256浏览 • 1回复 待解决
HarmonyOS 效果实现方案
674浏览 • 1回复 待解决
HarmonyOS实现方案的问题
214浏览 • 2回复 待解决
HarmonyOS 点赞动画实现方案
259浏览 • 1回复 待解决
HarmonyOS 埋点方案如何实现
324浏览 • 1回复 待解决
HarmonyOS 全局loading的实现方案
49浏览 • 1回复 待解决
HarmonyOS 应用多主题实现方案
639浏览 • 1回复 待解决
HarmonyOS 适老版(大字版)实现方案
216浏览 • 1回复 待解决
HarmonyOS Next埋点方案如何实现
77浏览 • 1回复 待解决
HarmonyOS List瀑布流的实现方案
315浏览 • 1回复 待解决
HarmonyOS 加密和解密的方案实现
216浏览 • 1回复 待解决
HarmonyOS桌面小窗口实现方案
707浏览 • 1回复 待解决
高级图表实现解决方案
929浏览 • 1回复 待解决
HarmonyOS代码规范扫描的方案实现
217浏览 • 1回复 待解决
HarmonyOS List组件指定item刷新实现方案
223浏览 • 1回复 待解决
HarmonyOS 模块间解耦方案如何实现
490浏览 • 1回复 待解决
HarmonyOS 计算富文本宽高的实现方案
288浏览 • 1回复 待解决
HarmonyOS 电影院选座位的实现方案
290浏览 • 1回复 待解决
HarmonyOS 发现页的一镜到底方案实现
189浏览 • 1回复 待解决
HarmonyOS app内自定义相册实现方案
60浏览 • 1回复 待解决