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

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

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

1. Model 层(模型层)

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

主要职责:
  • 数据表示:定义应用的核心数据结构(如实体类、POCO 等),它们表示应用中使用的对象。
  • 数据访问:与数据库、Web API、文件系统等进行交互,获取、存储和更新数据。
  • 业务规则:实现应用程序的核心业务逻辑,例如验证规则、计算、决策等。
  • 外部服务交互:与外部系统进行数据交换,如调用 REST API、SOAP 服务、文件系统操作等。
对应的业务逻辑:
  • 数据存取:获取数据、保存数据、更新数据(如读取数据库、调用远程 API 等)。
  • 数据验证:如用户输入验证、模型数据验证等。
  • 核心算法:如计算订单总额、库存检查、价格计算等。
  • 数据传输:如通过 DTO 或实体类进行数据传输。
示例:
csharp 复制代码
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 层执行相关操作(例如,获取数据、更新数据等)。
示例:
csharp 复制代码
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 反馈:例如,显示错误消息、禁用按钮、显示加载动画等。
示例:
xml 复制代码
<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 代码的高度分离,便于测试、维护和扩展。

相关推荐
VinciYan10 小时前
基于Jenkins+Docker的自动化部署实践——整合Git与Python脚本实现远程部署
python·ubuntu·docker·自动化·jenkins·.net·运维开发
码农君莫笑10 小时前
使用blazor开发信息管理系统的应用场景
数据库·信息可视化·c#·.net·visual studio
Zhen (Evan) Wang13 小时前
利用.NET Upgrade Assitant对项目进行升级
.net
界面开发小八哥14 小时前
DevExpress WPF中文教程:Grid - 如何移动和调整列大小?(二)
ui·.net·wpf·界面控件·devexpress·ui开发
大G哥14 小时前
深入理解.NET内存回收机制
jvm·.net
小码编匠17 小时前
WPF 星空效果:创建逼真的宇宙背景
后端·c#·.net
一只小灿灿1 天前
VB.NET在 Excel 二次开发中的全面应用
.net·excel
码农君莫笑1 天前
信管通低代码信息管理系统应用平台
linux·数据库·windows·低代码·c#·.net·visual studio