版本控制與過濾器設計

2021-09-01 14:54:32 字數 1255 閱讀 7346

2023年的第一篇部落格,祝大家新年快樂。有段時間沒維護部落格了,太懶了,也不知道該寫些什麼,寫學習心得感覺不如看書來的直接,寫技術應用吧又沒那麼多貨。最近不是很忙,前天抽空把過濾部分的**剝離了個原型出來,談不上覆雜高深,權當拋磚引玉,大家有好的想法歡迎交流學習。

之前我部落格中談到關於過濾器與快取,需要指出一點我們所需要過濾掉的資料並非是毫無用處的髒資料,而是在某些特定環境下不合適的資料。例如db內存放了乙個榜單a,對與某個應用的不同版本v1、v2、v3能處理的分別是a的乙個子集b、c、d。應對這種情況,有幾種處理方式:

第一種,在分別根據版本1、2、3在dao層維護三份資料,也即需要不同的查詢指令(可以認為這也是一種過濾),毫無疑問這種方案是成立的,然而問題是如果每個版本應用都需要維護不同的資料介面維護以及**的整潔度都會受到影響;

第二種,在db為每個版本維護不同的資料來源,即在資料建立時為不同版本建立合適的資料列表,這種設計在最初情況下可能是生效的,可是版本迭代以及資料更新將會給資料維護和運營造成巨大壓力;

第三種,便是我採用的過濾器方案。這一方案是也是建立在方案一和方案二至上的,我使用sql來完成對資料的篩選(查詢滿足某系條件的資料集合),對不同端無法公用的資料當然需要分別維護,在此基礎上我引入了過濾器來解決客戶端版本迭代功能差異對資料的不同要求。假設dao層取出資料集合a,在facade層通過對版本的識別,對於v1我過濾掉a-b部分,對於v2過濾掉a-c(快取可以施加在過濾完成之後的資料至上)。這種方式的好處是:1.為版本向後相容提供了便利,倘若資料集合a在不斷擴大,響應的v1版本需要過濾的條件也增多,只需要新增入新的過濾器便能夠完成這一工作;2.為**復用提供可能性,對與v1、v2可能存在共有的過濾條件,針對該條件設計的過濾器便可以進行復用。

說完過濾器,再簡單談談版本控制,版本控制最重要的是要做到相容,向前的相容自然不必說,未來的需求永遠無法預知所以向後的相容也很重要。我們採用了功能碼來區分每個不同版本對資料的要求差異,為什麼不用版本號區分?如果採用版本號,意味著需要給每個版本建立分支,維護難度太大。例如v1支援功能b能處理的資料為b,v2支援功能b、c能處理的資料為c(c包含b),v3支援功能b、c、d能處理的資料為a(a包含c),對於v1、v2、v3我分別設定了乙個功能碼1、11、111,左起每一位1分別表示支援bcd功能,v1的碼值為1支援功能b那麼就需要過濾掉a-c、c-b這部分資料,對於v2需要過濾掉a-c,v3支援全量的資料a無需過濾。當資料集a擴充至x,v1的碼值是不改變的1,支援資料也為b,需要過濾的資料則為x-a、a-c、c-b,即新增了過濾x-a資料的filter,而這個filter對於版本v2、v3同樣適用,這就完成了向後相容以及**復用的設計需求。

Vue 過濾器案例(全域性過濾器和區域性過濾器)

doctype html en utf 8 viewport content width device width,initial scale 1.0 js vue 2.4.0 js script 過濾器 title head 兩個過濾器的名稱都為msgformat,但是控制不同作用,乙個是全域性的...

過濾器(6) 過濾器的攔截

本系列部落格彙總在這裡 過濾器彙總 我們來做個測試,寫乙個過濾器,指定過濾的資源為 index.jsp,然後我們在瀏覽器中直接訪問 index.jsp,你會發現過濾器執行了!但是,當我們在 helloservlet 中使用伺服器端的跳轉request.getrequestdispathcer ind...

hbase 過濾器 scala 過濾器系列

過濾器系列710 c30810 賓士 c64 1500 004 09411 04 004094 3504 h12 110 2 w11102 2 wdk724 wdk725 沃爾沃 3825778 8149064 3825133 3825215 466634 11110668 11711074 477...