RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 567832
Accepted
Artyom
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 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. 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 是,本质上是一个异步的东西)。以及这些相同对象到用户界面的物理映射——这些已经是特定实现的绑定、模板、转换器和其他好东西——作为我们视图模型的衍生物(也就是说,它们附加到它)。

    优点 - 这样的类相对容易(或至少简单地可能)通过单元测试进行测试,一般来说,架构变得更加和谐,大型应用程序开发速度更快,更容易维护。缺点 - 视图模型的额外开销以及对高级绑定工具的需求。

    像这样的东西。

    • 6

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    如何停止编写糟糕的代码?

    • 3 个回答
  • Marko Smith

    onCreateView 方法重构

    • 1 个回答
  • Marko Smith

    通用还是非通用

    • 2 个回答
  • Marko Smith

    如何访问 jQuery 中的列

    • 1 个回答
  • Marko Smith

    *.tga 文件的组重命名(3620 个)

    • 1 个回答
  • Marko Smith

    内存分配列表C#

    • 1 个回答
  • Marko Smith

    常规赛适度贪婪

    • 1 个回答
  • Marko Smith

    如何制作自己的自动完成/自动更正?

    • 1 个回答
  • Marko Smith

    选择斐波那契数列

    • 2 个回答
  • Marko Smith

    所有 API 版本中的通用权限代码

    • 2 个回答
  • Martin Hope
    jfs *(星号)和 ** 双星号在 Python 中是什么意思? 2020-11-23 05:07:40 +0000 UTC
  • Martin Hope
    hwak 哪个孩子调用了父母的静态方法?还是不可能完成的任务? 2020-11-18 16:30:55 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    user207618 Codegolf——组合选择算法的实现 2020-10-23 18:46:29 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    Arch ArrayList 与 LinkedList 的区别? 2020-09-20 02:42:49 +0000 UTC
  • Martin Hope
    iluxa1810 哪个更正确使用:if () 或 try-catch? 2020-08-23 18:56:13 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5