SOA跟多層次架構都是程式開發的方法論.
SOA以服務為導向,以介面去規範,以訊息去傳遞.
以介面的好處是,你只要照我的介面(規範)做,裡面的實作我不管,比如輪胎工廠,他可以設計很多輪胎,但只要輪胎孔設計對了,我的車子就可以裝.
以訊息傳遞的方式,好處是可跨平台,跨語言,我的平台只要能讀文字檔,並能解析訊息就可以使用.
多層次架構,主要是做功能切割,讓專人專精用,比如房子在建構,就有水泥工,水電工...
我建議你先看看一樓的回答然後再看我寫的。我寫的是比較實際的比喻。
就拿一樓的車廠來說,假設你要弄一台車。車必須要有幾種特性才能開,例如上面說的輪胎、底盤、內裝。那就會有很多供應商做這些東西。供應商就是對等的軟體產品。
那換個角度,假設我是供應商,我不希望說我的產品只能用在單單本田豐田,當然還希望做到BMW,Benz,所有的老闆都希望我的客戶只要上門,就能找得到他們要的東西。BMW/Benz/本田/豐田這些都是平台,它們來採購我的組件包成產品推銷給客戶,換句話說,理想的軟體應該突破作業系統的枷鎖爭取其獲利最大化。那實行的方法就是我公司內部去雇專精於每種車結構的人才,在我公司產品外部只有簡單的幾個按鈕 (就是介面)。就像一樓說的那樣,我的客人只要照我的介面走就會得到一樣的服務。這就是層的概念。
同樣道理,假設更近一步,假設我是車商,那我的車子儀表版可能東採用一個廠西採用另一個廠,一個儀表版可能下面還有GPS系統,GPS系統下面還有地圖供應商 (NAVTAQ / MAPQUEST),每個都是一層一層架構,每個都要跨平台,並且跨平台勢在必行。唸商的開宗明義第一條就是獲利最大化,如果換平台會餓死的話,那當供應商的得確保那個平台夠大、堅硬似鐵、獨占生意而且沒有競爭者。這個在軟體業界幾乎是不太可能、會餓死的。
那多層的缺點?簡單呀,假設某大公司小職員今天在會議室發現了一包可疑的公事包,那職員報到科長,科長上報到所長,所長報到襄理,襄理報到經理,最後再反向抱回來只是叫個小小職員打電話報警叫拆彈組來看看。可能有問題的話早就爆掉了。所以多層架構要付出一點效能,也可能會一點彈性的代價。俗語說「要馬兒好又要馬兒不吃草」,情況不是沒有,比較少而已。
維護SOA成本嘛,這個見仁見智。端看用戶喜歡到處發展到處調試,還是發展一次用很久然後像航空母艦一樣固定幾年回港大修。