框架是和架構比較相似的概念,而且兩者有著較強的關聯關係,所以在實際工作中,很多時候這兩個概念並不是分得那麼清晰,參考維基百科,框架的定義如下:
軟體框架(Software Framework)通常指的是為了實現某個業界標準或者完成特定基本任務的軟體元件規範,也指為了實現某某個軟體元件規範時,提供規範做要求之基礎功能的軟體產品
框架是元件規範,比如:MVC就是一種常見的開發規範,類似的有MVP、MVVM、J2EE等框架。
框架提供基礎功能的產品。比如:Spring MVC是MVC的開發框架,除了滿足MVC的規範,Spring提供了很多基礎功能來幫助我們實現功能,包括註解@Controller,Spring Security,Spring JPA等很多功能。
參考維基百科,這裡簡單的翻譯為軟體架構師指軟體系統的“基礎結構”,創造這些基礎結構的準則,以及對這些結構的描述。
單從定義的角度來看,框架和架構的區別還是比較明顯的,框架關注的是規範,架構關注的是結構。框架的英文是Framework ,架構的英文是Architecture。Spring MVC的英文文件標題是Web Framework,包目錄也有framework。
儘管如此,在實際工作中我們卻經常碰到一些似而非似的說法,比如:
我們的系統吃MVC架構
我們需要將Android App重構 MVP架構
我們的系統基於SHH框架開發
我們的系統是SHH的架構
以上幾種說法到底是對還是錯呢?其實以上說法都是對的,造成這種現象的根本原因隱藏於架構的定義中,關鍵字“基礎結構”,這個概念並沒有很明確的說清楚從什麼角度來講的,從不同的角度或者維度,可以將系統劃分為不同的結構,其實我們再“模組與元件”中的樣例已經暗含了這點,繼續以學生資訊管理系統為例。
從業務邏輯的角度分解,”學生資訊管理系統“的架構如下:
從物理部署的角度分解,“學生資訊管理系統”的架構如下:
從開發規範的角度分解,“學生資訊管理系統”可以採用標準的MVC來開發,因此架構又變成了MVC架構了,如下圖:
以上這些架構 ,都是學生資訊管理系統正確的架構,只是從不同的角度來分解而已。