前言
ARK ALL是一個在GitHub開源的軟件項目,項目地址在這裡,歡迎Star🌟!
這個頁面也許會充當一個博客,記錄從 2022年6月
起,ARK ALL在技術、運營上遇到的各種問題,記錄下我們的解決思路與方案。或許下文中會有錯漏和理解不正確的地方,歡迎各方大佬能來指正~
從頭開始
構思
回過頭來,我覺得開始一個項目之前,可以先想想包括但不限於這幾個問題:
- 我們要做什麼?
- 我們有什麼?
- 我們能得到什麼?
- 我們為什麼要這樣做?
- 我們要怎麼做?
- 我們要做到什麼地步/水平?
題外話,如果只有“我”,而沒有“們”,可能ARK ALL也不會出現。如果在讀這篇文章的你想參考ARK ALL的發展路線來鍛造自己的APP,試著先找到能陪你一直戰鬥的小夥伴們。
為什麼要設計ARK ALL?
內地大學985、211基本都有學長姐前輩做出了十分好用的,服務於同學們的校園APP。類似於查學分、課表,看新聞等等的操作,只需手機輕輕一點。在ARK ALL面世之前,澳大的校園服務隱藏得是很深的,新同學極難認識到校園服務的全貌。官方來製作這類型應用,需要極長的迭代週期,而且界面、功能性難以保證。既然這樣,不如我們也已學生的姿態自己做一個吧😜。
技術選型
初創作者中有Box大神坐鎮,早已摸清許多技術方案,讓我們少走許多彎路。如果在看這篇文章的你還不知道要怎麼選擇技術方案,先試試多查找Google、博客等網站,尋找最適合你目前水平和最適合你項目需求的技術方案,後續的開發能順暢不少。
下面說說我們在2022年6月時面對各種技術方案的選擇:
前端
基於澳大同學們對移動平台的依賴性(判斷來自於使用小程序版選咩課比使用網頁版的用戶要多得多!),首先考慮構建移動端操作界面。
非跨平台
- Java - Android
- Swift - iOS
- React / Vue / JS+HTML+CSS - Web
非跨平台方案可以針對原生平台進行特定適配,但代價是開發緩慢。小規模團隊的限制下,容易導致兩個平台之間進度、UI、功能不一致。測試時會耗費大量的時間精力。
跨平台
- React Native(JavaScript,簡稱JS)
- Flutter(Dart)
一次編寫,全平台通用。因初創時大部分作者對網頁更熟悉(JS編程不需要再學基礎),故沒有選擇Google的Flutter方案。
最終選擇了Meta的React Native方案,使用JSX語法。
後端
- Python - Django
- Java - SpringBoot
與前端一樣,選擇了初創作者們大部分都會用的Python作為首選語言,目的是能令其他人都更快上手(小規模團隊)。
開源代碼管理
使用Git進行代碼版本控制,選擇GitHub平台進行公開代碼託管,都是大家更常用的工具。
開發途中的問題
前端
在本文裡,把有關面向用戶操作、交互的設計、開發都歸屬於“前端”的工作。2022年ARK ALL的前端開發工作也算曆經曲折才最終得以實現,現在回頭看,也許良好的流程應該像是這樣:
- 學習基礎
- 動手嘗試
- 改進方案
- 重構思路
- 實現目標
放空自己,重新學習
初創之一的Y哥從前年輕氣盛,在網頁前端上只有開發微信小程序的經驗,卻直接開始進行第二步的動手嘗試,直接被同為JS語言的React Native框架打倒,處處碰壁,幾度想要換回原生框架(Android、iOS原生開發)。在Box的力勸下,約定一星期沉下心來重新學習React Native基礎,繼續嘗試使用React Native的跨平台方案。這個教程視頻也是ARK ALL今天能面世的救星,【2020前端全新项目】探花交友 React Native 跨端APP项目实战开发教程 ——【黑马程序员广州中心】。
需要注意視頻教程內使用了更老舊版本的React Native框架,可能有許多函數都在新版React Native包內被刪除,如果需要新版React Native特性,請直接尋找最近年份的教程學習。
React Native的版本號
截止 2023/11/02
,React Native最新的版本號是 0.72
,但也有足夠多的公司使用該框架,所以Meta應該是故意不放正常穩定版本號 1.0.0
的吧。
一般來說,"react-native"
包版本 >= 0.6
即可足夠應付絕大多數的需求,0.6+的版本支持第三方庫的自動鏈接(auto link),是0.6+最重要的功能更新,在此之前的React Native如果需要使用第三方庫,需要前往各個奇怪的路徑下修改奇怪的文件才能實現包的功能,十分麻煩。
React Native的類組件與函數組件
ARK ALL在參考視頻教程的基礎上(結合Google編程法),使用 "react": "17.0.2", "react-native": "0.68.2"
包版本進行構建。依照教程,絕大多數的頁面、功能都使用類組件(Class Component)編寫,小部分由Kalo編寫或特殊功能實現使用了函數組件(Function Component)進行編寫。函數組件是當前React和React Native官方推薦的使用方式,最新的特性也在函數組件上首先實現,有可能類組件會慢慢淘汰。但作為初學者來說,函數組件可能過於方便、簡潔,以至於學到 頁面的生命周期
之類的功能時,會因為看不懂各種奇妙的JS語法而愈發絕望。
類組件更重視代碼的結構,有部分強制的類型綁定,在引用、繼承等概念上都有強制的語法要求。但也正是因為存在這些特性,可以讓初學者更快理解React Native框架、React框架在運行邏輯上的特點,也是熟悉JS語法的大好時機。學通類組件語法後,轉到函數組件時會愈發覺得“React Native真好用!”。所以,對於初學者,依然推薦先學習類組件,再學習函數組件。
後端
前後端對接的問題。
文檔問題。