色尼玛亚洲综合影院,亚洲3atv精品一区二区三区,麻豆freexxxx性91精品,欧美在线91

API設(shè)計(jì)新思維:用流暢接口構(gòu)造內(nèi)部DSL

  程序設(shè)計(jì)語(yǔ)言的抽象機(jī)制包含了兩個(gè)最基本的方面:一是語(yǔ)言關(guān)注的基本元素/語(yǔ)義;另一個(gè)是從基本元素/語(yǔ)義到復(fù)合元素/語(yǔ)義的構(gòu)造規(guī)則。在C、C++、Java、C#、Python等通用語(yǔ)言中,語(yǔ)言的基本元素/語(yǔ)義往往離問(wèn)題域較遠(yuǎn),通過(guò)API庫(kù)的形式進(jìn)行層層抽象是降低問(wèn)題難度最常用的方法。比如,在C語(yǔ)言中最常見(jiàn)的方式是提供函數(shù)庫(kù)來(lái)封裝復(fù)雜邏輯,方便外部調(diào)用。

  不過(guò)普通的API設(shè)計(jì)方法存在一種天然的陷阱,那就是不管怎樣封裝,大過(guò)程雖然比小過(guò)程抽象層次更高,但本質(zhì)上還是過(guò)程,受到過(guò)程語(yǔ)義的制約。也就是說(shuō),通過(guò)基本元素/語(yǔ)義構(gòu)造更高級(jí)抽象元素/語(yǔ)義的時(shí)候,語(yǔ)言的構(gòu)造規(guī)則很大程度上限制了抽象的維度,我們很難跳出這個(gè)維度去,甚至可能根本意識(shí)不到這個(gè)限制。而SQL、HTML、CSS、make等DSL(領(lǐng)域特定語(yǔ)言)的抽象維度是為特定領(lǐng)域量身定做的,從這些抽象角度看問(wèn)題往往最為簡(jiǎn)單,所以DSL在解決其特定領(lǐng)域的問(wèn)題時(shí)比通用程序設(shè)計(jì)語(yǔ)言更加方便。通常,SQL等非通用語(yǔ)言被稱為外部DSL(External DSL);在通用語(yǔ)言中,我們其實(shí)也可以在一定程度上突破語(yǔ)言構(gòu)造規(guī)則的抽象維度限制,定義內(nèi)部DSL(Internal DSL)。

  本文將介紹一種被稱為流暢接口(Fluent Interface)的內(nèi)部DSL設(shè)計(jì)方法。Wikipedia上Fluent Interface的定義是:

A fluent interface (as first coined by Eric Evans and Martin Fowler) is an implementation of an object oriented API that aims to provide for more readable code. A fluent interface is normally implemented by using method chaining to relay the instruction context of a subsequent call (but a fluent interface entails more than just method chaining).

it知識(shí)庫(kù)API設(shè)計(jì)新思維:用流暢接口構(gòu)造內(nèi)部DSL,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 黎平县| 水城县| 潍坊市| 达州市| 无棣县| 淮北市| 理塘县| 宝坻区| 吴旗县| 景泰县| 伊吾县| 新化县| 全南县| 桂平市| 江川县| 武强县| 团风县| 柳州市| 贡觉县| 南召县| 阿巴嘎旗| 溧水县| 东乌珠穆沁旗| 临湘市| 台山市| 贺州市| 兰州市| 宁晋县| 河东区| 乌拉特中旗| 贵溪市| 彭阳县| 潮州市| 鄄城县| 岐山县| 宁安市| 佛学| 淅川县| 巴马| 建湖县| 仙居县|