Friday, April 30, 2021

pagination 與 lazy sequence

在開發與 Slack API 整合的模組時,因為部分的 Slack API 會傳回超大量的資料,所以有設計分頁 (pagination) ,而因為需要取得所有的資料,所以設計「走訪所有分頁」的設計,用 loop/recur 來實作。

很巧的是,我後來看到類似的函數,我的老闆 Arne Brasseur 早就寫過了,但是,他是用 lazy-seq 來做。我比較我與他的實作之後,第一個念頭是去想:「是不是很多我本來用 loop/recur 來解的問題,其實也可以用 lazy-seq 來解?」

仔細思考之後,我覺得這個又回到了軟體開發的本質:『軟體開發的本質是對真實的世界建模 (modeling)』

pagination 與 lazy sequence 本來就是一體兩面的東西,都是在建模一個概念:「資料的總量很大,使用者可以先取第一段、視需要再取第二段、再取第三段…,你不需要一口氣就取回所有的資料。」從這個角度去思考之後,可以想到要使用 lazy-seq 去解 pagination 的題目也不奇怪了。