上一篇文章我們講述了基于 Web Components 的構(gòu)件,可復(fù)用的構(gòu)件是 EasyMABuilder 的基礎(chǔ)。
現(xiàn)代軟件的開(kāi)發(fā)追求最大化的可復(fù)用性,因?yàn)檐浖?fù)用帶來(lái)諸多好處:提升研發(fā)效率、降低研發(fā)成本、降低過(guò)程風(fēng)險(xiǎn)、增加可靠性、有利于標(biāo)準(zhǔn)化等。
構(gòu)件,就是 EasyMABuilder 中可復(fù)用的單元,通過(guò)組合現(xiàn)有的構(gòu)件就可以搭建出完整的 Web 應(yīng)用。
而隨著應(yīng)用規(guī)模的增長(zhǎng),開(kāi)發(fā)者可能需要更上層的復(fù)用,即:將一套構(gòu)件的組合封裝成一個(gè)新的可復(fù)用的單元,并且希望它能像普通構(gòu)件那樣使用。例如我們可能需要一個(gè)顯示趨勢(shì)圖的卡片,它由一個(gè)卡片構(gòu)件及一個(gè)趨勢(shì)圖構(gòu)件組成,我們希望將這個(gè)定制卡片能復(fù)用在多個(gè)頁(yè)面中。
EasyMABuilder 對(duì)此提供了對(duì)構(gòu)件組合的封裝:自定義模板,以下我們簡(jiǎn)稱為模板。
創(chuàng)建模板的界面與編排一個(gè)普通頁(yè)面的界面完全一致,因?yàn)樗鼈兌际蔷幣乓惶讟?gòu)件的組合。
不同的是,模板將內(nèi)部的構(gòu)件封裝了起來(lái),并且可以按需對(duì)外暴露屬性、事件、方法和插槽,并將這些信息映射到內(nèi)部的構(gòu)件,這樣,模板也有了普通構(gòu)件的幾大要素,因此它就可以像普通構(gòu)件那樣在各個(gè)地方復(fù)用。
例如,上文提到的趨勢(shì)圖卡片,我們可以先編排好模板的構(gòu)件結(jié)構(gòu):
為了提升這個(gè)模板的可復(fù)用性,我們擴(kuò)展一下它的能力,支持由外部傳入卡片的標(biāo)題和趨勢(shì)圖的數(shù)據(jù)源,進(jìn)行一下屬性映射的配置:
這樣,我們的模板就有了兩個(gè)屬性 chartTitle 和 dataSource,設(shè)置或讀取它們等同于讀取內(nèi)部構(gòu)件的對(duì)應(yīng)屬性。
例如,我們可以在頁(yè)面中同時(shí)編排兩個(gè)趨勢(shì)圖卡片,分別顯示 CPU 使用率和內(nèi)存使用率:
事件、方法和插槽的映射方式與屬性類似,其中,插槽的映射是系統(tǒng)在運(yùn)行時(shí)通過(guò)模板的展開(kāi)來(lái)實(shí)現(xiàn)的。
例如,假設(shè)我們?yōu)樯厦娴哪0逶偬砑右粋€(gè)附加按鈕的插槽 addon,映射到卡片構(gòu)件的對(duì)應(yīng)插槽上,然后我們?yōu)樯厦娴?CPU 使用率卡片添加一個(gè)查看詳細(xì)信息的附加按鈕。
在模板被展開(kāi)之前的頁(yè)面 storyboard 中,構(gòu)件樹(shù)大約長(zhǎng)這樣:
展開(kāi)后:
每個(gè)模板在運(yùn)行時(shí)將被分別展開(kāi),其中的插槽下的子構(gòu)件也會(huì)被移植到指定的內(nèi)部構(gòu)件的對(duì)應(yīng)插槽上。例如上面的查看詳情的附加按鈕 view-detail 就被移植到了 CPU 使用率所在模板內(nèi)部的卡片構(gòu)件的 addon 插槽中。
自定義模板可以在每個(gè)應(yīng)用內(nèi)維護(hù),也可以選擇在多個(gè)應(yīng)用之間連接共享,還可以單獨(dú)打包并納入平臺(tái)的構(gòu)件資源庫(kù)中,就像普通的構(gòu)件包一樣。
由于模板就是構(gòu)件組合的編排,因此可以輕易地將現(xiàn)有的頁(yè)面編排的某個(gè)部分轉(zhuǎn)換成模板,以便在別處復(fù)用,這樣可以更加平滑地進(jìn)行應(yīng)用的迭代研發(fā)。
以上我們講訴了自定義模板在兼容普通構(gòu)件的基本能力的前提下,通過(guò)對(duì)構(gòu)件組合的封裝,在 EasyMABuilder 中提供了更上層的可復(fù)用單元,從而讓開(kāi)發(fā)者以更高的效率和更好的可靠性完成應(yīng)用的編排。
在低代碼平臺(tái)中,除了組織基本的 UI 界面結(jié)構(gòu)外,還有一項(xiàng)重要的工作是維護(hù)和管理數(shù)據(jù),特別是來(lái)自遠(yuǎn)端的異步數(shù)據(jù)和動(dòng)態(tài)變更的狀態(tài)數(shù)據(jù)。