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