是否可以在ViewModel中放入可以在客户端轻松计算的数据?

时间:2014-09-15 12:42:14

标签: asp.net-mvc asp.net-mvc-viewmodel

问题

假设我想在遵循良好MVC原则的网站上显示一些值(以及ASP.NET MVC指南,但问题很可能与特定的MVC框架无关),例如:

A - type A items的数量,

B - type B items的数量,

T - all items的数量(总计数),

A / T% - percentage of type A items

B / T% - percentage of type B items

选项

现在我看到一些方法来填充视图所使用的ViewModel类:

  1. all 6 values放在ViewModel中,只需在必要时显示它们,无论客户端计算是什么,
  2. 因为我们不接受任何客户端计算

    1. 只在ViewModel中放置AB,客户端计算总数(A + B)和百分比(A / T%和B / T%),
    2. 因为我们希望通过网络尽可能少地在ViewModel中发送数据。

      1. ABT放入ViewModel,客户端计算百分比(A / T%和B / T%),
      2. 因为我们认为这些值是其已经获得的数据的另一种直观表示

        问题

        ViewModel对象应包含哪些内容的最佳做法是什么?

2 个答案:

答案 0 :(得分:1)

服务器端的好处:

  • 保证所有用户的值都是正确且一致的。您不依赖于浏览器进行计算。特别是如果他们需要财务并且需要准确的话。
  • 保证性能水平。您可以确保所有用户都会收到几乎相似的响应时间,因为您不依赖于用户计算机的功能来进行计算,然后操纵DOM来显示它们 - 有些浏览器很漂亮这很慢。用户可能拥有IE7和一台非常慢的计算机。在服务器上生成值意味着您还可以保证与禁用脚本的移动设备和设备的兼容性。

客户方的好处:

  • 可能为您节省带宽。这取决于浏览器需要计算的内容以及您保存的空间是否超出了使其运行所需的脚本大小。

正如您所看到的,我倾向于服务器端选项。如果您要进行 lot 计算,则可以始终缓存结果以减少所需的资源。即便如此,您还需要权衡缓存的大小与计算的CPU开销。

答案 1 :(得分:0)

我想你在谈论javascript heavy / SPA应用程序。

我个人会选择选项2:

  • 会减少传输的数据量
  • 发送尽可能小的数据,让客户轻松应用规范变更
  • 为动态观看增添了更多可能性

但是有一些缺点:

  • 您无法轻松地对这些计算值进行单元测试
  • 慢客户(旧手机)的潜在性能问题