軟件架構做爲一個概念,體如今技術和業務兩個方面。java
從技術角度來講:軟件架構隨着技術的革新不斷地更新其內容,軟件架構創建於當前技術和一些基本原則c++
的基礎之上。web
先說一些基本原則:spring
分層原則:分層是爲了下降軟件深度複雜性而使用的關鍵思想,就像社會有了階級同樣,軟件有了層次結構。數據庫
模塊化原則:模塊化是化解軟件廣度複雜的必然手段,模塊化的目的就是讓軟件分工。編程
接口實現分離原則隨着軟件模塊化的不斷深刻改進,面向接口編程而不是面向實現編程可讓複雜度日趨增高的軟件下降模塊之間的耦合度,從而讓各模塊更輕鬆改進。從這個原則出發,軟件也從微觀進行了細緻的規範化。設計模式
還有兩個比較小但很重要的原則:session
細節隱藏原則很顯然把複雜問題簡化,把難看的細節隱去,能讓軟件結構更清晰。其實這個原則使用很廣泛,java/c++語言中的封裝原則以及設計模式中的Facade(外觀)模式就很能體現這個原則的精神。架構
依賴倒置原則隨着軟件結構的進一步發展,層與層之間、模塊與模塊之間的依賴逐漸加深,而層、模塊的動態可插拔要求不端增大。框架
依賴倒置原則可看視爲接口實現分離原則的深化,根據此原則的精神,軟件進入了工具時代。這個原則有點相似於知名的好萊塢法則:Don't call us, we'll call you。
以上這些原則奠基了咱們的軟件架構的價值指標。但軟件架構畢竟是創建在當前技術之上的。而每一代技術都有架構模式。過去的再也不說了,讓咱們如今就來看一下當前流行的技術,以及當前咱們能採用的架構。
由於面向對象是當前最流行開發技術,且設計模式的大量使用使面向對象的走向成熟,而數據庫是當前最有效的存儲結構、web界面是當前最流行的用戶接口,因此當前最典型的三層次架構就架構在以上幾項技術的基礎之上,用數據庫做存儲層、用面向對象來實現業務層、用web來做爲用戶接口層。
咱們從三層次架構談起:
由於面向對象技術和數據庫技術不適配,因此在標準三層次架構的基礎上,咱們增長了數據持久層,來管理O-R雙向映射,但目前一直沒有最理想的實現技術。cmp和entity bean技術由於其實現複雜,功能前景有限,已接近被淘汰的邊緣。JDO及hibernate做爲o-r映射的後期之秀,尤爲是hibernate,功能至關完備。推薦做爲持久層的首選
在業務層,由於當前業務日趨負載,且變更頻繁,因此咱們必須有足夠敏捷的技術來保證咱們的適應變化的能力,在標準j2ee系統中session bean負責業務處理,且有不錯的性能表現,但採用ejb系統對業務架構模式改變太大,且其複雜而昂貴,業務代碼移植性差。
而spring 做爲一個bean配置的輕量級架構,漂亮的IOC模式實現,對業務架構影響小,因此推薦做爲中間層業務框架。
在用戶結構層,雖然servlet/jsp/jstl/javaBean 可以實現MVC架構,但終究過於粗糙。struts對MVC架構的實現就比較完美,Taperstry也極好地實現MVC架構,且採用基於事件的方式,很是誘人,惜其不夠成熟,咱們仍舊推薦struts做爲用戶接口層基礎架構。