云裂變私域營(yíng)銷(xiāo),解決企業(yè)私域流量、私域運(yùn)營(yíng),全網(wǎng)營(yíng)銷(xiāo),全網(wǎng)推廣的所有問(wèn)題!
作者: 日期:2021-06-18 人氣:386
程序設(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)用。(杭州網(wǎng)站制作)
不過(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)。 |
下面將分4個(gè)部分來(lái)逐步說(shuō)明流暢接口在構(gòu)造內(nèi)部DSL中的典型應(yīng)用。
1.基本語(yǔ)義抽象
如果要輸出0..4這5個(gè)數(shù),我們一般會(huì)首先想到類(lèi)似這樣的代碼:
而Ruby雖然也支持類(lèi)似的for循環(huán),但最簡(jiǎn)單的是下面這樣的實(shí)現(xiàn):
Ruby中一切皆對(duì)象,5是Fixnum類(lèi)的實(shí)例,times是Fixnum的一個(gè)方法,它接受一個(gè)block參數(shù)。相比f(wàn)or循環(huán)實(shí)現(xiàn),Ruby 的times方式更簡(jiǎn)潔,可讀性更強(qiáng),但熟悉OOP的朋友可能會(huì)有疑問(wèn),times是否應(yīng)該作為整型類(lèi)的方法呢?在OOP中,方法調(diào)用通常代表了向?qū)ο蟀l(fā)送消息,改變或查詢對(duì)象的狀態(tài),times方法顯然不是對(duì)整型對(duì)象狀態(tài)的查詢和修改。如果你是Ruby的設(shè)計(jì)者,你會(huì)把times方法放入Fixnum類(lèi)嗎?如果答案是否定的,那么Ruby的這種設(shè)計(jì)本質(zhì)上代表了什么呢?實(shí)際上,這里的times雖然只是一個(gè)普通的類(lèi)方法,但它的目的卻與普通意義上的類(lèi)方法不同,它的語(yǔ)義實(shí)際上類(lèi)似于for循環(huán)這樣的語(yǔ)言基本語(yǔ)義,可以被視為一種自定義的基本語(yǔ)義。times的語(yǔ)義從一定程度上跳出了類(lèi)方法的框框,向問(wèn)題域邁進(jìn)了一步!
另一個(gè)例子來(lái)自Eric Evans的“用兩個(gè)時(shí)間點(diǎn)構(gòu)造一個(gè)時(shí)間段對(duì)象”,普通設(shè)計(jì):
另一種Evans的設(shè)計(jì)是這樣:
按傳統(tǒng)OO設(shè)計(jì),until方法本不應(yīng)出現(xiàn)在TimePoint類(lèi)中,這里TimePoint類(lèi)的until方法同樣代表了一種自定義的基本語(yǔ)義,使得表達(dá)時(shí)間域的問(wèn)題更加自然。
雖然上面的兩個(gè)簡(jiǎn)單例子和普通設(shè)計(jì)相比看不出太大的優(yōu)勢(shì),但它卻為我們理解流暢接口打下了基礎(chǔ)。重要的是應(yīng)該體會(huì)到它們從一定程度上跳出了語(yǔ)言基本抽象機(jī)制的束縛,我們不應(yīng)該再用類(lèi)職責(zé)劃分、迪米特法則(Law of Demeter)等OO設(shè)計(jì)原則來(lái)看待它們。
2.管道抽象
在Shell中,我們可以通過(guò)管道將一系列的小命令組合在一起實(shí)現(xiàn)復(fù)雜的功能。管道中流動(dòng)的是單一類(lèi)型的文本流,計(jì)算過(guò)程就是從輸入流到輸出流的變換過(guò)程,每個(gè)命令是對(duì)文本流的一次變換作用,通過(guò)管道將作用疊加起來(lái)。在Shell中,很多時(shí)候我們只需要一句話就能完成log統(tǒng)計(jì)這樣的中小規(guī)模問(wèn)題。和其他抽象機(jī)制相比,管道的優(yōu)美在于無(wú)嵌套。比如下面這段C程序,由于嵌套層次較深,不容易一下子理解清楚:
而用管道來(lái)表達(dá)同樣的功能則清晰得多:
我們很容易理解這段程序表達(dá)的意思是:先求a,b的最大值;再把結(jié)果和c取最小值;再把結(jié)果和d求最大值;再把結(jié)果和e求最小值。
jQuery的鏈?zhǔn)秸{(diào)用設(shè)計(jì)也具有管道的風(fēng)格,方法鏈上流動(dòng)的是同一類(lèi)型的jQuery對(duì)象,每一步方法調(diào)用是對(duì)對(duì)象的一次作用,整個(gè)方法鏈將各個(gè)方法的作用疊加起來(lái)。
3.層次結(jié)構(gòu)抽象
除了管道這種“線性”結(jié)構(gòu)外,流暢接口還可用于構(gòu)造層次結(jié)構(gòu)抽象。比如,用Javascript動(dòng)態(tài)創(chuàng)建創(chuàng)建下面的HTML片段:
若采用Javascript的DOM API:
而下面流暢接口API則要有表現(xiàn)力得多:
和Javascript的標(biāo)準(zhǔn)DOM API相比,上面的API設(shè)計(jì)不再局限于孤立地看待某一個(gè)方法,而是考慮了它們?cè)诮鉀Q問(wèn)題時(shí)的組合使用,所以代碼的表現(xiàn)形式特別貼近問(wèn)題的本質(zhì)。這樣的代碼是自解釋的(self-explanatory)在可讀性方面要明顯勝于DOM API,這相當(dāng)于定義了一種類(lèi)似于HTML的內(nèi)部DSL,它擁有自己的語(yǔ)義和語(yǔ)法。需要特別注意的是,上面的層次結(jié)構(gòu)抽象和管道抽象有著本質(zhì)的不同,管道抽象的方法鏈上通常是同一對(duì)象的連續(xù)傳遞,而層次抽象中方法鏈上的對(duì)象卻在隨著層次的變化而變化。此為,我們可以把業(yè)務(wù)規(guī)則也表達(dá)在流暢接口中,比如上面的例子中,body()不能包含在div()返回的對(duì)象中,div().body()將拋出”body方法不存在”異常。(高端網(wǎng)站建設(shè))
4.異步抽象
流暢接口不僅可以構(gòu)造復(fù)雜的層次抽象,還可以用于構(gòu)造異步抽象。在基于回調(diào)機(jī)制的異步模式中,多個(gè)異步調(diào)用的同步和嵌套問(wèn)題是使用異步的難點(diǎn)所在。有時(shí)一個(gè)稍復(fù)雜的調(diào)用和同步關(guān)系會(huì)導(dǎo)致代碼充滿了復(fù)雜的同步檢查和層層回調(diào),難以理解和維護(hù)。這個(gè)問(wèn)題從本質(zhì)上講和上面HTML的例子一樣,是由于多數(shù)通用語(yǔ)言并未把異步作為基本元素/語(yǔ)義,許多異步實(shí)現(xiàn)模式是向語(yǔ)言的妥協(xié)。針對(duì)這個(gè)問(wèn)題,我用Javascript編寫(xiě)了一個(gè)基于流暢接口的異步DSL,示例代碼如下:
上面的代碼只是一句Javascript調(diào)用,但從另一個(gè)角度看它卻像一段描述異步調(diào)用的DSL程序。它通過(guò)流暢接口定義了begin when end的語(yǔ)法結(jié)構(gòu),begin后面跟的是啟動(dòng)異步調(diào)用的代碼;when后面是異步結(jié)果處理,可以選擇each_done, all_done, timeout中的一種或多種。而begin when end結(jié)構(gòu)本身是可以嵌套的,比如上面的代碼在timeout處理分支中就包含了另一個(gè)begin when end結(jié)構(gòu)。通過(guò)這個(gè)DSL,我們可以比基于回調(diào)的方式更好地表達(dá)異步調(diào)用的同步和嵌套關(guān)系。
上面介紹了用流暢接口構(gòu)造的4種典型抽象,出此之外還有很多其他的抽象和應(yīng)用場(chǎng)合,比如:不少單元測(cè)試框架就通過(guò)流暢接口定義了單元測(cè)試的DSL。雖然上面的例子以Javascript等動(dòng)態(tài)語(yǔ)言居多,但其實(shí)流暢接口所依賴的語(yǔ)法基礎(chǔ)并不苛刻,即使在Java這樣的靜態(tài)語(yǔ)言中,同樣可以輕松地使用。流暢接口不同于傳統(tǒng)的API設(shè)計(jì),理解和使用流暢接口關(guān)鍵是要突破語(yǔ)言抽象機(jī)制帶來(lái)的定勢(shì)思維,根據(jù)問(wèn)題域選取適當(dāng)?shù)某橄缶S度,利用語(yǔ)言的基本語(yǔ)法構(gòu)造領(lǐng)域特定的語(yǔ)義和語(yǔ)法。
? ? 現(xiàn)在很多企業(yè)都著手于做重慶seo排名,因?yàn)镾EO是獲取精準(zhǔn)流量比較穩(wěn)定且長(zhǎng)期發(fā)展好的方式之一,同時(shí)也能提升自身企業(yè)的品牌形象,因?yàn)镾EO本身就是基于用戶體驗(yàn)優(yōu)化而做的,因此做好SEO
網(wǎng)絡(luò)營(yíng)銷(xiāo)時(shí)代,軟文營(yíng)銷(xiāo)已成為企業(yè)傳播品牌、促進(jìn)訂單轉(zhuǎn)化的重要手段。不同于硬廣形式,軟文營(yíng)銷(xiāo)的精華就在于“軟”字,即廣告綿里藏針,要在能提供給用戶有價(jià)值內(nèi)容的基礎(chǔ)上進(jìn)行廣告
?文庫(kù)營(yíng)銷(xiāo)指的是借助一些文庫(kù)平臺(tái)上傳文檔,通過(guò)知識(shí)分享來(lái)做品牌營(yíng)銷(xiāo),目前常見(jiàn)的文庫(kù)平臺(tái)有百度文庫(kù)、360圖書(shū)館、道客巴巴、豆丁文庫(kù)等。文庫(kù)營(yíng)銷(xiāo)對(duì)文檔質(zhì)量要求較高,需要用戶自
網(wǎng)站對(duì)于很多的企業(yè)來(lái)說(shuō),不僅僅是業(yè)務(wù)的渠道拓寬,也是多一個(gè)網(wǎng)站推廣的途徑和客戶渠道等,很多的企業(yè)雖然有自己的網(wǎng)站,但是重視程度不夠,很多的企業(yè)都只依靠網(wǎng)站就能夠養(yǎng)活一個(gè)公
企業(yè)品牌推廣對(duì)于企業(yè)的生存來(lái)說(shuō)是極其重要的,如果沒(méi)有一個(gè)好的推銷(xiāo)渠道的話,可能就會(huì)讓自己的商品賣(mài)不出去。在新聞中總是看到哪兒有什么產(chǎn)品賣(mài)不出去了,形成滯銷(xiāo),讓個(gè)人或是企業(yè)
一方面,不同客戶的建站需求不同;另一方面,網(wǎng)站建設(shè)人員的技術(shù)水平高低不一;同時(shí),時(shí)效、地域因素也會(huì)對(duì)建站成本有所影響。所以網(wǎng)站建設(shè)的報(bào)價(jià)暫時(shí)沒(méi)有統(tǒng)一標(biāo)準(zhǔn),建設(shè)費(fèi)用更是從幾
最先剖析要散播的目的客戶人群的陋習(xí)與話動(dòng)范疇; 精心安排合乎網(wǎng)民愛(ài)好的論壇推廣時(shí)件或話動(dòng); 積淀論談?dòng)嘘P(guān)社交圈子資源,會(huì)對(duì)進(jìn)行論壇推廣出示挺大適用; 搞好數(shù)據(jù)分析,以知道論壇推廣的成功失敗之舉,加以改進(jìn)。
人們常常會(huì)遇上有些人做論壇推廣的當(dāng)時(shí),以便能短期內(nèi)內(nèi)看到作用,就在每個(gè)論談網(wǎng)站上注冊(cè)很多的id,花兩三天的時(shí)間就把各大論壇上貼的濃濃的全是軟廣,可是隔過(guò)段時(shí)間回來(lái)看,以前公布的全部貼子都被刪的干凈整潔,情況嚴(yán)重將會(huì)注冊(cè)的id也被封的干凈整潔,而針對(duì)這類(lèi)人只有說(shuō)成愛(ài)好者的論壇推廣技巧了。在進(jìn)到這一議論以前,人們看一下自身是不是存有那樣的難
在互聯(lián)網(wǎng)高速發(fā)展的今天,在眾多同行品牌的強(qiáng)勢(shì)競(jìng)爭(zhēng)下,新品牌想要打開(kāi)市場(chǎng)并不是一件容易的事兒。但不推廣就難以生存,那么我們應(yīng)該如何做好新品牌推廣,快速打開(kāi)市場(chǎng)?云裂變徐國(guó)
現(xiàn)在的推廣營(yíng)銷(xiāo)方式與以前比起來(lái)可是多了不少,放在以前也就是還沒(méi)有網(wǎng)絡(luò)的時(shí)侯,商品商家和生產(chǎn)廠家想要把自己生產(chǎn)的和自己銷(xiāo)售的產(chǎn)品或是商品成功推銷(xiāo)出去那可就得想想辦法了。比如
一個(gè)生產(chǎn)企業(yè)想要發(fā)展必須要?jiǎng)?chuàng)立自己的品牌,在人們購(gòu)買(mǎi)東西講究牌子的今天,如果你所生產(chǎn)的產(chǎn)品連個(gè)牌子都沒(méi)有,恐怕會(huì)無(wú)人問(wèn)津的。但是,有了品牌,對(duì)于小公司來(lái)說(shuō)若是得到消費(fèi)者的
說(shuō)起網(wǎng)絡(luò)營(yíng)銷(xiāo),讓人們想起了網(wǎng)上購(gòu)物,比如在剛過(guò)去的520,就是一波網(wǎng)購(gòu)的熱潮,各種打折促銷(xiāo)返利活動(dòng)讓許多人心動(dòng),看花了眼。又比如每年的雙11、在雙12的網(wǎng)上促銷(xiāo)活動(dòng)可謂是一年之內(nèi)
很多企業(yè)在官網(wǎng)搭建完成之后,便放任不管,既不更新內(nèi)容、也不做任何的排名優(yōu)化,最后網(wǎng)站沒(méi)排名、沒(méi)流量、沒(méi)訪客;即使有排名、有流量導(dǎo)入,但是跳出率極高,依然產(chǎn)生不了任何效益。
隨著網(wǎng)絡(luò)營(yíng)銷(xiāo)、全網(wǎng)覆蓋等口號(hào)喊得越來(lái)越響,現(xiàn)在有不少的企業(yè)做網(wǎng)絡(luò)營(yíng)銷(xiāo)都是被同行帶起來(lái)的,本質(zhì)上對(duì)網(wǎng)絡(luò)營(yíng)銷(xiāo)推廣的作用都了解不多。那么網(wǎng)絡(luò)推廣好在哪?為什么一定要做好網(wǎng)絡(luò)推廣
論壇推廣就是,企業(yè)利用論壇這種網(wǎng)絡(luò)交流的平臺(tái),通過(guò)文字、圖片、視頻等方式發(fā)布企業(yè)的產(chǎn)品和服務(wù)的信息,從而讓目標(biāo)客戶更加深刻地了解企業(yè)的產(chǎn)品和服務(wù)。最終達(dá)到企業(yè)宣傳企業(yè)的品牌、加深市場(chǎng)認(rèn)知度的網(wǎng)絡(luò)營(yíng)銷(xiāo)活動(dòng)。1、電子公告板(BBS)是虛擬網(wǎng)絡(luò)小區(qū)的要素方法,小量的交流信息全是歷經(jīng)BBS進(jìn)行的,vip歷經(jīng)貼到消息也許回應(yīng)消息抵達(dá)互相聯(lián)系的目地。一些簡(jiǎn)
受互聯(lián)網(wǎng)大趨勢(shì)影響,很多傳統(tǒng)企業(yè)紛紛著手布局網(wǎng)絡(luò)營(yíng)銷(xiāo),考慮到企業(yè)自身在營(yíng)銷(xiāo)經(jīng)驗(yàn)上有欠缺,不少老板會(huì)選擇找全網(wǎng)營(yíng)銷(xiāo)外包公司合作,這個(gè)時(shí)候就會(huì)出現(xiàn)很多選擇難題。比如說(shuō)找了10家
隨著社會(huì)的發(fā)展和人們消費(fèi)觀念的改變,現(xiàn)在人們的消費(fèi)已經(jīng)從單純的商品能使用消費(fèi)階段到了商品品牌消費(fèi)階段了。在進(jìn)行商品購(gòu)買(mǎi)時(shí)總是看商品的品牌,就拿一些年輕人來(lái)說(shuō)吧,對(duì)于耐克、
百科營(yíng)銷(xiāo)是一種以權(quán)威知識(shí)分享的形式對(duì)企業(yè)做有目的性的品牌宣傳,可以有效提高潛在客戶對(duì)企業(yè)品牌或產(chǎn)品服務(wù)的信任度及認(rèn)可度,最終達(dá)到提升企業(yè)品牌知名度美譽(yù)度的雙重作用。那么百
聯(lián)系電話:15314649589
添加微信:feishangdaren
工作時(shí)間:9:00-18:00 (工作日)
意見(jiàn)建議:1415941@qq.com