ViewModel 规范
职责说明
ViewModel 负责状态管理与业务逻辑,View 只消费 ViewModel 的状态与方法。所有数据访问统一通过 core/data 的仓库完成,避免直接依赖网络或数据库模块。
推荐写法
- 类上使用
@ObservedV2,字段使用@Trace触发 UI 更新。 - 业务逻辑集中在 ViewModel,View 只负责调用。
- 导航跳转优先使用模块级
Navigator。
示例
ts
import { BaseViewModel } from "base";
import { UserInfoRepository } from "data";
import { User } from "model";
import { RequestHelper } from "result";
/**
* @file 用户信息页 ViewModel
*/
@ObservedV2
export default class UserInfoViewModel extends BaseViewModel {
/**
* 用户仓库
*/
private repository: UserInfoRepository = new UserInfoRepository();
/**
* 用户信息
*/
@Trace
userInfo: User = new User();
/**
* 刷新用户信息
* @returns {void} 无返回值
*/
refreshUserInfo(): void {
RequestHelper.repository(this.repository.getPersonInfo())
.execute()
.then((userInfo: User): void => {
this.userInfo = userInfo;
});
}
}注意事项
- ViewModel 不做 UI 布局,不直接操作页面组件。
- 数据请求统一走仓库,配合
RequestHelper处理结果与错误。 - 根据场景选择基类:单次请求用
BaseNetWorkViewModel,列表分页用BaseNetWorkListViewModel。 - 导航跳转可以直接在 View 层调用
Navigator,无需在 ViewModel 再包一层。 - 状态字段尽量有明确类型,避免
any。