Flutter 毀了客戶端和 Web 開發!
Google 重磅發佈了專爲 Web、移動和桌面而構建的 Flutter 2.0!將 Flutter 從移動開發框架擴展成可移植框架,因而開發者無需重寫代碼即可將應用擴展至桌面或網頁。看似爲了幫助 Web 和移動開發者,實際上不然,而本文作者認爲,現在不應該再去想創建一個需要部署到所有平臺的應用程序,Flutter 反而毀了 Web 和移動開發。
以下爲譯文:
大家好,我是一名軟件開發人員,我叫 Luke。
由於我選擇了這個相當大膽的標題,爲了避免誤會,我要對其進行詳細的解釋。從技術角度來講,Flutter 的確是一個跨平臺的框架。也不止其,所有跨斷技術都是非常糟糕的設計。
但是,我有點不同的看法。
從 Flutter 2.0 發佈以來,我就察覺到它被炒的有點過了。但不應該再去想創建一個需要部署到所有平臺的應用程序,Flutter 反而毀了 Web 和移動開發。
請不要誤會,我並不是要否定它,其實我也是 Flutter 的粉絲,亦將一如既往的擁護它。
我在日常工作中經常使用 Flutter 來開發 iOS 和 Android 應用程序。由於早前我是用 Kotlin 或者 Swift 來開發原生的應用,支持多種特性,如:掃描 / 頁面識別、pin/biometric 應用程序認證、通知、firebase 統計和一些高級的用戶流,現在用 Flutter 來開發應用,我對 Flutter 的優缺點的瞭解更加透徹。
1、六大平臺
通過今年的 Flutter Engage 會議我們可知已經可以使用 Flutter 在 iOS、 Android、 Mac、 Windows、 Linux 和 Web 這六個平臺中的任何一個平臺上開發應用。這太棒了!但事情遠沒有這麼簡單... 你的確可以在這 6 個平臺上部署你的應用程序,但是說實話,我很少這麼做。我很難想象一個人會在不同的平臺上部署同一個應用程序,我認爲應該根據不同的平臺特點使用不同的設計模式。在大型設備上使用底部彈窗、應用程序條、簡潔的列表就很彆扭。一般來說,適合在移動設備上的組件和設計模式在桌面設備上卻不合時宜,反之亦然。
我的一個非常好的朋友 Filip Hracek 在 Flutter Engage 演講中提到 “神奇的設計開發者” 的相關話題,我非常贊同他的看法。我認爲需要有更多的開發者真正知道他們正在做的是什麼,而且不是盲目地跟從迭代面板。
Scrum Sprint 是一個可重複的固定時間框,在這個時間框內創造一個高價值的產品。-- 維基百科
強烈推薦大家觀看 Filip 在 Youtube 上的相關視頻片段 https://www.youtube.com/watch?v=MIepaf7ks40。
接下來,我們重新回到 Flutter 這個話題:
2、不應該再去想創建一個需要部署到所有平臺的應用程序
你更應該去想如何將你要編寫的應用程序模塊化,以便在未來更好地複用這些模塊。給你們舉個例子:在我的公司,我們正在開發專注於用戶數據的應用程序。
這就需要創建自定義和高級的調查報告,我們不希望每次添加新問題時都要編寫新的窗口小部件。我們的做法是:編寫一個包含所有可能的調查邏輯的模塊,在許多其他項目中複用它(而不需要每次都重寫一遍相似的代碼)
我給你舉上面這個例子的目的是提醒你在構建一個應用程序時,你更應該着重思考你要做的應用程序或整個業務的重點是什麼。更應該去重點思考,它背後的業務邏輯是什麼?
公衆號
在計算機軟件中,業務邏輯或領域建模也是程序的一部分,它對真實世界的業務規則進行編碼,確定如何創建、存儲和修改數據。
當你明確了領域劃分,你可以將一個領域封裝成獨立的模塊,你可以將該模塊在需要開發的 Flutter 應用程序中複用。
但 Luke,這有什麼好大驚小怪的嗎?
對,這是一個好問題!
對於相同的業務邏輯,你可以用不同的用戶流來創建多個 Flutter 應用。你可以將要開發的 Flutter 應用進行分類(如:移動應用、桌面應用和 Web 應用),這將能幫助關注到不同平臺的差異,對特定平臺進行特定處理最終將獲得更好的用戶體驗。
3、針對不同平臺要編****寫多個應用程序
雖然 Flutter 還算是一個相對比較新的技術,還主要針對小公司和個人開發者,但這不妨礙它成爲一個人人皆可用的偉大工具。
我參與開發過多個企業級應用程序。根據我的經驗,系統的每個部分都需要有一個清晰的工作流程。開發一個系統通常需要前端、後端等。爲了節約成本,編寫一個應用程序,在不同的平臺運行也越發流行。爲了實現這個目的,你需要僱一個團隊進行專門開發。你敢想象,十幾個人的團隊開發同一套代碼來實現所有平臺的特性嗎?這簡直是管理層的噩夢。很可能出現:一部分開發人員開發的桌面特性與移動團隊正在開發的特性相沖突的情況。
其次,應用程序包也會越來越臃腫,然而很多時候並不是每個平臺都需要有一份軟件包。現在,正值 Flutter 2.0 發佈的時候,由於我並沒有將所有的包都進行升級,還不支持 null 安全還需要手動解決依賴衝突的問題。
4、爲什麼 Flutter 不是一個跨平臺的框架
在讀了這篇文章之後,或許你能夠理解爲什麼我會認爲 Flutter 不是一個真正的跨平臺框架。Flutter 是一個爲我們提供了爲每個平臺構建應用程序所需的功能的工具。我認爲,真正實現跨平臺不應該只開發一個應用程序,更應該開發一組由相同的業務邏輯驅動的應用程序集合。
此外,當我們編寫 Flutter 應用程序時,我們並沒有跨越任何平臺。我們這種所謂的跨平臺,不過是用 Xamarin 或其他工具將寫好的代碼翻譯成原生元素。
如果非要把 Flutter 和其他東西進行類比的話,那麼與之相似的就是遊戲引擎(如 Unity)。我們不需要專門在 Windows 或者 Mac 系統上開發對應平臺的遊戲。我們可以使用 Unity 編寫,然後將其導出到一個特定的平臺。使用 Unity 編寫一個遊戲然後導出到多個平臺和真正的跨平臺完全也是兩碼事。
因爲每個項目都有技術債務,你應該停止抱怨,並開始重構。每次開發新功能之前都應該進行小型代碼重構。但接入 Flutter 大規模的重構和重寫永遠不會有好結果。
5、結尾
全文都在討論跨平臺相關話題, 以上就是我認爲 flutter 毀了 Web 開發的原因。很多人對這一說法很感興趣,並熱切地加入了辯論。如果你認爲 flutter 並沒有那麼糟糕,或許你會持有不同意見,如果你喜歡本文,歡迎點贊評論和我交流。
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/FcvJd_SF-is0HIr8qD6aCw