真的是几个小问题。
我目前正在使用asp.net MVC和实体框架构建一个站点。我有几个存储库,它们返回实体或实体列表。我发现,在我的大多数页面中,我不得不从各种相关的表中提取数据。只要我在查询中使用'include‘来加载相关的实体,这是可以的--但是这是一个好的实践吗?
创建一个只包含我需要的信息的自定义视图模型对象是不是更好,或者仅仅为了在视图中显示您需要的内容,拉取一个可能有5-6个表深的对象图没有什么“错”?
如果这个问题没有太多意义的话,我很抱歉。我可能从根本上误解了模型在这里应该如何使用:)
谢谢
发布于 2009-09-30 15:47:09
我建议查看视图中的渲染代码和控制器中的发布代码。你所采取的方法是否让它们变得过于复杂?如果不是这样,你可能可以保持事物的原样。如果引入自定义视图模型可以大大简化视图和控制器代码,那么可以考虑创建一个视图模型。自定义视图模型本质上抽象了目前可能在其他地方处理的一些复杂性。
发布于 2009-09-30 20:04:14
如果您的视图开始执行以下操作
<% foreach (var order in Model.Orders.Any(x => x.Products.Any(p => p.Category == "xx")) %>
那么你肯定需要ViewModel。你可以用
ViewData["flattened_orders"]
如果你更喜欢魔术弦,但我很怀疑。
然后,就有了实体上所需的表示属性的问题,然后您需要公开它们的所有属性,以便模型绑定器可以工作……然后,您需要其他仅用于演示的信息,如国家/地区列表...
因此,对于简单的应用程序,您可以跳过ViewModel。但对于简单的应用程序,您无论如何都可以执行Response.Write和手动SQL ;-)
实际上,我喜欢this上关于类似问题的帖子。这里所代表的方法乍一看似乎太“学术”了,但它来自真实的项目,而且我对ASP.NET MVC做得越多,我就越喜欢它,也越接近它。
https://stackoverflow.com/questions/1498927
复制相似问题