ASP.NET MVC和HTML5 JavaScript数据实践

时间:2011-12-06 18:33:01

标签: asp.net-mvc design-patterns architecture

我正在尝试找出将数据放到我的网页上以便在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#模型完全相同。

0 个答案:

没有答案