90%的人封裝Storage時忽略了一個點!你們知道封裝的意義是啥嗎?
二次封裝 Storage?
關(guān)于 Storage 的封裝問題,其實都是老生常談了,很多人都會在項目中去二次封裝 Storage,為了讓開發(fā)者能更加方便地去使用 localStore、sessionStorage。就比如下方,應(yīng)該是很多人封裝的案例,就是封裝簡單的 讀取、寫入,或者有 刪除、清空:
我們?yōu)槭裁捶庋b?
要不我們回過頭來想一下,我們?yōu)槭裁匆庋b?其實封裝無非就是為了兩個目的:
- 更好地統(tǒng)一維護
- 使用者更方便、更無腦地使用
但是我覺得在一個大項目中以及緊急的開發(fā)進度中,使用者更方便、更無腦地使用才是封裝的第一目的,所以想想剛剛的 LocalStorage 的封裝,真的能讓使用者更方便、更無腦地使用嗎?
我就舉個例子吧,我想存進去一個對象,我這么去存,可以嗎?
顯然是不行的,存進去的對象會被轉(zhuǎn)成字符串 [object Object]:
所以我必須這么去存和取值,利用 JSON.parse、JSON.stringify 去轉(zhuǎn):
只有這么去做才能達到我的目的:
但是這樣不覺得很麻煩嗎?使用者更方便、更無腦地使用是封裝的第一目的,顯然這樣只會讓使用者徒增煩惱?。?!
有的人就說了,可以把 JSON.parse、JSON.stringify 寫在 useLocalStorage 中,但是這個方案只是針對 Object 而已,但是數(shù)據(jù)類型其實有多種:number、string、object、set、map、date 等等,你直接寫在里面,不太合理,你得兼顧所有的數(shù)據(jù)類型才行??!
類型猜測邏輯
所以呢,你如果想要讓使用者更方便、更無腦地使用,我們可以封裝一套類型猜測邏輯。
首先我們必須準備一個函數(shù),這個函數(shù)用來判斷數(shù)據(jù)類型:
但是光是判斷出類型還不夠啊,我們還必須給每一種類型,準備一套 讀取、存入 的策略:
最后只需要:
- 判斷類型
- 獲取類型對應(yīng)的存取策略
- 在存取的時候執(zhí)行對應(yīng)策略
我們現(xiàn)在可以來試試能不能達到目的:
顯然已經(jīng)達到我們想要的效果:
小結(jié)
當然, Storage 的封裝不僅僅是類型猜測這么一個功能點!而且其實封裝還有很多兜底的情況我這里沒寫出來,本文就是想讓大家知道,封裝 Storage 的時候,類型猜測是一個最基本的功能,有這個功能,使用者更方便、更無腦地使用。