2010-07-14 74 views
3

考虑为需要构建模型的真实世界应用程序提供2个选项,如果您愿意,可以从各种来源创建复合模型选择使用强类型观点:是复合模型的强类型ASP.NET MVC视图

  1. 与用于每条信息需要被传递到视图阶段的属性模型创建新的自定义类,

  2. 限制模型原始域类和链一起使用Html.RenderAction中的多个控制器。

选项1的不足之处在于需要创建大量“管道”类。选项2的不足之处在于违反了关注点分离的肮脏感,并且通过控制器链来跟踪更具体的问题,以找到能够呈现如此这样的HTML片段的人。

在ASP.Net MVC出现之前,我以前使用Maverick.Net多年,并且使用它的模型是传递给XSL视图阶段的一大块XML。在ASP.Net MVC中,它将等同于将模型作为ViewDictionary中的一组键值对传递给视图阶段。缺点是没有编译时间检查关键名称,但根据我的经验,关键名称很少会改变。

针对同一问题的一个有趣的建议解决方案是invent dynamic partial classes

因此,在ASP.Net MVC中使用强类型视图是复合模型的一种不好的方法,以及使用粗略的ViewDictionary方法的更好,更简单,更高效的方法?

回答

4

恰恰相反,除非你没有任何模型,否则你应该总是试图使用强类型的视图。通过创建明确的视图模型,您不仅可以获得编译时检查,还可以提高代码的意图,可发现性和可读性。

+0

完全同意,如果你有一个需要定义值的视图,那么给它自己的模型类。然后,当您在其他地方重新使用视图时,您知道要传递给它的内容:-) – WestDiscGolf 2010-08-16 21:52:55

0

您可能会发现Automapper是一种用于创建ViewModels的有用工具,即您为其描述的“复合模型”,专门用于表示层。 Automapper将有助于减少在域和视图模型之间创建映射所涉及的大量工作。

blog post提供了一个很好的使用Automapper这种方式的概述。

我认为你想避免ViewDictionary转向强类型视图是正确的。