SO上的人经常说:“AViewModel
持有可以由视图执行的方法,用于指示如何切换视图元素的属性等......”
当我ViewModel
作为 WebApi 响应发送到序列化到的客户端时JSON
,如何ViewModel
在客户端上执行方法?
这对我来说根本不清楚。
您至少可以通过两种方式理解视图模型
不是将您的业务对象传递给视图(例如 MVC Razor 视图),而是传递包含此视图所需属性的精简对象,仅此而已。当视图设计器使用从数据库中延迟加载的字段时,视图创建更容易并且您避免出现问题(避免Select N+1 问题和其他问题)
您可以创建将在客户端使用的视图模型(在 Javascript 中)。您在 Javascript 中将其创建为对象,因此它可以包含视图可以调用的方法。您所描述的(使用 WebAPI 发送 JSON 对象)只是将提供该视图模型的数据。例如,您可以在此处的主页上查看knockoutjs。您可以看到包含门票数组的门票视图模型。在此示例中,您可以看到在 viewmodel 中硬编码的三种票证。但是你可以像你描述的那样从 WebAPI 获取它们作为 JSON。下载它们后,只需将它们放在这个数组中。
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; }
}