Artyom Asked:2020-09-19 15:11:04 +0000 UTC2020-09-19 15:11:04 +0000 UTC 2020-09-19 15:11:04 +0000 UTC 为什么在 MVVM 模式、C# 中需要 ViewModel? 772 我最近开始学习 MVVM 模式并有十几个问题。其中之一 - 为什么需要 ViewModel?(也可以在模型中建立绑定)请举例或发送文章链接。 c# 1 个回答 Voted Best Answer morincer 2020-10-12T05:10:19Z2020-10-12T05:10:19Z 从形式上讲,ViewModel 是 UI 实现的另一层抽象。还有很多字母。 其含义大致如下。在标准 MVC 范例中,问题仍然悬而未决——如何在与用户操作相关的部分正确地“编码”用户交互逻辑,而不是与某种业务逻辑相关。一个典型的例子是在单击单选按钮时隐藏/显示一组字段,或者,例如,在一个选项卡控件中切换到另一个选项卡时验证输入的数据。另一个示例是显示一个对话框,要求您在更改元素时确认操作。 那些。一方面,这些行为背后可能有相当复杂的逻辑,另一方面,一般来说,它们与“模型”——巩固整个系统的本质——“铸在金属中”并存储在数据库中。而且从架构的角度来看,仅仅为了瞬间显示需要而在模型类中添加十几个布尔字段 IsCheckboxSelected 有点不合常理。 直到最近,老鼠还在哭泣、刺痛,但继续吃仙人掌:它在控制器和视图之间涂抹,编写了带有存储库的附加类和层,并且牺牲了解决方案的架构“美感”以实现功能要求。 但如您所知,技术进步是不可阻挡的,界面开始变得越来越复杂,异步、可用性和所有这些东西开始占据主导地位。而另一方面,自动化和单元测试也开始在全球范围内凯旋而归,如何测试将用户交互逻辑钉在物理“渲染”上的视图的问题变得越来越尖锐。 那些。一方面,我希望能够编写(并自动隔离测试,这也很重要)UI 逻辑,另一方面,我真的不想被特定的标签、标签、控件所束缚,等在断言中。等等 MVVM 范式就是为了解决这个矛盾而开发的。在体系结构中引入了一个附加层 - 负责用户交互的层,但同时它的构建方式在理想情况下,它是否显示在 Windows 下的 WPF 应用程序中并不重要,a文本控制台 la DOS,或通过敲 tomtamov 传输。这是因为 MVVM 类本身是在普通 POCO 对象的基础上构建的,逻辑是在对象字段中对数据进行操作的相同对象的方法 + 事件处理程序(毕竟 UI 是,本质上是一个异步的东西)。以及这些相同对象到用户界面的物理映射——这些已经是特定实现的绑定、模板、转换器和其他好东西——作为我们视图模型的衍生物(也就是说,它们附加到它)。 优点 - 这样的类相对容易(或至少简单地可能)通过单元测试进行测试,一般来说,架构变得更加和谐,大型应用程序开发速度更快,更容易维护。缺点 - 视图模型的额外开销以及对高级绑定工具的需求。 像这样的东西。
从形式上讲,ViewModel 是 UI 实现的另一层抽象。还有很多字母。
其含义大致如下。在标准 MVC 范例中,问题仍然悬而未决——如何在与用户操作相关的部分正确地“编码”用户交互逻辑,而不是与某种业务逻辑相关。一个典型的例子是在单击单选按钮时隐藏/显示一组字段,或者,例如,在一个选项卡控件中切换到另一个选项卡时验证输入的数据。另一个示例是显示一个对话框,要求您在更改元素时确认操作。
那些。一方面,这些行为背后可能有相当复杂的逻辑,另一方面,一般来说,它们与“模型”——巩固整个系统的本质——“铸在金属中”并存储在数据库中。而且从架构的角度来看,仅仅为了瞬间显示需要而在模型类中添加十几个布尔字段 IsCheckboxSelected 有点不合常理。
直到最近,老鼠还在哭泣、刺痛,但继续吃仙人掌:它在控制器和视图之间涂抹,编写了带有存储库的附加类和层,并且牺牲了解决方案的架构“美感”以实现功能要求。
但如您所知,技术进步是不可阻挡的,界面开始变得越来越复杂,异步、可用性和所有这些东西开始占据主导地位。而另一方面,自动化和单元测试也开始在全球范围内凯旋而归,如何测试将用户交互逻辑钉在物理“渲染”上的视图的问题变得越来越尖锐。
那些。一方面,我希望能够编写(并自动隔离测试,这也很重要)UI 逻辑,另一方面,我真的不想被特定的标签、标签、控件所束缚,等在断言中。等等
MVVM 范式就是为了解决这个矛盾而开发的。在体系结构中引入了一个附加层 - 负责用户交互的层,但同时它的构建方式在理想情况下,它是否显示在 Windows 下的 WPF 应用程序中并不重要,a文本控制台 la DOS,或通过敲 tomtamov 传输。这是因为 MVVM 类本身是在普通 POCO 对象的基础上构建的,逻辑是在对象字段中对数据进行操作的相同对象的方法 + 事件处理程序(毕竟 UI 是,本质上是一个异步的东西)。以及这些相同对象到用户界面的物理映射——这些已经是特定实现的绑定、模板、转换器和其他好东西——作为我们视图模型的衍生物(也就是说,它们附加到它)。
优点 - 这样的类相对容易(或至少简单地可能)通过单元测试进行测试,一般来说,架构变得更加和谐,大型应用程序开发速度更快,更容易维护。缺点 - 视图模型的额外开销以及对高级绑定工具的需求。
像这样的东西。