国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

React 可視化開發(fā)工具 shadow-widget 最佳實踐(下)

wenshi11019 / 1826人閱讀

摘要:本文介紹應(yīng)用于通用開發(fā)的最佳實踐,只聚焦于典型場景下最優(yōu)開發(fā)方法。結(jié)合的可視化設(shè)計新近推出版本,設(shè)計方式在體系得到完整支持了。注此項為建議,不強制面板之下不能直接放行內(nèi)構(gòu)件,要在面板下放置類構(gòu)件后,才能放類構(gòu)件。

本文介紹 "React + Shadow Widget" 應(yīng)用于通用 GUI 開發(fā)的最佳實踐,只聚焦于典型場景下最優(yōu)開發(fā)方法。分上、下兩篇講解,下篇講述正交框架分析模式與常用調(diào)測方法。

查閱上篇 請點擊這里,Shadow Widget 開源項目 在這里。

1. Controller View 與 View

典型的 Flux 框架中,Store 與 View 之間的關(guān)系如下:

本圖摘自 fluxxor.com 的 “What is Flux?” 一文,Store 中的數(shù)據(jù)傳遞給一個 Component,這個 Component 又通過 props 屬性驅(qū)動多層 Component 子節(jié)點來展示界面。在這種數(shù)據(jù)傳遞關(guān)系中,多個 Component 都是 View,但從 Store 獲得數(shù)據(jù)的那個 View 比較特殊,稱為 "Controller View"(見上圖)。將 Controller View 與 View 對應(yīng)到 Shadow Widget 的 MVVM 框架,Controller View 就是 VM(ViewModel),由 VM 驅(qū)動的子級 Component 就是 V (View)。

然而現(xiàn)實編程并非上圖那么簡單,Controller View 的子節(jié)點,也即 View 節(jié)點,有時很復(fù)雜,其外部若只依賴從上級 props 傳遞下來的數(shù)據(jù)來驅(qū)動渲染,會很別扭。開發(fā)者常不由自主的放棄 “純凈” 的編程模式,突破限制,讓 View 也從全局變量讀數(shù)據(jù),即,變相的把部分數(shù)據(jù)從 Store 分離出去,改用全局變量表達,或者干脆讓 View 也直接從 Store 讀數(shù)據(jù),而不是只用 Controller View 代傳的數(shù)據(jù)。

Shadow Widget 將問題簡化,既然 Store 主要用于存貯數(shù)據(jù),那就還原它的數(shù)據(jù)特性,作為數(shù)據(jù),在哪兒定義關(guān)系不大,直接拿 Component 的屬性存貯數(shù)據(jù)就好,將 Store 并入 Component 沒有不可逾越的障礙,當(dāng)然,前提是我們已設(shè)計了 “雙源屬性” 與 “W 樹” 機制。然后,Controller View 及其下級多個 View,合起來視作一個 FB(Functionarity Block),在同一 Functionarity Block Namespace 下用 javascript 定義各節(jié)點行為。把相關(guān)節(jié)點的投影定義寫一起,很大程度消除了節(jié)點間隔閡,因為,你能隨時可以定義一個變量用來傳數(shù)據(jù)。

2. 正交框架分析模式

接本文上篇的例子,假定我們在原功能基礎(chǔ)上,再增加 “全局配置” 的功能,提供 3 個可選項:“自動選 Celsius 還是 Fahrenheit 格式”、“固定用 Celsius”、“固定用 Fahrenheit”。其中,第一個選項 Auto(自動選格式)依據(jù)瀏覽器特性推斷國別信息,然后智能選擇 Celsius 或 Fahrenheit。

新增如下界面設(shè)計:

相應(yīng)的,增加一個 Functionarity Block,JS 編碼如下:

(function() { // functionarity block

var configComp = null;

idSetter["config"] = function(value,oldValue) {
  // ...
};
})();

該 FB 的入口節(jié)點是 configComp。再接著細化設(shè)計,我們該將 configComp 定義挪到全局變量定義區(qū),因為該節(jié)點在兩個 FB 功能塊都用到。

為方便講述起見,我們把這兩個 FB 分別稱為 config 與 calculator,以 FB 分布為橫軸,以 W 樹為縱軸,W 樹中的節(jié)點是層層串聯(lián)的,繪制這兩個 FB 的分布如下圖:

當(dāng)我們整體設(shè)計 GUI 時,應(yīng)以 MVVM 方式思考。結(jié)合本例,也就是規(guī)劃 config 與 calculator 兩個 “功能塊”,確定各功能塊的入口節(jié)點,以及它的上下層串接關(guān)系。而處理各個功能塊之間聯(lián)動關(guān)系時,應(yīng)切換到 Flux 單向數(shù)據(jù)流思考方式。

總結(jié)一下,整個 HTML 頁面是一顆 DOM 樹,是縱向的,在這顆樹劃分若干功能塊的過程,是基于 MVVM 為主的設(shè)計過程;而處理各功能塊之間橫向聯(lián)系,則以 FRP 思路為主導(dǎo)。這一縱一橫的思考方式,我們稱為 “正交框架” 分析模式

說明,F(xiàn)lux 是 FRP(Functional Reactiv Programming)開發(fā)思想的一種實現(xiàn),對于 React 開發(fā),上面所提 Flux 與 FRP 基本等效。

至于 FB 之間的功能如何交互,如果處理邏輯簡單,不妨在相關(guān) FB 代碼塊中直接寫代碼,如果邏輯復(fù)雜,不妨取相關(guān) FB 的共有父節(jié)點作為入口節(jié)點,新設(shè)一個 FB 功能塊。取共有父節(jié)點的主要作用是,該父節(jié)點從創(chuàng)建到 unmount,可以覆蓋其下所有節(jié)點的生存周期,在它的 idSetter 函數(shù)中編程會方便一些。

3. 掛載數(shù)據(jù)來驅(qū)動調(diào)測

在可視設(shè)計器中開發(fā)界面的過程,可能存在破壞式重構(gòu),比如你在某個 FB 的入口節(jié)點指定 data 屬性值,然后它的子節(jié)點根據(jù) data 取值自動生成子節(jié)點,如果你給定的 data 初始值格式不對,其下子節(jié)點會無法生成。所給初值不對可能因為設(shè)計變化了,你的 data 格式還沒來得及調(diào)整。

為了最大幅度減少上述破壞式重構(gòu)帶來錯誤,在設(shè)計界面時,我們建議用作驅(qū)動源頭的數(shù)據(jù)初值應(yīng)取 “空” 值,比如賦給 null[] 之類的值。

界面設(shè)計過程中,若想查看不同數(shù)據(jù)初值會驅(qū)動什么樣的界面形態(tài),不妨啟用 W.$dataSrc 定義,比如前面例子界面缺省顯示 Celsius 溫度格式,因為 ".body.calculator.field" 節(jié)點的 scale 屬性初值是 "c",現(xiàn)在我們想檢查 scale="f" 界面是否正確。按如下方式使用兩行代碼即可:

if (!window.W) { window.W = new Array(); W.$modules = [];}
W.$modules.push( function(require,module,exports) {

var W = require("shadow-widget");

var dataSrc = W.$dataSrc = {};
dataSrc[".body.calculator.field"] = { "scale": "f" };

});

其中,var dataSrc = W.$dataSrc = {} 表示啟用 W.$dataSrc,缺省是不啟用的。另一句 dataSrc[".body.calculator.field"] = { "scale": "f" },用來預(yù)定義哪個節(jié)點要附加哪些屬性的初值。

上面代碼可以寫入獨立的 js 文件,多個此類 js 文件可構(gòu)造不同的調(diào)測場景,然后用

上圖是其中一個樣板頁,該拖入哪個樣板,看一眼就能區(qū)分,不再受那么多 class 類名困擾了。

5. 注意事項

剛開始使用 Shadow Widget 時,大家可能不適應(yīng)它的可視化設(shè)計,容易忘掉幾項設(shè)計約束,簡單舉幾個例子:

在根節(jié)點(即 ".body" 節(jié)點)下只能擺放面板與絕對定位的構(gòu)件(如 ScenePage 等),即首層節(jié)點要么是 Panel 類構(gòu)件,要么是指定 position="absolute" 的非行內(nèi)構(gòu)件。

絕對定位的構(gòu)件,應(yīng)掛到根節(jié)點,不宜在其它地方出現(xiàn)。(注:此項為建議,不強制)

面板之下不能直接放行內(nèi)構(gòu)件,要在面板下放置 P 類構(gòu)件后,才能放 Span 類構(gòu)件。

一個構(gòu)件要么啟用 "html." 屬性,要么使用它的若干子節(jié)點,兩者只能二選一,若定義子節(jié)點了,以 "html." 表示文本將被忽略。

總之,與界面設(shè)計打交道,設(shè)計總是具體的,你要面對各類封裝好的構(gòu)件,不少構(gòu)件有特殊要求,《Shadow Widget 用戶手冊》有全面介紹,有必要通讀該手冊。

6. 關(guān)于團隊分工

Shadow Widget 最佳實踐還建議團隊成員要按技能分工,至少有兩個工種,其一是能運用他人已封裝好的 WTC 類或庫化 UI,進行 GUI 開發(fā);其二是為他人封裝 WTC 類或庫化 UI。前者對技能要求不高,后者則要求深入掌握 React 與 Shadow Widget 知識。

對于微型團隊,也應(yīng)按上述分工的思路規(guī)劃您的產(chǎn)品開發(fā),因為這兩種分工的目標不同,前者著眼短期目標,盡快把產(chǎn)品做出來,把界面弄漂亮些,后者著眼中長期目標,用封裝庫提高開發(fā)復(fù)用率。即使是單人團隊,同樣需要分工,無非在時間上錯開,一段時間承擔(dān)一種角色,另一段時間換一個角色。

Shadow Widget 當(dāng)前的 WTC 類與界面庫還不夠豐富,但它的架子已搭好,起點不低。它的定制擴展能力出色,已通過一些上規(guī)模代碼的產(chǎn)品檢驗,如 shadow-bootstrappinp-blogs 等,具備一定成熟度。我們有理由相信,這個產(chǎn)品會隨著擴展庫逐漸增多,前景越來越光明。

(本文完)

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/89014.html

相關(guān)文章

  • React 可視開發(fā)工具 shadow-widget 最佳實踐(上)

    摘要:上例的功能塊定義了如下節(jié)點樹入口節(jié)點是面板,結(jié)合該節(jié)點的函數(shù)書寫特點,我們接著介紹最佳實踐如何處理功能塊之內(nèi)的編程。 本文介紹 React + Shadow Widget 應(yīng)用于通用 GUI 開發(fā)的最佳實踐,只聚焦于典型場景下最優(yōu)開發(fā)方法。分上、下兩篇講解,上篇概述最佳實踐,介紹功能塊劃分。 showImg(https://segmentfault.com/img/bVWu3d?w=6...

    techstay 評論0 收藏0
  • React 可視開發(fā)工具 Shadow Widget 非正經(jīng)入門(之一:React 三宗罪)

    摘要:前言非正經(jīng)入門是相對正經(jīng)入門而言的。不過不要緊,正式學(xué)習(xí)仍需回到正經(jīng)入門的方式。快速入門建議先學(xué)會用拼文寫文檔注冊一個賬號,把庫到自己名下,然后用這個庫寫自己的博客,參見這份介紹。會用拼文寫文章,相當(dāng)于開發(fā)已入門三分之一了。 本系列博文從 Shadow Widget 作者的視角,解釋該框架的設(shè)計要點,既作為用戶手冊的補充,也從更本質(zhì)角度幫助大家理解 Shadow Widget 為什么這...

    dongxiawu 評論0 收藏0
  • 重磅:前端 MVVM 與 FRP 的升階實踐 —— ReRest 可視編程

    摘要:是前端開發(fā)領(lǐng)域新興的方法論體系,它繼承了與編程理念,在技術(shù)上有不少創(chuàng)新。但專利與開源協(xié)議是平行的兩個世界,改底層也不大容易解決問題。此外,要求在中結(jié)合各屬性的是否變化,判斷是否該觸發(fā)更新。 ReRest (Reactive Resource State Transfer) 是前端開發(fā)領(lǐng)域新興的方法論體系,它繼承了 MVVM 與 FRP 編程理念,在技術(shù)上有不少創(chuàng)新。本文從專利稿修改而來...

    Cciradih 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<