美團客戶端響應式框架EasyReact開源啦

returnedNode.value = notFoundError;

} else {

returnedNode.value = resultDictionary;

}

}

}];

return returnedNode;

}];

EZRIFResult *resultAnalysedNode = [resultNode if:^BOOL(id _Nullable next) {

return [next isKindOfClass:NSDictionary.class];

}];

_result = resultAnalysedNode.thenNode;

_error = resultAnalysedNode.elseNode;

}

return self;

}

@end

在調用時,我們只需要通過 listenedBy 方法關注節點的變化:

self.service = [SearchService new];

[[self.service.result listenedBy:self] withBlock:^(NSDictionary * _Nullable next) {

NSLog(@"Result: %@", next);

}];

[[self.service.error listenedBy:self] withBlock:^(NSError * _Nullable next) {

NSLog(@"Error: %@", next);

}];

self.service.param.value = @"mipmap"; //should print search result

self.service.param.value = @"420v"; // should print error, keyword not found.

使用 EasyReact 後,網絡請求的參數、結果和錯誤可以很好地被分離。不需要像命令式的寫法那樣,在網絡請求返回的回調中寫一堆判斷來分離結果和錯誤。

因為節點的存在先於結果,我們能對暫時還沒有得到的結果構建連接關係,完成整個響應鏈的構建。響應鏈構建之後,一旦有了數據,數據便會自動按照我們預期的構建來傳遞。

在這個例子中,我們不需要顯式地來調用網絡請求,只需要給響應鏈中的 param 節點賦值,框架就會主動觸發網絡請求,並且請求完成之後會根據網絡返回結果來分離出 result 和 error 供上層業務直接使用。

對於開源,我們是認真的

EasyReact 項目自立項以來,就勵志打造成一個通用的框架,團隊也一直以開源的高標準要求自己。整個開發的過程中我們始終保證測試覆蓋率在一個高的標準上,對於接口的設計也力求完美。在開源的流程,我們也學習借鑑了 GitHub 上大量優秀的開源項目,在流程、文檔、規範上力求標準化、國際化。

文檔

除了 中文 README 和 英文 README 以外,我們還提供了中文的說明性質文檔:

  • 框架概述
  • 基本操作
  • 內存管理

和英文的說明性質文檔:

  • Framework Overview
  • Basic Operations
  • Memory Management

後續幫助理解的文章,也會陸續上傳到項目中供大家學習。

另外也為開源的貢獻提供了標準的 中文貢獻流程 和 英文貢獻流程,其中對於 ISSUE 模板、Commit 模板、Pull Requests 模板和 Apache 協議頭均有提及。

如果你仍然對 EasyReact 有所不解或者流程代碼上有任何問題,可以隨時通過提 ISSUE 的方式與我們聯繫,我們都會盡快答覆。

行為驅動開發

為了保證 EasyReact 的質量,我們在開發的過程中使用 行為驅動開發。當每個新功能的聲明部分確定後,我們會先編寫大量的測試用例,這些用例模擬使用者的行為。通過模擬使用者的行為,以更加接近使用者的想法,去設計這個新功能的 API。同時大量的測試用例也保證了新的功能完成之時,一定是穩定的。

測試覆蓋率

EasyReact 系列立項之時,就以高質量、高標準的開發原則來要求開發組成員執行。開源之後所有項目使用 codecov.io 服務生成對應的測試覆蓋率報告,Easy 系列的框架覆蓋率均保證在 95% 以上。

美團客戶端響應式框架EasyReact開源啦

持續集成

為了保證項目質量,所有的 Easy 系列框架都配有持續集成工具 Travis CI。它確保了每一次提交,每一次 Pull Request 都是可靠的。

展望

目前開源的框架組件只是建立起響應式編程的基石,Easy 系列的初心是為 MVVM 架構提供一個強有力的框架工具。下圖是 Easy 系列框架的架構簡圖:

美團客戶端響應式框架EasyReact開源啦

未來開源計劃

未來我們還有提供更多框架能力,開源給大家:

名稱描述EasyDebugToolBox動態節點狀態調試工具EasyOperation基於行為和操作抽象的響應式庫EasyNetwork響應式的網絡訪問庫EasyMVVMMVVM 框架標準和相關工具EasyMVVMCLIEasyMVVM 項目腳手架工具

跨平臺與多語言

EasyReact 的設計基於面向對象,所以很容易在各個語言中實現。我們也正在積極的在 Swift、Java、JavaScript 等主力語言中實現 EasyReact。

另外動態化作為目前行業的趨勢,Easy 系列自然不會忽視。在 EasyReact 基於圖的架構下,我們可以很輕鬆的讓一個 Objective-C 的上游節點,通過一個特殊的橋接邊連接到一個 JavaScript 節點,這樣就可以讓部分的邏輯動態下發過來。

結語

數據傳遞和異步處理,是大部分業務的核心。EasyReact 從架構上用響應式的方式來很好地解決了這個問題。它有效地組織了數據和數據之間的聯繫,讓業務的處理流程從命令式編程方式,變成以數據流為核心的響應式編程方式。用先構建數據流關係再響應觸發的方法,讓業務方更關心業務的本質。使廣大開發者從瑣碎的命令式編程的狀態處理中解放出來,提高了生產力。EasyReact 不僅讓業務邏輯代碼更容易維護,也讓出錯的幾率大大下降。

團隊簡介

成威,項目的發起人,負責美團客戶端新技術調研。國內函數式編程、響應式編程的愛好者,多年宣傳和佈道響應式編程實踐並取得一定的成績。

姜沂,項目的主要開發者。

秦宏,項目的主要開發者。

君陽,項目的早期開發者。

思琦,Easy 系列圖標設計者,文檔和代碼翻譯者。

志宇,參與了大部分的重構設計。

恩生,文檔和代碼翻譯者。

姝琳,文檔和代碼翻譯者。


分享到:


相關文章: