Declarative programming宣告性程式設計
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王國。
新的軟體王國就在那裡,你是否認識它的存在,抑或已經站在它的門口,或者已經在其中游弋?
原文:
定義:無需表達程式控制流程。只要表達邏輯計算即可,就是表達應該幹什麼,而不是詳細說明如何去完成它。 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修改過]
相關文章
- React基礎:宣告式程式設計React程式設計
- 面向橫切面程式設計(Aspect Oriented Programming)。程式設計
- 極端程式設計(eXtreme Programming)小結程式設計REM
- 函式程式設計Functional Programming 會取代GOF設計模式嗎?函式程式設計FunctionGo設計模式
- 面向切面程式設計 ( Aspect Oriented Programming with Spring )程式設計Spring
- API(Application Programming Interface,應用程式程式設計介面)APIAPP程式設計
- 程式設計思想基本概念之函數語言程式設計(Functional Programming)程式設計函數Function
- SAP Cloud Application Programming 程式設計模型(CAP)的設計準則CloudAPP程式設計模型
- JavaScript函數語言程式設計之pointfree與宣告式程式設計JavaScript函數程式設計
- 鴻蒙程式設計江湖:ArkUI 的宣告式 UI 程式設計與狀態管理鴻蒙程式設計UI
- JS 命令式 宣告式 函式式 程式設計?JS函式程式設計
- CUDA程式設計(4.1)—— 宣告符(global、device、host等)程式設計dev
- 防禦性程式設計與瘋狂偏執性程式設計程式設計
- OOP物件導向程式設計(Object-Oriented Programming)概述OOP物件程式設計Object
- 函數語言程式設計functional programming的特點函數程式設計Function
- Linux程式設計入門 - socket/inetd programming(轉)Linux程式設計
- 《遊戲設計模式》(Game Programming Patterns)遊戲設計設計模式GAM
- 程式設計思想之冪等性 | 程式設計之道程式設計
- 5.7 屬性宣告
- 極限程式設計 (Extreme Programming, XP) 的一些想法程式設計REM
- Declarative Shadow DOM
- SAP UI5 的宣告式初始化 Component 定義(Declarative API for Initial Components)UIAPI
- Kubernetes宣告式API與程式設計正規化API程式設計
- 極端程式設計(eXtreme Programming,XP)的特點及討論程式設計REM
- 當使用 position 屬性時,請始終設定 !DOCTYPE 宣告:當使用 float 屬性時,請始終設定 !DOCTYPE 宣告:
- API的宣告性力量API
- Rust 程式設計影片教程(進階)——029_2 宣告宏Rust程式設計
- 瞭解 JavaScript 函數語言程式設計 - 宣告式函式JavaScript函數程式設計函式
- QT declarative UI 初探(一)QTUI
- QT declarative UI 初探(二)QTUI
- .Net Core自實現CLR非同步程式設計模式(Asynchronous programming patterns)非同步程式設計設計模式
- EbookFoundation/free-programming-books:免費提供的中文程式設計書籍程式設計
- 思考c++程式設計-譯自c++ programming language 1.7節 (轉)C++程式設計
- 程式設計與線性代數程式設計
- 程式設計就像兩性關係程式設計
- 程式設計師的“紀律性”程式設計師
- Rust 程式設計視訊教程(進階)——029_2 宣告巨集Rust程式設計
- Spring程式設計式和宣告式事務例項講解Spring程式設計