<div id="qayss"></div>
  • <xmp id="qayss">
  • <small id="qayss"><small id="qayss"></small></small>
    <div id="qayss"></div>
  • <li id="qayss"></li>
  • <div id="qayss"><div id="qayss"></div></div>
  • <xmp id="qayss"><li id="qayss"></li>
    <div id="qayss"><li id="qayss"></li></div>
  • <small id="qayss"></small>
  • <div id="qayss"></div>
  • <xmp id="qayss"><div id="qayss"></div><div id="qayss"><div id="qayss"></div></div><xmp id="qayss">
    <small id="qayss"><div id="qayss"></div></small><div id="qayss"></div>
  • 流行的Flutter應用架構比較

    來源:codewithandrea.com 更新時間:2023-10-30 23:36

    如果您需要幫助為您的 Flutter 應用程序選擇最適合的項目結構,可以查看:

    如果您想探索其他流行架構(如 MVP、MVVM 或 Clean Architecture)并了解它們如何與此處提出的架構相比較,可以閱讀以下內容:

    要了解 Riverpod 架構中每個層的更多信息,請閱讀本系列中的其他文章:


    開始新項目很有趣! ??

    最初,推遲關于應用架構和良好的代碼結構的決定可能很誘人。

    但是,如果您的應用不僅僅是一個失敗的副業項目,您將希望重新審視這些事情,并選擇一個能夠支持您的代碼庫隨著它的增長而發展的應用架構。 ??

    在我的先前的文章中,我介紹了一種基于Riverpod包的應用架構,該架構基于四個主要層次: App architecture using data, domain, application, and presentation layers. Arrows show the dependencies between layers.
    使用數據、領域、應用和展示層的應用程序架構。箭頭顯示了各層之間的依賴關系。我在許多不同的項目中使用了這種架構

    但在您決定在下一個項目中嘗試它之前,我想向您展示它與其他流行的架構相比如何。

    而這正是這篇文章要討論的內容。??

    現有架構概述

    如果您研究這個話題,您可能會遇到諸如MVC、MVP、MVVM和Clean Architecture等術語。這些是早些時候引入的流行應用程序架構,旨在解決與Flutter今天面臨的類似問題。

    嚴格來說,MVC、MVP和MVVM是設計模式,而Clean Architecture定義了一組規則和原則,以幫助您構建任何復雜的軟件系統。

    雖然它們構建在的原則今天仍然非常相關,但它們并不是專為Flutter應用程序開發而定制的。

    盡管如此,已經有很多嘗試將它們引入Flutter世界的努力,成功程度不等。

    流行的Flutter應用程序架構:Bloc和Stacked

    最值得注意的是,Bloc架構Bloc庫的普及而受到廣泛采用,這個庫被許多大公司所使用。它非常有見解,并為我們提供了一組嚴格的規則,用于構建Flutter應用程序的結構(這是一件好事?。?。

    另一個有前途的架構是Stacked架構,它基于Stacked包,并在很大程度上受到MVVM的啟發。

    它們都依賴于Provider,這是官方Flutter文檔中推薦的狀態管理包。

    雖然Bloc和Stacked都沒有問題,但Provider的作者創建了Riverpod包,以“進行一些在其他情況下不可能的改進”(用他自己的話來說)。

    隨著時間的推移,我逐漸欣賞上了Riverpod的強大之處,它成為了依賴注入和狀態管理的完整解決方案。但我的Riverpod架構與其他流行的架構相比如何呢?

    與Clean Architecture的比較

    Clean Architecture是由Robert C. Martin引入的,其表示如下圖所示: The Clean Architecture

    《干凈架構》。來源和鳴謝:[《干凈代碼博客》](https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html) 雖然事物有不同的名稱,但我們可以識別出一些相似的概念: - 實體; - 模型 - 用例; 服務 由于《干凈架構》旨在獨立于用戶界面,它并不考慮從數據源到用戶界面的單向數據流,這是許多現代應用架構的核心設計原則(包括Flutter和Web等)。

    Comparison with the Clean Architecture

    與Clean Architecture不同,它使用了一個接口適配器層,其中包括控制器、網關和呈現器。與此同時,在Riverpod架構中,存儲庫屬于數據層,控制器屬于呈現層。

    同樣,外層稱為框架和驅動程序,包含UI和數據庫。但在Riverpod架構中,它們位于相對的兩端。

    這并不是說Clean Architecture不好。但我發現它增加了一些思維負擔,我更愿意使用一個更接近我日常用于Flutter應用開發的概念模型。

    與MVC的比較

    Model-View-Controller(MVC)是一個由3種類型的組件構成的軟件設計模式:

    • Model:直接管理應用程序的數據、邏輯和規則
    • View:UI組件(小部件)
    • Controller:接受輸入并將其轉換為對模型或視圖的命令 MVC Architecture
    • MVC 架構通常將太多邏輯集中在模型上,因此通常需要添加一個額外的服務層:MVC+S。

    模型應該是響應式的(例如,使用 ChangeNotifier ),以便小部件在其更改時重建。

    用戶輸入始終通過控制器傳遞,而不是直接通過模型。

    與 Riverpod 架構相比,原始的 MVP 架構在各層之間的通信方式上有很大不同: Comparison with MVC Architecture 與MVC架構的比較

    與MVVM的比較

    Model-View-ViewModel(MVVM)模式被引入,以將應用程序的業務邏輯和呈現邏輯與用戶界面(UI)分開。

    通常以以下方式表示: MVVM Architecture 使用MVVM架構時,視圖不能直接訪問模型。

    相反,視圖模型處理用戶輸入并將模型中的數據轉換,以便能夠輕松呈現。

    而視圖模型通過使用觀察者設計模式與視圖進行數據綁定連接。

    當從后端返回的數據與您需要顯示的UI不匹配時,具有中間視圖模型特別有用。 Comparison with MVVM Architecture 與MVVM架構相比,Riverpod架構易于進行比較:

    • 視圖 → 小部件
    • 視圖模型 → 控制器
    • 模型 → 模型 + 倉庫 + 數據源

    MVVM只是一種設計模式,上面的圖表不包括任何關于數據層的概念。

    實際上,服務和倉庫被添加以封裝數據訪問和緩存,使MVVM與Riverpod架構非常相似。

    與Bloc架構的比較

    Bloc架構 頁面包含了定義三個層次的圖表:

    • 演示層

    • 業務邏輯

    • 數據(倉庫和數據提供者) Bloc Architecture 來源與鳴謝:Bloc 架構。這與下面介紹的 Riverpod 架構類似:

    • 展示(UI)→ Widgets

    • 業務邏輯(Bloc)→ 控制器和服務

    • 數據(存儲庫)→ 存儲庫

    • 數據(數據提供者)→ 數據源

    主要區別在于 blocs 可以依賴于其他 blocs 以對其狀態更改作出反應,而 Riverpod 架構在控制器(負責管理小部件狀態)和服務(負責管理應用程序狀態)之間有更清晰的區分。

    注意:使用 Bloc 時,狀態更改始終表示為數據流。但 Riverpod 可以觀察不同類型的數據(流、未來、StateNotifiers、ChangeNotifiers 等)。

    總的來說,Bloc 架構與我提出的 Riverpod 架構非常接近,盡管我覺得它會迫使你編寫太多類,反復不斷(即使使用 Cubits,它們是 Bloc 的輕量級版本)。

    與 Stacked 架構的比較

    Stacked 架構(基于 Stacked 包)與 MVVM 類似(但不完全相同),由 3 個主要組件組成,可以很容易地映射到 Riverpod 架構:

    • 視圖 → Widgets
    • 視圖模型 → 控制器
    • 服務 → 服務

    它還定義了一些關于您可以做什么和不能做什么的規則(更多信息請參閱此處)。

    Stacked 提供了一個基礎架構和一組有用的小部件(例如 ViewModelBuilder),您可以使用它們來"綁定"視圖模型與視圖,從而使您的生活更輕松,不必重新發明輪子。

    視圖模型本身是擴展 ChangeNotifier 的 Dart 類,它們具有響應式和非響應式變體。

    主要區別在于 Stacked 基于 Provider,而 Riverpod 架構使用 Riverpod(顯而易見 ??)。

    但正如我們所說,Riverpod 為我們提供了構建強大架構所需的一切。

    與Android應用架構的比較

    直到現在,我都沒有提到,但Android文檔中也有一個有用的應用架構指南,它與我正在使用的架構非常相似。 Android App Architecture Android App Architecture 雖然這種架構涉及許多常見的Android組件(如活動、片段等),但在Flutter世界中,這些與小部件相同,而且在各層之間有密切的匹配: Comparison with Android App Architecture 在Android應用架構中,UI和數據層始終是必需的,而領域層是可選的。這是因為并非所有應用都具有1) 復雜的業務邏輯或2) 需要在多個視圖模型之間重用的簡單業務邏輯。同樣,在Riverpod架構中,如果不需要應用層,可以省略它。

    總的來說,我鼓勵您閱讀完整的Android指南,因為它詳細描述了每個層在架構中的作用。

    其他流行的架構

    應用程序架構是基于使用設計模式而不是API的抽象構建的。因此,您可以在其他流行的狀態管理包(如redux、MobX等)之上創建自己的應用程序架構。

    甚至可以使用Flutter提供的開箱即用的功能(InheritedWidget、ChangeNotifier、ValueListenableBuilder等)。

    注意:GetX是一種流行的狀態管理框架,聲稱可以完成所有工作。但我不會在這里詳細介紹它,原因請參見這些 理由。

    最重要的是,您要在應用程序中定義明確的契約和邊界。

    在這方面,我非常喜歡這段引自eBay工程博客的引述:

    我們相信,選擇正確的工具或應用單一的設計模式,比建立應用程序中的獨特特性和組件之間的明確契約和邊界要不重要得多。沒有邊界,編寫不隨著應用程序復雜性增加而擴展的難以維護的代碼將變得太容易。

    結論

    正如我們所看到的,Riverpod 架構與其他流行的架構有許多相似之處(以及一些差異)。

    直到今天,我一直很高興在各種Flutter應用程序中使用它

    曰本丰满熟妇XXXX性,一女多男在疯狂伦交,多人乱P杂交公车调教,成人AV在线一区二区三区
    <div id="qayss"></div>
  • <xmp id="qayss">
  • <small id="qayss"><small id="qayss"></small></small>
    <div id="qayss"></div>
  • <li id="qayss"></li>
  • <div id="qayss"><div id="qayss"></div></div>
  • <xmp id="qayss"><li id="qayss"></li>
    <div id="qayss"><li id="qayss"></li></div>
  • <small id="qayss"></small>
  • <div id="qayss"></div>
  • <xmp id="qayss"><div id="qayss"></div><div id="qayss"><div id="qayss"></div></div><xmp id="qayss">
    <small id="qayss"><div id="qayss"></div></small><div id="qayss"></div>