講解三層結(jié)構(gòu)和抽象工廠模式教程.doc_第1頁
講解三層結(jié)構(gòu)和抽象工廠模式教程.doc_第2頁
講解三層結(jié)構(gòu)和抽象工廠模式教程.doc_第3頁
講解三層結(jié)構(gòu)和抽象工廠模式教程.doc_第4頁
講解三層結(jié)構(gòu)和抽象工廠模式教程.doc_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

講解三層結(jié)構(gòu)和抽象工廠模式 這里我們結(jié)合課件,采用案例演示教學(xué)法,層層深入,大把這個(gè)難點(diǎn)講解完成。前面課程已經(jīng)講解簡(jiǎn)單三層授課技巧,后續(xù)任務(wù)在此基礎(chǔ)上實(shí)現(xiàn)。操作流程:1. 添加一個(gè)新的項(xiàng)目(類庫):AccessDAL。2. 修改原先的DAL層名稱為SQLDAL,并修改所有的該層命名空間為SQLDAL.并修改此項(xiàng)目的屬性的程序集名稱和默認(rèn)命名空間名稱為SQLDAL。3. 修改BLL層所有相關(guān)DAL層的引用。using SQLDAL4. 編譯項(xiàng)目,重新生成。 接口的引入和簡(jiǎn)單工廠:為什么要使用接口呢,現(xiàn)在的軟件產(chǎn)品不可能指針對(duì)一個(gè)數(shù)據(jù)庫,如勞資管理系統(tǒng),大公司使用SQL Server,小公司可能使用access就夠用了,那么如何讓一套程序既可使用SQL Server又可使用Access作為數(shù)據(jù)庫呢,答案是我們?cè)跀?shù)據(jù)訪問層使用統(tǒng)一的接口,讓訪問SQL Server和Access的類都實(shí)現(xiàn)這個(gè)接口,然后通過接口調(diào)用具體的實(shí)現(xiàn)。具體的演示方法是在前面代碼的基礎(chǔ)上點(diǎn)擊DAL層的類,右鍵選擇重構(gòu),選擇提取接口,這樣一個(gè)接口就出現(xiàn)了。如下圖所示: 圖三 提取接口我們這里為了更加的規(guī)范,建立一個(gè)接口層的類庫IDAL,將這個(gè)接口移到這個(gè)類庫IDAL中,要注意刪除原有在SQLDAL中的接口。重新編譯,修改錯(cuò)誤。修改原先引用接口的代碼:IDAL.IGuestService在數(shù)據(jù)訪問層添加對(duì)IDAL的引用,并增加using IDAL代碼。同時(shí)調(diào)整拷貝到IDAL層的接口相關(guān)的代碼,修改其命名空間。namespace IDAL。在業(yè)務(wù)邏輯層增加對(duì)IDAL的引用。在IDAL添加對(duì)Models的引用。接口建立以后,為了可以使用Access庫,我們添加新的數(shù)據(jù)層AccessDAL,再添加一個(gè)GuestService類(注意必須和原有的Sqldal層類同名)并實(shí)現(xiàn)現(xiàn)剛剛創(chuàng)建的接口。為了方便演示有一個(gè)技巧,你可以復(fù)制上面的代碼到AccessDAL類庫中,并做對(duì)應(yīng)修改,返回值為空或true即可。最后修改BLL層的調(diào)用方式為接口調(diào)用,用接口隱示的聲明,用類顯示的實(shí)現(xiàn)調(diào)用,對(duì)于訪問SQLServer數(shù)據(jù)庫具體的代碼是:private readonly IGuestService guestService = new GuestService();如果需要訪問Access庫,稍加改動(dòng)就變成訪問Access庫,只需要修改對(duì)應(yīng)的using AccessDAL;邏輯層代碼變?yōu)椋航涌诰涂梢詫?shí)現(xiàn)訪問不同的數(shù)據(jù)庫我們?yōu)槭裁床捎霉S模式呢,原因有兩個(gè),第一是客戶提出新需求,自己不改變?cè)创a就更換為其他數(shù)據(jù)庫;第二是從開發(fā)公司考慮,為了適應(yīng)不同的數(shù)據(jù)庫,每次需要修改BLL層源代碼,再編譯程序,發(fā)布程序比較麻煩。那么具體實(shí)現(xiàn)步驟是創(chuàng)建新的工廠項(xiàng)目類,添加類DALFactory,然后在類中實(shí)現(xiàn)返回實(shí)現(xiàn)產(chǎn)品接口的方法,通過Web.Config讀取配置數(shù)據(jù),針對(duì)不同數(shù)據(jù)庫,返回不同實(shí)現(xiàn)接口的對(duì)象,最后修改BLL層的調(diào)用方式為工廠調(diào)用,用接口隱示聲明,;這樣我們就可以通過修改配置文件實(shí)現(xiàn)不同數(shù)據(jù)庫的訪問,實(shí)現(xiàn)了簡(jiǎn)單工廠的設(shè)計(jì)模式。(不深入,直接轉(zhuǎn)入用抽象工廠。)抽象工廠:有了簡(jiǎn)單工廠,為什么還要使用抽象工廠呢,原因是一個(gè)大的軟件項(xiàng)目中包括很多的模塊,不同的模塊就要?jiǎng)?chuàng)建不同的接口,那么如何返回很多實(shí)現(xiàn)接口的對(duì)象呢 ,在簡(jiǎn)單工廠模式中只能編寫多塊相似的代碼,通過判斷數(shù)據(jù)庫的類型返回具體的對(duì)象,這樣就造成大量的代碼冗余,這里采用優(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)品。可以說對(duì)于簡(jiǎn)單工廠模式一次只能創(chuàng)建一個(gè)對(duì)象,而對(duì)于抽象工廠模式實(shí)現(xiàn)一次創(chuàng)建一系列相互依賴對(duì)象的需求。具體的演示實(shí)現(xiàn)步驟是:為表示層增加一個(gè)app.config。然后添加一個(gè)項(xiàng)目DALFactory,并增加一個(gè)類:AbstractFactory。添加相應(yīng)的抽象方法CreateGuestService,通過讀取對(duì)應(yīng)的配置文件app.config,返回實(shí)現(xiàn)抽象類的工廠;1. 為工廠類添加引用System.configuration。2. 增加代碼string path = ConfigurationManager.AppSettingsDBType.ToString();,獲取app。config中的配置數(shù)據(jù)庫選項(xiàng)信息。3. 修改工廠代碼如下:4.5.邏輯層修改如下:去掉對(duì)SQLDAL的引用,更改為引用工廠。using DALFactory;這樣我們就將數(shù)據(jù)訪問層的內(nèi)容進(jìn)行了細(xì)化,首先引入接口,然后引入抽象工廠模式,通過演示讓學(xué)員明白為什么要抽象工廠以及如何使用它。具體的講解思路如下圖4所示:圖四 細(xì)化數(shù)據(jù)訪問層這里我們演示完成后,學(xué)員還無法透徹地理解抽象工廠模式,下面共享一個(gè)生活案例給大家,通過案例剖析抽象工廠的實(shí)現(xiàn)方式,首先看下圖圖五圖五:抽象工廠一客戶是什么?這里我們說的客戶是指調(diào)用者,具體而言如網(wǎng)站的美工設(shè)計(jì)人員;那么地圖是什么呢?指配置文件,快餐點(diǎn)比喻我們的抽象工廠,漢堡和雞腿比喻抽象產(chǎn)品,客戶即調(diào)用者只知道這些,具體的哪個(gè)快餐店,如何制作什么漢堡,客戶并不關(guān)心,只要能到最方便的快餐店吃到漢堡,填飽肚子即可。具體的工廠是肯德基和麥當(dāng)勞,具體產(chǎn)品是KFC的漢堡、KFC雞腿,他們這一組是相關(guān)的,另外一組是McDonald漢堡、McDonald雞腿,他們兩個(gè)是相關(guān)的,是可以左手拿著McDonald漢堡,右手拿著McDonald雞腿狼吞虎咽的;我們把相關(guān)的產(chǎn)品,稱為一系列的產(chǎn)品,你還想吃薯?xiàng)l,稍微擴(kuò)展一下,加一個(gè)薯?xiàng)l的產(chǎn)品,包括抽象薯?xiàng)l和

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論