Rac*_*hel 2 wpf asp.net-mvc design-patterns mvvm
我习惯于使用MVVM设计模式在WPF中工作,但我最近被要求在ASP.Net中做一些事情.我想尝试使用MVC,因为我在学习MVVM时看到它引用了很多,但我对此一无所知.
我可以找到许多旨在向熟悉MVC的人解释MVVM的网站,但是我找不到一个能够向习惯MVVM的人解释MVC的好网站.有些网站可以自己解释MVC,但是我很难理解它们,因为我的思想一直在尝试应用MVVM逻辑.
那么,有没有什么好的网站可以解释MVC的用语MVVM可以理解?或者有人可以在这里向我解释一下吗?
当您来自MVVM模式与MVC模式(特别是ASP.NET MVC)开始我会建议认为"MVC"模式的更好的"VMVC",因为"M"在MVC是不是型号由意味着" M MV在MVVM中.它实际上对应于ViewModel.我不知道这是否代表了MVC的一般定义,但是当你使用ASP.NET MVC时,它是真实的,也是最常用和最好的做法(尽管你在SO上看到的所有示例或问题都是域实体在视图中使用(有时这正是问题中描述的问题的原因)).
当我从一个Visual Studio模板创建ASP.NET MVC项目时,我通常做的第一件事是将创建的文件夹"Model"重命名为"ViewModel".如果您查看模板代码对这些"模型"的作用,您会看到它们直接用于视图,它们具有用于输入验证的数据注释,用于显示格式以及可能在视图上的字段命名.这些注释部分由HTML帮助程序直接使用以生成HTML,而不表示域或业务逻辑.换句话说:它们是用于Razor/HTML视图的ViewModel,与在MVVM中使用ViewModel用于WPF/Silverlight/Phone7中的XAML视图的意义相同.
域"Model"实际上不是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
Run Code Online (Sandbox Code Playgroud)
我不确定MVVM中控制器的相应内容.在MVC中,控制器通常是将域对象转换为ViewModel然后转换为视图的模块(反之亦然) - 示意图:
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
}
Run Code Online (Sandbox Code Playgroud)
MVVM中哪个部分有这个责任?我不确定.我曾经见过视图模型拥有一定的参考信息库,翻出模型(域模型)来填充自己的属性和写回通过ICommand的处理程序库的设计.这意味着MVVM中的ViewModels也有责任成为"控制器",而MVC中的ViewModel要简单得多:它们或多或少只是具有元数据的属性包,用于为视图提供和格式化数据.
最后一点:我个人认为使用WPF的MVVM模式比MVC模式更难掌握.ASP.NET MVC是从地面设计的,以支持MVC模式友好的开发,并且不需要(甚至不可能)离开这种方式.WPF不是这种情况.原始设计是在构建时考虑了视图和代码隐藏文件,而不是MVVM模式.我经常发现它是非常困难的绑定视图元素或属性的视图模型和代码behing文件处理,这是容易得多,因而违反MVVM原则位的情况.
我认为当你有MVVM模式经验时,进入MVC会有任何问题.
归档时间: |
|
查看次数: |
2130 次 |
最近记录: |