前幾天我在幫我顧問公司的員工上課,剛好講題就是 Software Architecture,我在課堂上順便問了一個小問題:Framework 和 Architecture 有什麼不同?結果學員多數都答不出來,因為那間公司都把 Framework 叫做架構,但光是架構這個詞在很多技術用語上都會被套到,那麼,Framework 和 Architecture 到底哪裡不同?
前幾天我在幫我顧問公司的員工上課,剛好講題就是 Software Architecture,我在課堂上順便問了一個小問題:Framework 和 Architecture 有什麼不同?結果學員多數都答不出來,因為那間公司都把 Framework 叫做架構,但光是架構這個詞在很多技術用語上都會被套到,像網站架構,其實是 Site Map 或 Site Layout 或是 Site Structure,和真正的 architecture 根本沒有關係,只是用語上好用而已 ... 套句 Bill 大的話:資訊業的解釋名詞真的很難,因為大家每天都有新名詞會發明出來。
昨天我在噗浪中發問:你認為 Framework 和 Architecture 有什麼不同?結果出現了兩種不同的答案,有人認為 Framework 可以 cover Architecture,但又有人認為 Architecture 的位階比 Framework 要高,其實,Architecture 這個字是建築之意,也就是由沒有建築物到完成的過程,以及如何將建築生產出來的方法(即建築學),它是一種 Guideline,又稱藍圖(blueprint),它指導了建築物應該要怎麼蓋,牆要幾公分高,樑柱的位置,地基的面積,基礎要打在哪,高度要多高,房間要多大等等都有。但它卻沒有叫你要用什麼方式(工法)蓋。
軟體也是一樣,所謂的軟體架構(Software Architecture)是一種軟體的藍圖,它告訴你這個軟體的結構,功能,介面,用法,與其他系統的構連以及資料交換等等規範,但它並沒有叫你要用什麼方式實作,因此軟體架構通常會產生文件,圖樣,原型以及規格等,就是沒有可用的程式碼,因為那不是軟體架構應該有的東西,就像蓋房子時是給你藍圖,而不是一幢蓋好的房子。
相對的,軟體框架(Framework) 的英文名稱原意是骨架,拆開來看是 "Frame"-"work",表示是在一個既定的框架下可以做的工作,也就是說,這是一個已經成形的方法,而且有程式碼實體(例如鋼構工法也是要有鋼材才能做),並且會告訴你要如何使用它(即 Framework Documentation,MSDN Library 即為一最佳例子),但怎麼使用它是程式設計師(也就是監工)的工作,與 Framework 無關。
Framework 和 Architecture 經常被用來叫做架構,其實它們兩個本質上的差異是很大的,Framework 只會告訴你怎麼用,但不會告訴你怎麼實作出特定功能,而 Architecture 是告訴你某些功能的走向以及方針,但卻沒有程式碼給你,所以 Architecture 通常會需要 Framework 來實現,而 Framework 也需要 Architecture 才能發揮其所長。