代碼之外的結構

我在各種場合一直都在強調結構問題是獨立的,在程序語言之外存在着獨立的,可研究的,富有成效的結構問題。[url]http://canonical.iteye.com/blog/147424 [/url]在這個方向上更進一步,我們注意到所有的代碼並不是天然出現的,而是由人所編制的,因此代碼世界內部並不構成封閉的,自足的某個世界。代碼中的結構問題並不是由代碼本身完全解決的,即在代碼之外仍然存在着技術上可研究的結構問題。

我們在編制代碼的同時也在編制着大量的說明文檔。這些文檔描述了代碼片斷之間的相互關係,描述了代碼未來的擴展方向,描述了代碼之間的可能的交互方式,同時也描述了針對現有代碼實現的很多具體約束。例如我們在文檔中約定某個量要在10和20之間,但在代碼中卻不一定顯式進行了判斷。針對代碼結構的很多具體約束條件和相關性描述可能只在文檔中體現,只在程序員的頭腦中存在,而並不一定忠實的在代碼結構中得到表達。

我在設計領域基本持有一種物理實在論,即某種技術相關的約束應該在技術世界中通過技術手段得到表達。只是這裏的技術手段卻不一定指在應用中加上特定的代碼實現,雖然我們在代碼實現中更直接的表達設計要求無疑是需要提倡的。爲了在程序中有效的維護結構相關性,我們並不一定需要抽象出所有可能重用的代碼,並不一定需要確保某一概念在程序中只有精確的唯一的表達。程序中難以直接精確表達的弱關聯,仍然可以通過開發/設計工具等技術手段得到有效的維護。我們需要保證的是代碼世界中知識的自恰性,而自恰性並不等於唯一性。[url]http://canonical.iteye.com/blog/33788[/url]

在Witrix中我們採用一種物理模型驅動的開發方式,[url]http://canonical.iteye.com/blog/29412[/url] 由pdm模型出發,自動生成hibernate的hbm文件,java實體類,元數據meta文件,前臺Action註冊文件等。生成的配置文件通過 syncWithModel標記與模型保持着穩定的關聯。所有配置文件都支持手工修改,開發工具識別syncWithModel標記,當pdm模型發生變化的時候,工具自動將變化信息同步到各個配置文件中。注意到這裏並不是採用一個統一的元數據模型的方式,各個配置文件所表達的信息在一定程度上是重複的,也可能是不一致的。例如後臺數據庫允許保存100個字節,但是前臺meta中我們可能配置只允許錄入20個字節。根據不同應用場景的需要,我們可以在各個層面對每個配置文件進行獨立的調節. 當然,在一般情況下並不存在這種需要。整個開發過程中,信息表達的自恰性並不是在應用程序代碼中得到定義的,而是因爲開發工具的存在而在技術上得到保證的。放鬆模型之間的唯一匹配要求,我們可以得到更加豐富,更加靈活的軟件結構。實際上我認爲RoR(RubyOnRails)採用直接映射的 ActiveRecord的方式雖然有效保證了系統變動中知識的一致性,但是如果不允許在各個層面上都能夠自然的定義某種偏離,它在複雜應用中的價值就要打上大大的折扣。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章