use*_*969 24 .net c# asp.net asp.net-mvc asp.net-mvc-3
我正在学习ASP.NET MVC并下载了几个示例应用程序.MusicStore等......
我来自wpf背景,我们有MVVM模式.我注意到他们使用了模型和ViewModel的概念.
在MVVM中很清楚,您将视图绑定到ViewModel,将模型注入viewModel.在MVC中你有一个控制器,但我不确定和混淆所有联系在一起,因为我看不到模型注入ViewModel
我有以下结构
从我看到的一些示例中,您的模型充当ViewModel.Am我是否正确?
让我们拿一个控制器,我有类似的东西
public class ProductController
{
public ProductController(IProductRepository productRepository)
{
//omitted as not relevant
}
}
public class ProductVM
{
public ProductVM()
{
// Shouldn't we inject the model here RG Product
}
}
Run Code Online (Sandbox Code Playgroud)
我可以参考一些N层示例吗?ViewModel的概念在MVC中是否有效?标准是什么?
谢谢你的任何建议.
RPM*_*984 35
使用的ViewModels以简化视图.
例如,您可能拥有包含Products,Order,Customers等的深层对象图 - 并且特定View上需要来自每个对象的一些信息.
ViewModel提供了一种将View所需的信息聚合到单个对象中的方法.
ViewModel还允许数据注释和验证之类的东西 - 它们不属于您的模型,因为您的模型应该保持"特定于域".
但实际上,ViewModel只不过是域对象的简单包装器.
使用AutoMapper等工具轻松地在ViewModel和域模型之间来回映射.
我个人总是在我的View中绑定到ViewModel,从不绑定到域模型,即使它是单个对象.为什么?我喜欢使用UIHints,验证,数据注释来装饰我的ViewModel.就像使用特定于域的规则和业务逻辑丰富您的域模型一样,您的ViewModel也应该使用特定于UI的逻辑进行丰富.
如果您只是拥有一个1-1表示域模型的对象,那么您就错过了ViewModel的观点.
仅添加到ViewModel,仅此而已,特定视图所需的内容.
控制器动作示例
public ActionResult CustomerInfo(int customerId)
{
// Fetch the customer from the Repository.
var customer = _repository.FindById(customerId);
// Map domain to ViewModel.
var model = Mapper.Map<Customer,CustomerViewModel>(customer);
// Return strongly-typed view.
return View(model);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
28150 次 |
| 最近记录: |