Wpf 为熟悉MVVM的人准备的MVC教程/演练?

Wpf 为熟悉MVVM的人准备的MVC教程/演练?,wpf,asp.net-mvc,design-patterns,mvvm,Wpf,Asp.net Mvc,Design Patterns,Mvvm,我习惯于使用MVVM设计模式在WPF中工作,但最近有人要求我在ASP.Net中做一些事情。我想尝试使用MVC,因为我在学习MVVM时看到它被引用了很多,但是我对它一无所知 我可以找到很多向熟悉MVC的人解释MVVM的网站,但是我找不到一个好的网站向习惯MVVM的人解释MVC。有一些网站自己解释MVC,但我很难理解它们,因为我的大脑一直在尝试应用MVVM逻辑 那么,有没有好的网站可以用熟悉MVVM的人能够理解的术语来解释MVC呢?或者有人能在这里给我解释一下吗?Rachel,我没有遇到过任何面向M

我习惯于使用MVVM设计模式在WPF中工作,但最近有人要求我在ASP.Net中做一些事情。我想尝试使用MVC,因为我在学习MVVM时看到它被引用了很多,但是我对它一无所知

我可以找到很多向熟悉MVC的人解释MVVM的网站,但是我找不到一个好的网站向习惯MVVM的人解释MVC。有一些网站自己解释MVC,但我很难理解它们,因为我的大脑一直在尝试应用MVVM逻辑


那么,有没有好的网站可以用熟悉MVVM的人能够理解的术语来解释MVC呢?或者有人能在这里给我解释一下吗?

Rachel,我没有遇到过任何面向MVVM人群的ASP.NET MVC网站,但从第一手的经验来看,我认为这绝对是太棒了

我最初是一名WebForms开发人员,我完全可以证明,在学习另一种技术的同时,您的脑海中会出现某种技术,迫使您的逻辑以某种方式发生变化。从Webforms->MVC开始,这尤其困难。我最好的建议就是把音乐商店教程的每一个方面作为一个单独的实体进行分析


祝你好运,我希望这会有所帮助。

当你从MVVM模式开始,从MVC模式(特别是ASP.NET MVC)开始时,我建议将“MVC”模式更好地理解为“VMVC”,因为MVC中的“M”不是MVVM中“M”所指的模型。它实际上对应于ViewModel。我不知道这是否代表了MVC的一般定义,但这是正确的,并且是使用ASP.NET MVC时使用最多的最佳实践(尽管您在这里不时看到一些示例或问题,因此在视图中使用域实体(这有时正是问题中描述的问题的原因))

从一个Visual Studio模板创建ASP.NET MVC项目时,我通常做的第一件事是将创建的文件夹“Model”重命名为“ViewModel”。如果查看一下模板代码对这些“模型”的作用,您会发现它们直接用于视图,它们具有用于输入验证的数据注释,用于显示格式,可能还有视图上的字段命名。这些注释部分由HTML助手直接用于生成HTML,并不表示域或业务逻辑。换句话说:它们是Razor/HTML视图的视图模型,与您在WPF/Silverlight/Phone7中使用MVVM中的ViewModels来表示XAML视图的意义相同

域“模型”实际上不是MVC模式的一部分,因为它是MVVM模式的一部分。因此,在比较MVVM和MVC时,这些缩写有些误导。作为一个非常简化的“翻译表”,可以说:

MVVM                         MVC
----                         ---
M  -> Domain Model           not part of the pattern
V  -> View (XAML)            V -> View (HTML, Razor)
VM -> ViewModel              M -> ViewModel
not part of the pattern      C -> Controller
我不确定MVVM中控制器的对应内容。在MVC中,控制器通常是将域对象转换为视图模型,然后再转换为视图(反之亦然)的模块-示意图:

ControllerActionForGetRequest ( params )
{
     objects = GetDomainObject(params)    - entities, queryables or DTOs
     viewModel = CreateViewModelFromDomainObjects(objects)
     view = CreateViewFromViewModel(viewModel)
}

ControllerActionForPostRequest ( viewModel )
    // ModelBinder makes "viewModel" from HTML input fields, etc
{
     if (IsValid(viewModel))
     {
         data = CreateDomainObjectsOrDtosFromViewModel(viewModel)
         WriteData(data)  - back to data store
         RedirectToActionForGetRequest
     }
     else
         GoBackToView
}
MVVM中的哪个部分有此职责?我不确定。我见过这样的设计:ViewModel保存对存储库的一些引用,提取模型(域模型)以填充其自身的属性,并通过ICommand处理程序写回存储库。这意味着MVVM中的ViewModels也有责任成为“控制器”,而MVC中的ViewModels则简单得多:它们或多或少只是带有元数据的属性包,用于为视图提供和格式化数据

最后一点:我个人发现使用WPF的MVVM模式比MVC模式更难掌握。NET MVC从一开始就是为了支持MVC模式友好的开发而设计的,不需要(甚至不可能)离开这种方式。WPF的情况并非如此。最初的设计是在考虑视图和代码隐藏文件的情况下构建的,而不是使用MVVM模式。我经常发现很难将视图元素或属性绑定到ViewModel,在代码behing文件中处理这一点要容易得多,从而有点违反MVVM原则


我认为,当你有MVVM模式的经验时,进入MVC不会有任何问题。

为什么不跳过解释,转而在web开发中使用MVVM:@SteveGreatrex我考虑过,然而,我在某个地方读到,由于绑定系统的工作方式,MVVM主要用于WPF/Silverlight开发,根据我们的指导,它没有针对ASP.NET进行优化,“有些问题仍然是离题的,即使它们属于上面列出的类别之一:……要求我们推荐或查找书籍、工具、软件库、教程或其他离题资源的问题是离题的。。。“事实上,我在早些时候下载了这方面的代码,并在尝试构建它时出错。我不是一个很强的web开发人员,所以我没有花太多时间来修复它,但我可以再看一看。@Rachel我发现随着教程的进行,编写代码会更容易。我认为当你在写代码的时候,它有助于学习更多,而不是仅仅阅读一些已经编写的源代码。让我知道你所犯的错误,也许我能帮上忙。+1为伟大的MVC教程。我同意,编写代码比阅读代码要学到更多,但我也喜欢先查看最终产品,以了解我的工作方向。链接中的代码运行时没有任何错误,所以我以前一定下载过旧版本的代码。很好的解释,特别是指出MVC模型和MVVM模型之间的差异。我花了一点时间才弄明白,因为我希望两个M是一样的。我已经开始学习MVC,现在我意识到MVC的
M
+
C
等同于MVVM的
VM
,MVC的
M
包含了MVVM的
M