演练:有效减法设计,才能开放加法
前言:幅員愈大的國度、大數(shù)據(jù)應(yīng)用愈發(fā)達(dá)的國度,加法(設(shè)計(jì))的幅度就愈大。加法設(shè)計(jì)幅度愈大,系統(tǒng)的復(fù)雜性和差異化就愈顯著,此時(shí)標(biāo)準(zhǔn)化和統(tǒng)一化的呼聲就愈高。無論是標(biāo)準(zhǔn)化或統(tǒng)一化,都意味著加法設(shè)計(jì)的大量推進(jìn),導(dǎo)致系統(tǒng)復(fù)雜而難以駕馭;因而要求架構(gòu)師提出有效的減法設(shè)計(jì)方案,從復(fù)雜中設(shè)計(jì)出簡單,讓人們能從簡單中來掌控復(fù)雜。就架構(gòu)師而言,基于有效減法的架構(gòu)設(shè)計(jì),才能開放人人去做加法設(shè)計(jì)。
ee ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?ee
歡迎訪問 ==>高老師的博客網(wǎng)頁
高煥堂:MISOO(大數(shù)據(jù).大思考)聯(lián)盟.臺(tái)北中心和東京(日本)分社.總教練
EE ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?EE
有效減法設(shè)計(jì),才能開放加法本文:
幅員愈大的國度、大數(shù)據(jù)應(yīng)用愈發(fā)達(dá)的國度,加法(設(shè)計(jì))的幅度就愈大。加法設(shè)計(jì)幅度愈大,系統(tǒng)的復(fù)雜性和差異化就愈顯著,此時(shí)標(biāo)準(zhǔn)化和統(tǒng)一化的呼聲就愈高。無論是標(biāo)準(zhǔn)化或統(tǒng)一化,都意味著加法設(shè)計(jì)的大量推進(jìn),導(dǎo)致系統(tǒng)復(fù)雜而難以駕馭;因而要求架構(gòu)師提出有效的減法設(shè)計(jì)方案,從復(fù)雜中設(shè)計(jì)出簡單,讓人們能從簡單中來掌控復(fù)雜。就架構(gòu)師而言,基于有效減法的架構(gòu)設(shè)計(jì),才能開放人人去做加法設(shè)計(jì)。茲說明如下:
1)秦朝時(shí)代唯有書同文、車同軌的有效減法設(shè)計(jì),才能開放加法,整并六國成唯一個(gè)大國。
2)唐朝的詩叫做七言絕句,如“姑蘇城外寒山寺,夜半鐘聲到客船”,一首詩四個(gè)句子,每一個(gè)句子七個(gè)字,它的韻律有兩個(gè)“平平仄仄平平仄,仄仄平平仄仄平”,這是唐詩的主要造形(Form)。
3)秦朝的<書同文、車同軌>,加上唐朝的<詩同形>,有效的減法設(shè)計(jì),創(chuàng)造了大一統(tǒng)(加法)的輝煌國度。
4)君不見,在前面各步驟里,諸如:從復(fù)雜中設(shè)計(jì)出簡單、以需求檢驗(yàn)設(shè)計(jì)等都是基于有效的減法設(shè)計(jì),一方面給設(shè)備供貨商一個(gè)開放的加法設(shè)計(jì)空間;另一方面則讓用戶享受從簡單(來自減法設(shè)計(jì))中叫出復(fù)雜的滿足感。
5)此外,在前面各步驟里,諸如:EIT造形、通用性接口和軟件框架(框住某些東西)等,則是減法設(shè)計(jì)的實(shí)踐技術(shù);基于這些有效的減法設(shè)計(jì)途徑,才能大幅開放加法設(shè)計(jì);因而落實(shí)了:從簡單中掌握復(fù)雜。
演練:
前言:
? ? 于此,將聯(lián)合運(yùn)用前面所學(xué)到的思考技術(shù),以框架及其所含的EIT造形來實(shí)踐有效的減法設(shè)計(jì)。以EIT造形明確表述Socket軟件界面,藉由兩個(gè)<E&I>包容包容TCP/IP通信協(xié)議和硬件機(jī)制,實(shí)踐開放的加法設(shè)計(jì);讓通信協(xié)議和硬件機(jī)制都可以彈性抽換,架構(gòu)設(shè)計(jì)具有未來性。
? ? 由于EIT造形的主角就是接口<I>,架構(gòu)師就拿<I>來做為起點(diǎn)(Simple Design),設(shè)計(jì)出通用性<E&I>;其一方面容納客戶未來抉擇的改變,也就是包容未來<T>的多變化;另一方面,則包容未來TCP/IP通信協(xié)議的快速演變,或者換掉TCP/IP而改用其它通信協(xié)議。于是,架構(gòu)師的目前決策(決定如何定義接口)具有高度未來性了。接著,規(guī)劃測試機(jī)制,架構(gòu)師繼續(xù)兩個(gè)Mock<T>,做為贗品(Mock)來配合<E&I>來對通信協(xié)議進(jìn)行測試。
? ? 最后,迅速將接口(含<E&I>和<T>)落實(shí)為代碼(請看下述高老師寫的范例代碼),就能進(jìn)行實(shí)機(jī)測試(通信協(xié)議)了。(請看下述高老師寫的范例代碼)
? ? 在這些步驟里,諸如:EIT造形、通用性接口和軟件框架(框住某些東西)等,則是減法設(shè)計(jì)的實(shí)踐技術(shù)。基于這些有效的減法設(shè)計(jì)途徑,才能大幅開放加法設(shè)計(jì);一方面容納客戶未來抉擇的改變,也就是包容未來<T>的多變化;另一方面,則包容未來TCP/IP通信協(xié)議的快速演變。因而落實(shí)了:從簡單中掌握復(fù)雜。
Step-1. 基于第二步驟的第2種比喻:
? “架構(gòu)像一棵樹的樹干。由于樹根必須不斷成長,擁有隨環(huán)境而變動(dòng)的自由度和活力;才能有效吸收更多水分和養(yǎng)分。這項(xiàng)比喻讓架構(gòu)師關(guān)心底層模塊(Module)的變動(dòng)自由度。具有活力的樹根和樹干,才能有效之撐上層業(yè)務(wù)應(yīng)用的蓬勃發(fā)展。”如下圖:
Step-2.基于第一步驟的第2種抽象視角:
? “第二種抽象視角:架構(gòu)師基于<形與內(nèi)涵分離>的視角,由于不同內(nèi)涵之間的<變與不變分離>已經(jīng)由第一種視角所抽象了。這個(gè)視角可從內(nèi)涵中抽像出共同之形,也可以(無中生有地)創(chuàng)造一種造形(Form)來容納內(nèi)涵(包括變與不變部分)。由于我們常常拿船運(yùn)業(yè)的集裝箱(Container)來比喻<造形>;而拿形形色色的貨品來比喻其(集裝箱)內(nèi)涵(Content)。所以上述的第二種視角,又稱為<集裝箱式>抽象視角。”
? ? 從小的造形(如函數(shù)、類別、EIT等),到較大的造形(如模式、框架等),都是都是軟件人員常用的<集裝箱>,集裝箱的簡單造形是有效的減法設(shè)計(jì),其能容納天下萬物,實(shí)踐了開放的加法設(shè)計(jì)。例如,由軟件框架(Framework)來提供上層接口(API)和下層接口(PI)來實(shí)踐有效的減法設(shè)計(jì);其包容上層多樣化的應(yīng)用軟件,也包容底層硬件和通信機(jī)制的善變,則支持開放的加法設(shè)計(jì)。如今,無論是Android、iOS或云平臺(tái),幾乎都采取這種架構(gòu)。如下圖:
? ?例如,下圖里的”通信協(xié)議”就屬于樹根的部分,應(yīng)該開放加法;亦即我們必須包容它的不斷變化、更新與成長。
此時(shí),就能使用框架(有效減法)來包容通信協(xié)議的彈性變化(開放加法)。
Step-3.依循第七步驟:清晰而明確表述接口。其有效的做法是:擅用框架里的EIT造形(Form)。架構(gòu)師認(rèn)知到兩個(gè)接口的存在,如下圖:
? ? 藉由EIT造形<I>來明確地<定義>上圖里的接口,并藉由<E>和<T>來輔助其清晰表達(dá)接口的<涵意>。因此,使用兩個(gè)EIT造形分別來表述一個(gè)接口。
? ?藉由這兩個(gè)EIT造形將三項(xiàng)善變的內(nèi)涵分離開來,如下圖:
? ?其中,利用兩個(gè)<E>的聯(lián)合來包容樹根(通信協(xié)議內(nèi)涵)部分的加法設(shè)計(jì),如下圖:
? ? 然后,利用兩個(gè)<T>分別包容樹梢(智慧家庭和交通車聯(lián)網(wǎng)內(nèi)涵)部分的加法設(shè)計(jì),如下圖:
Step-4.依循第八步驟:盡快對接口進(jìn)行檢驗(yàn)和測試。上圖只是架構(gòu)師腦海里的設(shè)計(jì)而已,那么又如何確保它是可落地的呢?因此,需要盡快落實(shí)為代碼,并立即進(jìn)行檢驗(yàn)和測試。此時(shí)針對實(shí)際的<通信協(xié)議>來測試,例如上圖里采納軟件的Socket接口和 TCP/IP實(shí)體通信協(xié)議。如下圖:
? ?于是,就以EIT造形明確表述Socket軟件界面,如下圖:
? ?其中,藉由兩個(gè)<E&I>包容包容通信協(xié)議和硬件機(jī)制,讓通信協(xié)議和硬件機(jī)制都可以彈性抽換,架構(gòu)設(shè)計(jì)具有未來性。接著,就是規(guī)劃測試機(jī)制,準(zhǔn)備測試兩個(gè)<I>是否能有效包容通信協(xié)議的技術(shù)變遷;進(jìn)而對通信機(jī)制的能量進(jìn)行可靠性測試。于是,基于EIT造形是<基類/子類>的結(jié)構(gòu),<E>是基類(Super class),<T>是子類(Subclass),架構(gòu)師設(shè)計(jì)兩個(gè)<E&I>,并設(shè)計(jì)兩個(gè)Mock<T>。如下圖:
? ? 所謂Mock代碼,就意味著并沒有真正聯(lián)結(jié)到<智能家庭系統(tǒng)>和<交通車聯(lián)網(wǎng)>;而只是做個(gè)贗品(Mock)來配合<E&I>來進(jìn)行測試而已。[歡迎光臨高煥堂的博客首頁:http://www.cnblogs.com/myEIT/ ]。
Step-5.依循第九步驟:設(shè)計(jì)通用性接口,成為框架(Framework)核心要素。構(gòu)師想象EIT造形就是<基類/子類>的結(jié)構(gòu),<E>是基類(Super class),<T>是子類(Subclass),而<I>則實(shí)現(xiàn)為基類里的抽象函數(shù)(Abstractfunction)。于是,設(shè)計(jì)出兩個(gè)<I>接口,如下圖里的紅色框框部分:
? ?就能直接寫成代碼,進(jìn)行實(shí)機(jī)測試(通信協(xié)議)了。EIT造形的主角就是接口<I>,架構(gòu)師就拿<I>來做為起點(diǎn)(Simple Design),設(shè)計(jì)出通用性<E>和<I>來容納客戶未來抉擇的改變,也就是包容未來<T>的多變化。例如,包容未來TCP/IP通信協(xié)議的快速演變,或者換掉TCP/IP而改用其它通信協(xié)議。于是,架構(gòu)師的目前決策(決定如何定義接口)具有高度未來性了。
Step-6. 最后,請看高煥堂老師所撰寫的”Socket+EIT造形”范例代碼,如下:
本范例代碼摘自網(wǎng)頁:
http://bbs.51cto.com/thread-1085282-1.html
高老師將之改為EIT造形架構(gòu)。
請看代碼=> 客戶端的<EIT造形+ Socket代碼>
請看代碼=> 服務(wù)端的<EIT造形+ Socket代碼>
~ End ~
總結(jié)
以上是生活随笔為你收集整理的演练:有效减法设计,才能开放加法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 差点吓尿,手贱不要乱点support n
- 下一篇: centos6.4安装nagios—4.