![](/img/trans.png)
[英]How to use a custom annotations validator POCO without any framework (no asp.net, no mvc, no ORM)
[英]Where to add Annotations in ASP.Net MVC 4 Application with POCO objects
我有一个适度的应用程序,首先创建一个定义POCO对象的域层,然后创建一个数据访问层,使用EF Code First将这些域对象持久保存到数据库中。 现在,我需要一个到该项目的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对象的目的。 还是应该在“模型”文件夹中重新创建域对象? -不会重复吗? 如果您有任何指示,请告诉我。
您不应该重新创建它们,而应该创建仅包含所需字段的模型,这样就可以向它们添加注释。
您说这是重复的,但实际上是关注点分离 。 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; }
}
这就是ViewModel的用处。这些模型用于在视图中显示域模型中的数据,但仅包含显示视图所需的属性。 您可以将数据注释添加到这些属性中,以进行验证。
我建议使用AutoMapper将您的域模型映射到ViewModels。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.