如何在JavaScript中强大地键入映射到C#中的模型的属性?

时间:2010-04-07 18:24:05

标签: c# javascript resharper

我甚至不确定我是否正确地提出了这个问题,但我会尽量用一个例子来解释:

在以下示例场景中:

1)参加如下课程:

public class foo
{
   public string firstName {get;set;}
   public string lastName {get;set}
}

2)将其序列化为JSON,通过网络传递给浏览器。

3)浏览器对此进行反序列化并将JSON转换为JavaScript对象,以便您可以访问以下属性:

var foo = deSerialize("*******the JSON from above**************");
alert(foo.firstName);
alert(foo.lastName);

如果现在有新开发人员参与此项目,那么firstName不再是合适的属性名称会怎样。让我们说他们使用 ReSharper 来重命名这个属性,因为 ReSharper 在查找(几乎)所有对属性的引用并适当地重命名它们方面做得非常好。

然而, ReSharper 将无法重命名JavaScript代码(#3)中的引用,因为它无法知道这些也真的意味着同样的事情。这意味着程序员有责任手动查找这些引用并重命名。

风险在于,如果忘记了这一点,那么在有人测试这部分代码之前,没有人会知道这个错误,或者更糟糕的是,直到客户。


回到实际问题: 我一直试图想到一个解决方案,以便在javascript中使用这些属性名称的强烈类型,以便像ReSharper这样的工具可以成功重命名属性的所有用法(并准确地)?

这是我一直在想的例子(除非我制作某种静态属性,否则这显然不会起作用)

var foo = deSerialize("*******the JSON from above**************");
alert(foo.<%=foo.firstName.GetPropertyName()%>)
alert(foo.<%=foo.lastName.GetPropertyName()%>)

但这显然不切实际。有没有人对此有任何想法?
谢谢,并感谢所有有才华的人在本网站回答问题。

这是我的一个实验,所以任何建议都会受到欢迎。

1 个答案:

答案 0 :(得分:1)

大多数重构工具都有一种模式,用于检查代码库的全文搜索以查找用法。 (我知道ReSharper有这个选择。)这至少可以解决部分问题。综合集成测试也可以解决您提到的一些问题。

解决问题的另一种方法是将您的有线格式(即JSON)与您的类型层次结构紧密耦合。