我正在尝试找出将数据放到我的网页上以便在JavaScript中使用的最佳方式。
我的大部分经验是.Net(WPF等)的桌面版。
技术:
我目前正在使用ASP.NET MVC3。我有一堆业务层模型。这些模型有时可能会有趣的关系。我需要将这些模型放到客户端上,然后用JavaScript做一些事情,然后将它们发送回服务器以获得持久性和其他业务逻辑。
核心价值:
我希望找到一种解决方案,最大限度地减少耦合,最小化代码/功能重复,支持关注点分离,以及易于维护(IE可理解,知道在哪里更改等等。)
我想到了一些处理这个问题的方法。两者似乎都不尽如人意。
选项1 :
创建我的模型的JavaScript版本,我将称之为JavaScript View Models(JSVMs)。这些JSVM是通过Ajax调用创建的。 JSVM基于服务器端模型从生成的JavaScript对象映射到。这意味着某处有一个“Map”“类”处理与这两个模型之间的映射(以降低耦合和维护SoC)。
下行,很多代码重复。更改JSVM或服务器端模型时,可能需要更改此映射“类”。
这似乎只解决了我的一些问题。
选项2 :
我找到了一个名为“FluentJson.Net”的库。它基本上允许我从razor内联创建knockoutjs JavaScript对象。从那里我基本上可以只针对这个动态创建对象进行编码。无需创建JSVM。
下行,与服务器端模型的耦合非常紧密。服务器端模型的更改可能会导致多个页面上的所需更改!
我可以探索选项1和选项2的某些组合,但我认为它们都有缺点。
问题:
我真正想知道的是:在服务器和客户端处理模型的最佳做法是什么?有没有一个能够维持核心价值观的解决方案?
(编辑:添加以下示例)
实施例:
C#模型:
public interface IChartDefinition{
string Name{get; set};
IEnumerable<IChartSeries> Series {get; set;}
}
public interface IChartSeries{
Color Color{get; set;}
Name {get; set;}
}
在服务器上,此定义定义基本图表。此图表定义将持久保存到数据库中,以后可以上拉并与实际数据一起使用以在客户端上显示图表。
我有一个名为“ChartDesignerController”的控制器,它的基本功能是让人们管理他们的图表定义。
所以我有一个名为Create的视图用于创建图表定义。在我看来,我想要一个+按钮来添加系列。在添加系列时,我希望UI显示系列的选项,例如颜色和名称。用户可以删除系列等。
所有这些交互都是通过javascript在基础javascript对象上完成的,这些javascript对象保存此数据,直到最终用户按下提交按钮并将此数据发送回服务器以进行保留。
这些javascript对象看起来几乎与持久化的C#模型完全相同。