【进阶编程】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 代码的高度分离,便于测试、维护和扩展。

相关推荐
code_shenbing1 小时前
.NET MVC实现电影票管理
mvc·.net
shepherd枸杞泡茶5 小时前
第3章 3.3日志 .NET Core日志 NLog使用教程
c#·asp.net·.net·.netcore
2501_9032386515 小时前
深入理解 Kafka 主题分区机制
分布式·kafka·个人开发
时光追逐者16 小时前
推荐几款开源免费的 .NET MAUI 组件库
microsoft·开源·c#·.net·.net core·maui
三天不学习17 小时前
.Net面试宝典【刷题系列】
面试·职场和发展·.net
JosieBook18 小时前
【.NET全栈】.NET包含的所有技术
.net
shepherd枸杞泡茶18 小时前
第3章 3.2 配置系统 .NET Core配置系统
后端·c#·asp.net·.net
2501_9032386519 小时前
深入理解 JUnit 的 @RunWith 注解与自定义 Runner
数据库·junit·sqlserver·个人开发
追逐时光者1 天前
Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
后端·.net
CodeCraft Studio2 天前
文档处理控件TX Text Control系列教程:使用 .NET C# 从 PDF 文档中提取基于模板的文本
pdf·c#·.net