c# - 我到底在用什么?

标签 c# angularjs asp.net-mvc model-view-controller mvvm

抱歉标题含糊。我很惭愧地问这个问题,但我现在真的需要我的意识。我无法确定我遵循的是 MVC 模式还是 MVVM 模式。

在我之前的实习中,我们有 C# 代码 (.NET),它有一个 Controller 并直接连接到数据库(没有服务层)。 Controller 将获取信息,格式化为 JSON 并将其提供给 Angular 的 Controller ,后者会将其显示在 View 上。

在我目前的实习中,我们不使用 Angular。我们使用 .cshtml 文件。服务层将其信息提供给 Controller , Controller 格式化模型并将其提供给 .cshtml View 并显示内容。

我的问题:

哪个是 MVC,哪个是 MVVM?请降到我的水平并解释。我在网上读到的大部分内容似乎使我与我在工作中观察到的内容更加混淆。

工作中的每个人都称它们为 MVC,我现在真的很困惑。如果两者都是MVC,那么两者有什么区别?

最佳答案

Angular 绝对更像是 Model-View-ViewModel-ish。而你现在所做的绝对听起来像 MVC。

MVVM 是一种特殊的模式,其中 UI 状态被封装在 ViewModel 中,因此最终 UI 的呈现相当愚蠢并且只是数据绑定(bind)。说,显示这个按钮,或者隐藏这个区域的状态逻辑都封装在 ViewModel 中。一个好处是,这允许构建单元测试来测试 ViewModel,从而隐式测试所有 UI 行为。 (见:Wikipedia article on MVVMMartin Fowler's Introduction to Presentation Model 是 MVVM 的变体。)

在 MVC 中, View 本身可以根据提供的数据、模型来控制其行为、您想要显示/隐藏的内容等。这意味着在 MVC 中,如果不测试 UI 本身,就无法测试 UI 行为(例如,是否根据数据更改正确显示或隐藏某些内容)。

所以总而言之,MVVM,ViewModel 控制 UI 行为,UI 本身是愚蠢的,只是使用数据绑定(bind),并根据 ViewModel 中的逻辑执行它被告知要做的事情。

在 MVC 中,UI 是“智能的”,它会根据从模型接收到的数据重新塑造和呈现自己,但它感觉需要这样做。

您基本上可以查看 UI 是如何呈现的,并且如果您看到 UI 呈现逻辑根据该决定做出很多关于如何呈现自身的决定,那么您几乎知道您正在使用 MVC。如果您只看到大量数据绑定(bind),其中几乎每个行为都由一个单独的类驱动,该类封装了用于显示和隐藏 UI 片段的所有逻辑,并且这些数据通过数据绑定(bind)传递给 UI,那么它就是可能是MVVM。

我希望这会有所帮助。

关于c# - 我到底在用什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36342972/

相关文章:

c# - 递归创建列表中所有给定的树路径?

c# - 使用 TreeView 数据和同步选择填充组合框

angularjs - 如何加速 AngularJS 应用程序?

c# - 如何确定异常是否属于特定类型

asp.net-mvc - 如何在现有的 .NET MVC 项目中启用/使用/配置 WebAssembly Blazor?

c# - 重构具有多个 yield 的 IEnumerator 方法时遇到问题

C# 无法从字符串 [] 转换为字符串

javascript - AngularJS指令: How do I dynamically change the element html in an ng-repeat?

javascript - 无法从 'localStorage' 读取 'Window' 属性 : Access is denied

asp.net-mvc - ControllerBase(asp.net mvc)中的HttpContext.Current.User为空