HarmonyOS鸿蒙Next个人开发代码优化疑问
HarmonyOS鸿蒙Next个人开发代码优化疑问
因为以前没写过TS语言,刚刚写懒加载的时候发现了一个官方示例有点没太懂,例如BasicDataSource类实现了IDataSource,
集合的类型private originDataArray: Diary[] = [],集合的类型我是写了我自己的日记类Diary
export class BasicDataSource implements IDataSource {
private listeners: DataChangeListener[] = [];
private originDataArray: Diary[] = [];
public totalCount(): number {
return this.originDataArray.length;
}
public getData(index: number): Diary {
return this.originDataArray[index];
}
registerDataChangeListener(listener: DataChangeListener): void {
if (this.listeners.indexOf(listener) < 0) {
console.info('add listener');
this.listeners.push(listener);
}
}
}
到这一步我有点疑问就是BasicDataSource这个类正常应该是公共的吧,但是他的接受的类型就是我的Diary,导致只能这个地方用,还是说我想用另一个对象的时候再新增一个变量,然后类型传另一个对象,我在写一个MyDataSource2,去继承BasicDataSource,对这个地方有点不太懂,不知道怎么写才更优雅
export class MyDataSource extends BasicDataSource {
private dataArray: Diary[] = [];
public initData(): Diary[] {
//调数据库查询
return this.dataArray=[];
}
public totalCount(): number {
return this.dataArray.length;
}
public getData(index: number): Diary {
return this.dataArray[index];
}
public pushData(data: Diary): void {
this.dataArray.push(data);
this.notifyDataAdd(this.dataArray.length - 1);
}
}
更多关于HarmonyOS鸿蒙Next个人开发代码优化疑问的实战教程也可以访问 https://www.itying.com/category-93-b0.html
用泛型
export class BaseDataSource<T> implements IDataSource
更多关于HarmonyOS鸿蒙Next个人开发代码优化疑问的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
忘记了范型的存在哈哈哈感谢,
可以使用 Object 类,在相关业务中再 as Diary
private dataArray: Object[] = [];
我直接定义object类型这样可以不,我发现目前还没报错
private originDataArray: object[] = [];
鸿蒙Next开发代码优化建议:
-
使用ArkTS替代JS/TS提升性能;
-
合理运用Stage模型的生命周期管理;
-
优先调用HarmonyOS原生API;
-
减少UI主线程耗时操作;
-
利用分布式能力优化跨设备交互逻辑;
-
采用组件化开发模式。注意内存管理,避免频繁创建对象。
针对你的HarmonyOS Next开发中的代码优化疑问,这里给出TS泛型的解决方案:
建议使用TypeScript泛型改造BasicDataSource,使其支持不同类型的数据:
export class BasicDataSource<T> implements IDataSource {
private listeners: DataChangeListener[] = [];
protected originDataArray: T[] = []; // 改为protected便于子类访问
public totalCount(): number {
return this.originDataArray.length;
}
public getData(index: number): T {
return this.originDataArray[index];
}
registerDataChangeListener(listener: DataChangeListener): void {
if (this.listeners.indexOf(listener) < 0) {
this.listeners.push(listener);
}
}
}
使用时可以这样继承:
export class DiaryDataSource extends BasicDataSource<Diary> {
public initData(): void {
// 初始化日记数据
}
}
export class OtherDataSource extends BasicDataSource<OtherType> {
// 其他类型的数据源
}
这种泛型方案的优势:
- 保持基础数据源逻辑复用
- 支持任意类型的数据项
- 类型安全,编译时检查
- 避免重复代码
对于懒加载场景,这种设计能更好地支持不同类型数据的加载需求。