如何在MVC视图中表示域层

时间:2017-09-19 09:03:02

标签: c# .net entity-framework model-view-controller architecture

在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()
        }
    }
}

1 个答案:

答案 0 :(得分:1)

说实话我不会太担心。

我也同意这是要走的路。如果您希望在发生更改时尽可能安全,只需确保您只需要更改一个图层,那就是翻译图层。

用户界面永远或者很少会发生变化,因为当任何数据位发生变化时,必须要去改变每个视图是一种正确的痛苦。因此,数据库中的任何更改,例如重命名的字段,甚至是新添加的字段,都会在转换层上处理它。

用户界面永远不会是您业务层的100%镜像,而且完全没问题。