直接跳到内容

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