溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

首選聲明式API設(shè)計(jì)而不是命令式設(shè)計(jì)的原因有哪些

發(fā)布時(shí)間:2021-10-18 11:30:34 來源:億速云 閱讀:146 作者:iii 欄目:編程語言

這篇文章主要介紹“首選聲明式API設(shè)計(jì)而不是命令式設(shè)計(jì)的原因有哪些”,在日常操作中,相信很多人在首選聲明式API設(shè)計(jì)而不是命令式設(shè)計(jì)的原因有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”首選聲明式API設(shè)計(jì)而不是命令式設(shè)計(jì)的原因有哪些”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!

React是聲明性的。SQL也是聲明性的。有共同點(diǎn)嗎?

首選聲明式API設(shè)計(jì)而不是命令式設(shè)計(jì)的原因有哪些

> Provided by author

我們現(xiàn)在的許多應(yīng)用程序周圍的API。例如,我們的應(yīng)用程序代碼的許多核心通過API通信。我們通過用可理解的抽象分層構(gòu)建應(yīng)用程序。此抽象層至關(guān)重要,因?yàn)樗兄谖覀兘鉀Q我們的軟件是如何編寫的及其問題。

定義API的兩種流行方法是命令式和聲明式。SQL是一種聲明性查詢語言,而IMS和CODASYL查詢數(shù)據(jù)庫(kù)則使用命令性代碼。最常用的編程語言是必須的。

但是,在本文中,聲明性API得到更廣泛使用的主要原因之一是,與命令性API相比,聲明性API的使用更加簡(jiǎn)潔,并且提供了更好的抽象性。

數(shù)據(jù)模型中的命令式聲明式

在沒有SQL之前,在1960年,IBM設(shè)計(jì)了信息管理系統(tǒng)(IMS),它具有一個(gè)稱為CODASYL的分層模型,類似于文檔數(shù)據(jù)庫(kù)中使用的JSON模型。

該模型稱為網(wǎng)絡(luò)模型,它有助于為多對(duì)多關(guān)系創(chuàng)建數(shù)據(jù)模型。每條記錄將有多個(gè)父級(jí),我們將一條記錄相對(duì)于另一條記錄進(jìn)行標(biāo)記的方式是使用編程語言中的指針而不是外鍵。

首選聲明式API設(shè)計(jì)而不是命令式設(shè)計(jì)的原因有哪些

> Source: A Codasyl-type Schela Forp Natural La;g’uage Miedical  Records

如果要獲取特定鏈接的值,則必須從列表的頭開始遍歷,一次查看一個(gè)記錄,直到找到所需的記錄為止。

這種檢索數(shù)據(jù)的方式使開發(fā)人員很難進(jìn)行任何更新或更改,因?yàn)樗麄儽仨毟櫵嘘P(guān)系和鏈接的父級(jí),否則他們將找不到所需的數(shù)據(jù)。

關(guān)系模型數(shù)據(jù)查詢有何不同

關(guān)系模型使用另一種查詢數(shù)據(jù)的方式。作為開發(fā)人員,我們將告訴程序“做什么”,而不是“怎么做”。因此,查詢優(yōu)化器將自動(dòng)決定按哪個(gè)順序執(zhí)行查詢的哪個(gè)部分以及使用哪個(gè)索引。

“告訴程序“做什么”,而不是“如何”做。”

聲明性方法的一個(gè)好處是查詢語言使用API抽象了客戶的實(shí)現(xiàn)細(xì)節(jié)。這可以為優(yōu)化查詢優(yōu)化器留出空間,以產(chǎn)生更好的性能并引入更新的功能,而無需任何查詢更改。

隨著越來越多的計(jì)算邏輯轉(zhuǎn)向軟件而非硬件,SQL因其靈活性而變得越來越流行和廣泛使用。

讓我們看一下網(wǎng)絡(luò)瀏覽器中的聲明性API和命令性API的另一種類比和說明。

Web服務(wù)舉例

讓我們舉一個(gè)在Web瀏覽器中使用聲明式和命令式方法處理DOM元素的示例。

通常,使用CSS是聲明性的,而使用JavaScript操作DOM元素則勢(shì)在必行。在下面的示例中,您可以看到為什么CSS在Web上查詢數(shù)據(jù)要比JavaScript更好的原因。

更改HTML標(biāo)記上“The one who got away”段落中文本的顏色,如下所示:

<ul>   <li class="topClass">     <p> The one who got away </p>     <ul>       <li>article1</li>       <li>article2</li>       <li>article3</li>         </ul>   </li>   <li>     <p> What I learn from my mistakes</p>     <ul>       <li> subArticle </li>       <li> subArticle2 </li>     </ul>   </li> </ul>

使用CSS,您的代碼將如下所示:

li.topClass > p {   color: blue }

比較簡(jiǎn)單,因?yàn)樗暶髁宋覀円獙⑽谋镜乃{(lán)色應(yīng)用于其中的元素的模式。不在類名topClass下的

標(biāo)記段不會(huì)更改顏色,因?yàn)樗c聲明不匹配。

另一方面,使用JavaScript來操縱DOM元素將如下所示:

let liElements = document.getElementsByTagName("li"); for(let i = 0; i< liElements.length; i++) {   if(liElements[i].className == "topClass") {     const children = liElements[i].cildNodes;     for(let j = 0; j< children.length; j++) {       if(children[i].nodeType === NODE.ELEMENT_NODE && child.tagName === 'P'){         child.setAttribute('style', 'color:blue');       }     }   } }

使用JavaScript來操作DOM元素,我們必須告訴程序如何做到這一點(diǎn)。它沒有告訴程序我們要達(dá)到的目的的抽象概念。該代碼不但比CSS長(zhǎng)很多,也很難理解。新手開發(fā)人員將需要完全按照HTML頁面的說明進(jìn)行操作,以了解其功能意圖。

此外,我們必須跟蹤在DOM節(jié)點(diǎn)上設(shè)置的內(nèi)容,以及未在DOM節(jié)點(diǎn)上放置的內(nèi)容。例如,如果用戶轉(zhuǎn)到下一頁,我們需要手動(dòng)知道如何將color:blue設(shè)置回黑色。而且,如果API發(fā)生了變化,例如新功能getElementByTagNameV2(我只是在做些事情),則客戶端將需要重寫該函數(shù),因?yàn)锳PI與客戶端的實(shí)現(xiàn)緊密相關(guān)。

另一方面,以聲明性的方式定義API-我們可以優(yōu)化瀏覽器性能,而無需客戶端更改他們編寫的任何CSS標(biāo)記。

我們知道,與在CODASYL中使用SQL相比,在Web瀏覽器中查詢數(shù)據(jù)比CSS更靈活,更容易向后兼容。

在實(shí)踐中

最終,API的抽象度越高,API的聲明性就越高。所有低級(jí)API都公開了您要調(diào)用的動(dòng)詞,并且如果沒有命令性API,我們就無法封裝高級(jí)抽象API。換句話說,必須存在命令性API才能將API封裝為聲明性API。

如果要使API更具聲明性,請(qǐng)將配置放在API上進(jìn)行進(jìn)一步的抽象。通常,聲明性API將通過為您提供一些容錯(cuò)功能,因此您不必考慮到某些方面。

假設(shè)您希望在隊(duì)列中創(chuàng)建對(duì)輪詢值的抽象。您可以通過提供功能poll()提及輪詢的機(jī)制。

以聲明poll()的命令方式,它只會(huì)做一件事-poll。如果在此過程中出現(xiàn)網(wǎng)絡(luò)問題或故障,它將僅引發(fā)異常。

編寫API的一種聲明方式是提及函數(shù)意圖的配置。例如,如果您希望重試計(jì)數(shù)為2,并且在失敗時(shí)執(zhí)行特定操作。客戶端需要解決的任何特定錯(cuò)誤處理或功能都可以將其封裝在config值中,該值可讓API為您完成所有艱苦的工作。

閉幕

我們將了解為什么聲明式API比命令式API更容易理解和使用。首先,我們了解當(dāng)前廣泛使用的查詢語言-SQL,以及與前一個(gè)CODASYL相比的查詢語言。然后,我們看到查詢網(wǎng)絡(luò)瀏覽器的聲明方式如何比命令形式更輕松。最后,了解用戶的意圖并使用配置抽象他們需要實(shí)現(xiàn)的所有邏輯是過渡到聲明性API的絕佳方法。

到此,關(guān)于“首選聲明式API設(shè)計(jì)而不是命令式設(shè)計(jì)的原因有哪些”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

api
AI