ReactorKit是一個面向響應式單向Swift應用程序架構的框架,結合了Flux和響應式編程。其中,Flux是Facebook用來構建客戶端Web應用程序的應用架構。它借助單向數據流完善了React的可組合視圖組件。它更多的是一種模式,而不是一種傳統的框架。
在ReactorKit框架中,用戶動作和視圖狀態都是通過可觀測的流傳遞給每一層。這些流是單向的,因此,視圖只能發出動作,而響應者只能發出狀態,如下圖所示:
按照設計,ReactorKit旨在實現以下三個目標:
可測試性:ReactorKit的第一個目標是將業務邏輯從視圖分離,響應者不依賴于任何視圖,可單獨測試; 從小做起:ReactorKit不要求整個應用程序遵循統一的架構,開發人員可以只在一個具體的視圖中使用它,在已有的項目中使用ReactorKit也無需重寫任何東西; 減少輸入:對于簡單的東西,ReactorKit注重避免復雜的代碼,與其他架構相比,它需要的代碼更少。ReactorKit主要包含以下三個層次:
視圖:視圖展示數據。一個視圖控制器和一個單元格被視為一個視圖。視圖將用戶輸入綁定到動作流,將視圖狀態綁定到每個UI組件。視圖層不包含業務邏輯。視圖只負責定義如何映射動作流和狀態流。 響應者:響應者是一個獨立的層,負責管理視圖狀態。響應者最重要的作用是從視圖分離出控制流。每個視圖都有相應的響應者,并將邏輯處理委托給響應者。響應者不依賴視圖,很容易測試。 服務:ReactorKit有一個特殊的、稱為服務的層。服務層實現具體的業務邏輯。響應者介于視圖和服務之間,管理事件流。當響應者收到來自視圖的用戶動作,它就會調用服務邏輯。服務會發送一個網絡請求,并將響應返回給響應者。然后,響應者會使用服務響應創建一個變種流。此外,一個響應者可以和多個服務通信。ServiceProvider為響應者提供了到每個服務的引用。服務提供者在整個應用程序生命ZZ周期內只創建一次,并傳遞給第一個響應者。第一個響應者將同一個服務提供者實例的引用傳遞給子響應者。
ReactorKit的GitHub頁面上列出了以下幾個示例:
Counter:最簡單、最基本的ReactorKit示例; RxTodo: 使用ReactorKit的iOS Todo應用; Cleverbot: 使用Cleverbot和ReactorKit的iOS Messaging應用; Drrrible: 使用ReactorKit的Dribbble for iOS(應用商店)。ReactorKit遵循MIT許可協議。感興趣的讀者可以下載試用及加入ReactorKit社區。
感謝徐川對本文的審校。