5

我正在开发一个 ASP.NET Web 应用程序,该应用程序在客户端使用大量 JavaScript 以允许用户执行诸如拖放重新排序列表、查找要添加到列表中的项目(如Google 搜索栏),从列表中删除项目等。

我有一个 JavaScript“类”,用于在客户端存储每个列表项以及有关用户对项执行的操作(添加、编辑、删除、移动)的信息。页面发布到服务器的唯一时间是用户完成后,在提交页面之前,我将有关更改的所有信息序列化为 JSON 并将其存储在页面上的隐藏字段中。

我正在寻找的是一些关于如何在 C# 中构建我的类的一般建议。我认为在 C# 中拥有一个与 JavaScript 匹配的类可能会很好,这样我就可以将 JSON 取消实现为此类的实例。虽然服务器端的类都直接复制 JavaScript 类,而且只为支持 JavaScript UI 实现而存在,但这似乎有点奇怪。

这是一个抽象的问题。我只是在寻找其他在维护匹配的客户端和服务器端对象模型方面做过类似事情的人的指导。

4

1 回答 1

1

完全有道理。如果我遇到这个问题,我会考虑使用数据类型或类的单一明确描述,然后根据该描述生成代码。

描述可能是一个 javascript 源文件;您可以构建一个解析器,从该 JS 生成适当的 C# 代码。或者,它可能是一个 C# 源文件,而您则相反。

在 RelaxNG 中描述它,然后为 C# 和 Javascript 构建(或查找)生成器时,您可能会发现更多实用程序。在这种情况下,RelaxNG 模式将被检入源代码控制,而生成的工件不会。


编辑:还有一个名为WADL的新生规范,我认为这在这方面也会有所帮助。我还没有评估 WADL。在外围,我知道它并没有席卷世界,但我不知道为什么会这样。 关于 SO 有一个问题


EDIT2:鉴于缺乏工具(WADL 显然是死胎),如果我是你,我可能会尝试这种战术方法:

  • 使用[DataContract]c# 类型上的属性并将其视为确定的。
  • 通过在示例 XML JSON 文档上使用 JsonSerializer 来构建一个工具,该工具从已编译的程序集中获取您的 C# 类型并实例化该类型,该文档提供了一种事实上的“对象模型定义”。该工具应该以某种方式验证实例化类型是否可以往返转换为等效的 JSON,可能在结果内容上带有校验和或 CRC。
  • 在构建过程中运行该工具。

要做到这一点,您必须将该“示例 JSON 文档”签入源代码,并且您还必须确保是您在应用程序的各种 JS 代码中使用的表单。由于 Javascript 是动态的,您可能还需要一个类型验证器或其他东西,它将作为 jslint 或其他构建时验证步骤的一部分运行,它将检查您的 Javascript 源代码以查看它是否正在使用您的“标准”对象模型定义.

于 2010-01-21T21:35:43.190 回答