DreamBox統(tǒng)一視圖開發(fā)框架
DreamBox 是一個為客戶端打造的、具有動態(tài)化功能、性能優(yōu)秀的統(tǒng)一視圖開發(fā)框架。
DreamBox 本身是一個視圖容器,容器內(nèi)部的內(nèi)容可以通過線上下發(fā)的方式任意動態(tài)化更新。而且并不集成運(yùn)行時虛擬機(jī),最大程度貼近原生開發(fā),沒有中間商吃內(nèi)存、耗性能。
目標(biāo)
DreamBox立志于能在雙端的原生視圖框架和運(yùn)行時之上搭建一個統(tǒng)一的、具備動態(tài)化能力、可以靈活擴(kuò)展的視圖開發(fā)框架,同時保持優(yōu)秀的運(yùn)行時性能,并不斷建設(shè)組件和落地生態(tài),降低50%的客戶端視圖開發(fā)工作量,讓開發(fā)人員騰出雙手做更多更有意義的事情。
基本原理
DreamBox選擇了:
- 仿照Android約束布局進(jìn)行DSL的初版定義,后期結(jié)合實(shí)際情況分支發(fā)展。這樣一來,大大降低Android開發(fā)者的學(xué)習(xí)門檻。另外,有限的DSL規(guī)則和屬性遠(yuǎn)比學(xué)習(xí)一門真正的語言來的更快,iOS開發(fā)同學(xué)的掌握速度也較快
- 不集成語言運(yùn)行時,進(jìn)行靜態(tài)解析。通過這種方式,讓DB的運(yùn)行時生命周期足夠短暫,避免依附View存活而帶來的持續(xù)的內(nèi)存消耗問題。另一方面,因?yàn)闆]有語言運(yùn)行時,動態(tài)解析的性能損耗大大降低
粗粒度上,DreamBox通過以下幾個步驟完成了整體功能:
- 開發(fā)者編寫DSL
- 編譯器編譯DSL為DB Runtime可以接受的數(shù)據(jù)格式
- DB Runtime解析數(shù)據(jù)并映射為原生數(shù)據(jù)、綁定交互事件
- 原生運(yùn)行時進(jìn)行渲染并傳遞交互事件
- DB Runtime響應(yīng)交互事件做動作
簡而言之,DreamBox定義了一套統(tǒng)一的DSL,在Android和iOS的原生視圖框架和運(yùn)行時的基礎(chǔ)上,搭建了另一個運(yùn)行時。這個運(yùn)行時生命周期短、內(nèi)存損耗小,將這一套DSL分別映射成兩個系統(tǒng)能夠接受的數(shù)據(jù),完成了展現(xiàn)一致、體驗(yàn)一致的視圖頁面。
功能特性
先通過一個Gif簡單認(rèn)識下
![]()
DreamBox將一個視圖中的各種元素分為三類:
- 視圖元素,這類元素就是直接展示在用戶眼前的View。這類元素可以動態(tài)化改變其內(nèi)部屬性和外部布局
- 交互、回調(diào)元素,視圖的點(diǎn)擊、長按等交互事件或動作發(fā)生后的回調(diào)統(tǒng)稱為這類元素。它們是視圖背后交互邏輯的觸發(fā)點(diǎn)
- 動作元素,如網(wǎng)絡(luò)請求、日志、彈窗、打電話等等這些隱藏在視覺背后的、由交互、回調(diào)元素觸發(fā)的歸為此類
比如:一個卡片的組成是圖片+按鈕,當(dāng)按鈕點(diǎn)擊時,跳轉(zhuǎn)另一個頁面。這句話中,圖片、按鈕以及他們的布局關(guān)系就是視覺元素,按鈕的點(diǎn)擊就是交互、回調(diào)元素,最后的跳轉(zhuǎn)就是動作元素。
DreamBox所支持的功能特性有:
- 支持視圖元素的復(fù)雜約束關(guān)系布局,每一個元素可以在橫縱坐標(biāo)軸上相對于其他元素進(jìn)行標(biāo)記定位,相比
flex這能支持一些更復(fù)雜的場景需求 - 不僅僅是視圖元素,支持對以上三個元素都進(jìn)行動態(tài)修改
- 支持三方進(jìn)行DSL擴(kuò)展,以適應(yīng)更加復(fù)雜、更加具體的需求場景
- 支持通過
Event API與原生運(yùn)行時進(jìn)行雙工通信,滿足一些DB框架無法滿足的功能需求 - 支持通過
Playground或debug-tool的集成達(dá)成實(shí)時調(diào)試預(yù)覽的效果 - 支持單個App中多個引擎實(shí)例集成,互不干擾
- 支持復(fù)雜的數(shù)據(jù)使用場景,包含內(nèi)置固定、二次請求以及原生透傳
- 內(nèi)置10余個視圖組件,包含列表和流式布局
- 內(nèi)置10余個動作功能,部分基礎(chǔ)功能接入方可以自行接管具體實(shí)現(xiàn)
- 細(xì)粒度低至View,可在頁面中自由嵌入使用
詳細(xì)功能請參見開發(fā)手冊
