本文探討了全棧移動(dòng)開發(fā)環(huán)境的功能,并介紹了若干個(gè)核心的原生和混合移動(dòng)備選方案以及影響每個(gè)平臺(tái)選擇的因素。 首先,我們來弄清楚一些概念??吹?em>全棧一詞時(shí),我們很容易聯(lián)想到一個(gè)人幾乎樣樣精通,既具備系統(tǒng)管理員的技能,也具備數(shù)據(jù)庫工程師的技能。在某些特殊情況下,可能剛好需要全棧開發(fā)者。通常全棧開發(fā)者既熟悉前端框架、后端數(shù)據(jù)庫和服務(wù)的業(yè)務(wù)邏輯和流程,也能自動(dòng)創(chuàng)建、編輯和配置應(yīng)用程序和數(shù)據(jù)。他們制作和編輯媒體的能力相對較弱,因?yàn)槊襟w需要的是展示和交互。 全棧移動(dòng)應(yīng)用程序開發(fā)是銜接內(nèi)容與技術(shù)的紐帶?,F(xiàn)在,全球有數(shù)十億人使用智能手機(jī)和平板電腦,這些智能手機(jī)和平板電腦便構(gòu)成了全棧應(yīng)用程序的客戶端。服務(wù)器端通常是微服務(wù)、認(rèn)證服務(wù)器和 CDN 資產(chǎn)(每次打開應(yīng)用程序時(shí)在運(yùn)行時(shí)進(jìn)行編譯)的分布式集合。這兩者是通過流程來銜接的,這些流程包括測試、持續(xù)集成和持續(xù)部署、擴(kuò)展和容器化以及專有設(shè)備要求。 設(shè)備正在決定媒體的展示和使用方式。在許多情況下,與傳統(tǒng)電視和廣播相比,人們更傾向在手持式設(shè)備上觀看、閱讀或收聽新聞與娛樂資訊。電視本身就是開發(fā)者的設(shè)備目標(biāo)。 作為技術(shù)的紐帶,移動(dòng)設(shè)備推動(dòng)了 Apple、Google、Facebook 和 Microsoft? 等大型跨國公司的競爭范式。這些商業(yè)巨頭都對搶占設(shè)備受眾有極大的興趣。雖然 Apple 和 Google 分別代表 iOS 和 Android 兩大品牌陣營,但您可以使用后兩者公司的 React Native(Facebook)和 Xamarin(Microsoft?)產(chǎn)品來開發(fā)在設(shè)計(jì)和功能上越來越本土化的應(yīng)用程序。許多科技公司正在竭盡全力地在這個(gè)市場中保持持續(xù)增長,并且正在積極尋找最先進(jìn)且最有前景的技術(shù),幫助實(shí)現(xiàn)其提供最佳服務(wù)的愿景。 全棧移動(dòng)開發(fā)要成為全棧移動(dòng)開發(fā)者,您需要對應(yīng)用開發(fā)的全局有一個(gè)了解。 這包括:
如果必須要選擇全棧開發(fā)者具備的最可取特質(zhì),那么將會(huì)是領(lǐng)導(dǎo)項(xiàng)目并有效溝通易于理解的流程的能力。全棧開發(fā)者必須能夠設(shè)置代碼庫、項(xiàng)目管理工具(例如 Jira)、通信應(yīng)用(例如 Slack),并且必須熟悉各種客戶機(jī)框架、數(shù)據(jù)庫、API 和微服務(wù)??偠灾?,他們必須能夠支持和影響項(xiàng)目管理決策。全棧開發(fā)者除了具備客戶機(jī)和服務(wù)器堆棧能力外,還與應(yīng)用程序的架構(gòu)師或項(xiàng)目經(jīng)理共享許多特質(zhì)。 全棧移動(dòng)開發(fā)的客戶端從廣義上講,客戶端可分為原生和混合兩座孤島。通常,當(dāng)需要更高的性能時(shí),您希望盡可能都是原生客戶端?;旌祥_發(fā)的優(yōu)勢往往來自使用熟悉的 Web 工具和構(gòu)造。開發(fā)者通常需要選擇是從頭開始學(xué)習(xí)并使用一種語言,例如 Swift 或 Kotlin,還是沿用已經(jīng)熟悉的語言(例如 JavaScript 和 CSS)?;旌祥_發(fā)的另一個(gè)優(yōu)勢是,可能會(huì)對多臺(tái)設(shè)備使用同一組組件和樣式。每臺(tái)設(shè)備都有自己特有的外觀品質(zhì),但與原生應(yīng)用程序不同,這些品質(zhì)可能來自同一個(gè)來源。 閱讀"在原生和跨平臺(tái)移動(dòng)前端編程框架之間進(jìn)行選擇(英文)",以深入了解全棧移動(dòng)開發(fā)的客戶端。 全棧移動(dòng)開發(fā)的服務(wù)器端服務(wù)器端的移動(dòng)應(yīng)用開發(fā)很大程度上類似于桌面或 Web 服務(wù)器應(yīng)用程序開發(fā)。不同之處包括:在設(shè)備上安裝新應(yīng)用程序(即 Apple Store 或 Google Play)的方式受限制;服務(wù)器端功能都綁定到同一操作系統(tǒng),以及可使用特定服務(wù)(例如 Meteor 或 Ionic)更新設(shè)備應(yīng)用程序的方式有細(xì)微差別。相似之處包括:通過 API 調(diào)用與數(shù)據(jù)交互的方式;通過版本控制更新內(nèi)容,以及確??蓴U(kuò)展性和持久性。在整個(gè)項(xiàng)目中,全棧開發(fā)者通常會(huì)研究如何在構(gòu)成應(yīng)用程序服務(wù)器端的各個(gè)微服務(wù)層之間實(shí)現(xiàn)處理負(fù)載、緩存負(fù)載和其他任務(wù)負(fù)載的最佳平衡。 請閱讀"使用移動(dòng)后端技術(shù)開發(fā)全棧移動(dòng)應(yīng)用(英文)",以深入了解全棧移動(dòng)開發(fā)的服務(wù)器端。 全棧移動(dòng)開發(fā)環(huán)境的特性全棧移動(dòng)應(yīng)用開發(fā)者可能需要確保其生產(chǎn)環(huán)境具備以下特性。與后端或前端問題相比,全棧開發(fā)者可能更熟悉這些特性。
選擇移動(dòng)開發(fā)框架選擇適當(dāng)?shù)墓ぞ呓M合來構(gòu)建移動(dòng)應(yīng)用取決于多個(gè)條件,包括:
競爭需求影響軟件選擇的程度取決于多種因素,包括時(shí)間、預(yù)算和人群目標(biāo)。通常都沒有最佳答案,但是出于某些原因,對于特定的應(yīng)用程序和目標(biāo)受眾來說,某些方法比其他方法更有意義。 表 1 展示移動(dòng)應(yīng)用程序開發(fā)的六種常用工具。
乍看起來,您已經(jīng)可以確定,如果要包含 iOS 目標(biāo)群體,那么您需要 Apple ID 以及關(guān)聯(lián)帳戶并安裝 XCode。對于 Android,雖然此處不明確,但是通過 Android Studio 可最輕松地訪問設(shè)備模擬器。這通常表明最快速的應(yīng)用是采用 Apple 或 Google 支持的軟件所編寫。其他四種工具的較大優(yōu)勢來自將常用代碼集成到原生應(yīng)用中,這意味著 Web 開發(fā)者會(huì)由于生產(chǎn)期間的學(xué)習(xí)曲線損失較少時(shí)間。 IDE、CLI 和包裝器集成開發(fā)環(huán)境(IDE)的普及時(shí)間超過因特網(wǎng)。命令行界面(CLI)雖然早于 IDE,但是通過開源經(jīng)歷了重生,接納 CLI 作為如今創(chuàng)建應(yīng)用的最典型方式。移動(dòng)應(yīng)用程序引入了包裝器技術(shù)的概念:類似 Web頁面上的某個(gè)插件,與其周圍的瀏覽器包裝器進(jìn)行通信。 例如,在 React 中構(gòu)建應(yīng)用程序時(shí),在發(fā)布該應(yīng)用程序之前會(huì)進(jìn)行轉(zhuǎn)換。在該過程中,代碼按照 Webpack 配置文件中的定義,轉(zhuǎn)換為在所有目標(biāo)設(shè)備和瀏覽器中都適用的內(nèi)容。如果在設(shè)備的包裝技術(shù)中融入此過程,那么將涉及類似于將 Babel 或 Typescript 執(zhí)行的轉(zhuǎn)換應(yīng)用于客戶機(jī)應(yīng)用程序整體的操作。包裝器是與其自身(其父代)以及其子代通信的 shell(命令解析器)。 幾種經(jīng)過審核的軟件包括 IDE、版本控制、部署和 CLI 配套軟件;其他軟件需要包裝技術(shù)才能編輯移動(dòng)應(yīng)用。例如,Ionic 通常在 Cordova 包裝器中進(jìn)行編寫,Xamarin 和 React 也可以如此。在 Mac 上使用 XCode 編寫 iOS 非常重要。它是用于為 Apple 設(shè)備開發(fā)原生應(yīng)用程序的軟件的唯一必備項(xiàng)。Apache Cordova 因?yàn)槟軌驅(qū)С龅綖g覽器而脫穎而出。對于希望具有單個(gè)適用于移動(dòng) Web 和設(shè)備應(yīng)用程序的代碼庫的人員而言,Apache Cordova 由于針對大多數(shù)平臺(tái)而保持位列首選。請參閱表 2 以獲取每個(gè)移動(dòng)開發(fā)框架的 IDE、CLI、操作系統(tǒng)和語言比較。
在編寫本文時(shí)(2018 年底),Swift 4 是用于編寫 XCode iOS 應(yīng)用程序的最新且最常用的語言。對于 Android Studio,Kotlin 語言逐漸超越了 Java 語言。在其余四種工具中,Xamarin 在 C# 和 .net 環(huán)境中獨(dú)立使用,而其他工具更適合混合開發(fā)平臺(tái)。Ionic 是從 Angular 根構(gòu)建的,React Native 是從 React 根構(gòu)建的,而 Apache Cordova 是所有混合內(nèi)容的開源不可知中心。它最接近于可以將任何 Web 內(nèi)容轉(zhuǎn)換為特定應(yīng)用程序的組中的瑞士軍刀。 依賴項(xiàng)簡介將具有大量依賴項(xiàng)的開源應(yīng)用程序保持穩(wěn)定可能令人望而生畏。對于許多應(yīng)用程序,yarn 已將 npm 替換為最常用的軟件包管理器來對其進(jìn)行處理。二者現(xiàn)在均會(huì)生成包含依賴項(xiàng)的版本號的 .lock 文件。.lock 文件將特定版本的庫與項(xiàng)目關(guān)聯(lián),在一個(gè)或多個(gè)庫合作伙伴可能不再支持一個(gè)或多個(gè)依賴項(xiàng)后,使得項(xiàng)目在未來某個(gè)時(shí)間點(diǎn)能夠重新編譯。 在線示例通常會(huì)混用多種技術(shù),并且很難找到可以精確滿足您需求的現(xiàn)有堆棧。通過 StackShare和其他站點(diǎn),您可以了解其他人員使用的技術(shù)堆棧,比較使用情況,并且尋求與技術(shù)堆棧盡可能接近的組合。每次發(fā)現(xiàn)與您所查找接近的技術(shù)堆棧,就需要檢查庫的日期,并確保使用盡可能最新的版本。這可能要求您編輯已經(jīng)存在但可能過期的堆棧。 開發(fā)者和貢獻(xiàn)者社區(qū)選擇適當(dāng)?shù)能浖M(jìn)行移動(dòng)應(yīng)用開發(fā)時(shí)要考慮的因素包括開發(fā)者和貢獻(xiàn)者社區(qū)的規(guī)模。技術(shù)能捕獲多少心智?支持的可用性如何,訪問或使用它是否有付費(fèi)? 雖然一項(xiàng)技術(shù)在特定時(shí)刻聲稱得倒大量支持,但其相對于競爭對手的長期表現(xiàn)如何? 5 年前,最重要的框架是 Angular。如今,Angular 已演變?yōu)?Ionic,并且可以包含在 Apache Cordova 包裝的應(yīng)用程序中。對于 Xamarin 提供的所有功能,其核心產(chǎn)品基于Microsoft 語言,這是許多開發(fā)者仍在追隨而同樣數(shù)量的開發(fā)者正竭力避免的語言。React 和 React Native 是當(dāng)今最流行的客戶端框架,但是這是一個(gè)歷史悠久的市場,眾所周知,它經(jīng)常會(huì)發(fā)生變化。 圖 1 來自 ,這是一個(gè)可用于在多條軸線上(多維度)對技術(shù)堆棧進(jìn)行比較的站點(diǎn),捕獲于 2018 年 5 月。您可以使用 來幫助制定哪種移動(dòng)開發(fā)框架適合您的解決方案的決策。 圖 1. 比較技術(shù)堆棧 ![]() 最后,Microsoft、Google 和 Apple 每年都會(huì)召開開發(fā)者大會(huì),他們在會(huì)上發(fā)布新產(chǎn)品并演示產(chǎn)品路線圖。2018 年,發(fā)布了適用于移動(dòng)應(yīng)用的 AI、XR 和 IoT 功能。簡而言之,在移動(dòng)開發(fā)中,事物不會(huì)一成不變,因此,請通過在開發(fā)過程中執(zhí)行搜索來始終確保信息為最新狀態(tài)。 結(jié)束語及后續(xù)步驟本文簡要介紹了用于開發(fā)全棧移動(dòng)應(yīng)用程序的一些最常用的工具(2018 年)。其中只是介紹了一些核心概念、注意事項(xiàng)、依賴項(xiàng)和生態(tài)系統(tǒng),并且將重點(diǎn)內(nèi)容留在后續(xù)文章和教程中進(jìn)行介紹。 以最有成效和完全受支持的方式混合生態(tài)系統(tǒng)和依賴項(xiàng)或工具和技術(shù)是一個(gè)永無止境的過程。目前有效的內(nèi)容在不遠(yuǎn)的將來不一定有效。全棧移動(dòng)開發(fā)者總是能欣然接受各種變化,因?yàn)槲ㄒ挥篮悴蛔兊氖亲兓?/p> 參考資源本文翻譯自:Getting started with full-stack mobile development(2019-07-02) |
|