当前位置: 首页 > article >正文

【进阶编程】MVVM框架的每层对应那些业务

MVVM(Model-View-ViewModel) 架构中,每一层 都承担着不同的责任并处理不同类型的业务逻辑。理解每层的业务角色有助于我们在开发过程中合理划分工作,提升代码的模块化、可测试性和可维护性。

以下是 MVVM 框架中每一层的职责以及它们通常对应的业务逻辑:

1. Model 层(模型层)

Model 层是 MVVM 模式中最接近 业务逻辑数据存取 的一层,负责 数据的处理、验证和核心业务规则

主要职责:
  • 数据表示:定义应用的核心数据结构(如实体类、POCO 等),它们表示应用中使用的对象。
  • 数据访问:与数据库、Web API、文件系统等进行交互,获取、存储和更新数据。
  • 业务规则:实现应用程序的核心业务逻辑,例如验证规则、计算、决策等。
  • 外部服务交互:与外部系统进行数据交换,如调用 REST API、SOAP 服务、文件系统操作等。
对应的业务逻辑:
  • 数据存取:获取数据、保存数据、更新数据(如读取数据库、调用远程 API 等)。
  • 数据验证:如用户输入验证、模型数据验证等。
  • 核心算法:如计算订单总额、库存检查、价格计算等。
  • 数据传输:如通过 DTO 或实体类进行数据传输。
示例:
public class OrderModel
{
    public int OrderId { get; set; }
    public decimal Price { get; set; }
    public int Quantity { get; set; }

    public decimal CalculateTotal()
    {
        return Price * Quantity;
    }
}

2. ViewModel 层(视图模型层)

ViewModel 层充当 View(视图)Model(模型) 之间的桥梁。它的主要职责是从 Model 层获取数据,并根据 View 的需求对数据进行转换或处理,处理与 UI 相关的逻辑。

主要职责:
  • 数据绑定:将从 Model 层获取的数据与 View 层绑定,通常通过 数据绑定(Data Binding) 进行更新。
  • 用户交互:接收来自 View 的用户输入(如按钮点击、文本框输入等),并执行相应的操作(例如,调用 Model 层的方法)。
  • UI 状态管理:管理与 UI 相关的状态,如启用/禁用按钮、显示错误信息等。
  • 业务流程控制:处理一些 UI 相关的业务逻辑,如加载数据、提交表单等。
对应的业务逻辑:
  • UI 状态管理:例如,控制控件的启用/禁用、显示加载指示器、显示错误信息。
  • 数据格式化:将 Model 层的数据格式化为适合 View 显示的形式。
  • 用户输入处理:处理用户在 UI 上的操作,如按钮点击、文本框内容变化、选项卡切换等。
  • 命令执行:接收来自 View 的操作命令,调用 Model 层执行相关操作(例如,获取数据、更新数据等)。
示例:
public class OrderViewModel : INotifyPropertyChanged
{
    private OrderModel _order;
    private string _orderTotal;

    public OrderViewModel()
    {
        _order = new OrderModel();
        CalculateTotalCommand = new RelayCommand(CalculateTotal);
    }

    public ICommand CalculateTotalCommand { get; set; }

    public string OrderTotal
    {
        get { return _orderTotal; }
        set
        {
            _orderTotal = value;
            OnPropertyChanged(nameof(OrderTotal));
        }
    }

    private void CalculateTotal()
    {
        OrderTotal = _order.CalculateTotal().ToString("C");
    }

    public event PropertyChangedEventHandler PropertyChanged;

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

3. View 层(视图层)

View 层负责应用的 用户界面 和用户交互,通常与操作系统或框架提供的 UI 控件进行绑定。它是用户直接接触到的界面,所有的用户交互(点击按钮、输入文本、选择选项等)都会在 View 层捕获,并通过 ViewModel 来处理。

主要职责:
  • 用户界面展示:展示数据(通过数据绑定从 ViewModel 获取)。
  • 用户输入捕获:捕获用户的交互,如按钮点击、文本框输入、滑动条调整等。
  • 交互反馈:向用户提供反馈信息,例如加载进度、错误信息、成功提示等。
  • 视图更新:通过 ViewModel 中的数据绑定,动态地更新 UI。
对应的业务逻辑:
  • 显示数据:从 ViewModel 获取格式化后的数据并展示在 UI 控件上。
  • 接收用户输入:捕获用户输入并传递给 ViewModel,例如,按钮点击事件、表单提交等。
  • UI 反馈:例如,显示错误消息、禁用按钮、显示加载动画等。
示例:
<Button Content="Calculate Total" Command="{Binding CalculateTotalCommand}" />
<TextBlock Text="{Binding OrderTotal}" />

4. 跨层业务逻辑的划分

a. 核心业务逻辑(通常在 Model 层)
  • 数据操作:数据库访问、外部 API 调用等。
  • 数据验证:例如订单的有效性、用户输入验证等。
  • 核心计算:例如订单总额计算、折扣计算等。
b. UI 相关逻辑(通常在 ViewModel 层)
  • UI 状态管理:例如按钮启用/禁用、加载提示显示等。
  • 用户交互控制:例如按钮点击、文本框输入的响应。
  • 命令和事件处理:接收来自 View 的命令并触发相关操作。
c. UI 显示逻辑(通常在 View 层)
  • 显示数据:通过数据绑定从 ViewModel 获取并显示数据。
  • 捕获用户输入:通过 UI 控件接收用户输入并传递给 ViewModel

5. 总结

层级主要职责对应的业务逻辑
Model数据表示、数据存取、核心业务规则数据访问、数据验证、核心计算、外部服务交互
ViewModel数据绑定、UI 状态管理、用户交互UI 状态管理、数据格式化、用户输入处理、命令执行
View用户界面展示、用户输入捕获显示数据、接收用户输入、UI 反馈
  • Model 层关注数据和核心业务逻辑。
  • ViewModel 层负责数据转换、UI 状态控制以及用户交互。
  • View 层则专注于展示和捕获用户的操作。

在这种划分下,ModelViewModel 层包含了大部分业务逻辑,而 View 层主要关注用户界面的呈现和用户交互的捕捉。通过 MVVM 模式的分层结构,可以保持业务逻辑和 UI 代码的高度分离,便于测试、维护和扩展。


http://www.kler.cn/a/447195.html

相关文章:

  • LabVIEW深海气密采水器测控系统
  • Qt之串口设计-线程实现(十二)
  • 基于 Python 解决 X 轴上点距离最小值问题
  • 二八(vue2-04)、scoped、data函数、父子通信、props校验、非父子通信(EventBus、provideinject)、v-model进阶
  • Mac 开机 一闪框 mediasharingd
  • Linux实现两台服务器之间ssh连接
  • 前端(Vue)tagsView(子标签页视图切换) 原理及通用解决方案
  • ubuntu 卸载 MySQL
  • EJB(Enterprise JavaBean)和JavaBean
  • Postbot使用教程
  • Springboot提供外部接口和访问外部接口的简单例子
  • qwt 之 QwtPlotPicker
  • Docker_常用命令详解
  • 嵌入式驱动开发详解19(regmap驱动架构)
  • CTF知识集-SSRF
  • 组件十大传值
  • SQL MID()
  • django的model.py admin.py views.py 中 的可循环遍历的 精简案例
  • Python拆分Excel - 将工作簿或工作表拆分为多个文件
  • Github 2024-12-20 Java开源项目日报 Top10
  • 【BK】BK7256平台,sdk使用笔记(持续更新)
  • JVM和数据库面试知识点
  • 【论文阅读笔记】HunyuanVideo: A Systematic Framework For Large Video Generative Models
  • k8s迁移——岁月云实战笔记
  • 深入理解旋转位置编码(RoPE)及其在大型语言模型中的应用
  • linux ibus rime 中文输入法,快速设置为:默认简体 。命令重启部署(****)