3

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

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; }
}
4

3 回答 3

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; }
}
于 2013-03-27T19:32:32.340 回答
0

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

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

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

于 2013-03-27T19:33:00.547 回答
0

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

于 2013-03-27T19:33:38.277 回答