命名(Naming)無疑是人們認識世界最基本的手段之一。從軟件技術的發展中我們也可以觀察到命名技術的不斷深化。
1. 助記的名:匯編之中我們有了move/push/pop這樣的指令,所面對的不再是010101這樣的同質的數字世界。變量也逐漸可以擁有自己的名字,甚至多個名字。在C語言中指針的概念被進一步抽象化,使得我們可以為任意內存地址起一個可讀的名字。我們甚至漸漸忘懷了pStruct是指針的名字,而直接把它等同于指針所指的內容本身。
2. 局部的名:函數(例程)概念的出現把局部名稱引入系統,從此精細結構的發展才成為可能。
3. 多義的名:面向對象的出現可以看作是命名技術的一種重大進展,它可以把一組相關的數據和函數放在一起起個名字。繼承概念為名引入了多義性。通過虛擬函數表所實現的lazy-binding部分松動了對象的名和實之間的指稱關系?,F在一些所謂dynamic dispatch技術,依然是頑強的希望在同一名下,納入更多實的變化。
4. 特指的名:面向對象技術創造一個特殊的名---this指針。它是一種約定了的固化了的局部名稱。使用this指針使得我們區分了領域(domain)的內外。在domain外對象可以有各種稱謂,而domain內我們直接通過this直接觸及到對象的實體。在javascript這樣的動態語言中,函數和this指針是動態綁定的。在某種意義上,這意味著一個操作所依賴的domain知識可以是動態變化的。
5. 相對的名:面向對象技術所創造的知識相對化概念的一個直接體現是命名的相對化。一個函數它的具體含義不再是絕對的,而是相對于this指針的。因此我們不再采用user_load, book_load這樣的全稱的函數名, 而只定義load這樣的具有依賴性的函數。在面向對象的理想操作圖景下,首先應該是通過一個整體的參數直接區分出多個大的情景,然后在每個特定的情景下分別調用相對函數進行操作。在模板(template)技術或者動態語言中,這種相對性可以得到更加充分的發揮。因為在泛型或者弱類型語言中,我們需要的只是對象提供特定名稱的函數或屬性而已。
6. 持久的名:在早期的語言中,名只在編譯時刻存在。在編譯出的二進制代碼中,名所提供的豐富的描述空間不復存在,我們所有的只是同質性的二機制地址而已。而在現代語言中,反射已經成為了不可或缺的技術,它使得我們在運行時刻仍然可以擁有復雜的描述結構。
7. 分離的名:在一般的程序中,我們早已習慣了變量名直接指代實際可操作的對象本身,名的問題顯得太平庸以至于大家似乎忽略了它的存在。但是在web體系架構下, 因為存在著瀏覽器和服務器這樣兩分的狀態空間, 名成為兩個系統交互的直接手段,名的重要性也重新凸顯出來。只有在一個封閉的container中,才能通過名字解耦. 因此web架構設計的一個核心問題是構建出各種各樣的全局的container. 瀏覽器前端技術的一個本質性困難即在于多個瀏覽器窗口之間沒有共享的全局對象空間,因而很難在前臺獨立建立container結構。
在witrix平臺的jsplet框架中,在前臺我們通過如下url來訪問后臺
/view.jsp?objectName=MyObj&$bizId=test&objectEvent=ViewDetail&id=1
MyObj這一參數標定了BeanContainer中的一個Java對象, $bizId參數指定應用某個Aspect到此對象上,objectEvent參數映射到WebAction上的一個java方法,而EntityManager最后負責把id映射到具體的實體對象。當我們在后臺需要編制代碼的時候,entity對象已在手邊。
8. 名的結構:當名越來越多的時候,我們需要對它們進行有序的組織。名字空間(namespace)所采用的樹形結構可以說是最直接的一種組織方式。這一結構不僅僅可以用于描述,同時可以用于控制。
1. 助記的名:匯編之中我們有了move/push/pop這樣的指令,所面對的不再是010101這樣的同質的數字世界。變量也逐漸可以擁有自己的名字,甚至多個名字。在C語言中指針的概念被進一步抽象化,使得我們可以為任意內存地址起一個可讀的名字。我們甚至漸漸忘懷了pStruct是指針的名字,而直接把它等同于指針所指的內容本身。
2. 局部的名:函數(例程)概念的出現把局部名稱引入系統,從此精細結構的發展才成為可能。
3. 多義的名:面向對象的出現可以看作是命名技術的一種重大進展,它可以把一組相關的數據和函數放在一起起個名字。繼承概念為名引入了多義性。通過虛擬函數表所實現的lazy-binding部分松動了對象的名和實之間的指稱關系?,F在一些所謂dynamic dispatch技術,依然是頑強的希望在同一名下,納入更多實的變化。
4. 特指的名:面向對象技術創造一個特殊的名---this指針。它是一種約定了的固化了的局部名稱。使用this指針使得我們區分了領域(domain)的內外。在domain外對象可以有各種稱謂,而domain內我們直接通過this直接觸及到對象的實體。在javascript這樣的動態語言中,函數和this指針是動態綁定的。在某種意義上,這意味著一個操作所依賴的domain知識可以是動態變化的。
5. 相對的名:面向對象技術所創造的知識相對化概念的一個直接體現是命名的相對化。一個函數它的具體含義不再是絕對的,而是相對于this指針的。因此我們不再采用user_load, book_load這樣的全稱的函數名, 而只定義load這樣的具有依賴性的函數。在面向對象的理想操作圖景下,首先應該是通過一個整體的參數直接區分出多個大的情景,然后在每個特定的情景下分別調用相對函數進行操作。在模板(template)技術或者動態語言中,這種相對性可以得到更加充分的發揮。因為在泛型或者弱類型語言中,我們需要的只是對象提供特定名稱的函數或屬性而已。
6. 持久的名:在早期的語言中,名只在編譯時刻存在。在編譯出的二進制代碼中,名所提供的豐富的描述空間不復存在,我們所有的只是同質性的二機制地址而已。而在現代語言中,反射已經成為了不可或缺的技術,它使得我們在運行時刻仍然可以擁有復雜的描述結構。
7. 分離的名:在一般的程序中,我們早已習慣了變量名直接指代實際可操作的對象本身,名的問題顯得太平庸以至于大家似乎忽略了它的存在。但是在web體系架構下, 因為存在著瀏覽器和服務器這樣兩分的狀態空間, 名成為兩個系統交互的直接手段,名的重要性也重新凸顯出來。只有在一個封閉的container中,才能通過名字解耦. 因此web架構設計的一個核心問題是構建出各種各樣的全局的container. 瀏覽器前端技術的一個本質性困難即在于多個瀏覽器窗口之間沒有共享的全局對象空間,因而很難在前臺獨立建立container結構。
在witrix平臺的jsplet框架中,在前臺我們通過如下url來訪問后臺
/view.jsp?objectName=MyObj&$bizId=test&objectEvent=ViewDetail&id=1
MyObj這一參數標定了BeanContainer中的一個Java對象, $bizId參數指定應用某個Aspect到此對象上,objectEvent參數映射到WebAction上的一個java方法,而EntityManager最后負責把id映射到具體的實體對象。當我們在后臺需要編制代碼的時候,entity對象已在手邊。
8. 名的結構:當名越來越多的時候,我們需要對它們進行有序的組織。名字空間(namespace)所采用的樹形結構可以說是最直接的一種組織方式。這一結構不僅僅可以用于描述,同時可以用于控制。