2010-04-07 38 views
0

我甚至不知道我的措辭問題的權利,但我會嘗試用一個例子儘可能清楚地解釋:如何在JavaScript中強制輸入映射到C#模型的屬性?

在下面的示例場景:

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

大多數重構工具都有一種模式,在這種模式下,他們檢查代碼庫的全文搜索以找到用法。 (我知道ReSharper有這個選擇。)那至少可以解決部分問題。全面的集成測試對於解決您提到的一些問題也有很長的路要走。

解決此問題的另一種方法是將您的電線格式(即JSON)和您的類型層次結合得更緊密。

+0

是的ReSharper確實有這個選擇,但它無法在我的情況下找到它。此外,即使這樣做,也可能會混淆該字符串的其他用法,即使它與該字符串無關。我同意你關於集成測試的意見,但我想試着從源頭上解決問題,而不是等待測試來揭示問題。沒什麼大不了的,這更像是一個實驗。 – 7wp 2010-04-07 18:42:16

+0

然後,我會在最後一行建議:不要將JSON耦合到類型系統,要爲C#和JS理解的JSON創建一個單獨的約定,並且只有在有人進行刻意時纔會受到影響改變它。 – 2010-04-07 19:17:26

+0

沒錯,但是當有人對它進行了有意的改變時,他們是否會發現自己處於與我指出的那種情景?特別是如果它在遍佈各地的許多地方使用? – 7wp 2010-04-07 20:37:26

相關問題