毫無疑問,JavaScript 是一種非常靈活的腳本語言,有時候它像一只難以馴服的野馬——你受益于它的靈活性的同時,也要時刻提防它變得失去控制;另一方面,由于 JavaScript 通常會和宿主環(huán)境(比如瀏覽器)緊密結(jié)合,因此缺乏功能強大而簡單易用的開發(fā)工具。在這樣的環(huán)境中,開發(fā)組件或框架成為一項具有挑戰(zhàn)的工作。 這次,我們將以一個簡易的 JavaScript 組件開發(fā)為契機,逐步展開組件的分析、設(shè)計、實現(xiàn)、構(gòu)建和測試等任務(wù),探討組件開發(fā)過程涉及的方方面面。這些探討將分 4 篇陸續(xù)張貼出來(鏈接將在張貼后更新):
- JavaScript組件之旅:分析和設(shè)計
- JavaScript組件之旅:編碼實現(xiàn)和算法
- JavaScript組件之旅:用Ant構(gòu)建組件
- JavaScript組件之旅:測試組件
現(xiàn)在,假設(shè)我們要從頭開始設(shè)計并實現(xiàn)一個隊列管理組件,先讓我們來認識一下隊列:
Queue
圖片來自 Wikipedia.
隊列是一個“先進先出”(FIFO) 的數(shù)據(jù)結(jié)構(gòu),只能向它的尾巴追加項,項從頭部取出使用,這個規(guī)則將應(yīng)用到我們所探討的組件中去。對于隊列,相信學(xué)過 C 或是數(shù)據(jù)結(jié)構(gòu)課程的同學(xué)已有所了解,如果你已經(jīng)把它還給了老師,請使用搜索引擎簡單了解一下隊列的知識。
這個隊列管理組件具體要實現(xiàn)的功能是:它是個任務(wù)管理器,按高、中、低優(yōu)先級維護著三個任務(wù)隊列,客戶(使用者)可以在任何時候把想要執(zhí)行的任務(wù)添加到某個隊列,可以指定任務(wù)運行的上下文,并傳給它必要的數(shù)據(jù)?蛻粢部梢噪S時運行這個隊列,隊列里的任務(wù)按照指定的依賴關(guān)系以合理的方式依次運行。
為了不至于使組件過于簡單而缺乏實用性,我們特意給它添加了一些“糖”:分優(yōu)先級、傳入上下文和數(shù)據(jù)、處理依賴關(guān)系。如果把上面這段理解為需求的話,那么首先,我們要從中提取出最重要的關(guān)鍵詞,它們直接決定了這個組件應(yīng)該如何設(shè)計:
然后,我們從中提煉出涉及的對象:
- 任務(wù)管理器 (TaskManager): 從目前需求來看,它只需要一個實例。
- 隊列 (Queue): 每個優(yōu)先級對應(yīng)一個隊列,由 TaskManager 管理這三個 Queue 實例。
- 任務(wù) (Task): 描述添加的任務(wù),放在相應(yīng)優(yōu)先級的 Queue 里面。
- 依賴 (Dependency): 描述單一的依賴,即 Task1 依賴 Task2, 顯然某個 Task 可能具有多個依賴。
出處:Alipay UED
責任編輯:bluehearts
上一頁 下一頁 JavaScript組件之旅:分析和設(shè)計 [2]
◎進入論壇網(wǎng)頁制作、WEB標準化版塊參加討論,我還想發(fā)表評論。
|