我甚至不确定我是否正确地提出了这个问题,但我会尽量用一个例子来解释:
在以下示例场景中:
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()%>)
但这显然不切实际。有没有人对此有任何想法?
谢谢,并感谢所有有才华的人在本网站回答问题。
这是我的一个实验,所以任何建议都会受到欢迎。
答案 0 :(得分:1)
大多数重构工具都有一种模式,用于检查代码库的全文搜索以查找用法。 (我知道ReSharper有这个选择。)这至少可以解决部分问题。综合集成测试也可以解决您提到的一些问题。
解决问题的另一种方法是将您的有线格式(即JSON)与您的类型层次结构紧密耦合。