Asp.net mvc 3 MVC3-我是否应该将模型设计为与视图紧密耦合?

Asp.net mvc 3 MVC3-我是否应该将模型设计为与视图紧密耦合?,asp.net-mvc-3,Asp.net Mvc 3,在使用MVC时,我发现我的视图在关联的模型定义方面是僵化的。我是否应该围绕我的观点设计模型?我意识到我可以专门为我的视图创建一个容器。然后根据实体设计第二个模型。但是,我似乎总是需要这个中间人。我的意思是,甚至有一个@模型来声明视图应该耦合到什么 例如,我有一个包含两个表的视图。这两个表都使用同一个实体,因此使用该实体作为模型是没有意义的。相反,该模型需要是一个包含上述两个实体的包装器。此外,实体确实需要转换为string[],以避免视图中的数据篡改 我是不是太喜欢MVC了,还是MVC就是这样设

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

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


我是不是太喜欢MVC了,还是MVC就是这样设计的?与视图模型的紧密关系

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

微软的人也推荐了同样的方法,尽管这不是绝对的法则

有时这看起来非常乏味,但除非您正在编写自己的视图引擎,并结合一些超高级的模型绑定逻辑,否则更容易的方法通常是视图模型。为验证等添加更繁琐的数据注释。但老实说,如果需要高级模型绑定和自定义视图引擎,您的问题可能已经考虑得太多了

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

在视图中使用a。将视图与直接来自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; }

}
公共类ProductViewModel
{
公共产品视图模型(列出产品、列出类别)
{
这个。产品=产品;
这个。类别=类别;
}
公共列表产品{get;private set;}
公共列表类别{get;private set;}
}


我明白了。因此,在使用IoC时,是否最好将反转设计为在ViewModel级别而不是实体级别进行?这将使我不必为每个实体创建反转,使事情更容易模拟。