认识软件框架的设计原则-- 变与不变分离,创造简美之序
ee ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?ee
歡迎訪問 ==>高老師的博客網頁
高煥堂:MISOO(大數據.大思考)聯盟.臺北中心和東京(日本)分社.總教練
EE ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?EE
認識軟件框架(Framework)的設計原則n變與不變分離,創造簡美之序(Order)
by高煥堂2013/10/13
變與不變的分離(Separatecodethatchangesfromthecodethatdoesn’t)是設計應用和平臺框架之基本原則和手藝。大文豪蘇東坡在其赤壁賦中寫道:「蓋將自其變者而觀之,則天地曾不能以一瞬;自其不變者而觀之,則物與我皆無盡也,而又何羨乎?」。其說明了,人們可兼具多種觀點,可同時看出同一個系統中的變與不變之相貌。大科學家愛因斯坦在其相對論里也告訴我們:表面上看來相對的外貌下,可能蘊藏著不變的特性。例如,物質與能量從外貌看來是相對的(即變的),但其背后蘊含著某種不變。雖然蘇東坡和愛因斯坦所觀察的對象都是自然物,而不是像軟件、桌子、車子等人造物;但是在人們心靈深處,其心智的運用是一致的,當我們觀察人造物而能區分出變與不變的部份時,就能將之分離開來,而獲得優越之設計。
完美的變與不變分離,得到完美的接口(Interface),替將來強龍與地頭蛇雙方智慧的完美結合,建立了美好的基礎。接口是一種規范(Specification),表達兩種事物(或智慧)之間互相溝通、接合的一種共識(Agreement)。例如十字路口的「紅綠燈與斑馬線」,就是行人與汽車雙方的接口;當此接口發揮其權威時,整個社會呈現出井然有「序」(Order);反之,當接口失去權威時,整體系統就可能發生「失序」的狀態了。簡而言之,框架設計之原則,不外乎三個焦點:
l序----即簡單之序,或有機次序(Order)。
l容----以序來包容(Accommodate),有容乃大。
l易----復雜多變(Change),無盡繁榮。
包容繁雜多變是一件美的表現。序(即接口)是手段,包容繁雜才是(框架設計的)目標。序呈現美,繁雜帶來活潑之力。易經干卦:天的多變。坤掛:大地的繁雜。唯有多變和繁(即復雜)榮,才孕育出多采多姿的大自然。繁雜本身是好事,是生命力的表現。無論是.NET或Android的框架之美都來自于:包容復雜而呈現簡單的序,支持無盡繁榮。
因之,接口設計是締造系統整合架構之美的基礎;也是框架設計的核心。例如,.NET框架里提供了一個IEnumeraor接口。強龍將易變部份抽離了,而得到上圖里的接口,成為框架里的主要元素。強龍推出.NET框架之后,全球各區域的地頭蛇就能將其各自善變的部份,結合到框架里。例如,地頭蛇撰寫AP,以C#代碼表示如下:
classmyAP{
//………
int[]values=newint[]{1,2,3,4,5};
IEnumeratore=(IEnumerable)values).GetEnumerator();
while(e.MoveNext()){
Console.Write(e.Current.ToString()+"");
}
//………
}
其中,呈現了:
序:IEnumerator
變:values
再如,.NET框架里所供的StreamFactory基類:
publicclassabstractclassStreamFactory{
publicStreamCreateStream();
//……..
}
強龍推出.NET框架之后,全球各區域的地頭蛇就能將其各自善變的部份,結合到框架里。例如,地頭蛇撰寫應用子類如下:
publicclassmyStreamFactory:StreamFactory{
publicStreamCreateStream(){
//………
}}
接口(Interface)和基類(BaseClass)都是序之實踐手段,而應用子類則是繁榮多變的實踐手段。框架設計是基于特定領域的知識(DomainKnowledge)。然而知識有許多種,其變化的來源和時間經常是不一致的。例如,一家餐廳,其基本菜色、材料大多能天天相同,其知識并不會隨著客人的不同而改變,我們稱它為不變的。但是有些酸、甜程度等知識,就隨著客人而異了,而且在時間上必須等到客人來到時才知道,我們稱它為會變的。所以,有關于客人的酸、甜程度等知識,與基本菜色、材料等知識的變化上是不一致的,其獲得的時間點也是不一致的。我們必須將兩者分離開來,并將其不變部份納入框架里,則應用框架就于焉而成了。
在進行「變與不變之分離」時,必須秉持「知之為知之,不知為不知」的原則,明確敘述那些是已知的知識、那些是未知的知識、那些是善變的知識。設計師就依據這些敘述而決定那些部份應該留空白(就如杯子內挖空才能裝飲料),那些類應該分離,并定義接口,讓它們未來能隨時組合起來。
其實,這種設計原則也蠻簡單的,在數千年前的老子已經使用過了,他曾說:畚箕中間必須「挖空」才有用!雖然簡單,卻是千年不朽的設計手藝。而「變與不變之分離」就是這個簡單的設計原則罷了。
~~老子.道德經:有之以為利,無之以為用~~
說明:畚箕必須先挖空(無之)才能拿來裝東西(有之);
所以先無之而后始能有之。
挖出來的會變部份成為元素,但有趣的是:挖出之后留下的空間才是重點,它能容納原來被挖出的元素,也能容納未來的其它元素。依據老子的思維,這個挖空的喜帖組件看似「無用」,其實是「為用大矣」!◆
DDD&& 參考文章(請點選) &&DDDDDDDDDDDDDDDDDDDDDDDDDDDDD DDDDDDDDDDDDDDDDD
1. 智能家庭的軟硬整合<A段架構設計>_案例解說
2. <家庭物聯網>與<移動互聯網>銜接的案例&實踐代碼
3. 智能&大數據時代,架構師思維的十個步驟和演練
4. <基于框架(Framework)的平臺開發技>百篇文章
5. 高煥堂的9本eBooks(可下載)
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
轉載于:https://blog.51cto.com/8204129/1324156
總結
以上是生活随笔為你收集整理的认识软件框架的设计原则-- 变与不变分离,创造简美之序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何申请一份iOS工作
- 下一篇: Redis源码学习-MasterSlav