Flutter 不是真正的跨平臺框架
點(diǎn)擊“開發(fā)者技術(shù)前線”,選擇“星標(biāo)??”
讓一部分開發(fā)者看到未來

轉(zhuǎn)自:英文:Luke Urban,翻譯:CSDN
原文鏈接:https://itnext.io/flutter-is-no-longer-a-cross-platform-framework-b53c87b14c39
月初,Google 重磅發(fā)布了專為 Web、移動和桌面而構(gòu)建的 Flutter 2!將 Flutter 從移動開發(fā)框架擴(kuò)展成可移植框架,因而開發(fā)者無需重寫代碼即可將應(yīng)用擴(kuò)展至桌面或網(wǎng)頁。而本文作者認(rèn)為,現(xiàn)在不應(yīng)該再去想創(chuàng)建一個需要部署到所有平臺的應(yīng)用程序。
大家好,我是一名軟件開發(fā)人員,我叫 Luke。
由于我選擇了這個相當(dāng)大膽的標(biāo)題,為了避免誤會,我要對其進(jìn)行詳細(xì)的解釋。從技術(shù)角度來講,F(xiàn)lutter 的確是一個跨平臺的框架。
但是,我有點(diǎn)不同的看法。
從 Flutter 2.0 發(fā)布以來,我就察覺到它被炒的有點(diǎn)過了。請不要誤會,我并不是要否定它,其實(shí)我也是 Flutter 的粉絲,亦將一如既往的擁護(hù)它。
我在日常工作中經(jīng)常使用 Flutter 來開發(fā) iOS 和 Android 應(yīng)用程序。由于早前我是用 Kotlin 或者 Swift 來開發(fā)原生的應(yīng)用,支持多種特性,如:掃描 / 頁面識別、pin/biometric 應(yīng)用程序認(rèn)證、通知、firebase 統(tǒng)計和一些高級的用戶流,現(xiàn)在用 Flutter 來開發(fā)應(yīng)用,我對 Flutter 的優(yōu)缺點(diǎn)的了解更加透徹。
1、六大平臺

我的一個非常好的朋友 Filip Hracek 在 Flutter Engage 演講中提到“神奇的設(shè)計開發(fā)者”的相關(guān)話題,我非常贊同他的看法。我認(rèn)為需要有更多的開發(fā)者真正知道他們正在做的是什么,而且不是盲目地跟從迭代面板。
*Scrum Sprint* 是一個可重復(fù)的固定時間框,在這個時間框內(nèi)創(chuàng)造一個高價值的產(chǎn)品。-- 維基百科
強(qiáng)烈推薦大家觀看 Filip 在 Youtube 上的相關(guān)視頻片段https://www.youtube.com/watch?v=MIepaf7ks40。
接下來,我們重新回到 Flutter 這個話題:
2、不應(yīng)該再去想創(chuàng)建一個需要部署到所有平臺的應(yīng)用程序
你更應(yīng)該去想如何將你要編寫的應(yīng)用程序模塊化,以便在未來更好地復(fù)用這些模塊。給你們舉個例子:在我的公司,我們正在開發(fā)專注于用戶數(shù)據(jù)的應(yīng)用程序。
這就需要創(chuàng)建自定義和高級的調(diào)查報告,我們不希望每次添加新問題時都要編寫新的窗口小部件。我們的做法是:編寫一個包含所有可能的調(diào)查邏輯的模塊,在許多其他項(xiàng)目中復(fù)用它(而不需要每次都重寫一遍相似的代碼)
我給你舉上面這個例子的目的是提醒你在構(gòu)建一個應(yīng)用程序時,你更應(yīng)該著重思考你要做的應(yīng)用程序或整個業(yè)務(wù)的重點(diǎn)是什么。更應(yīng)該去重點(diǎn)思考,它背后的業(yè)務(wù)邏輯是什么?
在計算機(jī)軟件中,業(yè)務(wù)邏輯或領(lǐng)域建模也是程序的一部分,它對真實(shí)世界的業(yè)務(wù)規(guī)則進(jìn)行編碼,確定如何創(chuàng)建、存儲和修改數(shù)據(jù)。
當(dāng)你明確了領(lǐng)域劃分,你可以將一個領(lǐng)域封裝成獨(dú)立的模塊,你可以將該模塊在需要開發(fā)的 Flutter 應(yīng)用程序中復(fù)用。
但 Luke,這有什么好大驚小怪的嗎?
對,這是一個好問題!
對于相同的業(yè)務(wù)邏輯,你可以用不同的用戶流來創(chuàng)建多個 Flutter 應(yīng)用。你可以將要開發(fā)的 Flutter 應(yīng)用進(jìn)行分類(如:移動應(yīng)用、桌面應(yīng)用和 Web應(yīng)用),這將能幫助關(guān)注到不同平臺的差異,對特定平臺進(jìn)行特定處理最終將獲得更好的用戶體驗(yàn)。
3、針對不同平臺要編寫多個應(yīng)用程序
雖然 Flutter 還算是一個相對比較新的技術(shù),還主要針對小公司和個人開發(fā)者,但這不妨礙它成為一個人人皆可用的偉大工具。
我參與開發(fā)過多個企業(yè)級應(yīng)用程序。根據(jù)我的經(jīng)驗(yàn),系統(tǒng)的每個部分都需要有一個清晰的工作流程。開發(fā)一個系統(tǒng)通常需要前端、后端等。為了節(jié)約成本,編寫一個應(yīng)用程序,在不同的平臺運(yùn)行也越發(fā)流行。為了實(shí)現(xiàn)這個目的,你需要雇一個團(tuán)隊(duì)進(jìn)行專門開發(fā)。你敢想象,十幾個人的團(tuán)隊(duì)開發(fā)同一套代碼來實(shí)現(xiàn)所有平臺的特性嗎?這簡直是管理層的噩夢。很可能出現(xiàn):一部分開發(fā)人員開發(fā)的桌面特性與移動團(tuán)隊(duì)正在開發(fā)的特性相沖突的情況。
其次,應(yīng)用程序包也會越來越臃腫,然而很多時候并不是每個平臺都需要有一份軟件包?,F(xiàn)在,正值 Flutter 2.0 發(fā)布的時候,由于我并沒有將所有的包都進(jìn)行升級,還不支持 null 安全還需要手動解決依賴沖突的問題。
4、為什么 Flutter 不是一個跨平臺的框架
在讀了這篇文章之后,或許你能夠理解為什么我會認(rèn)為 Flutter 不是一個真正的跨平臺框架。Flutter 是一個為我們提供了為每個平臺構(gòu)建應(yīng)用程序所需的功能的工具。我認(rèn)為,真正實(shí)現(xiàn)跨平臺不應(yīng)該只開發(fā)一個應(yīng)用程序,更應(yīng)該開發(fā)一組由相同的業(yè)務(wù)邏輯驅(qū)動的應(yīng)用程序集合。
此外,當(dāng)我們編寫 Flutter 應(yīng)用程序時,我們并沒有跨越任何平臺。我們這種所謂的跨平臺,不過是用 Xamarin 或其他工具將寫好的代碼翻譯成原生元素。
如果非要把 Flutter 和其他東西進(jìn)行類比的話,那么與之相似的就是游戲引擎(如 Unity)。我們不需要專門在 Windows 或者 Mac 系統(tǒng)上開發(fā)對應(yīng)平臺的游戲。我們可以使用 Unity 編寫,然后將其導(dǎo)出到一個特定的平臺。使用 Unity 編寫一個游戲然后導(dǎo)出到多個平臺和真正的跨平臺完全也是兩碼事。
5、結(jié)尾
全文都在討論跨平臺相關(guān)話題,或許你會持有不同意見,如果你喜歡本文,歡迎點(diǎn)贊評論和我交流。
如果你錯過了今年最大的 Flutter 會議,對我聊的內(nèi)容不知所云,可以在 Youtube 上觀看此視頻https://www.youtube.com/watch?v=yll3SNXvQCw 來深入了解相關(guān)內(nèi)容。
大廠面試題領(lǐng)取方式: 加下面助理的微信一定要備注(大廠面試): 研究/工作方向+地點(diǎn)+學(xué)校/公司+昵稱 (如Java+上海+上交+可可) 根據(jù)格式備注,可更快被通過且邀請進(jìn)群,領(lǐng)取一份專屬學(xué)習(xí)禮包
開發(fā)者技術(shù)前線 ,匯集技術(shù)前線快訊和關(guān)注行業(yè)趨勢,大廠干貨,是開發(fā)者經(jīng)歷和成長的優(yōu)秀指南。



