平時學習一些編程相關的技術,除了買書看之外就是通過搜索引擎找相關資料,例如從官網上獲取最新技術文檔(雖然看不懂英文,但是可以借助翻譯工具達到這個目的)或者是在CSDN、博客園、思否、infoQ等網站獲取一些編程語言/技術框架等知識。當然了,記得初學編程的時候,大多就是去w3cschool和菜鳥教程學習,一來覺得實用性相對比較強,二來比較系統。
這周一在極客時間買了一個知識付費專欄叫做《從0開始學架構》,初看感覺還不錯,於是接連下來看了8章,覺得還是有一定的收獲。
讀了《從0開始學架構》,對第一篇文章架構到底是什么頗有啟發,下面我給大家說說系統和子系統、架構和框架、模塊和組件。
一、系統和子系統
大家對於系統和子系統這個概念想必都有所了解。當然了,也有不少十分清楚的。
1.以人體為例,簡單闡述系統的含義
人體由運動系統、神經系統、內分泌系統、循環系統、呼吸系統、消化系統、泌尿系統、生殖系統八大系統構成。
你可以理解為人體是一個系統,而運動系統、神經系統、內分泌系統、循環系統、呼吸系統、消化系統、泌尿系統、生殖系統 可以理解為它的子系統。
2.再以我曾經在校開發的博客為例,闡述子系統的含義
我的博客就是一個系統,在這個系統里面,它有用戶系統、文章系統、留言系統、聊天系統等。而用戶系統、文章系統、留言系統、聊天系統則屬於子系統。
二、架構和框架
1.架構是什么(以軟件為例)
軟件架構(software architecture)是一系列相關的抽象模式,用於指導大型軟件系統各個方面的設計。 軟件架構是一個系統的草圖。軟件架構描述的對象是直接構成系統的抽象組件。各個組件之間的連接則明確和相對細致地描述組件之間的通訊。在實現階段,這些抽象組件被細化為實際的組件,比如具體某個類或者對象。在面向對象領域中,組件之間的連接通常用接口(計算機科學)來實現。 軟件體系結構是構建計算機軟件實踐的基礎。與建築師設定建築項目的設計原則和目標,作為繪圖員畫圖的基礎一樣,一個軟件架構師或者系統架構師陳述軟件構架以作為滿足不同客戶需求的實際系統設計方案的基礎。
也許用這么官方的語言來形容,你可能不會明白。
如果我換一種方式表達,你或許就懂了。
比如:
(1)從開發規范的看:
Java開發常說的三層架構(界面層、業務邏輯層、數據訪問層)或者是MVC模式開發。
(2)從物理部署的角度看:
可以用一張圖來表示,如下所示:

(3)再以我寫的書的思維導圖為例,如圖:

這也是一個架構,只不過是一本書的架構。
2.框架是什么
從建築學的角度看,框架(framework)是一個框子——指其約束性,也是一個架子——指其支撐性。是一個基本概念上的結構,用於去解決或者處理復雜的問題。
以Spring框架為例,為什么需要Spring框架,因為在沒有Spring之前,我們對於對象的管理方式,是通過手動New進行管理,而不是現在xml中bean的方式或者是Spring注解的方式來管理。
前人因為手動管理對象,吃盡了苦頭,所以開創了這一個偉大的框架,解放了Java程序員之前手動管理對象的痛苦。
任何一門技術誕生,都有其一定的必然性。比如現在有不少朋友公司沒有用傳統的SSH框架(Spring+Struts/Struts2+Hibernate),轉用SSM(Spring+SpringMVC+MyBatis)或者是覺得SSM(Spring+SpringMVC+MyBatis)有其局限性不符合業務的需要而轉用SpringBoot或SpringCloud。
三、模塊和組件
1.什么是模塊
百度百科對這個的定義是:
小結:
以上是我對於系統和子系統、架構和框架、模塊和組件的理解(當然了,里面有個人在實際開發中的看法,同時也包含引用官方的說辭等)。
最后,該專欄作者提出了一個思考題,題目如下:
問:你原來理解的架構是如何定義的?
答:我認為我原來的理解和該專欄作者大體上是一致的,不過也許有差異。我認為架構貫穿整個軟件開發生命周期(以瀑布模式為例,項目的可行性、需求分析、概要設計、詳細設計、編碼(代碼規范制定和核心代碼的編寫)、測試、部署等)。不僅僅包含這個還包含采用什么樣的技術及其業務是全部在一個項目上(單體應用)或者分開(多體應用)等等。
這些僅僅只是我個人的看法,歡迎有更好想法的朋友留言。
