2

我有一个适度的应用程序,我首先创建一个定义我的 POCO 对象的域层,然后我创建了一个数据访问层,它使用 EF Code First 将这些域对象保存到数据库中。现在我需要这个项目的 UI 并且我已经创建了一个 MVC 4 项目,我需要创建一个强类型视图,所以我需要一个模型来传递给视图。

我的问题是我需要在哪里重新创建模型文件夹中的域对象,以便我可以向它们添加数据注释。例如,我有一个客户

public class Customer
{
    public int CustomerId { get; set; }
    public int RetailerId { get; set; }
    public string  CustomerName { get; set; }
    public string CustomerEmail { get; set; }
    public int PointsBalance { get; set; }
    public decimal CashBalance { get; set; }

    public ICollection<LoyaltyCard> LoyaltyCards { get; set; }
    public virtual Retailer BusinessName { get; set; }
}

像这样的零售商对象:

public class Retailer
    {
        public int RetailerId { get; set; }
        public string BusinessName { get; set; }
        public string EmailsAddress { get; set; }
        public int PhoneNumber { get; set; }
        public ICollection<Location> BusinessLocations { get; set; }
        public ICollection<Reward> Rewards { get; set; }
        public Industry Industry { get; set; }
    }

我是否应该在域层中向我当前的域对象添加注释 - 如果这样做不会违反制作域对象 POCO 对象的目的。或者我应该在模型文件夹中重新创建我的域对象?- 那不是重复的吗?如果您有任何指示,请告诉我。

4

2 回答 2

3

您不应重新创建它们,而应创建仅包含所需字段的模型,这样您就可以向它们添加注释。

你说这是重复,但实际上是关注点分离。UI 对您的 POCO 了解得越少越好(在理想情况下,您的 UI 甚至都不知道它们,它们会通过一些业务逻辑层/API 检索模型的实例。

例如,看看CustomerViewModel下面的内容。请注意缺少一些属性?好吧,我知道这是一个粗略的例子,但是您可能实际上不想在添加新客户/显示它们时输入所有属性,所以这里有一个非常适合此目的的精简版本:

public class CustomerViewModel
{
    [Required]
    public int CustomerId { get; set; }

    [Required]
    public int RetailerId { get; set; }

    [Required]
    public string  CustomerName { get; set; }

    [Required]
    public string CustomerEmail { get; set; }
}
于 2013-10-01T22:17:19.723 回答
2

这就是 ViewModel 的用武之地。这些模型用于在视图中显示来自域模型的数据,但仅包含显示视图所需的属性。您可以将数据注释添加到这些将负责验证的属性。

我建议使用AutoMapper将您的域模型映射到 ViewModel。

于 2013-10-01T22:25:25.590 回答