HarmonyOS 鸿蒙Next关于MVVM模式中的model和viewmodel
HarmonyOS 鸿蒙Next关于MVVM模式中的model和viewmodel
import { plainToClass } from 'class-transformer'
//接口数据模拟
let userJson: string = `{ "name":"张三","ohter":{"dateofBirth":"2000-01-01"}}`
class Ohter {
dateofBirth: string = ""
}
class User {
name: string = ""
ohter?: Ohter
getAge() {
if (!this.ohter) {
return '数据异常'
}
const today = new Date();
const birthDate = new Date(this.ohter.dateofBirth);
let age = today.getFullYear() - birthDate.getFullYear();
return age;
}
}
@Entry
@Component
struct Page37 {
@State name: string = ""
@State age: number = 0
aboutToAppear(): void {
let user: User = plainToClass(User, JSON.parse(userJson))
this.name = user.name
this.age = user.getAge() as number
}
build() {
Column() {
Text(`姓名:${this.name}`)
Text(`年龄:${this.age}`)
}
.height('100%')
.width('100%')
}
}
【Model 层】
在代码中,User 和 Ohter 类构成了 Model 层。User 类包含了一个 name 字段和一个可选的 ohter 字段,后者是一个 Ohter 类型的对象,它自身又包含一个 dateofBirth 字段。此外,User 类还提供了一个 getAge 方法,这是一个典型的业务逻辑,它根据 dateofBirth 计算并返回年龄。
【ViewModel 层】
Page37 结构体扮演了 ViewModel 的角色。在 aboutToAppear 方法中,ViewModel 使用 plainToClass 函数将 JSON 字符串转换成 User 类型的实例,这是 ViewModel 处理数据转换的一个典型场景。然后,ViewModel 将解析出的 name 和通过调用 getAge 方法得到的年龄赋值给它的状态属性 name 和 age,以便在 UI 中显示。
【关于 BO 和 VO 类】在前后端交互的场景下:
BO(Business Object) 类通常包含了业务逻辑和数据,它们属于 Model 层。在上述示例中,User 类可以看作是一个 BO,因为它不仅持有数据(如 name 和 ohter),还包含了业务逻辑(如 getAge 方法)。
VO(Value Object) 或 DTO(Data Transfer Object) 类主要用于数据传输,它们通常没有业务逻辑,只用于在前端和后端之间传递数据。在示例中,Ohter 类可以被视为一个 VO,因为它只包含了数据(dateofBirth),而没有业务逻辑。
【MVVM 中的数据类型】在 MVVM 模式中:
Model 层应该包含 BO 类和 VO 类,其中 BO 类包含业务逻辑和数据,而 VO 类仅用于数据传输。
ViewModel 层应该处理数据转换、状态管理和 UI 逻辑,这意味着它将使用 Model 层提供的数据(BO 和 VO 类),并可能将它们转换为更适合 UI 使用的格式。
综上所述,在前后端交互中,BO 和 VO 类应当放在 Model 层,而 ViewModel 层则处理 Model 层数据的转换和准备,使其适应 UI 的需求。这样的分离有助于保持代码的清晰度和可维护性。
在HarmonyOS鸿蒙Next中,MVVM模式是一种重要的架构模式,它通过将应用程序划分为Model、View和ViewModel三个核心部分,实现了数据、视图和逻辑的解耦。针对你提到的Model和ViewModel,以下进行简要说明:
Model层主要负责存储和管理应用的数据及业务逻辑,通常从后端接口获取数据,它不直接与UI交互,确保数据的一致性和完整性。
ViewModel层则负责管理UI状态和业务逻辑,它作为Model与View之间的桥梁,监控Model中数据的变化并通知View更新UI,同时处理用户交互事件并将其转换为数据操作。在ArkUI中,ViewModel是存储在自定义组件的状态变量、LocalStorage和AppStorage中的数据,它通过一系列装饰器实现与View的数据绑定和交互。
简而言之,Model层关注数据本身,而ViewModel层则关注数据的展示和交互逻辑。两者相互协作,共同支持HarmonyOS鸿蒙Next应用的高效运行。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。