MVC、MVP 和 MVVM 设计模式在编码 C# 方面有什么区别

2023-12-08

如果我们使用短语“MVC、MVP 和 MVVM 设计模式之间的差异”搜索 Google,那么我们可能会得到一些讨论的 URLMVC MVP 和 MVVM 设计模式的区别理论上就像:

MVP

在无法通过“dataContext”进行绑定的情况下使用。 Windows 窗体就是一个完美的例子。为了将视图与模型分离,需要一个演示器。由于视图无法直接绑定到呈现器,因此必须通过接口(IView)将信息传递给视图。

MVVM

在可以通过“dataContext”进行绑定的情况下使用。为什么?每个视图的各种 IView 接口都被删除,这意味着需要维护的代码更少。 MVVM 可以使用 Knockout 包含 WPF 和 javascript 项目的一些示例。

MVC

在视图和程序其余部分之间的连接并不总是可用的情况下使用(并且您无法有效地使用 MVVM 或 MVP)。 这清楚地描述了 Web API 与发送到客户端浏览器的数据分离的情况。 Microsoft 的 ASP.NET MVC 是管理此类情况的绝佳工具,并提供了非常清晰的 MVC 框架


但我还没有找到一篇文章从理论上讨论了这种差异以及示例代码。

如果我能找到一篇讨论这 3 种设计模式(MVC、MVP 和 MVVM)之间差异以及代码的文章,那就太好了。

我想获得 3 个类似的源代码CRUD通过这三种设计模式(MVC、MVP 和 MVVM)实现的应用程序。这样我就可以浏览代码并了解如何为这三种设计模式(MVC、MVP 和 MVVM)编写代码。

因此,如果存在任何此类文章讨论这 3 种设计模式(MVC、MVP 和 MVVM)的代码看起来有何不同,那么请将我重定向到该文章。


一些基本的区别可以简写为:

MVC:

传统的MVC是有一个

  1. 模型:充当数据的模型
  2. View :处理用户的视图,可以是 UI
  3. Controller:控制Model和View之间的交互,其中View调用Controller来更新Model。如果需要,视图可以调用多个控制器。

MVP:

与传统的MVC类似,但Controller被Presenter取代。但与 Controller 不同,Presenter 也负责更改视图。视图通常不会调用演示者。

MVVM

这里的区别是视图模型的存在。它是观察者设计模式的一种实现,其中模型中的更改也由虚拟机在视图中表示。 例如:如果更改滑块,不仅模型会更新,而且视图中显示的可能是文本的数据也会更新。这样就有了双向数据绑定。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MVC、MVP 和 MVVM 设计模式在编码 C# 方面有什么区别 的相关文章

  • 如何在 Caliburn.Micro 中使用 Conductor 的依赖注入

    我有时用Caliburn Micro http caliburnmicro com创建应用程序 使用最简单的 BootStrapper 我可以像这样使用 IoC 容器 SimpleContainer private SimpleContai
  • 是否保证 sizeof(T[N]) == N * sizeof(T) ?

    我一直假设 N 个元素类型的数组的大小T 由返回sizeof保证正好是N次sizeof T The 对这个问题的评论 https stackoverflow com questions 46457449 is it always the c
  • 线程独占数据:如何存储和访问?

    NET 中是否有可能将对象实例绑定到线程的当前执行上下文 这样在代码的任何部分我都可以做类似的事情CurrentThread MyObjectData DoOperation 并确保我访问特定于线程的数据 谢谢 你可以看一下线程静态属性 h
  • 如何创建语法突出显示文本框[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 如何使用 C Net 创建语法突出显示文本框 Take 闪烁网 http scintillanet codeplex com 并采取其
  • 表达式访问者仅为某些 lambda 表达式调用 VisitParameter

    我希望能够使用嵌套扩展方法将 EF 中的实体投影到相应的视图模型 参见我之前的问题使用扩展方法在 EF 中投影单个实体 https stackoverflow com questions 39585427 projection of sin
  • .NET 中的 Class.forName() 等效项?

    动态获取对象类型然后创建它的新实例的 C 方法是什么 例如 如何在 C 中实现以下 Java 代码的结果 MyClass x MyClass Class forName classes MyChildClass newInstance Lo
  • C 中的 '\0' 和 printf()

    在 C 入门课程中 我了解到在存储字符串时存储空字符 0在它的最后 但是如果我想打印一个字符串怎么办 printf hello 虽然我发现它并没有结束 0通过以下声明 printf d printf hello Output 5 但这似乎不
  • C 链表销毁函数

    我正在尝试学习 C 和很多人一样 我对指针有点困惑 无论如何 我创建了一个递归函数来销毁我的链表 但是正如我调试的那样 当我从函数返回时 列表的头部不应该为空 所以我猜这是对指针的一些基本误解 这是函数 void destroy struc
  • 领域驱动设计和工厂类的作用

    我不清楚工厂类的角色和职责是什么 我知道工厂类应该负责创建域对象 聚合根 及其关联的实体和值对象 但我不清楚 DDD 架构的工厂 层 在哪里 工厂应该直接调用存储库来获取其数据还是服务库 工厂在以下框架中的位置 UI gt 应用程序 gt
  • 如何在Unity Inspector中创建多维数组?

    如何在 Unity Inspector 中创建枚举多维数组并使其可序列化 以便我可以从不同的脚本调用它 public enum colors red blue green yellow cyan white purple public in
  • 将 std::pair const 转换为 std::pair const 安全吗?

    理论上或实践上 安全吗reinterpret cast a std pair
  • FFplay成功移入我的Winform中,如何设置它无边框?

    用这个代码 在 C 应用程序中显示 tcp 视频流 来自 FFPLAY FFMPEG https stackoverflow com questions 14201894 show a tcp video stream from ffpla
  • 在 Linq 查询中使用动态列名称

    foreach Dimension dimensions in Enum GetValues typeof Dimension var r new ReferenceTable dimensions referenceItems List
  • 使用 FromBase64Transform 解码 base64 文件流

    The example https msdn microsoft com en us library system security cryptography frombase64transform 28v vs 110 29 aspx从M
  • 如何在 C 语言中获取输入中的空格

    我想从控制台获取字符数组 它还包含空格 我在 C 中知道的唯一方法是 scanf 但是一旦遇到空格 它就会停止接受输入 我该做什么 这就是我正在做的事情 char address 100 scanf s address 尝试使用 fgets
  • 使用 DataGridViewCheckboxCell 真正禁用 DataGridView 中的复选框

    有谁知道如何使用 DataGridViewCheckboxCell 禁用 DataGridView 中的复选框 我可以将其设置为只读 并设置背景颜色 但我无法让复选框本身显示为禁用状态 有什么想法吗 Guess 你必须自己画 http so
  • Membership.ValidateUser() 的目的是什么

    我一直在学习有关MembershipProvider类 我认为Membership ValidateUser 方法应该用于登录用户 然而我刚刚了解到有一个FormsAuthentication Authenticate 目的是什么Valid
  • 如何使用实体框架设置连接字符串

    我将 EF6 与 MySQL 结合使用 并有一个用于多个数据库的模型 我希望能够在我的表单中设置连接设置 如何以编程方式设置模型的连接字符串 你应该使用EntityConnectionFactory这就是您所需要的 public strin
  • DbContext.SaveChangesAsync 异常处理

    当搭建新的脚手架时ApiController通过 Visual Studio 2013 中的异步操作和实体框架支持 某些方法可以包装DbContext SaveChangesAsync https msdn microsoft com en
  • 从 C/C++ 程序进行 Ping

    我想编写一个 C 或 C 程序 给定一个 IP 地址 对其进行 Ping 然后根据 Ping 是否成功执行进一步的操作 这个怎么做 尽情享受Ping 页面 http www ping127001 com pingpage htm 其中有一个

随机推荐

  • 如何使用 Jackson 删除 Java 中的空 json 节点?

    我是一名初级 Java 程序员 所以如果我的问题有点愚蠢 我很抱歉 我有一个 JSON 对象 如下所示 element1 generated name 1 a isReady false generated name 2 generated
  • 从一个文件读取行并写入另一个文件,但删除包含特定字符串的行

    我正在尝试从文本文件中读取文本 读取行 删除包含特定字符串的行 在本例中为 坏 和 顽皮 我写的代码是这样的 infile file oldfile txt newopen open newfile txt w for line in in
  • 在 OpenCV 中使颜色完全透明

    我有一个基本的 png 文件 其中有两种颜色 绿色和洋红色 我想要做的是获取所有洋红色像素并使它们透明 以便我可以将图像合并到另一个图像中 一个例子是 如果我有一个洋红色背景上的 2D 角色的图像文件 我会删除背景中的所有洋红色 使其透明
  • 如何将可观察到的 Firebase 列表中的数据存储到数组中?

    我正在尝试使用 Angular 2 将数据从 Firebase 复制到数组 但我无法将数据推送到数组中 这是代码 变量 uid string agencyItems FirebaseListObservable
  • echo 语句中的逗号代表什么意思?

    我试图从递归函数中回显字符串 echo li node recurse arr li and echo li node recurse arr li function writeList tree if tree null return e
  • 如何转换特定时区的日期时间?

    我发现很难理解 UTC 的工作原理 我必须执行以下操作 但我仍然很困惑是否能得到正确的结果 目标 确保数据库中所有保存的日期均为 UTC 格式 更新默认时区为马尼拉时间 确保所有返回日期均为马尼拉时间 所以代码是 public Conver
  • SSIS中的数据转换

    我昨天发布了一个与数据转换相关的问题 现在我将问题重新表述如下 我有一个文本文件 其中有日期和时间作为字符串 所以我需要读取该字符串 日期 时间 并将其转换为双精度 我们可以在下面的例子中看到 Date Time Converted Dou
  • jQuery ajax 响应文本“未定义”

    我有一些 jQuery 它将两个变量发送到 php 脚本 PHP 非常简单 只是根据给定的内容返回一个字符串 即 更新成功 我想在页面上以某种方式使用它 第一次单击时 我收到一条警告 提示 未定义 任何进一步的单击都会正常工作 很确定我离得
  • 输入州和国家/地区时获取时区(在 ics 文件中使用的时区)

    在文本框中给出州和国家 地区时获取时区 有没有办法用这两个值获取那个地方的时区 输入会像 var state New York var country United States 结果应该是 美洲 纽约 OR 获取当前浏览器的本地时区 我需
  • 如何在 Swift 中创建指向自身的静态指针变量?

    在 Objective C 中 我经常使用这样的模式 static void 作为识别标签 有时这些标签仅在该函数 方法中使用 因此将变量放置在函数中很方便 例如 MyObscureObject GetSomeObscureProperty
  • 又名,在转换之前验证日期。 ISDATE() 等效项

    DB2版本是9 7 0 7 我有一个平面文件 需要在插入生产表之前进行充分验证 为了进行分析 我将其解析为一个表 其中所有列都是VARCHAR 任务之一是验证日期 我需要能够找到具体的无效日期 报告范围 频率 和解决方案 原因 I use
  • 获取目录下所有文件的绝对路径

    在Python中 如何获取可能有许多子文件夹的目录中所有文件的绝对路径 I know os walk 递归地给我一个目录和文件的列表 但这似乎并没有得到我想要的 os path abspath确保路径是绝对的 使用以下辅助函数 import
  • Django 模板创建中的脚本错误

    我正在开发一个在模板中执行多个功能的代码 并且我使用脚本来使用 if else 和 for 循环检查功能 但是我收到了此类错误 请帮助我了解原因 提前谢谢 如果您在 script 标记内的代码末尾看到 if else 标记的声明必须类似于下
  • NSmanagedObject copyWithZone 问题

    我有一个自定义类 Thing NSManagedObject 其属性为 adminName 我试图在这个 Thing 类中创建一个 copyWithZone 函数 但是当我运行该应用程序时 它说 setAdminName 不存在 在我的实现
  • TCP 分片

    我知道 TCP 提供类似流的数据传输 但主要问题是 通过 TCP 发送数据时会发生什么情况 1 消息可以被分割成 N 个块以适合 MTU 大小 2 1次recv调用可以读取两条消息 还会有下一种情况吗 MTU 例如 1500 字节 客户端调
  • 如何防止'postcss-preset-env'删除CSS逻辑属性?

    在我的 Webpack 配置中使用以下内容时 test scss i use style loader loader css loader options importLoaders 1 loader postcss loader opti
  • 通过 gwt 中的 id 获取小部件

    我有一堆动态生成的 TextBox es 在创建步骤中 我为它们分配 ID 属性 例如 id Button b new Button b setText add textbox b addClickHandler new Clickhand
  • 使用 Javascript/jQuery 从 HTML 元素获取所有属性

    我想将 Html 元素中的所有属性放入一个数组中 就像我有一个 jQuery 对象 它的 html 看起来像这样 span span 现在一种方法是使用描述的 xml 解析器here 但是我需要知道如何获取我的对象的 html 代码 另一种
  • 带有 app:showAsAction 的项目未显示

    我不明白为什么错误和不兼容 AndroidStudio 告诉我 应该将 app showAsAction 与 appcompat 库一起使用 代码 menu menu
  • MVC、MVP 和 MVVM 设计模式在编码 C# 方面有什么区别

    如果我们使用短语 MVC MVP 和 MVVM 设计模式之间的差异 搜索 Google 那么我们可能会得到一些讨论的 URLMVC MVP 和 MVVM 设计模式的区别理论上就像 MVP 在无法通过 dataContext 进行绑定的情况下