MVVM框架知识点大全(二)

简介: 教程来源 https://dnuhf.cn/category/health.html View是MVVM中用户交互的界面层,仅负责UI展示与事件传递,通过声明式数据绑定关联ViewModel,实现状态自动同步。它被动响应、不涉业务逻辑,与ViewModel保持单向依赖,确保可测试性与解耦。

四、View(视图层)

4.1 View的职责
View是用户实际交互的界面,它通过声明式数据绑定关联ViewModel的状态与命令。View不包含业务逻辑,仅负责UI的展示和用户交互的传递。

核心职责:
展示UI界面
绑定ViewModel的状态和命令
响应用户交互并传递给ViewModel

4.2 数据绑定
数据绑定是MVVM的核心机制,它将View中的UI元素与ViewModel中的属性连接起来。当ViewModel状态变化时,View自动更新;当用户在View中输入时,ViewModel状态也自动同步。

在Web框架中(KnockoutJS):

<!-- View:声明式绑定 -->
<p>联系人姓名:<strong data-bind="text: contactName"></strong></p>
<input data-bind="value: contactName, valueUpdate: 'keyup'" />

<!-- 当用户在输入框中输入时,contactName自动更新 -->
<!-- 当contactName变化时,p标签的内容自动更新 -->

在移动端框架中(Flutter):

dart
class UserView extends StatelessWidget {
  final UserViewModel viewModel;

  const UserView({required this.viewModel});

  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        Text('姓名:${viewModel.userInfo.name}'),
        Text('年龄:${viewModel.userInfo.age}(${viewModel.ageDesc})'),
        ElevatedButton(
          onPressed: () => viewModel.loadUser('123'),
          child: Text('加载用户'),
        ),
      ],
    );
  }
}

4.3 View与ViewModel的关系
在MVVM中,View持有ViewModel的引用,但ViewModel不知道View的存在。这种单向依赖确保了ViewModel的独立性和可测试性。

关键原则:
View只了解一个ViewModel,不了解其他层
ViewModel不知道View是否存在
通信通过数据绑定和命令完成

4.4 被动视图
MVVM中的View通常是“被动”的——它只负责展示和事件传递,不主动处理状态。这种设计使View更加简单,更容易测试。

五、双向数据绑定

5.1 什么是双向数据绑定
双向数据绑定是MVVM的核心特性,它实现了ViewModel状态与View之间的自动同步:
ViewModel状态变化 → View自动更新
View用户输入 → 自动更新ViewModel状态

5.2 数据绑定的底层机制
MVVM的数据绑定通过编译期依赖分析和运行时状态追踪实现自动同步:

5.2.1 编译期:建立依赖关系图
编译器解析View的UI结构,识别所有与ViewModel绑定的状态,生成“状态→UI组件”的依赖关系图。

5.2.2 运行时:INotifyPropertyChanged接口
在.NET环境中,ViewModel通过实现INotifyPropertyChanged接口来实现变更通知:

csharp
public class UserViewModel : INotifyPropertyChanged
{
    private string _name;

    public string Name
    {
        get => _name;
        set
        {
            if (_name != value)
            {
                _name = value;
                OnPropertyChanged(nameof(Name));
            }
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged(string propertyName)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

5.3 数据绑定类型
image.png

六、通信与依赖注入

6.1 层间通信规则
MVVM各层之间的通信需要遵循明确的规则:
image.png
6.2 依赖注入
依赖注入是实现MVVM层间通信的关键技术。它确保:
依赖关系在构造函数中明确声明
各层之间解耦,便于测试

typescript
// ViewModel通过构造函数接收依赖
class UserViewModel {
    private readonly userRepository: UserRepository;
    private readonly logger: LoggerService;

    constructor(
        userRepository: UserRepository,
        logger: LoggerService
    ) {
        this.userRepository = userRepository;
        this.logger = logger;
    }
}

// 依赖注入容器配置
const container = {
    userViewModel: new UserViewModel(
        new UserRepository(),
        new LoggerService()
    )
};

6.3 跨组件状态共享
在现代MVVM框架中,通常通过@Provider/@Consumer或类似机制实现跨组件状态共享,避免“props逐层传递”的问题。
来源:
https://dnuhf.cn/

相关文章
|
4天前
|
Java API
Java函数知识点大全(四)
教程来源 https://dnuhf.cn/ 本文系统讲解Java函数式编程核心:Lambda表达式(含语法、方法引用四种形式)、常用函数式接口(Predicate/Function/Consumer等)、Stream API(中间/终端操作、分组聚合)、异常处理技巧及方法设计最佳实践,涵盖从基础到高级的完整知识体系。
|
11天前
|
前端开发 JavaScript
JavaScript学习知识点大全(二)
教程来源 https://app-a87ujc988w01.appmiaoda.com/ 本节系统讲解JavaScript核心数据结构与异步编程:涵盖数组(创建、遍历map/filter/reduce、增删改查及高级方法)、Set/Map集合操作与WeakSet/WeakMap弱引用特性;字符串常用方法与正则表达式(匹配、提取、替换及高级语法);以及回调、Promise、async/await异步处理与事件循环机制。
|
4天前
|
前端开发 JavaScript C#
MVVM框架知识点大全(一)
教程来源 https://ljtgc.cn/article/323.html 本文系统解析MVVM架构模式,涵盖Model、View、ViewModel三层职责、双向数据绑定、计算属性与命令等核心机制,对比MVC/MVP,结合Vue.js等主流框架实践,助开发者构建高可维护、易测试的响应式应用。
|
4天前
|
Java
Java函数知识点大全(三)
教程来源 https://ljtgc.cn/ 本文系统讲解Java面向对象核心机制:构造方法(含无参、有参、私有、拷贝及构造器链)、方法重写规则与@Override注解、抽象类与接口方法(含默认/静态/私有方法)及函数式接口,辅以典型代码示例,助你深入掌握Java OOP精髓。
|
4天前
|
存储 缓存 前端开发
MVVM框架知识点大全(三)
教程来源 https://ljtgc.cn/category/mobile-games.html 本文系统讲解MVVM架构的性能优化与最佳实践:涵盖数据绑定、集合更新、异步处理、懒加载、更新频率控制及轻量框架选型;强调三层分离、依赖注入、命令绑定、命名规范、单元测试与生命周期管理,并对比多端框架实现,助力高效开发。
|
4天前
|
安全 C语言
C语言函数知识点大全(二)
教程来源 https://www.xcfsr.cn/category/open-source.html 本文系统讲解C语言中递归函数、函数指针与内联函数三大核心概念:递归涵盖阶乘、斐波那契、汉诺塔等经典案例及递归/迭代效率对比;函数指针详解声明、传参、返回值及在qsort中的实际应用;内联函数则对比宏定义,突出其类型安全与副作用更少的优势。
|
4天前
|
人工智能 安全 API
|
前端开发 JavaScript API
前端路由:构建现代Web应用的导航之道
在构建现代Web应用程序时,前端路由是不可或缺的一部分。它允许用户在应用内导航,同时保持URL的同步,使应用看起来像一个多页面应用程序。本博客将深入研究前端路由的核心概念、实现方式、最佳实践以及如何为您的Web应用程序创建流畅的导航体验。
351 0
|
4天前
|
前端开发 安全 API
PHP在API接口开发中的最佳实践与规范
在前后端分离、多端适配的时代,API接口成为连接前端与后端、不同系统之间的核心桥梁,而PHP作为Web开发的主流语言,凭借其开发高效、生态完善、适配性强的特点,成为API接口开发的首选语言。
69 1
|
1天前
|
Oracle 关系型数据库 PHP
PHP知识点大全(一)
教程来源 http://unbgv.cn/category/shengxiaoyunshi.html PHP是开源服务器端脚本语言,专为Web开发设计,可嵌入HTML。语法简洁、跨平台、数据库支持强,全球超70%网站使用(如WordPress、百度)。本文系统梳理PHP基础语法、变量类型、环境搭建等核心知识,兼顾新手入门与进阶参考。