Declarative programming宣告性程式設計

banq發表於2009-04-20
DDD中經常談到一個名詞是Declarative Design宣告式設計,目前比較流行,尤其是平行計算開始走熱背景下。


定義:無需表達程式控制流程。只要表達邏輯計算即可,就是表達應該幹什麼,而不是詳細說明如何去完成它。 declarative 設計意思是一種目標設計。

比如MDA和DSL都屬於一種declarative Design,它們描述業務目標應該是這樣,透過程式碼生成器生成程式碼,這樣我們無需關注軟體語言細節,不再糾纏於資料庫的資料和演算法,也不要成天在OO和資料之間徘徊選擇了。


declarative design能夠降低邊界影響side effects 或者是意料外的結果,本來我設計目的是這樣,但是會產生額外的副作用,其他沒有想到的壞影響,這是設計的大忌諱。


Martin Fowler提出Functional programming最小化甚至忽視邊界影響,所以被認為是declarative的。function的定義是這個方法只要是相同輸入永遠是相同輸出,無論被執行多少遍,這樣,這個方法就可以被多CPU平行計算,這是多核平行計算的基礎要求。

所以,平行計算的前提是OO足夠好。而不是滿嘴資料怎麼樣怎麼樣。這也就是為什麼你學了國內計算機課程後,看目前世界最新軟體技術文獻,還是看不懂的原因,因為就是兩個世界觀。

象Domain specific languages 型別的平行計算語言Scala等框架,都是非常好的declarative Design,可以準確表達設計意圖,不會與設計產生意外效應。還有Hybrid languages。

正如Evans 在DDD中所說:當你設計時使用了明確的介面 無邊際影響的方法function和斷言,我們就能逐漸進入declarative王國。如果能夠熟練掌握DDD的Specification(規定 規則 規格),我們可以在任何語言比如Java上構建自己的declarative王國。

新的軟體王國就在那裡,你是否認識它的存在,抑或已經站在它的門口,或者已經在其中游弋?

原文:

http://en.wikipedia.org/wiki/Declarative_programming

[該貼被admin於2009-04-21 11:33修改過]

[該貼被admin於2009-04-21 12:01修改過]

相關文章