架構是什麼?
架構是一個約定,一個規則,一個大家都懂得遵守的共識。那這是什麼樣的約定、什麼樣的規則、什麼樣的共識呢?
我以包為例,我經常出差,雙肩揹包裡裝了不少東西。膝上型電腦、電源、2個上網路卡、滑鼠、USB線、一盒大的名片、一盒小的名片、口香糖、Mini-DisplayPort轉VGA介面、U盤、幾根筆、小螺絲刀、洗漱用品、乾淨衣服、襪子、香水、老婆給我帶的抹臉膏(她嫌我最近累,臉有點黃)、錢包、Token卡、耳機、紙巾、USB線、U盤等。這個包有很多格子,最外面的格子我放常用的,比如筆、紙、一盒小的名片等;中間的格子一般放的是衣服、襪子、洗漱用品、香水等;靠背的那個大格子放了膝上型電腦,和膝上型電腦相近的小格子放的是兩個上網路卡、Mini-DisplayPort轉VGA介面、大盒名片、記事本,和膝上型電腦相近的大格子放的是電源、滑鼠、口香糖等。
我閉著眼睛都可以將我的東西從包裡掏出來,閉著眼睛都可以將東西塞到包裡!但是,非常不幸的是,一旦我老婆整理過我的包,那我就很慘了,老是因為找不到東西而變得抓狂!更不幸的,要是我那個不到兩歲的“小可愛”翻過,就更不得了了。
這個包就是我放所有物品的“架構”,每一個東西放置的位置就是我的“約定、規則、共識”。倘若我老婆也知道我的“架構”、我的“約定、規則、共識”,那麼不管她怎麼動我的包,我都照樣能夠輕易的拿東西或者放東西。進一步,如果我的同事也知道我的“架構”,知道我的“約定、規則、共識”,那麼他們什麼時候動我的包,我也毫無所知!
恍然大悟!我前一個公司Sybase,所有的產品都是基於一個統一的外掛開發平臺,每一個產品都是一個外掛,每一個外掛都按照名字約定好了BO(Controller)、GO(View)、SO(Model/DataAccessor),定義好PropertyPage、PropertyDialog、Wizard。我記得當我確定工作角色後,我就拿到一個開發文件,裡面描述了這些目錄、名字的規則,有UI文字陳述規則、文字的大小規則等,一週內我就能夠修Bug,一個月之後我就能做New Feature,然而,我此時對我們的平臺、框架依然一無所知。過了1年後,產品依然遵守約定不斷進行改進,在維護過程中,我們竟然絲毫沒有感覺到累。基於這樣的框架做產品,我發現不管是什麼人,開發的樣式都完全一致。我以前竟然絲毫沒有覺得驚訝!
在公司混了兩年之後,有點成為老鳥了,還很得瑟的整了一個《Flex UI Composition SDK》,就是基於Flex的介面組合元件,搞的老漂亮了,程式碼寫的好看,文件搞的正式,而且這個小SDK功能強大且很靈活。老大很給面子,讓我給美國的架構組Show一下。我很激情的在半夜裡用電話會議和那幫很牛的架構師、專家級工程師展示我的SDK。完事後,印象很深刻,一個很資深的老外架構師提了一句,他覺得這個SDK有點複雜。
以前我不太理解為什麼他會說複雜。原因很簡單,以他的技術,使用這個SDK我覺得沒有太大的問題,只要稍稍學習就好了。後來,我終於慢慢想通了。這個SDK不好的地方在於太靈活了,靈活到無法構建一個統一標準的、容易讓人遵守的“約定、規則、共識”。在沒有“共識”的支撐下,這樣的系統經過若干人維護後,那絕對玩完了,成“萬人坑”了,誰改程式碼就坑誰,以後什麼事情都有可能發生的。
於是,我有一點點想明白了,架構就是這麼的一個共識。當共識普遍傳遞的時候,架構就消失了,開發好的軟體就成為了習慣。
這就是為什麼有高人提出“消滅架構”!哦,天啊,這幫人太變態了,他們這麼早就想通了!
第一步:使用外掛架構
第二步:定製統一的介面框架
這個介面框架如下所示。
該框架約定了統一的介面樣式,比如按鈕、磁貼、標籤頁、導航條、進度條、Form等等。
第三步:定製外掛的統一架構
每一個外掛都建立5個目錄:Controllers、DataAccessors、Models、ViewModels、Views,如下所示。每一個目錄存放的程式碼通過名字都知道是什麼了。
第四步:定製開發模板(昇華,該步驟不是必須的,是為了更好提高易用性,讓傻瓜也可以開發外掛,僅供參考)
在主程式模板可以保護統一資料訪問、統一安全管理等功能模組。
哈哈,這個方法終於能使新團隊開發出具有較為統一風格、較高質量的軟體產品了!這時候,你會發現,所有人都不需要關心架構了,我們只有共識。
這樣,架構被成功消滅了,架構的目標就是消滅架構!但是,如果架構被消滅了,架構師不也被消滅了嗎?這個搞笑的問題留給讀者吧。
附:關於架構的官方定義,建議參考《Java應用架構設計》,該書很經典。本文關於“架構就是共識、消滅架構”說法,來自於該書。我不是“架構就是共識、消滅架構”說法的發明者。
線上演示 /原始碼下載
1、具有1-5工作經驗的,面對目前流行的技術不知從何下手,需要突破技術瓶頸的可以加群。
2、在公司待久了,過得很安逸,但跳槽時面試碰壁。需要在短時間內進修、跳槽拿高薪的可以加群。
3、如果沒有工作經驗,但基礎非常紮實,對java工作機制,常用設計思想,常用java開發框架掌握熟練的,可以加群。
4、覺得自己很牛B,一般需求都能搞定。但是所學的知識點沒有系統化,很難在技術領域繼續突破的可以加群。
5群號:高階架構群 282711949備註好資訊!