我究竟在用什么?

时间:2016-03-31 20:19:59

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

对于模糊的标题,我们深表歉意。我很惭愧地问这个,但我现在真的需要我的意识。我无法确定我是否遵循MVC模式或MVVM模式。

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

在我目前的实习中,我们不使用Angular。我们使用.cshtml文件。服务层将其信息提供给控制器,控制器格式化MODEL并将其提供给.cshtml视图并显示内容。

我的问题:

哪一个是MVC,哪一个是MVVM?请下降到我的水平并解释。我在网上看到的大多数内容似乎让我更加困惑于我在工作中观察到的东西。

每个人都在工作,他们都叫MVC,我现在真的很困惑。如果两者都是MVC,两者之间有什么区别?

2 个答案:

答案 0 :(得分:1)

Angular肯定更像是Model-View-ViewModel-ish。而你现在正在做的事情肯定听起来像MVC。

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

在MVC中,视图本身具有根据提供的数据(模型)控制其行为,要显示/隐藏的内容等的自由度。这意味着在MVC中,您无法测试UI行为(例如,如果某些内容基于数据更改正确显示或隐藏),而无需测试UI本身。

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

在MVC中,用户界面是“智能的”并重新塑造并渲染自身,但感觉它需要基于从模型中接收的数据。

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

我希望有所帮助。

答案 1 :(得分:1)

在这两种情况下,您使用的是MVC(或至少是MVC-ish模式)。使用.cshtml文件时,您使用的是服务器端MVC。使用Angular时,您使用的是客户端MVC(可能更像MVVM)。最大的区别在于将模型渲染为HTML元素;在客户端或服务器上。

在我看来,这是一种更好的方式来查看你所做的事情的差异。