主選單,就是那種後台管理系統裡面,透過設定可以控制是否顯示某選單,或某選單裡的某個功能。
關於它的設計和實現方式,我個人總結大概有以下幾種。
(1)
用資料庫表保存
一般主選單都是樹狀結構,基於用傳統關係型資料庫來保存的方案,有2種。
(1-1)
用1個表格的方案,則表格裡麵包含1個id和parentid來關聯父子關係。
(1-2)
用2個表格的方案,則1個表格用來記錄選單父子關係,另一個表純記錄選單的資訊。
資料傳遞方案也有2種:
(1-1-1)
後端查詢出數據,透過後台程式碼循環構建,或用sql事務建構好樹狀結構,再傳遞給前端
(1-1-2)
後端查詢出數據,傳給前端,讓前端自行建構樹狀結構
#(2)
用json保存
這個是我這個問題主要想了解的方式,不知道你們是否有用過,則直接把主選單的父子節點資訊建構成json格式,存到一個設定表裡,或一個json檔案裡。這樣可以免去構造樹結構的麻煩。但由於是純json格式,人工維護的話,資料結構不複雜的情況下還可以,如果遇到複雜的情況,可能需要寫一個維護介面來維護,這時候由於json並沒有類似sql的查詢語法,前端(假設是js)寫增刪查改起來會特別複雜(特別是刪除)。
這個。 。 。 。不知道你們平常用的是什麼方式?可以的話希望可以簡要的說說,
同時,如果對(2)用json保存
這種方式有什麼看法的話,也可以說說。
綜合考慮效能,可擴展性,可維護性等等。
方案要根據技術來選,就你給出的兩種方案來說,第一種比較適合關聯式資料庫實現,第二種比較適合 NoSQL 資料庫實作。
綜合來看更推薦第一種方案,將選單結構 flatten 在後期設計使用者、使用者群組、權限等模組的時候會比較方便。而使用 JSON 的方案進行這些操作就會比較複雜。