我寫了一個CRUD輔助程式庫,內建自動抓取ViewModel進行JSON序列化的功能,其中有條"序列化時排除ViewModel中名稱為底線開頭屬性"的慣例(Convension)。前陣子接到同事回報,配合此慣例宣告ViewModel,卻發現底線起首的屬性會被Visual Studio 2012的JavaScript IntelliSense無視。

寫一小段程式,馬上獲得驗證:

一直沒留意VS2012的JS IntelliSense有此特性,查詢MSDN文件後獲得證實(在Handling IntelliSense events小節)。原來這是JS Intellisense強大擴充能力的一環,過濾底線開頭屬性的程式被放在VS2012的安裝目錄JavaScript\References\underscorefilter.js。

既然過濾行為由underscorefilter.js控制,要修改並非難事。不過,屬性名稱以底線開頭在JavaScript慣例隱含"私有"、"限內部使用"的意義,不應開放外界呼叫,因此不列在自動完成清單十分合理! 不想打破這個立意良好的設計,最後決定調整程式庫慣例,改成"序列化時排除名稱為$開頭屬性"!

案外案: 約定以$為屬性字首慣例,在C#端再踢到小石頭一顆: .NET識別名稱命名規則只允許字母或底線當字首,無法在C#中使用$作為屬性名稱字首與JavaScript端對應。最後的解決做法是在C#命名為"priv_",JSON序列化送到JavaScript端後再將"priv_Boo"改成"$Boo"。


Comments

Be the first to post a comment

Post a comment