与DTO相比,viewmodel具有行为/方法

时间:2013-02-26 19:35:35

标签: c# viewmodel dto

SO上的人经常说:“ViewModel包含可以由视图执行的方法,属性以指示如何切换视图元素等......”

当我的ViewModel作为WebApi响应发送到序列化为JSON的客户端时,这个ViewModel如何在客户端上执行方法?

这对我来说根本不清楚。

2 个答案:

答案 0 :(得分:0)

您至少可以通过两种方式了解viewmodel

  • 不是将业务对象传递给视图(例如MVC Razor视图),而是传递包含此视图所需属性的精简对象,而不是其他任何内容。视图设计器使用从数据库延迟加载的字段(避免Select N+1 problem和其他)

  • 时,视图创建更容易,并避免出现问题
  • 您可以创建将在客户端(在Javascript中)使用的viewmodel。您可以在Javascript中将其创建为对象,因此它可以包含视图可以调用的方法。您所描述的内容(使用WebAPI发送JSON对象)只是提供该视图模型的数据。 例如,您可以在此处查看主页knockoutjs。您可以看到包含票证数组的TicketsViewModel。在此示例中,您可以在viewmodel中看到三种硬编码的票证。但你可以像你描述的那样从WebAPI中获取它们作为JSON。下载后,只需将它们放入此阵列即可。

答案 1 :(得分:-1)

DTO(数据传输对象)包含可消耗格式的数据。 ViewModel / ActionModel包含为要使用的View格式化的数据。

DTO可能如下:

public class OrderDTO
{
    public decimal Price { get; set; }
    public int Amount { get; set; }
}

ViewModel可能如下所示:

public class OrderViewModel
{
    public decimal Price { get; set; }
    public int Amount { get; set; }
    public string PriceBackgroundColor { get; set;}
    public Uri ImageUri { get; set; }
}