当前位置:  开发笔记 > 后端 > 正文

放在ViewModel中的内容

如何解决《放在ViewModel中的内容》经验,为你挑选了2个好方法。

你在视图中放了什么?

最近博客从斯科特Hanselman的有关使用一个特殊的模型绑定,方便测试使我想到了以下几点:你放什么在你的控制器逻辑构建视图模型,哪些应放在有何看法?他做的是这样的:

var viewModel = new DinnerFormViewModel {  
    Dinner = dinner,  
    Countries = new SelectList(PhoneValidator.Countries, dinner.Country)  
};  
return View(viewModel);

现在,我使用相同的方式将数据传递给我的视图,但我不确定他如何处理Countries属性.您可以争辩双方:在SelectList中包装Country列表会为视图准备数据,就像创建一个viewmodel DTO来传递数据一样.另一方面,它有点像你专门操作下拉列表中使用的数据,限制了视图处理来自控制器的数据的方式.我觉得这对于视图和控制器之间的关注点分离是一个灰色区域,我无法真正决定走哪条路.对此有什么最佳做法吗?

PS:为了简单起见,让我们假设默认的ASP.NET MVC上下文,所以基本上你的开箱即用项目.默认视图引擎和所有爵士乐.



1> Trevor de Ko..:

在MVC(至少它的这种风格)中,控制器的职责之一是为视图准备数据.所以我认为为视图消费准备一个特定的模型是完全可以接受的,这意味着它将用于下拉列表中.在这种情况下,控制器只是使视图更容易,并且实际上防止了笨拙的代码不得不进入视图.它还使一个人不像ViewData ["Countries"]那样拥有ViewData中的魔术字符串.

总而言之,虽然看起来在责任方面可能存在一些灰色区域,但最终这是控制器的工作:与视图交互并将域模型转换为更容易被消费者使用的其他模型视图.



2> Tim Scott..:

有人建议每个视图都有一个包罗万象的视图模型是理想的(被称为Thunderdome Principle).

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有