保持JavaScript和C#对象模型之间的一致性

Mar*_*nof 5 javascript c# schema relaxng schema-design

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

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

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

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

Che*_*eso 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 源以查看它是否正在使用您的“标准”对象模型定义。