在MVC和使用Entity Framework POCO类时遇到了一些问题。
我首先在一个单独的项目中使用数据库来表示我的MVC项目引用的域层,因为MVC方面只代表了一个较大解决方案的一个小UI部分。
问题是UI不是我的域层的真实表示,所以我一直在创建将UI对象与域对象连接在一起的ViewModel类。我在其间使用转换方法将控制器中的域对象转换为相关的UI对象。
对我而言,这似乎是一个漫长的过程,并且非常容易出错,因为当更新UI或数据库时,您必须在UI对象中反映它,反之亦然,并且翻译方法越来越多随着UI的增长而变得复杂。
这是正确的做法吗?是否有替代映射器用于这些类型的对象?
域对象
public class Ticket
{
public int Id { get; set; }
public int ClientRef { get; set; }
public int PriorityRef { get; set; }
public int CategoryRef { get; set; }
public DateTime CreatedDate { get; set; }
}
查看模型对象
public class TicketViewModel
{
public int Id { get; set; }
public int ClientRef { get; set; }
public int PriorityRef { get; set; }
public int CategoryRef { get; set; }
public DateTime CreatedDate { get; set; }
public SelectList PrioritySelectList { get; set; }
public SelectList CategorySelectList { get; set; }
public static TicketViewModel Translate(Ticket ticket)
{
return new TicketViewModel
{
Id = ticket.Id,
ClientRef = ticket.ClientRef,
PriorityRef = ticket.PriorityRef,
CategoryRef = ticket.CategoryRef,
CreatedDate = ticket.CreatedDate,
PrioritySelectList = GetPrioritySelectList(),
CategorySelectList = GetCategorySelectList()
}
}
}
答案 0 :(得分:1)
说实话我不会太担心。
我也同意这是要走的路。如果您希望在发生更改时尽可能安全,只需确保您只需要更改一个图层,那就是翻译图层。
用户界面永远或者很少会发生变化,因为当任何数据位发生变化时,必须要去改变每个视图是一种正确的痛苦。因此,数据库中的任何更改,例如重命名的字段,甚至是新添加的字段,都会在转换层上处理它。
用户界面永远不会是您业务层的100%镜像,而且完全没问题。