使用一个或多个对象创建视图模型

时间:2013-03-27 19:30:46

标签: c# asp.net-mvc

我正在创建我的第一个MVC项目,并且很好奇哪个是将我的Code First Entity Classes公开给我的视图模型的正确方法。我有一个像这样的实体类:

public class Product
{
    public int Id { get; set; }
    public int CategoryId { get; set; }
    [StringLength(50)]
    public string ProductName { get; set; }
    public Nullable<System.DateTime> DateAdded { get; set; }
    [StringLength(50)]
    public string AddedBy { get; set; }
}

传递对象或传入属性的新类是否更好?

public class ProductViewModel
{
    Product myProduct { get; set; }
}

public class ProductViewModel
{
    public int Id { get; set; }
    public int CategoryId { get; set; }
    public string ProductName { get; set; }
    public DateTime DateAdded { get; set; }
    public string AddedBy { get; set; }
}

3 个答案:

答案 0 :(得分:1)

最好选择第二个选项。将数据库类用作模型通常是不良做法。你的第一个选择基本上就是这样,除了它将它包装在另一个无意义的类中。

我要做的是让他们都实现接口,这样如果您想要更改它,只需更改界面,然后可以更改这两个实例。

public class ProductViewModel : IProduct
{
    public int Id { get; set; }
    public int CategoryId { get; set; }
    [StringLength(50)]
    public string ProductName { get; set; }
    public DateTime DateAdded { get; set; }
    [StringLength(50)]
    public string AddedBy { get; set; }
}

答案 1 :(得分:0)

我肯定会选择第二种选择。它提供了与域模型(实体)和视图模型的明确分离。分离这些模型非常重要,因为:

  • 您需要解决两种截然不同的问题
    • 您的域处理域逻辑,管理应用程序数据所涉及的实际业务流程。
    • 您的视图专注于视图逻辑,提供了与该数据交互的良好用户界面。
  • 您可以分离域和界面图层的开发工作。您希望最小化一个图层中的小变化对其他图层的影响。

当然在这个例子中它有点微不足道,但是当你在视图中构建更多逻辑时,它将非常重要。

答案 2 :(得分:0)

最好传递整个实体类。这样,如果类发生了变化,您就不必更新ViewModel中的属性。