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