摘要:為了實(shí)現(xiàn)用戶翻頁查詢個(gè)人名下相關(guān)信息的功能,該文設(shè)計(jì)開發(fā)了一個(gè)翻頁功能接口程序。該接口程序基于Java語言,內(nèi)部封裝了多個(gè)方法。其中,最重要的一個(gè)方法利用了遞歸思想,該方法內(nèi)部分為3個(gè)分支,通過判斷是否滿足最大返回條數(shù)和下一頁標(biāo)志字段來執(zhí)行對應(yīng)的分支。每個(gè)分支均需要調(diào)用下游接口,將下游接口的返回?cái)?shù)據(jù)進(jìn)行逐條篩選,一次或反復(fù)多次調(diào)用下游接口直至滿足查詢條數(shù)。該翻頁接口程序比較簡潔,可讀性強(qiáng),分支結(jié)構(gòu)清晰,可供需要實(shí)現(xiàn)翻頁場景的技術(shù)人員參考。
關(guān)鍵詞:Java;遞歸;翻頁
doi:10.3969/J.ISSN.1672-7274.2024.11.031
中圖分類號:TP 311" " " " " " " " "文獻(xiàn)標(biāo)志碼:A" " " " " " 文章編碼:1672-7274(2024)11-00-03
Design and Implementation of Page Flipping Function Interface Based on Java Language
XIE Shuaihu
(School of Electronic and Information Engineering, Huaibei University of Technology, Huaibei 235000, China)
Abstract: In order to achieve the function of users turning pages to query personal information under their name, this article designs and develops a page turning function interface. This interface is based on the Java language and encapsulates multiple methods internally. Among them, the most important method utilizes recursive thinking, which is internally divided into three branches. The corresponding branch is executed by determining whether the maximum number of returns and the next page flag field are met. Each branch needs to call downstream interfaces to filter the return data of downstream interfaces one by one, and call downstream interfaces repeatedly or repeatedly until the query count is met. The page flipping interface program is relatively simple, highly readable, and has a clear branch structure, which can be used as a reference for technical personnel who need to implement page flipping scenarios.
Keywords: java; recursion; page turning
隨著互聯(lián)網(wǎng)的快速發(fā)展,電子化交易已經(jīng)得到了廣泛普及。各大互聯(lián)網(wǎng)公司均開發(fā)、上線了各具特色的App,不僅方便了用戶使用,而且極大地提高了交易效率。Java是一門面向?qū)ο蟮某绦蛟O(shè)計(jì)語言,相對于C++,該語言比較簡潔,可靠性較高,且除去了最大的程序錯(cuò)誤根源,在互聯(lián)網(wǎng)行業(yè)使用范圍極廣。師艷輝[1]利用Java實(shí)現(xiàn)了業(yè)務(wù)規(guī)則管理系統(tǒng)的設(shè)計(jì)和開發(fā);楊靜[2]利用Java EE技術(shù)實(shí)現(xiàn)了傷口門診患者信息采集系統(tǒng);邢俊鑫[3]認(rèn)為Java自身特有的優(yōu)勢使得計(jì)算機(jī)技術(shù)得到了快速發(fā)展。
在編寫Java程序時(shí),往往把不同功能模塊定義為不同的方法來封裝。這樣不僅使程序的結(jié)構(gòu)清晰明了,而且可以減少重復(fù)工作,縮短代碼。通過for、while、遞歸等算法來反復(fù)調(diào)用該方法,以滿足某種使用場景。夏清歡[4]利用組合數(shù)法、遞歸法和隊(duì)列法三種方法實(shí)現(xiàn)了楊輝三角程序,通過比較分析得出遞歸算法較優(yōu)的結(jié)論。馮林生[5]利用遞歸回溯算法解決了N皇后問題??梢?,遞歸是一種值得研究使用的算法思想。本文基于Java編程語言,利用遞歸的算法設(shè)計(jì)實(shí)現(xiàn)了翻頁功能接口。
1" "遞歸與翻頁的概念
遞歸是一種算法,簡單來說就是自己調(diào)用自己。在遞歸中,函數(shù)將問題分解為更小的子問題,并通過調(diào)用自身來解決這些子問題。但必須有一個(gè)終止條件,否則將會無限循環(huán)調(diào)用,導(dǎo)致棧溢出[6]。當(dāng)程序到達(dá)終止條件時(shí),會將結(jié)果返回給調(diào)用者,然后調(diào)用者利用該結(jié)果進(jìn)行處理,并將處理結(jié)果返回給上一級調(diào)用者。以此類推,直至結(jié)果返回到最初調(diào)用者。
翻頁,顧名思義就是查看上一個(gè)頁面、下一個(gè)頁面或者指定的非當(dāng)前頁面。例如,利用瀏覽器查詢一些信息時(shí)就會使用到翻頁功能。如圖1所示,如果當(dāng)前頁展示的信息不是理想的查找結(jié)果,可以點(diǎn)擊“l(fā)t;”或“gt;”按鈕進(jìn)入上一頁或下一頁來繼續(xù)查詢。
以銀行為例,用戶在使用銀行App過程中,經(jīng)常涉及到查詢個(gè)人名下的下掛賬戶、個(gè)人交易明細(xì)等場景,這些查詢操作均使用到了翻頁功能。
2" "銀行系統(tǒng)架構(gòu)介紹
一般來說,如果電子系統(tǒng)規(guī)模較小、功能較簡單,可以直接編寫簡單的SQL語句,添加對應(yīng)的查詢字段條件即可實(shí)現(xiàn)翻頁功能。比如:
select * from tableName where Clause limit start,count但對于銀行這樣的大型互聯(lián)網(wǎng)系統(tǒng),各子系統(tǒng)及其數(shù)據(jù)庫表結(jié)構(gòu)復(fù)雜多樣,且數(shù)據(jù)庫數(shù)據(jù)是極其重要的,如果數(shù)據(jù)丟失或損毀,會造成極大的經(jīng)濟(jì)損失。為了避免該情況的發(fā)生,銀行系統(tǒng)一般禁止直接跨層操作業(yè)務(wù)子系統(tǒng)數(shù)據(jù)庫。
一般銀行系統(tǒng)架構(gòu)如圖2所示。銀行系統(tǒng)架構(gòu)一般由接入層、中間層和業(yè)務(wù)支撐層組成。
接入層是指用戶終端操作App頁面選擇對應(yīng)的功能,通過按鍵來觸發(fā)后臺業(yè)務(wù)請求。通過無線技術(shù)將請求轉(zhuǎn)發(fā)到中間層進(jìn)行處理。
中間層一般包含手機(jī)銀行、網(wǎng)銀等系統(tǒng),該中間系統(tǒng)主要負(fù)責(zé)根據(jù)業(yè)務(wù)需要組合調(diào)用各業(yè)務(wù)子系統(tǒng)提供的下游接口,同時(shí)將相關(guān)交易信息插入中間系統(tǒng)數(shù)據(jù)庫以便后期生產(chǎn)問題的排查。
業(yè)務(wù)支撐層為各業(yè)務(wù)子系統(tǒng),此類系統(tǒng)可分為客戶信息系統(tǒng)、支付系統(tǒng)等,業(yè)務(wù)子系統(tǒng)根據(jù)中間層上送條件對該業(yè)務(wù)子系統(tǒng)數(shù)據(jù)庫進(jìn)行增刪改查等操作,最后將操作結(jié)果按原路逐層返回。
3" "銀行個(gè)人信息翻頁查詢流程介紹
業(yè)務(wù)支撐層子系統(tǒng)均衡各調(diào)用方整體需要,一般僅提供通用的下游接口(簡稱下游接口)供其調(diào)用。下游接口所支持的調(diào)用條件往往不能全部滿足中間層調(diào)用方的需求,那么就需要中間層在調(diào)用之后自行進(jìn)一步處理后再返回給接入層。在翻頁查詢個(gè)人相關(guān)信息場景中,可通過以下兩種方式實(shí)現(xiàn):
(1)一次性查詢數(shù)據(jù)庫所有的數(shù)據(jù),將其逐條篩選后緩存,然后按每一頁固定條數(shù)返回。
(2)每次調(diào)用下游接口之后,對返回的數(shù)據(jù)進(jìn)行加工處理,如果沒有達(dá)到最大返回條數(shù),則通過遞歸方式來反復(fù)調(diào)用該接口,直至查詢到滿足要求的條數(shù)為止。
眾所周知,銀行生產(chǎn)數(shù)據(jù)量龐大,如果一次性查詢所有的數(shù)據(jù),則需要消耗大量的時(shí)間去操作數(shù)據(jù)庫,如不優(yōu)化處理流程,不僅會大量消耗系統(tǒng)資源,而且查詢時(shí)間過長會極大地影響用戶體驗(yàn)感。因此,銀行系統(tǒng)通常使用方式(2)來實(shí)現(xiàn)。
例如,儲戶為了查看自己的近期消費(fèi)情況,會查詢每一筆的交易金額,一般每一頁會顯示5、10等固定條數(shù)數(shù)據(jù),如果想查詢更早期的記錄,會使用到翻頁功能。
每當(dāng)用戶執(zhí)行查詢操作請求時(shí),該請求首先會進(jìn)入中間層系統(tǒng),中間層系統(tǒng)接口會調(diào)用下游接口,該下游接口支持調(diào)用方上送相關(guān)字段(關(guān)鍵字段如客戶編號、手機(jī)號等)來調(diào)用,下游接口按照這些字段執(zhí)行內(nèi)部對應(yīng)分支操作數(shù)據(jù)庫后,返回相關(guān)字段。
如果下游接口所支持上送字段不全部滿足中間層接口的翻頁查詢要求,則需要中間層自行實(shí)現(xiàn)翻頁查詢功能。中間層接口對這些返回字段進(jìn)一步篩選處理,獲得所需要的字段信息。如處理后的條數(shù)未達(dá)到最大返回條數(shù)且仍有可待查數(shù)據(jù),則繼續(xù)遞歸調(diào)用下游接口來獲取。
4" "翻頁功能接口程序的設(shè)計(jì)與實(shí)現(xiàn)
本文所述翻頁功能接口程序是針對銀行中間層來設(shè)計(jì)與實(shí)現(xiàn)的,提供給接入層直接透傳調(diào)用。
本文利用Java編程語言來實(shí)現(xiàn)銀行中間層系統(tǒng)的翻頁程序編寫。首先定義一個(gè)接口,然后在其內(nèi)部定義一個(gè)方法uploadMessage,該方法是為了組裝調(diào)用下游接口的上送報(bào)文。其關(guān)鍵參數(shù)為上一頁最后一條下游接口返回記錄的相關(guān)字段,該字段將被為了提供給下游接口,作為下游接口執(zhí)行數(shù)據(jù)庫SQL語句的查詢起始位置。如果首次調(diào)用下游接口,該字段可不送入?yún)?shù),則下游接口默認(rèn)從數(shù)據(jù)庫第一條記錄執(zhí)行查詢操作。
定義一個(gè)類DownStreamFieldInformation,該類內(nèi)部定義了用戶需要查詢的相關(guān)字段信息,然后再利用其創(chuàng)建一個(gè)List類型變量Listlt;DownStreamFieldInformationgt; downStreamFieldInformations,用于保存每次翻頁篩選后的數(shù)據(jù)。
定義一個(gè)全局變量int類型的變量itemMax、boolean類型的變量nextFlag:itemMax為每頁最大返回條數(shù),用于和下游接口返回篩選后的條數(shù)相比較,以決定是否需要繼續(xù)遞歸調(diào)用下游接口;nextFlag的作用是根據(jù)下游返回篩選后的條數(shù)是否超過每頁最大返回條數(shù),如果數(shù)據(jù)庫全部記錄少于或等于該條數(shù),該字段被賦值為0,否則賦值為1(表示還有下一條記錄)。
定義一個(gè)查詢方法recursiveQueryMethod,該方法通過遞歸的思想來一次或反復(fù)多次調(diào)用下游接口,直至查到所要求的每頁最大條數(shù)后退出。
翻頁接口內(nèi)部邏輯流程見圖3,具體實(shí)現(xiàn)邏輯如下。
(1)根據(jù)用戶查詢需要,上送相關(guān)關(guān)鍵字段,組裝上送報(bào)文調(diào)用對應(yīng)的方法uploadMessage,然后將其作為調(diào)用下游接口的參數(shù),調(diào)用下游接口。
(2)圖3中虛線部分對應(yīng)于遞歸查詢方法recursive-QueryMethod,主要邏輯為篩選下游接口返回值,將符合要求的返回記錄逐個(gè)添加到downstreamFieldInformations中;然后執(zhí)行downstreamFieldInformations.size()得到其長度,將長度和itemMax進(jìn)行比較,根據(jù)比較結(jié)果執(zhí)行不同分支。
①如果downstreamFieldInformations的長度大于itemMax,則代表數(shù)據(jù)庫符合條件的記錄超過用戶要求的每頁最大條數(shù),則將nextFlag賦值為1,退出方法recursiveQueryMethod。
②下游接口返回字段包括一個(gè)是否有下一頁的標(biāo)志字段downstreamNextFlag(無下一頁為0,有下一頁為1),如果downstreamFieldInformations的長度小于等于itemMax且downstreamNextFlag為0,代表下游數(shù)據(jù)庫已無后續(xù)記錄,則將nextFlag賦值為0,退出方法recursiveQueryMethod。
③如果downstreamFieldInformations的長度小于等于itemMax且downstreamNextFlag為1,則代表數(shù)據(jù)庫仍有相關(guān)記錄可待查詢。利用最后一條記錄返回的字段組裝上送報(bào)文,繼續(xù)調(diào)用下游接口。返回到步驟(2),對下游接口的返回值進(jìn)一步處理。
5" "結(jié)束語
本文設(shè)計(jì)實(shí)現(xiàn)了一種基于Java語言的翻頁功能接口程序,現(xiàn)做如下總結(jié):通過測試分析和生產(chǎn)上線運(yùn)行,該接口程序功能運(yùn)行穩(wěn)定可靠,滿足翻頁業(yè)務(wù)場景需求;該接口程序的核心部分為一個(gè)遞歸方法,其僅有3個(gè)分支,具有結(jié)構(gòu)簡單清晰、可讀性好,且易于理解等優(yōu)點(diǎn)。本文研究成果可對互聯(lián)網(wǎng)其他翻頁業(yè)務(wù)場景功能實(shí)現(xiàn)提供一定的參考價(jià)值,為軟件開發(fā)人員提供技術(shù)思路。
參考文獻(xiàn)
[1] 師艷輝,莊越挺,施堅(jiān)強(qiáng).基于JAVA的業(yè)務(wù)規(guī)則管理系統(tǒng)設(shè)計(jì)和開發(fā)[J].計(jì)算機(jī)應(yīng)用與軟件,2006(1):15-16,19.
[2] 楊靜,華頌文,趙麗萍.基于JavaEE傷口門診患者信息采集系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用與軟件,2017,34(2):142-146.
[3] 邢俊鑫.基于Java編程語言的計(jì)算機(jī)軟件開發(fā)技術(shù)[J].電子技術(shù)與軟件工程,2017(23):47-48.
[4] 夏清歡,應(yīng)沈靜,陶駿,等.基于Java語言的楊輝三角程序設(shè)計(jì)與探討[J].電腦知識與技術(shù),2022,18(33):34-37.
[5] 馮林生,張惠民.用C語言實(shí)現(xiàn)N皇后問題的遞歸程序及分析[J].電腦編程技巧與維護(hù),2016(9):11-12,15.
[6] 黃艷峰,陳偉.遞歸問題的Java實(shí)現(xiàn)[J].電腦知識與技術(shù),2017,13(21):228-229.