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 ~