作為一個原生Android開發,一路走來經歷了
Java 、 Kotlin
的洗禮;在*“原生要涼”的氛圍下學習Cordova
、ReactNative
、Weex
、Flutter
等跨平臺框架;之後又在“大前端”的口號下延伸到React
、Vue
等前端框架的學習;最終面對“全棧”*的誘惑,又擼起了SpringBoot
的 Java web 開發。 具體可見 Android 程式設計師的 2018總結
Android 開發作為“安身立命”的資本,在面對如今“移動要涼”的氛圍,我們在沉住氣 “縱向進修” 的同時,有時也希望 橫向擴充 自身的能力,而 Android 開發在這一方面有著先天的優勢,Java 和良好的開放氛圍給予了我們更多可能。
本文主要講述本人在 Java Web 開發上的學習選擇,希望能在一定某些方面幫到大家,這裡也並不是安利轉型,“全棧”並不是一個絕對的褒義詞,每個人都對“全棧”的範疇有著不一樣的定義。但是瞭解過後, 至少能在需求上和“後臺”發生爭執時懟得更有力不是???
一、背景
瞭解下有利於消化
這裡快速說下 Java Web 開發的背景,作為Android開發,在學習後臺開發上無疑用 Java 做敲門磚是成本較低的選擇,Java Web 與 Android 之間的相互轉崗也屢見不鮮。
起初的 Java Web 開發並沒有明確的前後端之分,如今也依舊存在前後端不分離的專案,只是隨著時間發展,從專案管理維護、開發職責和效率的考慮下,慢慢的有了前後端職責之分。
對於Android開發而言,後端通俗而言就是寫restful介面的。
Java Web 大致發展歷程如下圖,從 Struts2
開始的 MVC 模式,再到 Spring
的 控制反轉(IOC)和切面程式設計(AOP) ,再到 SpringBoot 全家桶,其門檻也在逐步降低。對於這個歷程感興趣的可以自行了解下,後續主要推崇Spring
大家庭。
事實上對於 Android 開發而言, Spring
並不會是一個陌生的概念,其 核心理念之一 IOC (也稱依賴注入) 和使用邏輯與 Dagger
如出一轍,所以在入門時 《Spring實戰(第4版)》 這本書相信會 Android 開發者是不錯的選擇。
二、框架選擇
Spring Boot 全家桶快到碗裡來
Java Web 的世界同 Android 一樣存在各類框架,也許一些前輩們都建議不要從學習框架開始,但是我個人而言更習慣從實用性切入: 選擇一個主流框架學習,挑一個開源專案對照實踐,之後完成一個小專案躺坑,最後才開始深入去學習感興趣的點。 畢竟萬事開頭難,如果一開始太過枯燥,難免讓人“把持不住”。
在 Spring 斷斷續續的學習中,主要接觸了 SSH
(曾經) 和 SSM
(如今) 兩種組合開發框架,至於怎麼選擇,你懂的。
- SSH:Struts2 做控制器(controller) + Spring 管理元件 + Hibernate 負責資料庫。
- SSM: SpringMVC 做控制器(controller) + Spring 管理元件 + MyBatis 負責資料庫。
作為 Android 開發者,如果你使用過或瞭解過 Dagger ,那麼理解和使用 Spring
並不難。通過各類註解如 @Contorller
、@Service
、@Configuration
等去標明類的用途,通過 @Autowired
去注入使用的方式,相信會讓你倍感親切。
如果說 Spring
是類似 Dagger
的注入和管理實體的容器框架,那麼SpringMVC
就是基於 Spring
功能之上新增的 Web 框架。
對於 Android 開發而言,MVC
肯定是不會陌生的,實際上後臺開發人員通常就是寫個Controller
提供個 Model
給你。而 Hibernate
和 MyBatis
都是持久層框架,屬於能方便使用如 MySql 等資料庫的 ORM 框架。
如果說 Spring
和 SpringMVC
是 Android 開發者較友好的選擇,那麼 Spring Boot
則是你的“綠色通道”。 Spring Boot
又稱之為全家桶,因為它集齊了各類常用的開發框架,同時降低了 Spring 開發的門檻,更是簡化了各種配置過程,而且 Jetbrains 大家庭支援它!
所以現階段而言,個人認為 Spring
、SpringMVC
、SpringBoot
是 Android 開發者學習入門 Java Web 的不錯選擇。
先理解 Spring 設計模式,再學習 SpringMVC Service/Controller 等的開發,最後使用 SpringBoot 快速搭建 Web 專案。 當前這只是一個開始,後續的路諸如還有:
- 資料庫的學習:mysql、mongodb
- 持久層框架的學習:hibernate 、mybatis
- 快取框架的學習:ehcache、redis
- 安全許可權框架的學習:shiro、spring security
- 分散式框架的學習:dubbo、spring cloud
- 代理服務:Nginx
畢竟學無止境,有一技旁身,至少不至於孤陋寡聞。
三、開發工具選擇
“不用IDE,文字編輯器” 一直是大神的標配,但是“懶惰”使我進步,所以一款好的 IDE 可以讓人更舒服的過度到入門。
Android 開發在 IDE 在選擇上其實也很有優勢,因為 Android Studio 本來就是基於 Jetbrains 的 IDEA Commutity Edition 二次開發的。
都是一家子,選擇 Jetbrains 全家桶中的 IntelliJ IDEA 作為開發工具,對於 Android 開發者而言,從快捷鍵、介面UI、除錯方式等都可以實現“無縫切換”和降低了學習成本。至於 eclipse 麼,反正它已經沒有出現在我視野中很久很久很久。
同時,IntelliJ IDEA 對於 SpringBoot 和 Maven 的支援也同樣優秀哦。
四、最後
本人在學習新的東西時,也經常面臨一些選擇的問題,特別是在想學 Web 服務開發時,經歷多年的發展後臺服務生態百花齊放:php、java、golang、phython、nodejs 等容易讓人在臨門一腳時猶豫不決。(畢竟 php 天下第一)
除開業務需求和環境限制,我個人是比較推崇低成本擴充的。 萬事開頭難,“三過門而不入”的堅持並不是每個人都有,而能把現階段所掌握的去衍生去其他的能力,是比較穩定的技術增值。“貪多嚼不爛”,先有深度,再有寬度,望共勉!
本文或許不是什麼乾貨,更多是提供 Android 開發者,在學習 web 開發時的一種選擇建議。 有備無患,畢竟不知道何時就用上了。