999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

從三層結(jié)構(gòu)到抽象工廠模式的軟件設(shè)計(jì)

2010-12-31 00:00:00王善桃

摘要:三層結(jié)構(gòu)作為一種更加普適的架構(gòu)設(shè)計(jì)理念,具有分散關(guān)注、松散耦合、邏輯復(fù)用、標(biāo)準(zhǔn)定義優(yōu)點(diǎn)。工廠方法模式是類的創(chuàng)建模式,其用意是定義一個創(chuàng)建產(chǎn)品對象的工廠接口,將實(shí)際創(chuàng)建工作推遲到子類中。工廠方法模式是簡單工廠模式的進(jìn)一步抽象和推廣。由于使用了多態(tài)性,工廠方法模式保持了簡單工廠模式的優(yōu)點(diǎn),在數(shù)據(jù)庫連接中有廣泛的應(yīng)用。本文通過一個簡單的實(shí)例詳細(xì)介紹三層結(jié)構(gòu)到抽象工廠的軟件設(shè)計(jì)過程。

關(guān)鍵詞:三層結(jié)構(gòu) 抽象工廠 設(shè)計(jì)模式

首先先準(zhǔn)備好一層用戶登陸窗體的代碼,即不采用分層實(shí)現(xiàn)的代碼,在一層的基礎(chǔ)上實(shí)現(xiàn)兩層,再在兩層的基礎(chǔ)上實(shí)現(xiàn)三層,最后引入Model層。對于一層用戶登陸功能,如下圖所示:

在這個層的代碼中提取方法,具體操作是選中代碼,右鍵選擇重構(gòu)下的提取方法,這里注意不要選擇用戶名和用戶密碼,這里我們就提取到了有兩個參數(shù)的方法。我們不能發(fā)現(xiàn)選擇的代碼都是針對數(shù)據(jù)操作的,為了更好的重復(fù)使用這段代碼,我們一般把它放到哪里呢,引出數(shù)據(jù)訪問層DAL。這里在VS2005中演示代碼,填寫新的類庫,即數(shù)據(jù)訪問層類庫(DAL),將剛剛提取的方法從表示層剪切到DAL中。再在表示層添加對DAL層的引用,在按鈕的Click事件中調(diào)用這個方法,我們就實(shí)現(xiàn)了從一層到兩層的轉(zhuǎn)變,從而實(shí)現(xiàn)了最簡單的兩層結(jié)構(gòu)。

在實(shí)際的開發(fā)中,具體項(xiàng)目的業(yè)務(wù)邏輯往往比較復(fù)雜,需要寫一些方法實(shí)現(xiàn)這些復(fù)雜的邏輯,為了重用這些代碼,我們把它放到表示層和數(shù)據(jù)訪問層中間,稱為業(yè)務(wù)邏輯層。下面在前面代碼的基礎(chǔ)上演示三層的實(shí)現(xiàn),首先添加一個新的類庫即業(yè)務(wù)邏輯層BLL,然后在BLL層添加具體的方法,引用DAL層的方法,最后在表示層中首先刪除對數(shù)據(jù)訪問層的引用,再添加BLL層的引用,更改按鈕的Click的代碼為引用BLL層的方法。這樣三層結(jié)構(gòu)就實(shí)現(xiàn)了。

上面的代碼我們實(shí)現(xiàn)的判斷登陸的用戶名稱和密碼是否正確,是一個查詢功能,查詢傳遞兩個參數(shù)這么實(shí)現(xiàn)是可以的,但是我們往往需要對大批量的數(shù)據(jù)進(jìn)行添加和修改操作,如用戶信息的注冊,注冊的信息可能有十幾項(xiàng),你如何在層與層直接傳遞數(shù)據(jù)呢,顯然使用帶十幾個參數(shù)的方法是比較麻煩的,在這里我們使用類的屬性來傳遞,每次傳遞一個對象,這里我們稱之為Model層。具體的實(shí)現(xiàn)方法添加新的類庫,建立實(shí)體類,再依次將需要傳遞的參數(shù)作為屬性添加到實(shí)體類中。最后添加引用,因?yàn)樽鳛閿?shù)據(jù)傳遞,所以每個層多要引入Model層。上述過程如圖二所示:

三層結(jié)構(gòu)可以讓開發(fā)人員可以只關(guān)注整個結(jié)構(gòu)中的其中某一層; 可以很容易的用新的實(shí)現(xiàn)來替換原有層次的實(shí)現(xiàn);可以降低層與層之間的依賴;有利于標(biāo)準(zhǔn)化;利于各層邏輯的復(fù)用。

其次介紹接口和簡單工廠,為什么要使用接口呢,現(xiàn)在的軟件產(chǎn)品不可能指針對一個數(shù)據(jù)庫,如勞資管理系統(tǒng),大公司使用SQL Server,小公司可能使用Access就夠用了,那么如何讓一套程序既可使用SQL Server又可使用Access作為數(shù)據(jù)庫呢,答案是我們在數(shù)據(jù)訪問層使用統(tǒng)一的接口,讓訪問SQL Server和Access的類都實(shí)現(xiàn)這個接口,然后通過接口調(diào)用具體的實(shí)現(xiàn)。具體的演示方法是在前面代碼的基礎(chǔ)上點(diǎn)擊DAL層的類,右鍵選擇重構(gòu),選擇提取接口,這樣一個接口就出現(xiàn)了。如下圖所示:

我們這里為了更加的規(guī)范,建立一個接口層的類庫IDAL,將這個接口移到這個類庫IDAL中。接口建立以后,為了可以使用Access庫,我們添加新的數(shù)據(jù)層AccessDAL,再添加一個AccessUserDAL類并實(shí)現(xiàn)現(xiàn)剛剛創(chuàng)建的接口。為了方便你可以復(fù)制上面的代碼和SqlHelp到AccessDAL類庫中,然后將這個類庫下的“Sql”替換成“OleDb”。這里注意SqlHelp里的代碼也要替換成訪問Oledb的。最后修改BLL層的調(diào)用方式為接口調(diào)用,用接口隱示的聲明,用類顯示的實(shí)現(xiàn)調(diào)用,對于訪問SQLServer數(shù)據(jù)庫具體的代碼是:ISqlUserDAL dal = new Demo.DAL.SqlUserDAL();如果需要訪問Access庫,稍加改動就變成訪問Access庫,具體代碼是:ISqlUserDAL dal = new Demo.AccessDAL.AccessUserDAL();

接口就可以實(shí)現(xiàn)訪問不同的數(shù)據(jù)庫我們?yōu)槭裁床捎霉S模式呢,原因有兩個,第一是客戶提出新需求,自己不改變源碼就更換為其他數(shù)據(jù)庫;第二是從開發(fā)公司考慮,為了適應(yīng)不同的數(shù)據(jù)庫,每次需要修改BLL層源代碼,再編譯程序,發(fā)布程序比較麻煩。那么具體實(shí)現(xiàn)步驟是創(chuàng)建新的工廠項(xiàng)目類,添加類SimpleFactory,然后在類中實(shí)現(xiàn)返回實(shí)現(xiàn)產(chǎn)品接口的方法,通過Web.Config讀取配置數(shù)據(jù),針對不同數(shù)據(jù)庫,返回不同實(shí)現(xiàn)接口的對象,最后修改BLL層的調(diào)用方式為簡單工廠調(diào)用,用接口隱示聲明,但是實(shí)現(xiàn)通過工廠創(chuàng)建,代碼如下:private static IUserInfo db = SimpleFactory.CreateDalUserInfoInstance();這樣我們就可以通過修改配置文件實(shí)現(xiàn)不同數(shù)據(jù)庫的訪問,實(shí)現(xiàn)了簡單工廠的設(shè)計(jì)模式。

再其次引入抽象工廠的實(shí)現(xiàn),有了簡單工廠,為什么還要使用抽象工廠呢,原因是一個大的軟件項(xiàng)目中包括很多的模塊,不同的模塊就要創(chuàng)建不同的接口,那么如何返回很多實(shí)現(xiàn)接口的對象呢,在簡單工廠模式中只能編寫多塊相似的代碼,通過判斷數(shù)據(jù)庫的類型返回具體的對象,這樣就造成大量的代碼冗余,這里采用優(yōu)化的方法,即抽象公共的部分,通過抽象類調(diào)用具體的實(shí)現(xiàn)類,可以產(chǎn)生一批有關(guān)聯(lián)的產(chǎn)品,例如通過配置文件讀取是Access數(shù)據(jù)庫類型,那么得到是Access的工廠,工廠里的產(chǎn)品都是通過訪問Access數(shù)據(jù)庫數(shù)據(jù)產(chǎn)生的產(chǎn)品。可以說對于簡單工廠模式一次只能創(chuàng)建一個對象,而對于抽象工廠模式實(shí)現(xiàn)一次創(chuàng)建一系列相互依賴對象的需求。

具體的演示實(shí)現(xiàn)步驟是首先通過修改前面的編寫的簡單工廠simpleFactory類為抽象工廠類,添加相應(yīng)的抽象方法,通過讀取對應(yīng)的配置文件,返回實(shí)現(xiàn)抽象類的工廠;然后創(chuàng)建一個具體工廠類SQLFactory繼承這個抽象工廠類,重寫抽象方法,只返回具體SQLServer庫的實(shí)現(xiàn);最后創(chuàng)建新的Access具體工廠類,添加類AccessFactory,讓它也繼承抽象工廠類,重寫抽象方法。另外不要忘記修改BLL層的調(diào)用方式為抽象工廠調(diào)用,具體的代碼是先得到一個工廠,然后再得到相應(yīng)產(chǎn)品。具體的代碼是:

private static AbsDALFactory factory = AbsDALFactory.ChooseFactory();

private static IUserInfo db = factory.CreateDalUserInfoInstance();

這樣我們就將數(shù)據(jù)訪問層的內(nèi)容進(jìn)行了細(xì)化,首先引入接口,再使用簡單工廠,然后引入抽象工廠模式,具體的思路如下圖三所示:

抽象工廠的使用除了對多系列多類別的應(yīng)用外,還有一點(diǎn)很重要的原則,即它的一系列的產(chǎn)品總是在一起使用的,只有這樣才更能體現(xiàn)出抽象工廠的價(jià)值。

結(jié)語:從三層結(jié)構(gòu)到抽象工廠是一種典型的軟件設(shè)計(jì)思路,他們是一個優(yōu)秀的實(shí)踐標(biāo)準(zhǔn),但它并不是一個通用的東西,只有滿足我們需求和變化的設(shè)計(jì)才是好設(shè)計(jì),而那一刻,無論是設(shè)計(jì)原則,還是設(shè)計(jì)模式,都融入我們的心中,而變得空曠起來,一個真正優(yōu)秀的軟件設(shè)計(jì)人員,他們不會去套用每一個模式,他們在心中都會有自己的一套設(shè)計(jì)策略,這才謂之無刀勝有刀。

參考文獻(xiàn):

[1]華銓平,抽象工廠設(shè)計(jì)模式在3層結(jié)構(gòu)開發(fā)中的應(yīng)用,大慶石油學(xué)院學(xué)報(bào)第33卷第3期2009年6月.

[2]魏一搏,抽象工廠模式在.net數(shù)據(jù)訪問層中的應(yīng)用.信息系統(tǒng)工程, 2010年第2期.

[3]王德永,抽象工廠模式在多種數(shù)據(jù)庫訪問程序中的應(yīng)用,機(jī)電產(chǎn)品開發(fā)與創(chuàng)新.2009年第6期.

作者簡介:王善桃(1968-),男,江蘇金湖人,東南大學(xué)工程碩士,江蘇財(cái)經(jīng)職業(yè)技術(shù)學(xué)院講師,主要研究方向軟件開發(fā)。

主站蜘蛛池模板: 久久公开视频| 91精品国产麻豆国产自产在线| 三上悠亚一区二区| 亚洲视频a| 国产精品熟女亚洲AV麻豆| 国产欧美在线视频免费| 日韩色图在线观看| 扒开粉嫩的小缝隙喷白浆视频| 黄色成年视频| 白丝美女办公室高潮喷水视频| 丰满人妻一区二区三区视频| 国产丝袜无码精品| 中文字幕免费在线视频| 国产伦片中文免费观看| 久久99热66这里只有精品一| 欧美三级不卡在线观看视频| 中文字幕不卡免费高清视频| 2020极品精品国产 | 久久国产亚洲欧美日韩精品| 成人自拍视频在线观看| 在线欧美a| 欧美日韩另类国产| 国产成人亚洲毛片| 免费观看三级毛片| 永久在线精品免费视频观看| 欧美69视频在线| 波多野吉衣一区二区三区av| 欧美成人影院亚洲综合图| 欧美第九页| 毛片一区二区在线看| 福利一区在线| 国产人碰人摸人爱免费视频| 中文字幕无码av专区久久| 9啪在线视频| 99国产精品一区二区| 啦啦啦网站在线观看a毛片| 国产精品开放后亚洲| 先锋资源久久| 99无码中文字幕视频| 国产综合另类小说色区色噜噜 | a毛片在线| 国产成年女人特黄特色毛片免 | 四虎成人精品在永久免费| 国产真实乱了在线播放| 国产一级裸网站| 久久这里只精品热免费99| 色久综合在线| 国产三级国产精品国产普男人| 国产成人精品免费av| 亚洲国产精品无码久久一线| 好紧太爽了视频免费无码| 国产区在线观看视频| 99热这里只有精品免费国产| 无码网站免费观看| 精品午夜国产福利观看| 四虎影视8848永久精品| 五月婷婷丁香综合| 一级做a爰片久久免费| 亚洲精品你懂的| 亚洲成人高清在线观看| 香蕉伊思人视频| 中文字幕啪啪| 成人国产小视频| 欧美在线观看不卡| 日韩高清在线观看不卡一区二区| 99福利视频导航| 免费不卡视频| 亚洲色图综合在线| 久久这里只有精品国产99| 国产亚洲精品无码专| 人妻精品久久久无码区色视| 日韩精品毛片| 毛片在线区| 国产精品开放后亚洲| 999国内精品久久免费视频| 狠狠ⅴ日韩v欧美v天堂| 91国内外精品自在线播放| 亚洲国产天堂在线观看| 国产成人av大片在线播放| 欧美日韩免费| 免费一极毛片| 亚洲人成电影在线播放|