国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于策略模式的存儲(chǔ)過(guò)程使用研究

2017-12-29 04:25:15
關(guān)鍵詞:調(diào)用對(duì)象模塊

許 俊

(四川職業(yè)技術(shù)學(xué)院計(jì)算機(jī)科學(xué)系,四川 遂寧 629000)

基于策略模式的存儲(chǔ)過(guò)程使用研究

許 俊

(四川職業(yè)技術(shù)學(xué)院計(jì)算機(jī)科學(xué)系,四川 遂寧 629000)

應(yīng)用策略模式來(lái)研究返回?cái)?shù)據(jù)結(jié)果集的存儲(chǔ)過(guò)程在前端高層模塊的使用.在策略模式設(shè)計(jì)思維下,每個(gè)存儲(chǔ)過(guò)程調(diào)用視為一種策略,每一種策略即是一個(gè)類(lèi),去實(shí)現(xiàn)它上層對(duì)策略家族的抽象.本文按有參和無(wú)參兩類(lèi)存儲(chǔ)過(guò)程作詳細(xì)分析,設(shè)計(jì)類(lèi)圖,并實(shí)現(xiàn).所研究的使用模式,進(jìn)一步提高了系統(tǒng)的復(fù)用性、可維護(hù)性.

策略模式;數(shù)據(jù)庫(kù);存儲(chǔ)過(guò)程

1 策略模式

策略模式是定義了算法家族,封裝每一個(gè)算法,每一個(gè)算法能夠互相替換.算法家族的各個(gè)算法完成相同的操作,只不過(guò)實(shí)現(xiàn)的方式不同而已.調(diào)用它們的方式是同樣的,這樣就減少了各個(gè)算法類(lèi)與調(diào)用算法的類(lèi)的耦合.

策略模式的適用性是下面的范圍:多個(gè)關(guān)聯(lián)的類(lèi)只是它們的操作有一些差異;稍有變異的實(shí)體使用一個(gè)算法;需要對(duì)調(diào)用者隱藏算法和數(shù)據(jù)結(jié)構(gòu).策略模式的一般類(lèi)圖如圖1:

圖1 策略模式的一般類(lèi)圖

Stategy:指策略,定義全體公共的接口,Context通過(guò)些接口調(diào)用 ConcreteStrategyA、ConcreteStrategyB、ConcreteStrategyC 等定義的算法.

ConcreteStrategy:具體策略,以Strategy實(shí)現(xiàn)某個(gè)具體的算法.

Context:策略相關(guān)文本.引用Strategy對(duì)象,用一個(gè)具體的策略 ConcreteStrategyA、ConcreteStrategyB、ConcreteStrategyC 等對(duì)象作配置.

2 存儲(chǔ)過(guò)程的一般使用方式

在前端應(yīng)用開(kāi)發(fā)中,簡(jiǎn)單分層結(jié)構(gòu)設(shè)計(jì)常常把存儲(chǔ)過(guò)程調(diào)用封裝到一個(gè)數(shù)據(jù)訪(fǎng)問(wèn)類(lèi),用戶(hù)層通過(guò)調(diào)用這個(gè)類(lèi)的方法去調(diào)用存儲(chǔ)過(guò)程,使界面層UI與數(shù)據(jù)訪(fǎng)問(wèn)層DAO初步解耦.迪米特法則要求,一個(gè)對(duì)象應(yīng)該最少地了解其它對(duì)象,一個(gè)類(lèi)對(duì)其調(diào)用類(lèi)的屬性、方法等應(yīng)盡量少知道.因而這種應(yīng)用方式的設(shè)計(jì),有一個(gè)顯著的缺陷,那就是數(shù)據(jù)訪(fǎng)問(wèn)層DAO會(huì)把所有的public方法暴露給客戶(hù)端UI,而不管客戶(hù)端的某個(gè)調(diào)用是否真正需要訪(fǎng)問(wèn)那么多方法,會(huì)導(dǎo)致前端UI與數(shù)據(jù)層的耦合度升高.如果把對(duì)每個(gè)存儲(chǔ)過(guò)程的調(diào)用封裝為一個(gè)職責(zé)單一的類(lèi),這樣與前端耦合很低,但面對(duì)眾多的存儲(chǔ)過(guò)程時(shí),這種過(guò)度的設(shè)計(jì)增加了系統(tǒng)開(kāi)發(fā)維護(hù)的復(fù)雜性.

3 基于策略模式的存儲(chǔ)過(guò)程使用設(shè)計(jì)

3.1 設(shè)計(jì)思路

本文另辟蹊徑,應(yīng)用策略模式來(lái)研究存儲(chǔ)過(guò)程在前端高層模塊的使用.在策略模式設(shè)計(jì)思維下,每個(gè)存儲(chǔ)過(guò)程調(diào)用視為一種策略,每一種策略即是一個(gè)類(lèi),需要實(shí)現(xiàn)它上層的抽象,上層類(lèi)是整個(gè)策略家族的抽象.

本文以執(zhí)行查詢(xún)語(yǔ)句返回?cái)?shù)據(jù)結(jié)果集的存儲(chǔ)過(guò)程為研究對(duì)象,把研究對(duì)象分為無(wú)參數(shù)和有參數(shù)的存儲(chǔ)過(guò)程,遵從接口隔離原則,策略抽象也分為兩類(lèi),一類(lèi)是其抽象的方法中不帶參數(shù),是所有無(wú)參數(shù)調(diào)用存儲(chǔ)過(guò)程的抽象表達(dá),另一類(lèi)是其抽象的方法中帶參數(shù),是所有帶參數(shù)的存儲(chǔ)過(guò)程調(diào)用的抽象表達(dá).每個(gè)具體的策略實(shí)現(xiàn)一個(gè)抽象策略中的方法,即對(duì)數(shù)據(jù)庫(kù)中的存儲(chǔ)過(guò)程進(jìn)行調(diào)用.封裝策略的類(lèi)也因此有帶參數(shù)的策略類(lèi)和不帶參數(shù)的策略類(lèi),具體策略根據(jù)其實(shí)現(xiàn)的抽象類(lèi),被封裝到相應(yīng)的策略封裝類(lèi)中,屏蔽了高層模塊對(duì)低層策略算法的直接訪(fǎng)問(wèn).此時(shí)數(shù)據(jù)訪(fǎng)問(wèn)類(lèi)DAO成為抽象類(lèi)的protected修飾的內(nèi)部屬性,只提供給其子類(lèi)訪(fǎng)問(wèn),也不與高層模塊耦合了.

3.2 類(lèi)圖

現(xiàn)有三個(gè)存儲(chǔ)過(guò)程,up_teacher不帶參數(shù)查詢(xún)老師信息,up_studentByClass按班級(jí)查詢(xún)學(xué)生信息,班名是參數(shù),up_reportByCourse以課程名為參數(shù),查詢(xún)指定的一門(mén)課程成績(jī),由此識(shí)別出三個(gè)類(lèi):老師類(lèi)Teacher、學(xué)生類(lèi)Student、成績(jī)報(bào)表類(lèi)Report.畫(huà)出類(lèi)圖如圖2:

圖2 存儲(chǔ)過(guò)程的相關(guān)類(lèi)圖

StrategyWithoutPara是無(wú)參數(shù)策略的抽象類(lèi),其中包含抽象DAO屬性和不帶參數(shù)返回?cái)?shù)據(jù)集的方法getDataSet(),Teacher類(lèi)繼承此抽象類(lèi),覆寫(xiě)它的getDataSet方法,間接調(diào)用了DAO中的up_teacher存儲(chǔ)過(guò)程.

StrategyWithtPara是有參數(shù)策略的抽象,其中也包含DAO屬性和帶參數(shù)返回?cái)?shù)據(jù)集的方法getDataSet(ArrayListParaList),Student類(lèi)繼承此抽象類(lèi),覆寫(xiě)它的getDataSet(ArrayListParaL-ist)方法,間接調(diào)用了DAO中的up_studentBy-Class存儲(chǔ)過(guò)程.

ContextWithoutPara類(lèi)封裝所有方法中不帶參數(shù)的具體策略,即具體算法或行為getDataSet(),維護(hù)對(duì)一個(gè)StrategyWithoutPara對(duì)象的引用.

ContextWithPara類(lèi)封裝所有方法中帶參數(shù)的具體策略,具體算法或行為getDataSet(ArrayList ParaList),維護(hù)對(duì)一個(gè)StrategyWithPara對(duì)象的引用.

DAO類(lèi)封裝了對(duì)后臺(tái)數(shù)據(jù)庫(kù)連接管理、數(shù)據(jù)訪(fǎng)問(wèn)、存儲(chǔ)過(guò)程調(diào)用,作為抽象類(lèi)StrategyWithtPara和StrategyWithtoutPara的屬性對(duì)象,提供方法供抽象類(lèi)調(diào)用.

Client場(chǎng)景類(lèi)模擬高層模塊,聲明具體的策略和對(duì)具體策略的封裝類(lèi)ContextWithout、ParaStrategyWithtPara,執(zhí)行封裝后的方法getDataSet、getDataSet(ArrayListParaList).

如果系統(tǒng)功能需要擴(kuò)展,如查詢(xún)某門(mén)課程成績(jī),只需添加Report子類(lèi),并繼承Strategy WithtPara類(lèi),在覆寫(xiě)帶參數(shù)的方法getDataSet(ArrayListParaList)里,調(diào)用up_reportByCourse即可,高層模塊通過(guò)Report類(lèi)產(chǎn)生新的類(lèi),實(shí)現(xiàn)業(yè)務(wù)的變化對(duì)系統(tǒng)的最小化影響,不用修改其它類(lèi),只作橫向擴(kuò)展,也符合“對(duì)擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉”的開(kāi)閉原則,提高了系統(tǒng)的復(fù)用性、可維護(hù)性.

4 基于策略模式的存儲(chǔ)過(guò)程使用實(shí)現(xiàn)

高層模塊的調(diào)用極其簡(jiǎn)略,代碼調(diào)用也很簡(jiǎn)潔,當(dāng)需要使用哪一個(gè)具體的策略時(shí),實(shí)例出它對(duì)應(yīng)的對(duì)象,放入封裝類(lèi)里,再執(zhí)行它的封裝方法,過(guò)程也十分明了。采用繼承和多態(tài)的對(duì)象機(jī)制,策略模式使得系統(tǒng)以增加新類(lèi)實(shí)現(xiàn)其抽象接口的方式方便地?cái)U(kuò)展了系統(tǒng)。

[1]AlanShalloway.設(shè)計(jì)模式解析[M].徐言聲,譯.北京:人民郵電出版社,2016.

[2]程杰.大話(huà)設(shè)計(jì)模式[M].北京:清華大學(xué)出版社,2007.

[3]秦小波.設(shè)計(jì)模式之禪[M].北京:機(jī)械工業(yè)出版社,2011.

[4]許俊.對(duì)非1NF關(guān)系查詢(xún)的探討[J].四川職業(yè)技術(shù)學(xué)院學(xué)報(bào),2013,(5).

[5]許俊.對(duì)Oracle多表關(guān)聯(lián)更新的應(yīng)用研究[J].四川職業(yè)技術(shù)學(xué)院學(xué)報(bào),2015,(2).

On the Usage of Stored Procedure Based on Strategy Pattern

XU Jun
(Computer Science Department, Sichuan Vocational and Technical College, Suining Sichuan,629000)

The paper applies the strategy pattern to study the use of the stored procedure of the return data result set at the front end of the high-level module. Under the design of strategy pattern,each stored procedure call is treated as a strategy,and each strategy is a class,to achieve the abstraction of the upper to the strategy family.With a detailed analysis of the two types of storage processes (with and without parameters),we design the class diagram and realize the use of the pettern to further improve the system’s reusability and maintainability.

Strategy Patttern;Database;Stored Procedure

張隆輝

TP311.1

A

1672-2094(2017)05-0147-04

2017-05-26

四川省教育廳重點(diǎn)科研項(xiàng)目“基于NoSQL大數(shù)據(jù)技術(shù)的信息搜索方案研究”(編號(hào):15ZA0348)、“網(wǎng)絡(luò)大數(shù)據(jù)測(cè)試基準(zhǔn)研究”(編號(hào):15ZA0349)成果之一.

許 俊(1969-),男,四川蓬溪人,四川職業(yè)技術(shù)學(xué)院副教授,碩士.研究方向:軟件工程,數(shù)據(jù)庫(kù)技術(shù).

猜你喜歡
調(diào)用對(duì)象模塊
神秘來(lái)電
睿士(2023年2期)2023-03-02 02:01:09
28通道收發(fā)處理模塊設(shè)計(jì)
“選修3—3”模塊的復(fù)習(xí)備考
核電項(xiàng)目物項(xiàng)調(diào)用管理的應(yīng)用研究
LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
攻略對(duì)象的心思好難猜
意林(2018年3期)2018-03-02 15:17:24
基于系統(tǒng)調(diào)用的惡意軟件檢測(cè)技術(shù)研究
基于熵的快速掃描法的FNEA初始對(duì)象的生成方法
區(qū)間對(duì)象族的可鎮(zhèn)定性分析
選修6 第三模塊 International Relationships
华坪县| 诏安县| 广元市| 泾源县| 惠东县| 闽侯县| 安平县| 铜川市| 莱阳市| 托克逊县| 邹城市| 蛟河市| 禹城市| 昌邑市| 惠水县| 得荣县| 玉门市| 张掖市| 班玛县| 贞丰县| 广汉市| 中方县| 崇仁县| 赤峰市| 丹巴县| 新昌县| 周至县| 宝丰县| 香港| 衡阳市| 汤阴县| 多伦县| 乐山市| 秦皇岛市| 元谋县| 公主岭市| 乃东县| 科技| 乐亭县| 嘉义县| 泾源县|