HarmonyOS IOC实现方案

有IOC实现方案可参考吗?

HarmonyOS
1天前
浏览
收藏 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
微信
回复
1天前
相关问题
HarmonyOS NEXT app项目是否有ioc框架?
242浏览 • 1回复 待解决
HarmonyOS 列表实现方案
69浏览 • 1回复 待解决
HarmonyOS 效果实现方案
439浏览 • 1回复 待解决
HarmonyOS 应用多主题实现方案
396浏览 • 1回复 待解决
HarmonyOS 埋点方案如何实现
24浏览 • 1回复 待解决
HarmonyOS 点赞动画实现方案
81浏览 • 1回复 待解决
HarmonyOS实现方案的问题
53浏览 • 2回复 待解决
HarmonyOS 加密和解密的方案实现
35浏览 • 1回复 待解决
HarmonyOS List瀑布流的实现方案
154浏览 • 1回复 待解决
HarmonyOS桌面小窗口实现方案
473浏览 • 1回复 待解决
高级图表实现解决方案
715浏览 • 1回复 待解决
HarmonyOS 模块间解耦方案如何实现
290浏览 • 1回复 待解决
瀑布流场景的推荐实现方案
1950浏览 • 1回复 待解决
路由实现动态页面的跳转方案
1828浏览 • 1回复 待解决
HarmonyOS 电影院选座位的实现方案
28浏览 • 1回复 待解决
HarmonyOS 计算富文本宽高的实现方案
26浏览 • 1回复 待解决
引导遮罩效果实现的最佳方案
1115浏览 • 1回复 待解决
如何选择图文混排的实现方案
2172浏览 • 1回复 待解决