摘 要:C#.NET三層架構(gòu)體系是一種高效靈活的系統(tǒng)設(shè)計(jì)機(jī)制。本文首先介紹了使用三層架構(gòu)所建立的數(shù)據(jù)庫(kù)系統(tǒng)所具有的應(yīng)用優(yōu)勢(shì),然后分別就表現(xiàn)層、業(yè)務(wù)邏輯層、數(shù)據(jù)層等三部分的邏輯功能及建立進(jìn)行了研究與討論。
關(guān)鍵詞:C#;.NET;三層架構(gòu);數(shù)據(jù)庫(kù)
中圖分類號(hào):TP311.52
隨著計(jì)算機(jī)及其相關(guān)軟件的應(yīng)用領(lǐng)域和應(yīng)用需求不斷拓展,數(shù)據(jù)庫(kù)管理系統(tǒng)及分層設(shè)計(jì)方式得到了重點(diǎn)關(guān)注。數(shù)據(jù)庫(kù)可以按照相應(yīng)的用戶策略來(lái)對(duì)海量的數(shù)據(jù)信息進(jìn)行管理與維護(hù),數(shù)據(jù)庫(kù)的應(yīng)用極大的提升了數(shù)據(jù)管理的自動(dòng)化和智能化程度,可以在更短時(shí)間內(nèi)實(shí)現(xiàn)更高效的信息處理。模塊化分層設(shè)計(jì)則是現(xiàn)代系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)的最主要原則之一,其可以簡(jiǎn)化實(shí)現(xiàn)復(fù)雜度,增強(qiáng)系統(tǒng)各功能的結(jié)構(gòu)性、可用性以及可維護(hù)性,同時(shí),系統(tǒng)分層設(shè)計(jì)條理更加清晰,擴(kuò)展性和替換性更好,因此分層設(shè)計(jì)是系統(tǒng)設(shè)計(jì)的主流趨勢(shì)。
1 三層架構(gòu)體系及其優(yōu)勢(shì)分析
傳統(tǒng)的系統(tǒng)結(jié)構(gòu)是一種客戶/服務(wù)類型的二層結(jié)構(gòu),這種結(jié)構(gòu)下的用戶端直接與數(shù)據(jù)庫(kù)服務(wù)器端進(jìn)行數(shù)據(jù)通信,整個(gè)通信過(guò)程中缺乏一個(gè)統(tǒng)一的業(yè)務(wù)和數(shù)據(jù)訪問(wèn)規(guī)則對(duì)用戶行為進(jìn)行限制或管理,因而這種結(jié)構(gòu)下的系統(tǒng)結(jié)構(gòu)復(fù)雜,管理難度大,還容易因用戶的不當(dāng)操作影響到數(shù)據(jù)庫(kù)功能及其相關(guān)內(nèi)容。
為進(jìn)一步提升系統(tǒng)的安全性、可管理性,組件層作為中間層被引入到用戶層和數(shù)據(jù)庫(kù)層之間共同構(gòu)成三層架構(gòu)體系。該體系結(jié)構(gòu)下,用戶層的應(yīng)用程序和數(shù)據(jù)訪問(wèn)請(qǐng)求等都需要經(jīng)由中間層按照預(yù)設(shè)的規(guī)則和策略審核和處理后才能夠被轉(zhuǎn)發(fā)到數(shù)據(jù)庫(kù)中執(zhí)行。這樣就避免了用戶與數(shù)據(jù)庫(kù)服務(wù)器的直接通信,因而該結(jié)構(gòu)下的數(shù)據(jù)庫(kù)安全性能得到了大幅度提升。此外,中間層負(fù)責(zé)業(yè)務(wù)規(guī)則過(guò)濾、數(shù)據(jù)訪問(wèn)控制、操作校驗(yàn)等內(nèi)容,其可擴(kuò)展性和可移植性更強(qiáng),便于用戶根據(jù)實(shí)際使用需求便捷高效的對(duì)數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)進(jìn)行調(diào)整。
三層系統(tǒng)結(jié)構(gòu)中,用戶端通過(guò)COM/DCOM相關(guān)組件與中間層建立通信連接,中間層按照用戶請(qǐng)求與相關(guān)策略與數(shù)據(jù)庫(kù)進(jìn)行交互。具體的,中間層包括表示層、邏輯層以及數(shù)據(jù)訪問(wèn)層等,各層負(fù)責(zé)如下內(nèi)容:表示層的主要對(duì)象為用戶,其可以接收用戶對(duì)數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的相關(guān)操作請(qǐng)求或數(shù)據(jù)讀寫請(qǐng)求,并接收上一層的數(shù)據(jù)返回給用戶,整個(gè)過(guò)程主要負(fù)責(zé)相關(guān)信息的傳遞,并不涉及數(shù)據(jù)的處理;業(yè)務(wù)邏輯層是表示層與數(shù)據(jù)訪問(wèn)層的承接層,其主要負(fù)責(zé)上下層之間的數(shù)據(jù)傳遞與邏輯處理,是具體的應(yīng)用實(shí)現(xiàn)層;數(shù)據(jù)訪問(wèn)層主要負(fù)責(zé)與數(shù)據(jù)庫(kù)進(jìn)行交互,其一方面接收業(yè)務(wù)邏輯層傳輸過(guò)來(lái)的請(qǐng)求指令并將其轉(zhuǎn)化為數(shù)據(jù)庫(kù)系統(tǒng)可識(shí)別的指令傳遞給數(shù)據(jù)庫(kù)供其執(zhí)行相關(guān)操作,如數(shù)據(jù)訪問(wèn)、修改、存儲(chǔ)等,另一方面可以將數(shù)據(jù)庫(kù)的返回信息傳遞給業(yè)務(wù)邏輯層供其轉(zhuǎn)化為客戶端可識(shí)別的信息傳遞給用戶。
2 三層架構(gòu)的.NET數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)數(shù)據(jù)邏輯訪問(wèn)與表示
在.NET環(huán)境下的數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)可以分為表示層、業(yè)務(wù)邏輯層以及數(shù)據(jù)層三層。其中在數(shù)據(jù)層中又存在邏輯與數(shù)據(jù)兩種屬性,為提升系統(tǒng)的區(qū)分度可以將數(shù)據(jù)層中的數(shù)據(jù)分為數(shù)據(jù)訪問(wèn)邏輯組件和業(yè)務(wù)實(shí)體組件兩類。前者是指針對(duì)數(shù)據(jù)庫(kù)的,可執(zhí)行檢索與保存等操作的業(yè)務(wù)邏輯;后者是指具體的可實(shí)現(xiàn)具體應(yīng)用效果的實(shí)體數(shù)據(jù)。
2.1 數(shù)據(jù)訪問(wèn)邏輯組件
該組件是調(diào)用程序?qū)?shù)據(jù)庫(kù)具體操作的具體方法描述,包括數(shù)據(jù)記錄創(chuàng)建、數(shù)據(jù)記錄讀取和調(diào)用、數(shù)據(jù)記錄更改與修訂、實(shí)體業(yè)務(wù)數(shù)據(jù)的錄入與更新、數(shù)據(jù)記錄的刪除等。此外,該組件還應(yīng)該提供業(yè)務(wù)實(shí)體數(shù)據(jù)庫(kù)的篩選與查找邏輯方法等功能。
實(shí)際應(yīng)用本邏輯組件對(duì)某一數(shù)據(jù)庫(kù)數(shù)據(jù)進(jìn)行訪問(wèn)時(shí)需要標(biāo)明訪問(wèn)的對(duì)象、訪問(wèn)對(duì)象中的具體目標(biāo)以及需要執(zhí)行的具體操作。為便捷高效的完成數(shù)據(jù)庫(kù)組表數(shù)據(jù)操作可以在本組件的基礎(chǔ)上結(jié)合業(yè)務(wù)實(shí)體組件共同完成。
2.2 業(yè)務(wù)實(shí)體組件
該組件使用多個(gè)相互獨(dú)立的數(shù)據(jù)表來(lái)存放某些具體業(yè)務(wù)的相關(guān)數(shù)據(jù),同時(shí)為這些數(shù)據(jù)表之間建立關(guān)聯(lián),使用主鍵和外鍵來(lái)進(jìn)行相互間的調(diào)用。在.NET應(yīng)用程序中,該組件屬于自定義類,需要用戶根據(jù)使用需求將所建立的數(shù)據(jù)表與實(shí)體功能和業(yè)務(wù)建立關(guān)聯(lián)。其中,自定義參數(shù)中需要包含數(shù)據(jù)存儲(chǔ)字段、屬性、業(yè)務(wù)邏輯特性等內(nèi)容,以便于根據(jù)上述參數(shù)確定應(yīng)用程序與數(shù)據(jù)之間的調(diào)用關(guān)系。
實(shí)際應(yīng)用中,本組件包含以下幾部分操作:用戶信息的更新與錄入;用戶訂單列表;訂單創(chuàng)建、變更以及刪除;新的產(chǎn)品或功能信息等。
3 C#語(yǔ)言的三層數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)建立
以ADO.NET為例,其提供了兩種基于數(shù)據(jù)庫(kù)的應(yīng)用系統(tǒng)建立方法,一種方法只提供數(shù)據(jù)讀取操作,另一種方法除了數(shù)據(jù)讀取操作外還允許用戶對(duì)數(shù)據(jù)庫(kù)相關(guān)內(nèi)容執(zhí)行修改、刪除等操作。顯然,第二種方法靈活性更高,應(yīng)用更為廣泛。三層數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)分為數(shù)據(jù)訪問(wèn)層、業(yè)務(wù)邏輯層以及表現(xiàn)層三部分,每部分的具體建立方式如下所述。
3.1 數(shù)據(jù)訪問(wèn)層的建立與參數(shù)設(shè)置。
該層建立時(shí)首先需要根據(jù)系統(tǒng)要求添加新的項(xiàng)目,同時(shí)對(duì)所涉及的數(shù)據(jù)集進(jìn)行篩選;篩選完畢后可以將所選擇的數(shù)據(jù)集與數(shù)據(jù)庫(kù)系統(tǒng)建立連接;之后可以將數(shù)據(jù)集中拖入數(shù)據(jù)表,對(duì)該步驟操作過(guò)程中生成的信息指令等內(nèi)容執(zhí)行復(fù)制操作,以便于后續(xù)的數(shù)據(jù)庫(kù)代碼修改;最后對(duì)代碼中的GetData()函數(shù)配置進(jìn)行修改,以便于允許用戶通過(guò)數(shù)據(jù)鏈表查找與對(duì)比外鍵關(guān)鍵字段,這樣可以提高系統(tǒng)的易用性。
具體來(lái)說(shuō),針對(duì)select * from bisdevice語(yǔ)句可以執(zhí)行如下修改:SELECT a.用戶ID,a.用戶名,b.所在部門,c.職位屬性 FROM bisxingming a left join bisgongzuobumen b on b.用戶ID=a.所在部門 ID left join biszhiyeshuxing c on c.職位屬性ID=a.職位屬性ID。
3.2 業(yè)務(wù)邏輯層的建立與參數(shù)設(shè)置
該層是整個(gè)中間層的承接層,根據(jù)實(shí)際的系統(tǒng)應(yīng)用需求不同可以進(jìn)行靈活設(shè)定。該層的引入大大提升了整個(gè)數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的靈活性。
以添加新項(xiàng)并向該項(xiàng)目中添加新的類別的實(shí)現(xiàn)為例,可以編寫如下代碼來(lái)實(shí)現(xiàn)。
Public dsyonghu.yonghuDataTable
GetxingmingBybumenIDshenfenID(int 用戶部門標(biāo)識(shí), int 用戶身份標(biāo)識(shí))
{if (用戶部門標(biāo)識(shí)<0用戶身份標(biāo)識(shí)<0) return Adapter.Getxingming();
else if (用戶部門標(biāo)識(shí)>0用戶身份標(biāo)識(shí)<0) return Adapter.GetxingmingBybumenID(用戶部門標(biāo)識(shí));
else if (用戶部門標(biāo)識(shí)<0用戶身份標(biāo)識(shí)>0) return Adapter.GetxingmingByshenfenD(用戶部門標(biāo)識(shí));}
通過(guò)上述內(nèi)容即可完成新項(xiàng)目、新數(shù)據(jù)表的添加與分配操作,對(duì)用戶身份完成讀取相關(guān)操作。
3.3 表現(xiàn)層的建立與參數(shù)設(shè)置
該層中不同的參數(shù)與相應(yīng)的數(shù)據(jù)表可以建立對(duì)應(yīng)的映射,通過(guò)調(diào)用參數(shù)來(lái)查看數(shù)據(jù)庫(kù)中相關(guān)內(nèi)容。實(shí)際設(shè)計(jì)中可以在編程軟件中對(duì)相關(guān)字段進(jìn)行修改實(shí)現(xiàn)關(guān)聯(lián)的建立。
3.4 數(shù)據(jù)的操作與執(zhí)行
上述步驟基本實(shí)現(xiàn)了數(shù)據(jù)庫(kù)相關(guān)內(nèi)容的查詢操作,但是實(shí)際應(yīng)用中還需要對(duì)某些特定的參數(shù)或表格信息進(jìn)行添加、修改或刪除等,此時(shí)需要執(zhí)行的操作為:通過(guò)DetailView空間對(duì)需要修改的字段進(jìn)行編輯,將其屬性變?yōu)槟0澹缓髮?duì)該模板信息進(jìn)行設(shè)置與修改即可完成相應(yīng)的操作添加。
但是需要說(shuō)明的是,對(duì)于某些需要選取的項(xiàng)目,其建立過(guò)程中需要將文本輸入控件TextBox刪除,替換為可選取的列表控件ListBox,為列表添加相關(guān)信息后將每一選項(xiàng)與具體的數(shù)據(jù)庫(kù)表建立連接。
4 總結(jié)
三層系統(tǒng)架構(gòu)體系安全性更高,系統(tǒng)設(shè)計(jì)實(shí)現(xiàn)更為靈活,可擴(kuò)展性更強(qiáng),是一種主流的系統(tǒng)設(shè)計(jì)方式。在.NET平臺(tái)中應(yīng)用C#設(shè)計(jì)開(kāi)發(fā)數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)可以根據(jù)實(shí)際使用需求將相關(guān)功能劃分到表示層、業(yè)務(wù)邏輯層以及數(shù)據(jù)層中。這種方式下的數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)具有良好的可用性和可維護(hù)性。
參考文獻(xiàn):
[1]王海燕.C#.NET下三層架構(gòu)數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)開(kāi)發(fā)[J].計(jì)算機(jī)技術(shù)與發(fā)展,2012(6).
[2]李紅芹.基于三層架構(gòu)的.NET數(shù)據(jù)庫(kù)業(yè)務(wù)系統(tǒng)開(kāi)發(fā)[J].計(jì)算機(jī)與現(xiàn)代化,2009(10).
[3]韓美芳.淺談.NET三層架構(gòu)的構(gòu)建方法[J].科技創(chuàng)新導(dǎo)報(bào),2009(25).