數(shù)據(jù)分頁顯示是一項(xiàng)挺煩人的工作,涉及到數(shù)據(jù)來源,數(shù)據(jù)生成,數(shù)據(jù)顯示這幾個(gè)方面。數(shù)據(jù)有可能是從任意地方以任意方式獲取到的,而且獲取到的數(shù)據(jù)又有可能是經(jīng)過了任意的方式處理之后,再以任意的方式顯示給最終用戶。
這其中的一連串的“任意”就已經(jīng)足夠讓人頭疼了,我們現(xiàn)在要做的就是做出一個(gè)能一勞永逸的解決這一連串的問題的關(guān)于分頁問題的設(shè)計(jì)。
首先要明確的就是:這只是一個(gè)關(guān)于解決分頁問題的設(shè)計(jì)思想,不會提供一份具體實(shí)現(xiàn)這個(gè)設(shè)計(jì)的代碼。
在開始之前,我們要先做一個(gè)假設(shè):對數(shù)據(jù)分頁的最終顯示部分已經(jīng)有具體的解決方案,并對其中的部分代碼做一些改造,使其可以接受實(shí)現(xiàn)了IView接口的對象。
一、我們需要如下的接口:
二、針對 IView 并結(jié)合已經(jīng)存在的具體的數(shù)據(jù)分頁顯示部分的代碼實(shí)現(xiàn)的一個(gè)抽象類
三、按照具體的數(shù)據(jù)來源方式實(shí)現(xiàn)AbstractViewTemplate抽象類
四、整體部分的結(jié)構(gòu)如下所示
數(shù)顯示部分的具體實(shí)現(xiàn)_3 à IView |à AbstractViewTemplate_3
數(shù)據(jù)顯示部分的具體實(shí)現(xiàn)_2 à IView |à AbstractViewTemplate_2
數(shù)據(jù)顯示部分的具體實(shí)現(xiàn)_1 à IView |à AbstractViewTemplate_1
數(shù)據(jù)顯示部分的具體實(shí)現(xiàn) à IView |à AbstractViewTemplate|àViewTemplate_3
|à ViewTemplate_2
|à ViewTemplate_1
|à ViewTemplate
這樣就通過策略模式和模板模式的結(jié)合,將數(shù)據(jù)顯示、數(shù)據(jù)生成、數(shù)據(jù)來源三部分完全分開,并做到了重用和簡化開發(fā)。
每種數(shù)據(jù)顯示部分的具體實(shí)現(xiàn),只需要實(shí)現(xiàn)一個(gè)針對其實(shí)現(xiàn)的AbstractViewTemplate抽象類即可。在之后的具體的業(yè)務(wù)開發(fā)過程中,關(guān)系的只是ViewTemplate部分中的兩個(gè)方法, 只需要針對業(yè)務(wù)的具體需求,繼承AbstractViewTemplate實(shí)現(xiàn)一個(gè)類似ViewTemplate的類即可。最終在AbstractViewTemplate中通過createTable()方法將展現(xiàn)所需要的數(shù)據(jù)傳送給數(shù)據(jù)顯示部分。
snoics