|
本文是《構建高可伸縮性的WEB交互式系統》系列文章的第三篇,以網易的NEJ框架為例,對模塊的可伸縮性進行分析介紹。
實例分析
NEJ框架根據前兩篇的描述對此套架構模式做了實現,下面我們用具體實例講解如何使用NEJ中的模塊調度系統來拆分一個復雜系統、開發測試模塊、整合系統等。
系統分解
繪制層級關系圖
當我們拿到一個復雜系統時,根據交互稿可以繪制出組成系統的模塊的層級關系圖,并確定系統對外可訪問的模塊。
抽象依賴關系樹
從模塊的層級關系圖中,我們可以非常方便的抽象出模塊的依賴關系樹:
然后,我們將抽象出來的依賴關系樹根據UMI規則進行格式化。格式化的主要操作包括:
- 增加一個名稱為“/”的根結點(也可將“m”結點改為“/”)
- 每個結點增加“/”的子節點作為默認節點
至此輸出的依賴關系樹,具有以下特性:
- 任何一個結點(除根結點外)到根結點路徑上的結點名稱用“/”分隔組合起來即為結點的UMI值,如list結點的UMI值為/m/blog/list
- 任何結點上的模塊都依賴于他祖先結點(注冊有模塊)上的模塊存在,如blog結點和list結點均注冊有模塊,則list結點上的模塊顯示必須以blog結點上的模塊的顯示為先決條件
確定對外模塊注冊節點
五個對外可訪問的模塊:日志、標簽、基本資料、個人經歷、權限設置,在依賴關系樹中找到合適的結點(葉子結點,層級關系樹在依賴關系樹中對應的結點或“/”結點)來注冊對外可訪問的模塊:
確定布局模塊注冊節點
從可訪問模塊注冊的結點往根結點遍歷,凡碰到兩模塊交叉的結點即為布局模塊注冊結點,系統所需的組件相關的模塊可注冊到根結點,這樣任何模塊使用的時候都可以保證這些組件已經被載入。
映射模塊功能
原則:結點的公共父結點實現結點上注冊的模塊的公共功能。
舉例:blog結點和setting結點的公共父結點為m結點,則我們可以通過切換blog模塊和setting模塊識別不變的功能即為m模塊實現的功能,同理其他模塊。
分解復雜模塊
進一步分解復雜模塊,一般需要分解的模塊包括:
- 可共用模塊,比如日志列表,可以在日志管理頁面呈現,也可以在彈層中顯示
- 邏輯上無必然聯系的模塊,如日志模塊中日志列表與右側的按標簽查看的標簽列表之間沒有必然的聯系,任何一個模塊的移除或添加都不會影響到另外一個模塊的業務邏輯
至此我們可以得到兩棵系統分解后的依賴關系樹——對外模塊依賴關系樹:
以及私有模塊依賴關系樹:
繪制模塊功能規范表
本例中為了說明分解過程,將所有可分解的模塊都做了分解。實際項目看具體情況,比如這里的/m模塊組合的/?/tab/模塊的功能可以直接在/m模塊中實現,而不需要新建一個/?/tab/模塊來實現這個功能。
規范表范例如下所示:
構建目錄
項目目錄
項目目錄的構建如下圖所示:
各目錄說明
webroot 項目前端開發相關目錄 |- res 靜態資源文件目錄,打包時可配置使用到該目錄下的靜態資源帶版本信息 |- src 前端源碼目錄,最終發布時該目錄不會部署到線上 |- html |- module 單頁面模塊目錄,系統所有模塊的實現均在此目錄下 |- app.html 單頁面入口文件
it知識庫:構建高可伸縮性的WEB交互式系統(下),轉載需保留來源!
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。