在哪里使用POCO对象在ASP.Net MVC 4应用程序中添加注释

时间:2013-10-01 22:08:49

标签: c# asp.net-mvc asp.net-mvc-4

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

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

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对象的目的。或者我应该在Model文件夹中重新创建我的域对象? - 那不是重复的。如果您有任何指示,请告诉我。

2 个答案:

答案 0 :(得分:3)

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

你说这是重复,但实际上它是关注点分离。用户界面知道你的POCO越少越好(在理想的世界中,你的用户界面甚至不知道它们,他们会通过一些业务逻辑层/ 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; }
}

答案 1 :(得分:2)

这是ViewModel的用武之地。这些模型用于在视图中显示域模型中的数据,但仅包含显示视图所需的属性。您可以向这些属性添加数据注释,以便进行验证。

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

相关问题