網頁

2018/3/3

Java 什麼是框架(Framework)

框架(Software Framework)是一種抽象程度高的半完成程式,框架本身無法自行運作,開發者必須將自己的程式搭配框架才是一個完整的應用程式。

框架提供可重複使用的結構及通用的函式及方法,和一般的工具包(toolkits)或函式庫(library)的差別在於框架提供一個緊密結合的程式結構,而不只是一個簡單的工具類別而已,這個程式結構可以重複使用在不同的應用程式的開發,所以開發者可利用框架提供的標準建構方式來加速應用程式的開發。

Java Web生態系中常見的框架有Spring,Spring MVC,Spring Boot,Struts 2,JSF,Hibernate,MyBatis,Play,GWT,Grails,Vaadin,ZK等。

在台灣2016年以前最常見的組合就是俗稱的SSH,也就是Spring, Struts 2(這個要死了), Hibernate(IBM老人愛用),通常在各大銀行,保險專案常會碰到。

再來就是Spring,Struts 2,MyBatis的組合,通常電信及政府專案常會碰到,且後端多半是Oracle。

不過從2016年開始Struts 2已經開始被Spring MVC取代了,而Spring MVC本身其實就包含了Spring(Core),應該說Spring MVC是搭建在Spring之上,所以普遍都是Spring MVC搭配Hibernate或MyBatis。

至於其他的框架我工作至今還沒碰到,不過在104上也可看到有些職務需要使用。

2018年後微服務架構流行起來,Spring Boot開始變成主流,其底層仍是Spring MVC,不過設定方式簡單許多。

2019年有越來越多公司採用Spring Cloud,Spring Data JPA等框架。但也有的公司因為效能問題(例如玉山銀行)DAO層不用ORM框架改回歸用單純的Spring JdbcTemplate。

除了以上,還有很多其他負責程式其他部分的框架,例如測試框架JUnit,Mockito,日誌框架Log4j2,驗證框架Spring Security。


剛入行時不知道是從哪位前輩聽來的解釋,我覺得解釋得不錯,框架如同字面所述就是一個框框(frame),代表每個開發者都必須在這框框下開發程式,除了開發速度比較快,且每個開發者的程式碼會比較一致,之後維護起來比較方便。至於缺點是一旦有超出框架的規格需求,改動起來就會比沒有框架的時候麻煩(如果框架沒有設計功能擴展介面的話),因為框架本身就是一種限制。


然後要如何選擇框架呢? 我在有兩年工作經驗時的面試有被問過這問題。以下是我認為的幾種選擇依據。

1.需求。框架是否能解決問題,或是說框架設計的目的是否符合你所面臨的情境。

2.流行。框架是否流行的意思是使用的人數/專案多不多。指標包括Stackoverflow上的問答數,Google Trends的關鍵字搜尋熱度,Github上的星星數。然後有個Awesome Java的網站可以對不同框架進行比較。冷門框架資源很少,沒人問問題。

3.文件。官方文件說明是否充分。包括API,各元件的功能說明等,越齊全越好。

4.教學。官方教學是否簡單易懂。最好包括hello world範例,應用專案範例,使用情境範例等。(React)

5.易學。框架的學習難度,包括學習曲線的斜度,從不熟到會用到精通的時間。(Vue)

6.可擴產。擴充性設計良好的框架才可讓你輕鬆擴充或修改某些元件的功能。

7.熟悉度。市場上、團隊成員越多會用的工程師越好。(Spring Boot, React、Vue、JQuery、JUnit)。

8.使用許可。框架的使用許可(license)是否包含你的的應用情況,例如能免費用於商業用途。

9.IDE支援。和IDE的整合度。框架若與IDE整合度高,提供一些額外的擴充套件開發上會容易很多。(React-VsCode、Spring Boot-IntelliJ IDEA)

10.效能。框架效能影響使用者體驗,也關乎於基礎設施的成本。

11.輕量。框架檔案大小影響應用程式載入、建構、啟動的速度。(看那肥美的Anuglar)

12.耦合。耦合高的框架要繼承一堆東西很難寫。(EJB、JSF)



參考:

沒有留言:

張貼留言