2011-11-19 94 views
5

我從Microsoft .Net: Architecting Applications for the Enterprise讀到架構下面的段落中,由迪諾·埃斯波西託和Andrea Saltarello:聲明式編程和命令式編程有什麼區別?

每當你需要聲明的方式編碼,而不是 勢在必行的方法,你都指派了一些責任,一些 其他層的代碼 - 你完全無法控制的一層。所以你最終希望這個中間工具能正確理解你,並且不會遇到任何麻煩。在 軟件開發中,委派給第三方使得開發 的速度更快,但是您應該保證用戶得到他們想要的 。

這並不意味着您不應該相信Visual Studio 2008或 類似的基於嚮導的產品。這點完全是另一回事。 在一個可能由多個團隊開發的大型系統中,經典的 聲明式編程不起作用。您需要在您的 演示文稿中有一層代碼,用於決定要顯示的內容, 讀取設置的位置以及如何應用它們。聲明性編程仍然是 一個很好的選擇,但只有當你編寫引擎和嚮導。

有人可以用簡單的語言向我解釋什麼是聲明式和命令式編程嗎?

+0

看到這個[SO交] [1]的F#和c#一個compaison [1]:HTTP ://stackoverflow.com/questions/952318/what-are-the-benefits-of-using-c-sharp-vs-f-or-f-vs-c –

+0

@AshokPadmanabhan:只有幾乎不適用,因爲它是關於C#和F#,只有部分關於命令式編程和功能式編程(這是聲明式編程的一個相當特殊的子集)。 – delnan

+0

嚮導和聲明式編程如何相關? – CodesInChaos

回答

2

聲明式編程 - 應該做什麼

命令式編程 - 你應該怎麼做。

聲明式編程要求開發人員說出要做什麼。命令式編程要求開發人員逐步定義應該如何執行代碼。

例如:C#中的LINQ是聲明性的。

這裏閱讀更多:http://www.informit.com/articles/article.aspx?p=1330154&seqNum=4

+1

LINQ是簡單的函數式編程IMO。數據綁定,驗證屬性等就是我所說的聲明。 – CodesInChaos

+0

@CodeInChaos - 函數式編程和聲明式不是互斥的。而LINQ是聲明式的,因爲你說你想要什麼,系統知道如何獲得它,從XML,SQL等。 – manojlds

7

聲明式 - 我將描述我想要你做什麼,你想出來(SQL,XSLT)。

命令 - 我會告訴你究竟是該怎麼做,一次一步(C#,Java)。

+1

對我來說,SQL聽起來比聲明更有用。我認爲XSLT只是使用xml語法進行函數式編程,但我不太確定。 – CodesInChaos

+0

@CodeInChaos - 兩者都被描述爲聲明式。我只是看了兩個維基百科條目,這與這一點是一致的。 – Oded

7

例子。

聲明性編程:

<asp:DropDownList runat="server" DataSourceID="ObjectDataSource1" /> 
<asp:ObjectDataSource runat="server" ID="ObjectDataSource1" ItemUpdating="..." /> 

命令式編程:

ObjectDataSource source = new ObjectDataSource(); 
source.ItemUpdating += ...; 

DropDownList list = new DropDownList(); 
list.ID = ""; 
list.DataSource = source; 
list.DataBind(); 
相關問題