2011-08-17 52 views
0

在使用MVC时,我发现我的视图在它们相关的模型定义方面是僵化的。我应该围绕我的观点来设计模型吗?我意识到我可以专门为我的视图创建一个容器。然后根据实体设计第二个模型。但是,似乎我总是需要这个中间人。我的意思是,甚至有一个@model来声明视图应该被耦合到什么位置。MVC3 - 我应该设计我的模型以紧密耦合到我的视图吗?

例如,我有一个视图与两个表。这两个表格都使用同一个实体,因此使用该实体作为模型是没有意义的。相反,模型需要是包含2个所述实体的包装器。此外,实体确实需要转换为string[]以避免View中的数据按摩。

我只是太多的MVC nublet,或者这是如何MVC的设计工作?与View-Model紧密的关系。

回答

1

使用ViewModel为您的意见。将视图与直接来自EF的模型关联是一种不好的做法。

public class ProductViewModel 
{ 
    public ProductViewModel(List<Product> products, List<Category> categories) 
    { 
     this.Products = products; 
     this.Categories = categories; 
    } 

    public List<Product> Products { get; private set; } 
    public List<Category> Categories { get; private set; } 

} 

ViewModel Best Practices
ASP.NET MVC View Model Patterns

+0

+1我明白了。因此,在使用IoC时,最好是将反转设计为ViewModel级而不是实体级?这应该使我不必为每个实体创建一个反转,让事情变得更容易模拟。 –

+0

是的,是的,是的! –

1

通常情况下,我认为很多SO/MVC社区会同意,即使在您描述的情况下,遵循View Model-esque模式也是非常有益的。将实体包装在视图模型类中,并将其绑定到视图开头的@model语句中。

虽然这不是绝对的法律,但微软家伙们也推荐过这个。

有时看起来非常乏味,但除非您编写自己的视图引擎结合一些超级高级模型绑定逻辑,否则通常会发现路径通常为视图模型。用数据注释添加更多的乏味以进行验证等等。但老实说,如果需要高级模型绑定和自定义视图引擎,那么您的问题可能已经被过度考虑了。

我同意,不要直接将实体类传递给模型。使用您的视图模型来调用服务或BL类,它们从数据存储中组装数据实体。在使用每个视图模型1个视图时,我发现了最大的灵活性。 重申一下,这是视图模型类和视图之间的1:1比率。即使必须将视图分解为可管理的片段,也可以使用显示和编辑器模板来完成您所需的操作。它会帮助你后来:)

相关问题