[畢業(yè)論文]軟件工程-關(guān)于代碼自動(dòng)生成技術(shù)的分析.doc_第1頁
[畢業(yè)論文]軟件工程-關(guān)于代碼自動(dòng)生成技術(shù)的分析.doc_第2頁
[畢業(yè)論文]軟件工程-關(guān)于代碼自動(dòng)生成技術(shù)的分析.doc_第3頁
[畢業(yè)論文]軟件工程-關(guān)于代碼自動(dòng)生成技術(shù)的分析.doc_第4頁
[畢業(yè)論文]軟件工程-關(guān)于代碼自動(dòng)生成技術(shù)的分析.doc_第5頁
已閱讀5頁,還剩44頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

2008屆軟件工程專業(yè)畢業(yè)設(shè)計(jì)(論文)目錄前 言1第一章 概述21.1背景21.2研究代碼自動(dòng)生成技術(shù)的必要性41.3 本課題的主要研究內(nèi)容6第二章 代碼自動(dòng)生成技術(shù)72.1 代碼生成的機(jī)理72.2 三層b/s架構(gòu)82.3 設(shè)計(jì)模式92.4 反射技術(shù)122.5 緩存技術(shù)132.6 xml技術(shù)152.7 語法高亮顯示17第三章 系統(tǒng)分析與設(shè)計(jì)183.1 系統(tǒng)分析183.1.1 系統(tǒng)開發(fā)環(huán)境183.1.2 需求分析183.1.3 系統(tǒng)用例圖及詳細(xì)說明213.2 系統(tǒng)設(shè)計(jì)方案283.2.1 設(shè)計(jì)原則283.2.2 系統(tǒng)類28第四章 系統(tǒng)實(shí)現(xiàn)324.1 系統(tǒng)界面設(shè)計(jì)324.2系統(tǒng)功能實(shí)現(xiàn)344.2.1 數(shù)據(jù)庫新連接(即導(dǎo)入數(shù)據(jù)庫信息)功能的實(shí)現(xiàn)344.2.2 代碼生成功能的實(shí)現(xiàn)344.2.3 代碼導(dǎo)出功能的實(shí)現(xiàn)364.2.4 數(shù)據(jù)庫查詢分析功能的實(shí)現(xiàn)36第五章 難點(diǎn)與對策385.1 數(shù)據(jù)庫表信息的讀取385.2 將xml數(shù)據(jù)加載到樹形控件上395.3 語法高亮顯示的實(shí)現(xiàn)41第五章 總結(jié)及展望435.1 總結(jié)435.2 展望44致謝45參考文獻(xiàn)4647前 言現(xiàn)在軟件工程所涉及到的系統(tǒng)規(guī)模越來越大。大型的程序需要多人共同參與和開發(fā),每個(gè)人的程序風(fēng)格不同,再加上時(shí)間上的壓力,這使得系統(tǒng)完成以后在測試及維護(hù)上帶來了沉重的負(fù)擔(dān)。計(jì)算機(jī)科學(xué)家一直致力于這方面的研究。在解決代碼規(guī)范以及工作效率上,代碼自動(dòng)生成技術(shù)顯現(xiàn)出了其很大的優(yōu)越性。代碼自動(dòng)生成器一個(gè)最關(guān)鍵的功能就是讓程序員盡可能減輕負(fù)。當(dāng)然任何東西都不能取代人在當(dāng)中的作用,代碼自動(dòng)生成器主要來完成一些有規(guī)律可尋的代碼生成。比如我們平常一般用到的model類就是一個(gè)很簡單的基類,它的模式基本上是固定的。如果一個(gè)系統(tǒng)有上百個(gè)model類,那么程序員可能要話很長的時(shí)間來編寫。而用了相應(yīng)的自動(dòng)生成器只需簡單幾步就很全部生成。我想這樣的工作是非常有意義的。tianhao正是在這樣的環(huán)境下計(jì)劃開發(fā)的。tianhao生成的代碼基于面向?qū)ο蟮乃枷牒腿龑蛹軜?gòu)設(shè)計(jì)?,F(xiàn)在的系統(tǒng)常用到的是三層架構(gòu)。一個(gè)典型的例子就是微軟的示例代碼petshop。petshop包含了很多經(jīng)典的思想和設(shè)計(jì)模式。tianhao結(jié)合了petshop的開發(fā)模式,尋求編碼規(guī)律,并融入了工廠模式,反射機(jī)制等一些思想。tianhao 同時(shí)提供支持多類型數(shù)據(jù)庫,并且能夠方便的對數(shù)據(jù)庫查詢分析,存儲(chǔ)過程生成,代碼批量自動(dòng)輸出等多項(xiàng)開發(fā)工作中常用到的功能。第1章 概述1.1背景在軟件工程發(fā)展過程中,計(jì)算機(jī)科學(xué)家為了降低軟件開發(fā)得強(qiáng)度,縮短開發(fā)周期,減少代碼的重復(fù)書寫,從而減輕程序員的編程負(fù)擔(dān),一直以來都致力于代碼自動(dòng)生成方面的研究。lex/yacc是最早用于自動(dòng)化編寫編譯程序的工具。 我們可以將代碼生成技術(shù)分為兩大類:被動(dòng)模式和主動(dòng)模式。在被動(dòng)模式下,代碼生成器產(chǎn)生一系列的代碼,然后軟件開發(fā)者可以自由的修改、編輯這些代碼,但代碼生成器不再承擔(dān)對代碼的維護(hù)工作。大多數(shù)軟件集成開發(fā)環(huán)境(ide)中的應(yīng)用“向?qū)А本褪沁@種類型的代碼生成器。被動(dòng)模式的代碼生成技術(shù)有其應(yīng)用的范圍,但是被動(dòng)模式的生成系統(tǒng)有天生的局限性。生成器只運(yùn)行一次,然后就不再承擔(dān)對代碼的維護(hù)工作。 與此相反,主動(dòng)模式下的代碼生成器則對生成的代碼“長期”負(fù)責(zé),可以通過改變生成器的輸入?yún)?shù)并重新運(yùn)行生成器來改變輸出的代碼。如編譯器生成器就是一種主動(dòng)模式 的代碼生成器。 下面我們介紹幾種常見的代碼生成技術(shù),這些技術(shù)對開發(fā)一個(gè)實(shí)用的代碼生成器非常重要??梢砸罁?jù)代碼生成技術(shù)的使用場合、復(fù)雜度等對這些生成技術(shù)進(jìn)行分類,這里我們采用依據(jù)生成技術(shù)的輸入、輸出對它們進(jìn)行分類。 (1) 代碼挑揀器,代碼挑揀器的輸入是源代碼,通過揀取需要的信息可以生成各種文件,代碼挑揀器的使用相當(dāng)廣泛,可以使用它來生成代碼api文檔、獲取常量和函數(shù)原型等。 (2) 內(nèi)聯(lián)代碼擴(kuò)展器,內(nèi)聯(lián)代碼擴(kuò)展器的輸入是帶有特殊標(biāo)記的源代碼,這些特殊標(biāo)記經(jīng)過擴(kuò)展器的處理后將被替換為相關(guān)的代碼從而產(chǎn)生最終的生產(chǎn)源代碼,內(nèi)聯(lián)代碼擴(kuò)展器的典型應(yīng)用是將sql語句嵌入到源代碼中,其主要特點(diǎn)是使得底層結(jié)構(gòu)和復(fù)雜的查詢分開。(3) 混合代碼生成器 混合代碼生成器與內(nèi)聯(lián)代碼擴(kuò)展器很像,它也是處理源代碼中的特殊注釋但是與內(nèi)聯(lián)代碼擴(kuò)展器不同,它的結(jié)果將直接輸出到輸入的源代碼中。這種方式的一個(gè)典型應(yīng)用就是在對話框控件和它們代表的變量之間建立映射關(guān)系。(4) 部分類生成器 部分類生成器的輸入是模板文件和包含特定類所需信息的定義文件,這些信息經(jīng)過生成器將產(chǎn)生應(yīng)用的基類。通過繼承該基類可以完成剩余的工作。velocity是一個(gè)源代碼開放的java模版引擎。(5) 層第生成器 層第生成器將生成一個(gè)多層應(yīng)用的所有代碼。模型驅(qū)動(dòng)的開發(fā)是這種生成器的一個(gè)很好例子。通過uml模型輸入和其余xml文件,生成器能夠生成一個(gè)包含多個(gè)系統(tǒng)的完整應(yīng)用,并且模型和代碼之間可以單項(xiàng)乃至雙項(xiàng)同步。(6) 完全領(lǐng)域語言 完全領(lǐng)域語言是一個(gè)圖靈完全的語言,可以直接使用來進(jìn)行領(lǐng)域相關(guān)的操作。 目前常見的代碼生成器有:dbtocode 是一款為 c# 數(shù)據(jù)庫程序員設(shè)計(jì)的自動(dòng)代碼生器,dbtocode 生成的代碼基于面向?qū)ο蟮乃枷牒腿龑蛹軜?gòu)設(shè)計(jì),結(jié)合了petshop中經(jīng)典的思想和設(shè)計(jì)模式,融入了工廠模式,反射機(jī)制等等一些思想。采用 model + dal + bll + web 的設(shè)計(jì),主要實(shí)現(xiàn)在 c# 中對應(yīng)數(shù)據(jù)庫中表的基類代碼的自動(dòng)生成,包括生成屬性、添加、修改、刪除、查詢、存在性、 model 類構(gòu)造等基礎(chǔ)代碼片斷,使程序員可以節(jié)省大量機(jī)械錄入的時(shí)間和重復(fù)勞動(dòng),而將精力集中于核心業(yè)務(wù)邏輯的開發(fā)。codematic 生成的代碼基于面向?qū)ο蟮乃枷牒腿龑蛹軜?gòu)設(shè)計(jì),結(jié)合了petshop中經(jīng)典的思想和設(shè)計(jì)模式,融入了工廠模式,反射機(jī)制等等一些思想。codematic 同時(shí)提供方便的多類型數(shù)據(jù)庫管理,查詢分析器,sql腳本生成,存儲(chǔ)過程生成,數(shù)據(jù)庫文檔生成,web項(xiàng)目發(fā)布,代碼批量自動(dòng)輸出等多項(xiàng)開發(fā)工作中常用到的功能,您可以很方便輕松地進(jìn)行項(xiàng)目開發(fā)。autojava 是一款免費(fèi)的,針對于oracle和sqlserver數(shù)據(jù)庫的、以面向?qū)ο竽J降膉ava代碼生成工具。autojava根據(jù)o/r mapping規(guī)則生成表對應(yīng)的java對象,并且生成了所有的添加、刪除、修改、查詢等底層數(shù)據(jù)庫操作代碼。 1.2研究代碼自動(dòng)生成技術(shù)的必要性隨著現(xiàn)代化信息環(huán)境日趨復(fù)雜,各種應(yīng)用軟件的開發(fā)難度隨之加大,這需要更有技巧,更有方法地從事軟件開發(fā),開發(fā)團(tuán)隊(duì)之間也必須更無障礙地溝通,否則極可能無法在有限的開發(fā)時(shí)間中完成任務(wù)。由于時(shí)間上的壓力,一般人只注重程序的編寫速度,卻忽略其完成后的實(shí)用性與維護(hù)性,加上大型程序多人共同參與開發(fā),每個(gè)人都有各自的程序風(fēng)格,容易造成嚴(yán)重的差異性,隨著系統(tǒng)規(guī)模越來越大,這將造成系統(tǒng)完成后在測試及維護(hù)上沉重的負(fù)擔(dān),代碼自動(dòng)生成技術(shù)更顯出了其顯著的優(yōu)越性。盡管這些應(yīng)用沒有代碼生成工具也能開發(fā)完成,但利用代碼生成技術(shù)可以大大加速軟件的開發(fā)進(jìn)度,提高軟件的質(zhì)量。代碼生成技術(shù)是關(guān)于自動(dòng)生成程序的程序的技術(shù)。與手工書寫代碼相比,代碼生成器提供了下面的一些好處: (1)所有軟件實(shí)體的一致的代碼質(zhì)量,代碼的質(zhì)量依賴且只依賴于代碼生成的模板、文件和模型。與此相比,手工經(jīng)常采用的拷貝粘貼的方法為前后代碼質(zhì)量的一致性帶來了隱患。 (2)提高了代碼變更的能力,特別在需要大量更改代碼的情況下,只需要更改模板并重新運(yùn)行代碼生成器即可。 (3)提高了修復(fù)軟件bug的能力,只需要修復(fù)模板的bug然后重新運(yùn)行生成器就可以修復(fù)所有的生成文件的bug。 (4)提高了在不同框架之間的遷移能力,一個(gè)典型的情形是我們需要生成不同框架(如j2ee/.net)的應(yīng)用代碼,代碼生成技術(shù)將業(yè)務(wù)邏輯以語言無關(guān)的形式單獨(dú)存放,通過為不同的框架提供代碼模板可以基于同一邏輯生成不同框架的應(yīng)用代碼。 (5)靈活的同步機(jī)制,代碼生成技術(shù)自動(dòng)維護(hù)代碼和數(shù)據(jù)模型的一致性,通過重新運(yùn)行生成器,對模型的修改可以自動(dòng)反映到代碼中,這種同步機(jī)制對維護(hù)數(shù)據(jù)的一致性是非常必要的。 (6)大幅度提高了工作效率,運(yùn)用代碼生成技術(shù)可以將更多的時(shí)間花費(fèi)在業(yè)務(wù)相關(guān)的設(shè)計(jì)和實(shí)現(xiàn)上,從而可以大大提高軟件的開發(fā)效率和軟件質(zhì)量。 (7)是代碼學(xué)習(xí)的導(dǎo)師,由于生成的代碼具有良好的風(fēng)格和100%的健壯性,程序開發(fā)者很容易模仿代碼風(fēng)格,從中學(xué)習(xí)。 1.3 本課題的主要研究內(nèi)容本課題的主要目標(biāo)是在windows xp 平臺(tái)下,利用.net c#實(shí)現(xiàn).net(c#)代碼自動(dòng)生成軟件(如上1.1背景說述,該軟件屬于代碼自動(dòng)生成的部分類生成器)。本軟件主要包含功能如下:(1)實(shí)現(xiàn)在對應(yīng)數(shù)據(jù)庫中表的基類代碼的自動(dòng)生成,包括生成屬性、添加、修改、刪除、查詢、存在性、model 類構(gòu)造等基礎(chǔ)代碼片斷。(2)自動(dòng)生成數(shù)據(jù)庫的存儲(chǔ)過程。(3) 支持不同架構(gòu)代碼生成,用戶可以定義命名。(4)自動(dòng)生成實(shí)體model,dal(數(shù)據(jù)訪問層),idal(接口層),dalfactory(類工廠),bll(業(yè)務(wù)邏輯層) 等多層的代碼。(5)代碼批量生成自動(dòng)導(dǎo)出功能。第二章 代碼自動(dòng)生成技術(shù)2.1 代碼生成的機(jī)理代碼生成器的作用是讀取工程的元數(shù)據(jù),按照指定的設(shè)計(jì)模式,混合產(chǎn)生出規(guī)范的源代碼。典型的代碼生成器模型如圖2-1所示。在圖中,為自動(dòng)生成程序代碼,必需的三個(gè)關(guān)鍵要素是設(shè)計(jì)模式(所產(chǎn)生代碼的模板文件)、領(lǐng)域元數(shù)據(jù)(在代碼中需建模的拓?fù)浣Y(jié)構(gòu),即定義文件,通常隨開發(fā)折提供的特定數(shù)據(jù)增長)。 圖2-1 典型代碼生成器的模型圖 構(gòu)建自己的代碼生成器有2種方法,一是綜合利用流行的代碼生成器。構(gòu)建出適合自己的代碼生成器;另一種方法是構(gòu)造出一個(gè)全新的代碼生成器。無論哪種方法,在構(gòu)建代碼生成器都應(yīng)該注意下面幾個(gè)方面: (1)使用純文字樣版,使用純文字樣版的好處除了編輯方便外,也能將程序代碼定義邏輯和格式化邏輯分隔開來,使實(shí)作上更有彈性。 (2)編寫正規(guī)表達(dá)式(regular expression),正規(guī)表達(dá)式是一種字符串的表示方式,使用它不僅擴(kuò)大了字符串的表達(dá)能力,讓使用者很容易進(jìn)行字符串判斷,也可避免撰寫程序進(jìn)行復(fù)雜字符串解析的麻煩,也自然使得數(shù)據(jù)處理的過程變得更為迅速便利。 (3)編譯器原理,在對于文本文件的處理上,先利用掃描器(scanner)掃描出其中的字符,再實(shí)作解析器(parser)解析出所對應(yīng)的語法,然后轉(zhuǎn)換成所要產(chǎn)生的程序語言。 (4)文檔輸出入的處理, 由于程序產(chǎn)生牽涉到大量的文檔讀寫動(dòng)作,需要定義合適的數(shù)據(jù)結(jié)構(gòu)及緩沖區(qū)機(jī)制來提升文檔存取的效率,另一方面來說,在編寫樣版文檔時(shí)也需考量到對于存取效率上的負(fù)擔(dān)。2.2 三層b/s架構(gòu)架構(gòu)設(shè)計(jì)是非常高級(jí)的設(shè)計(jì),也是系統(tǒng)設(shè)計(jì)的關(guān)鍵,主要是定義和說明包(子系統(tǒng)),以及包與包之間的相互依賴與通信機(jī)制。系統(tǒng)構(gòu)架模型的合理與否將決定系統(tǒng)的可維護(hù)性、擴(kuò)展性和開發(fā)效率包通常所需要處理的是要么是一個(gè)具體的功能區(qū)域(業(yè)務(wù)邏輯),要么是一個(gè)具體的技術(shù)區(qū)域(技術(shù)邏輯)。業(yè)務(wù)邏輯主要考慮的是對系統(tǒng)業(yè)務(wù)功能的實(shí)現(xiàn),而技術(shù) 邏輯則是進(jìn)一步考慮用戶界面、數(shù)據(jù)庫或通信機(jī)制等形成的技術(shù)方案。把技術(shù)邏輯和業(yè)務(wù)邏輯區(qū)分開來是極其重要的,這是為了當(dāng)修改程序的某一部分時(shí)不會(huì)對另一 部分產(chǎn)生影響,更加便于進(jìn)行“復(fù)用”,同時(shí)易于應(yīng)對來自業(yè)務(wù)邏輯的變更需求。三層結(jié)構(gòu)是一種成熟、簡單并得到普遍應(yīng)用的應(yīng)用程序架構(gòu), 它將應(yīng)用程序結(jié)構(gòu)劃分三層獨(dú)立的包,包括用戶表示層、業(yè)務(wù)邏輯層、數(shù)據(jù)訪問層。其中將實(shí)現(xiàn)人機(jī)界面的所有表單和組件放在表示層,將所有業(yè)務(wù)規(guī)則和邏輯的實(shí) 現(xiàn)封裝在負(fù)責(zé)業(yè)務(wù)邏輯組件中,將所有和數(shù)據(jù)庫的交互封裝在數(shù)據(jù)訪問組件中。其結(jié)構(gòu)如下圖2-2所示:圖2-2 三層結(jié)構(gòu)2.3 設(shè)計(jì)模式設(shè)計(jì)模式使人們可以更加簡單方便地復(fù)用成功的設(shè)計(jì)和體系結(jié)構(gòu)。將已證實(shí)的技術(shù)表述成設(shè)計(jì)模式也會(huì)使新系統(tǒng)開發(fā)者更加容易理解其設(shè)計(jì)思路。一般而言,一個(gè)模式有四個(gè)基本要素:1. 模式名稱(pattern name) 一個(gè)助記名2. 問題(problem) 描述了應(yīng)該在何時(shí)使用模式。它解釋了設(shè)計(jì)問題和問題存在的前因后果,它可能描述了特定的設(shè)計(jì)問題,如怎樣用對象表示算法等。也可能描述了導(dǎo)致不靈活設(shè)計(jì)的類或?qū)ο蠼Y(jié)構(gòu)。有時(shí)候,問題部分會(huì)包括使用模式必須滿足的一系列先決條件。3. 解決方案(solution) 描述了設(shè)計(jì)的組成成分,它們之間的相互關(guān)系及各自的職責(zé)和協(xié)作方式。因?yàn)槟J骄拖褚粋€(gè)模板,可應(yīng)用于多種不同場合,所以解決方案并不描述一個(gè)特定而具體的設(shè)計(jì)或?qū)崿F(xiàn),而是提供設(shè)計(jì)問題的抽象描述和怎樣用一個(gè)具有一般意義的元素組合(類或?qū)ο蠼M合)來解決這個(gè)問題。4. 效果(consequences) 描述了模式應(yīng)用的效果及使用模式應(yīng)權(quán)衡的問題。盡管我們描述設(shè)計(jì)決策時(shí),并不總提到模式效果,但它們對于評價(jià)設(shè)計(jì)選擇和理解使用模式的代價(jià)及好處具有重要意義。軟件效果大多關(guān)注對時(shí)間和空間的衡量,它們也表述了語言和實(shí)現(xiàn)問題。因?yàn)閺?fù)用是面向?qū)ο笤O(shè)計(jì)的要素之一,所以模式效果包括它對系統(tǒng)的靈活性、擴(kuò)充性或可移植性的影響,顯式地列出這些效果對理解和評價(jià)這些模式很有幫助。設(shè)計(jì)模式常常劃分成不同的種類,常見的種類有: 創(chuàng)建型設(shè)計(jì)模式,如工廠方法(factory method)模式、抽象工廠(abstract factory)模式、原型(prototype)模式、單例(singleton)模式,建造(builder)模式等 。結(jié)構(gòu)型設(shè)計(jì)模式,如合成(composite)模式、裝飾(decorator)模式、代理(proxy)模式、享元(flyweight)模式、門面(facade)模式、橋梁(bridge)模式等 。行為型模式,如模版方法(template method)模式、觀察者(observer)模式、迭代子(iterator)模式、責(zé)任鏈(chain of responsibility)模式、備忘錄(memento)模式、命令(command)模式、狀態(tài)(state)模式、訪問者(visitor)模式等等。 以上是三種經(jīng)典類型,實(shí)際上還有很多其他的類型,比如fundamental型、partition型,relation型等等。設(shè)計(jì)模式在特定的編程語言中實(shí)現(xiàn)的時(shí)候,常常會(huì)用到代碼模式。比如單例(singleton)模式的實(shí)現(xiàn)常常涉及到雙檢鎖(double-check locking)模式等。下面介紹重點(diǎn)介紹抽象工廠模式:在軟件系統(tǒng)中,經(jīng)常面臨著“一系列相互依賴的對象”的創(chuàng)建工作;同時(shí)由于需求的變化,往往存在著更多系列對象的創(chuàng)建工作。如何應(yīng)對這種變化?如何繞過常規(guī)的對象的創(chuàng)建方法(new),提供一種“封裝機(jī)制”來避免客戶程序和這種“多系列具體對象創(chuàng)建工作”的緊耦合?這就是我們要說的抽象工廠模式。它的意圖是提供一個(gè)創(chuàng)建一系列相關(guān)或相互依賴對象的接口,而無需指定它們具體的類。模型如下圖所示:邏輯模型(圖2-3):圖2-3 邏輯模型物理模型(圖2-4):圖2-4 物理模型2.4 反射技術(shù)反射的定義:審查元數(shù)據(jù)并收集關(guān)于它的類型信息的能力。元數(shù)據(jù)(編譯以后的最基本數(shù)據(jù)單元)就是一大堆的表,當(dāng)編譯程序集或者模塊時(shí),編譯器會(huì)創(chuàng)建一個(gè)類 定義表,一個(gè)字段定義表,和一個(gè)方法定義表等,。system.reflection命名空間包含的幾個(gè)類,允許你反射(解析)這些元數(shù)據(jù)表的代碼。例如: assembly類可以獲得正在運(yùn)行的裝配件信息,也可以動(dòng)態(tài)的加載裝配件,以及在裝配件中查找類型信息,并創(chuàng)建該類型的實(shí)例。 type類可以獲得對象的類型信息,此信息包含對象的所有要素:方法、構(gòu)造器、屬性等等,通過type類可以得到這些要素的信息,并且調(diào)用之。 methodinfo包含方法的信息,通過這個(gè)類可以得到方法的名稱、參數(shù)、返回值等,并且可以調(diào)用之。 反射的作用: 1 可以使用反射動(dòng)態(tài)地創(chuàng)建類型的實(shí)例,將類型綁定到現(xiàn)有對象,或從現(xiàn) 有對象中獲取類型。2 應(yīng)用程序需要在運(yùn)行時(shí)從某個(gè)特定的程序集中載入一個(gè)特定的類型,以便實(shí)現(xiàn)某個(gè)任務(wù)時(shí)可以用到反射。3 反射主要應(yīng)用與類庫,這些類庫需要知道一個(gè)類型的定義,以便提供更多的功能。 2.5 緩存技術(shù)由數(shù)據(jù)庫驅(qū)動(dòng)的web應(yīng)用程序,如果需要改善其性能,最好的方法是使用緩存功能。用戶從數(shù)據(jù)庫中檢索數(shù)據(jù),可能是web應(yīng)用程序中執(zhí)行最慢的操作之一。因?yàn)槠渲猩婕岸鄠€(gè)環(huán)節(jié),例如,web服務(wù)器、數(shù)據(jù)庫服務(wù)器等。尤其是在用戶比較多,檢索的數(shù)據(jù)量比較大的情況下,會(huì)給包括用戶在內(nèi)的各個(gè)方面造成不小的困難。如果能夠?qū)?shù)據(jù)庫中的數(shù)據(jù)緩存到內(nèi)存(也可以存儲(chǔ)在其他場所),則無需在請求每個(gè)頁面時(shí)都訪問數(shù)據(jù)庫。由于從內(nèi)存中返回?cái)?shù)據(jù)的速度始終比新提供的數(shù)據(jù)速度快,因而可以大大提供應(yīng)用程序的性能。asp.net 2.0支持以下幾種緩存:頁面輸出緩存頁面輸出緩存是最為簡單的緩存機(jī)制,該機(jī)制將整個(gè)asp.net頁面內(nèi)容保存在服務(wù)器內(nèi)存中。當(dāng)用戶請求該頁面時(shí),系統(tǒng)從內(nèi)存中輸出相關(guān)數(shù)據(jù),直到緩存數(shù)據(jù)過期。在這個(gè)過程中,緩存內(nèi)容直接發(fā)送給用戶,而不必再次經(jīng)過頁面處理生命周期。通常情況下,頁面輸出緩存對于那些包含不需要經(jīng)常修改內(nèi)容的,但需要大量處理才能編譯完成的頁面特別有用。需要讀者注意的是,頁面輸出緩存是將頁面全部內(nèi)容都保存在內(nèi)存中,并用于完成客戶端請求。頁面部分緩存顧名思義,頁面部分緩存是將頁面部分內(nèi)容保存在內(nèi)存中以便響應(yīng)用戶請求,而頁面其他部分內(nèi)容則為動(dòng)態(tài)內(nèi)容。頁面部分緩存的實(shí)現(xiàn)包括兩種方式:控件緩存和替換后緩存。前者也可稱為片段緩存,這種方式允許將需要緩存的信息包含在一個(gè)用戶控件內(nèi),然后,將該用戶控件標(biāo)記為可緩存的,以此來緩存頁面輸出的部分內(nèi)容。這一方式緩存了頁面中的特定內(nèi)容,而沒有緩存整個(gè)頁面,因此,每次都需重新創(chuàng)建整個(gè)頁。例如,如果要?jiǎng)?chuàng)建一個(gè)顯示大量動(dòng)態(tài)內(nèi)容(如股票信息)的頁,其中有些部分為靜態(tài)內(nèi)容(如每周總結(jié)),這時(shí)可以將靜態(tài)部分放在用戶控件中,并允許緩存這些內(nèi)容。緩存后替換與控件緩存正好相反。這種方式緩存整個(gè)頁,但頁中的各段都是動(dòng)態(tài)的。例如,如果要?jiǎng)?chuàng)建一個(gè)在規(guī)定時(shí)間段內(nèi)為靜態(tài)的頁,則可以將整個(gè)頁設(shè)置為進(jìn)行緩存。如果向頁添加一個(gè)顯示用戶名的label控件,則對于每次頁刷新和每個(gè)用戶而言,label的內(nèi)容都將保持不變,始終顯示緩存該頁之前請求該頁的用戶的姓名。使用緩存后替換機(jī)制,可以將頁配置為進(jìn)行緩存,將頁的個(gè)別部分標(biāo)記為不可緩存。在此情況下,可以向不可緩存部分添加label控件,這樣將為每個(gè)用戶和每次頁請求動(dòng)態(tài)創(chuàng)建這些控件。應(yīng)用程序數(shù)據(jù)緩存應(yīng)用程序數(shù)據(jù)緩存提供了一種編程方式,可通過鍵/值對將任意數(shù)據(jù)存儲(chǔ)在內(nèi)存中。使用應(yīng)用程序緩存與使用應(yīng)用程序狀態(tài)類似。但是,與應(yīng)用程序狀態(tài)不同的是,應(yīng)用程序數(shù)據(jù)緩存中的數(shù)據(jù)是易失的,即數(shù)據(jù)并不是在整個(gè)應(yīng)用程序生命周期中都存儲(chǔ)在內(nèi)存中。應(yīng)用程序數(shù)據(jù)緩存的優(yōu)點(diǎn)是由asp.net管理緩存,它會(huì)在項(xiàng)過期、無效,或內(nèi)存不足時(shí)移除緩存中的項(xiàng),還可以配置應(yīng)用程序緩存,以便在移除項(xiàng)時(shí)通知應(yīng)用程序。緩存依賴asp.net 2.0新增了sql數(shù)據(jù)緩存依賴功能。該功能的核心是sqlcachedependency類。不同版本的sql server,其對于sql數(shù)據(jù)緩存依賴具有不同程度的支持,因此,使用方法差異較大。另外,asp.net 2.0還支持以cachedependency類為核心的自定義緩存依賴,以及以aggregatecachedependency類為核心的聚合緩存依賴等。asp.net 2.0包括了一些有助于進(jìn)行緩存配置的新功能。例如,允許使用web.config文件來創(chuàng)建緩存設(shè)置。在web.config文件中進(jìn)行適當(dāng)設(shè)置,并在單個(gè)頁中引用這些設(shè)置后,就能夠?qū)⒕彺嬖O(shè)置同時(shí)應(yīng)用于多個(gè)頁面。同時(shí),緩存設(shè)置還添加了更多用于自定義緩存性能的選項(xiàng)。2.6 xml技術(shù)xml是extensible markup language的縮寫,是一種類似于html的標(biāo)記語言。xml是用來描述數(shù)據(jù)的,它的標(biāo)記不是在xml中預(yù)定義的,你必須定義自己的標(biāo)記 。xml使用文檔類型定義(dtd)或者模式(schema)來描述數(shù)據(jù)。xml和html的主要區(qū)別是:xml是用來存放數(shù)據(jù)的。xml是被設(shè)計(jì)用來描述數(shù)據(jù)的,重點(diǎn)是:什么是數(shù)據(jù),如何存放數(shù)據(jù)。html是被設(shè)計(jì)用來顯示數(shù)據(jù)的,重點(diǎn)是:顯示數(shù)據(jù)以及如何顯示數(shù)據(jù)更好上面。html是與顯示信息相關(guān)的, xml則是與描述信息相關(guān)的。.net框架為我們提供了以下一些命名空間:system.xml、system.xml.schema、 system.xml.serialization、system.xml.xpath以及 system.xml.xsl來包容和xml操作相關(guān)的類。xmlreader類是一個(gè)虛基類,它包含了讀xml文檔的方法和屬性。該類中的read方法是一個(gè)基本的讀xml文檔的方法,它以流形式讀取xml文檔中的節(jié)點(diǎn)(node)。另外,該類還提供了readstring、readinnerxml、 readouterxml和readstartelement等更高級(jí)的讀方法。除了提供讀xml文檔的方法外,xmlreader類還為程序員提供了 movetoattribute、movetofirstattribute、movetocontent、movetofirstcontent、 movetoelement以及 movetonextattribute等具有導(dǎo)航功能的方法。xmlwriter類為程序員提供了許多寫xml文檔的方法。xmlnode類是一個(gè)非常重要的類,它代表了xml文檔中的某個(gè)節(jié)點(diǎn)。該節(jié)點(diǎn)可以是xml文檔的根節(jié)點(diǎn),這樣它就代表整個(gè)xml文檔了。它是許多很有用的類的基類,這些類包括插入節(jié)點(diǎn)的類、刪除節(jié)點(diǎn)的類、替換節(jié)點(diǎn)的類以及在xml文檔中完成導(dǎo)航功能的類。同時(shí),xmlnode類還為程序員提供了獲取雙親節(jié)點(diǎn)、子節(jié)點(diǎn)、最后一個(gè)子節(jié)點(diǎn)、節(jié)點(diǎn)名稱以及節(jié)點(diǎn)類型等的屬性。xmldocument類代表了一個(gè)xml文檔,它提供了載入和保存xml文檔的方法和屬性。這些方法包括了load、loadxml和save等。同時(shí),它還提供了添加特性(attributes)、說明(comments)、空間(spaces)、元素(elements)和新節(jié)點(diǎn)(new nodes)等xml項(xiàng)的功能。2.7 語法高亮顯示語法高亮控件icsharpcode.textedition來自開源項(xiàng)目sharpdevelop。所謂的語法加亮編輯器就是能根據(jù)不同的文件類型,來顯示文本內(nèi)容。比如利用語法加亮編輯器可以顯示c#代碼的效果,類型、變量等分別用不同的顏色以示區(qū)分。具體用法可以參見:/。第三章 系統(tǒng)分析與設(shè)計(jì)3.1 系統(tǒng)分析3.1.1 系統(tǒng)開發(fā)環(huán)境a 硬件環(huán)境普通pc ( 1.8ghz, 內(nèi)存512m)一臺(tái)。b 開發(fā)工具系統(tǒng)開發(fā)平臺(tái):microsoft windows xp professional 開發(fā)工具與環(huán)境:microsoft visual studio 2005 c#本系統(tǒng)在microsoft windows xp professional下開發(fā),程序測試環(huán)境為microsoft windows xp professional,用戶在windows 2000和 windows xp下都可以使用。 本系統(tǒng)應(yīng)用的軟件開發(fā)工具與環(huán)境:.microsoft visual studio 2005 c#,配合數(shù)據(jù)庫:microsoft sql server 2000或者microsoft sql server 2005。3.1.2 需求分析該系統(tǒng)主要需求分為數(shù)據(jù)庫連接模塊、代碼生成模塊和數(shù)據(jù)庫查詢分析模塊(圖3-1)。圖3-1 總的功能模塊數(shù)據(jù)庫連接模塊(圖3-2)的業(yè)務(wù)流程:數(shù)據(jù)庫連接模塊支持不同版本的數(shù)據(jù)庫服務(wù)器(至少支持sqlserver2000、sqlserver2005)。當(dāng)用戶需要連接一個(gè)新的數(shù)據(jù)庫時(shí),調(diào)用此模塊。用戶提供數(shù)據(jù)庫的連接信息,系統(tǒng)將連接數(shù)據(jù)庫,并做出相應(yīng)的操作提取該數(shù)據(jù)庫的有用信息。圖3-2 數(shù)據(jù)庫連接模塊功能模塊圖數(shù)據(jù)庫查詢分析模塊(圖3-3)的業(yè)務(wù)流程:用戶可以選擇表來查看相應(yīng)表中的數(shù)據(jù)。系統(tǒng)為用戶提供關(guān)于單表的sql語句(包括增、刪、查、改)的模板。用戶方便的進(jìn)行查詢分析,這樣省去了該系統(tǒng)與數(shù)據(jù)庫之間來回切換的不便。圖3-3 數(shù)據(jù)庫查詢分析模塊功能模塊圖代碼生成模塊(圖3-4)的業(yè)務(wù)流程:根據(jù)用戶選擇的數(shù)據(jù)庫表,系統(tǒng)生成相應(yīng)的代碼。(1)包括生成屬性、添加、修改、刪除、查詢、存在性、model 類構(gòu)造等基礎(chǔ)代碼片斷。(2)自動(dòng)生成數(shù)據(jù)庫的存儲(chǔ)過程。(3) 支持不同架構(gòu)代碼生成,用戶可以定義命名。(4)自動(dòng)生成實(shí)體model,dal(數(shù)據(jù)訪問層),idal(接口層),dalfactory(類工廠),bll(業(yè)務(wù)邏輯層) 等多層的代碼。(5)代碼批量生成自動(dòng)導(dǎo)出功能。圖3-4 代碼生成模塊的功能模塊圖3.1.3 系統(tǒng)用例圖及詳細(xì)說明本系統(tǒng)用例圖(圖3-5):圖-5系統(tǒng)用例圖每個(gè)用例的詳細(xì)說明:用例1:新建連接1、 用戶選擇數(shù)據(jù)庫類型,并且輸入相應(yīng)的服務(wù)器名、用戶名和密碼。2、 系統(tǒng)連接數(shù)據(jù)庫,并獲得該數(shù)據(jù)庫的數(shù)據(jù)信息。錯(cuò)誤情況1:數(shù)據(jù)庫連接失敗如果用戶輸入的數(shù)據(jù)庫信息有誤,彈出消息框提示操作失敗。用例2:注銷連接1、系統(tǒng)刪除本次連接的數(shù)據(jù)庫數(shù)據(jù)的信息。用例3:刷新連接1、 系統(tǒng)根據(jù)本次數(shù)據(jù)庫連接信息重新連接數(shù)據(jù)庫并且重新得到數(shù)據(jù)庫信息。用例4:瀏覽表數(shù)據(jù)1、 用戶選擇數(shù)據(jù)庫的表,選擇瀏覽表數(shù)據(jù)的選項(xiàng)。2、 系統(tǒng)從數(shù)據(jù)庫中讀取改表中的信息并予以顯示。錯(cuò)誤情況1:得到數(shù)據(jù)失敗如果系統(tǒng)獲取數(shù)據(jù)失敗,系統(tǒng)拋出異常。用例5:生成sql語句1、 用戶選擇表,并選擇生成sql語句的選項(xiàng)。2、 系統(tǒng)根據(jù)表信息生成相應(yīng)的sql語句,并顯示。用例6:執(zhí)行sql語句1、 用戶輸入執(zhí)行的sql語句,點(diǎn)擊執(zhí)行按鈕。2、 系統(tǒng)執(zhí)行sql語句,得到結(jié)果并顯示。錯(cuò)誤情況:執(zhí)行sql語句出錯(cuò)如果系統(tǒng)執(zhí)行sql語句出錯(cuò),系統(tǒng)拋出異常。用例7:工廠模式model代碼1、 用戶設(shè)選擇生成工廠模式model代碼的表。2、 用戶設(shè)置代碼生成需要的參數(shù)(頂級(jí)命名空間、項(xiàng)目名、主鍵、model類名、代碼類型(選擇工廠模式下的model代碼)、方法選擇、數(shù)據(jù)層類型)。3、 用戶點(diǎn)擊生成按鈕。4、 系統(tǒng)生成工廠模式model代碼。錯(cuò)誤情況1:代碼生成失敗如果用戶用戶沒有選擇指定的表,系統(tǒng)將不能正常生成代碼,并彈出消息框予以提示。用例8:工廠模式idal代碼1、用戶設(shè)選擇生成工廠模式idal代碼的表。2、用戶設(shè)置代碼生成需要的參數(shù)(頂級(jí)命名空間、項(xiàng)目名、主鍵、model類名、代碼類型(選擇工廠模式下的idal代碼)、方法選擇、數(shù)據(jù)層類型)。5、 用戶點(diǎn)擊生成按鈕。6、 系統(tǒng)生成工廠模式idal代碼。錯(cuò)誤情況1:代碼生成失敗如果用戶用戶沒有選擇指定的表,系統(tǒng)將不能正常生成代碼,并彈出消息框予以提示。用例9:工廠模式dal代碼1、用戶設(shè)選擇生成工廠模式dal代碼的表。2、用戶設(shè)置代碼生成需要的參數(shù)(頂級(jí)命名空間、項(xiàng)目名、主鍵、model類名、代碼類型(選擇工廠模式下的dal代碼)、方法選擇、數(shù)據(jù)層類型)。3、用戶點(diǎn)擊生成按鈕。4、系統(tǒng)生成工廠模式dal代碼。錯(cuò)誤情況1:代碼生成失敗如果用戶用戶沒有選擇指定的表,系統(tǒng)將不能正常生成代碼,并彈出消息框予以提示。用例10:工廠模式idalfactroy代碼1、用戶設(shè)選擇生成工廠模式idalfactroy代碼的表。2、用戶設(shè)置代碼生成需要的參數(shù)(頂級(jí)命名空間、項(xiàng)目名、主鍵、model類名、代碼類型(選擇工廠模式下的idalfactroy代碼)、方法選擇、數(shù)據(jù)層類型)。3、用戶點(diǎn)擊生成按鈕。4、系統(tǒng)生成工廠模式idalfactroy代碼。錯(cuò)誤情況1:代碼生成失敗如果用戶用戶沒有選擇指定的表,系統(tǒng)將不能正常生成代碼,并彈出消息框予以提示。用例11:工廠模式bll代碼1、用戶設(shè)選擇生成工廠模式bll代碼的表。2、用戶設(shè)置代碼生成需要的參數(shù)(頂級(jí)命名空間、項(xiàng)目名、主鍵、model類名、代碼類型(選擇工廠模式下的bll代碼)、方法選擇、數(shù)據(jù)層類型)。3、用戶點(diǎn)擊生成按鈕。4、系統(tǒng)生成工廠模式bll代碼。錯(cuò)誤情況1:代碼生成失敗如果用戶用戶沒有選擇指定的表,系統(tǒng)將不能正常生成代碼,并彈出消息框予以提示。用例12:簡單三層model代碼1、用戶設(shè)選擇生成簡單三層model代碼的表。2、用戶設(shè)置代碼生成需要的參數(shù)(頂級(jí)命名空間、項(xiàng)目名、主鍵、model類名、代碼類型(選擇簡單模式下的model代碼)、方法選擇、數(shù)據(jù)層類型)。3、用戶點(diǎn)擊生成按鈕。4、系統(tǒng)生成簡單模式model代碼。錯(cuò)誤情況1:代碼生成失敗如果用戶用戶沒有選擇指定的表,系統(tǒng)將不能正常生成代碼,并彈出消息框予以提示。用例13:簡單三層dal代碼1、用戶設(shè)選擇生成簡單三層dal代碼的表。2、用戶設(shè)置代碼生成需要的參數(shù)(頂級(jí)命名空間、項(xiàng)目名、主鍵、model類名、代碼類型(選擇簡單模式下的dal代碼)、方法選擇、數(shù)據(jù)層類型)。3、用戶點(diǎn)擊生成按鈕。4、系統(tǒng)生成簡單模式dal代碼。錯(cuò)誤情況1:代碼生成失敗如果用戶用戶沒有選擇指定的表,系統(tǒng)將不能正常生成代碼,并彈出消息框予以提示。用例14:簡單三層bll代碼1、用戶設(shè)選擇生成簡單三層bll代碼的表。2、用戶設(shè)置代碼生成需要的參數(shù)(頂級(jí)命名空間、項(xiàng)目名、主鍵、model類名、代碼類型(選擇簡單模式下的bll代碼)、方法選擇、數(shù)據(jù)層類型)。3、用戶點(diǎn)擊生成按鈕。4、系統(tǒng)生成簡單模式bll代碼。錯(cuò)誤情況1:代碼生成失敗如果用戶用戶沒有選擇指定的表,系統(tǒng)將不能正常生成代碼,并彈出消息框予以提示。用例15:單層代碼1、用戶設(shè)選擇生成單層代碼的表。2、用戶設(shè)置代碼生成需要的參數(shù)(頂級(jí)命名空間、項(xiàng)目名、主鍵、代碼類型(選擇單層代碼)、方法選擇、數(shù)據(jù)層類型)。3、用戶點(diǎn)擊生成按鈕。4、系統(tǒng)生成單層代碼。錯(cuò)誤情況1:代碼生成失敗如果用戶用戶沒有選擇指定的表,系統(tǒng)將不能正常生成代碼,并彈出消息框予以提示。用例16:aspx代碼1、用戶設(shè)選擇生成web頁面代碼的表。2、用戶設(shè)置代碼生成需要的參數(shù)(代碼類型(選擇aspx代碼)、方法選擇)。3、用戶點(diǎn)擊生成按鈕。4、系統(tǒng)生成aspx代碼。錯(cuò)誤情況1:代碼生成失敗如果用戶用戶沒有選擇指定的表,系統(tǒng)將不能正常生成代碼,并彈出消息框予以提示。用例17:aspx.cs代碼1、用戶設(shè)選擇生成web頁面代碼的表。2、用戶設(shè)置代碼生成需要的參數(shù)(代碼類型(選擇aspx.cs)、方法選擇)。3、用戶點(diǎn)擊生成按鈕。4、系統(tǒng)生成aspx.cs代碼。錯(cuò)誤情況1:代碼生成失敗如果用戶用戶沒有選擇指定的表,系統(tǒng)將不能正常生成代碼,并彈出消息框予以提示。用例18:存儲(chǔ)過程1、 用戶選擇生成存儲(chǔ)過程的表和所要生成的存儲(chǔ)過程方法,并點(diǎn)擊生成按鈕。2、 系統(tǒng)生成該表的存儲(chǔ)過程。錯(cuò)誤情況1:代碼生成失敗如果用戶用戶沒有選擇指定的表,系統(tǒng)將不能正常生成代碼,并彈出消息框予以提示。用例19:代碼導(dǎo)出1、 用戶選擇代碼導(dǎo)出按鈕。2、 系統(tǒng)顯示代碼輸出窗口。3、 用戶選擇要輸出代碼的數(shù)據(jù)庫名和表名。4、 用戶選擇架構(gòu)、方法、保存路徑,輸入命名空間、子文件夾,點(diǎn)擊導(dǎo)出。5、 系統(tǒng)根據(jù)用戶輸入生成相應(yīng)的代碼并保存到相應(yīng)的位置,并彈出消息框提示。錯(cuò)誤情況1:代碼導(dǎo)出失敗如果用戶選擇的數(shù)據(jù)庫與表不一致,系統(tǒng)無法成功生成代碼,系統(tǒng)將彈出消息框提示。3.2 系統(tǒng)設(shè)計(jì)方案3.2.1 設(shè)計(jì)原則本系統(tǒng)采用面向?qū)ο蠓椒ú⒏鶕?jù)分層設(shè)計(jì)原則設(shè)計(jì)。系統(tǒng)分為表示層、邏輯層和數(shù)據(jù)訪問層(如圖3-6所示)三層。圖3.-6 典型代碼生成器的模型數(shù)據(jù)訪問層實(shí)現(xiàn)系統(tǒng)與數(shù)據(jù)庫之間的通信。它使的表示層、邏輯層不再關(guān)心數(shù)據(jù)庫的具體問題。業(yè)務(wù)邏輯層實(shí)現(xiàn)該系統(tǒng)的業(yè)務(wù)邏輯的細(xì)節(jié)。表示層實(shí)現(xiàn)用戶接口。3.2.2 系統(tǒng)類 系統(tǒng)類包含在數(shù)據(jù)訪問包 、業(yè)務(wù)邏輯包 和用戶界面包這三個(gè)包中。數(shù)據(jù)訪問包設(shè)計(jì)(圖3-7):圖3-7 數(shù)據(jù)訪問包每個(gè)類說明:antosqlhelper類是進(jìn)行數(shù)據(jù)庫通信的基類,通過此類訪問數(shù)據(jù)庫并得到數(shù)據(jù)集。dbconfig類用于設(shè)置和讀取數(shù)據(jù)庫連接配置的信息。sqlk2kdbinfo類用于獲得sqlserver2005數(shù)據(jù)庫的信息。sqlk2kdbinfo2類用戶獲得sqlserver2000數(shù)據(jù)庫的信息.dbtodbxml類將sqlserver2005數(shù)據(jù)庫的信息轉(zhuǎn)化成表的形式以便對其數(shù)據(jù)庫信息的操作。dbtodbxml2將sqlserver2000數(shù)據(jù)庫的信息轉(zhuǎn)化成表的形式以便對其數(shù)據(jù)庫信息的操作。dbtodbxml將不同版本的數(shù)據(jù)信息以統(tǒng)一的形式寫入xml中,它作為本系統(tǒng)的操作基礎(chǔ)。業(yè)務(wù)邏輯包設(shè)計(jì)(圖3-8):圖3-8 業(yè)務(wù)邏輯包每個(gè)類的說明:entitycode類將數(shù)據(jù)庫指定表的信息以及用戶要求生成工廠模式的model層代碼。idalcode類將數(shù)據(jù)庫指定表的信息以及用戶要求生成工廠模式的idal層代碼。dalcode類將數(shù)據(jù)庫指定表的信息以及用戶要求生成工廠模式的dal層代碼。dalfactorycode類將數(shù)據(jù)庫指定表的信息以及用戶要求生成工廠模式的dalfactorycode層代碼。bllcode類將數(shù)據(jù)庫指定表的信息以及用戶要求生成工廠模式的bll層代碼。aspxcode類將數(shù)據(jù)庫指定表的信息以及用戶要求生成增加窗體和顯示窗體的代碼。aspxcscode類將數(shù)據(jù)庫指定表的信息以及用戶要求生成aspx.cs代碼。simplecode類將數(shù)據(jù)庫指定表的信息以及用戶要求生成單層結(jié)構(gòu)的代碼。thbllcode類將數(shù)據(jù)庫指定表的信息以及用戶要求生成簡單三層的bll代碼。thdalcode類將數(shù)據(jù)庫指定表的信息以及用戶要求生成簡單三層的dal代碼。thentitycode類將數(shù)據(jù)庫指定表的信息以及用戶要求生成簡單三層的model代碼。procedurecode類將數(shù)據(jù)庫指定表的信息生成存儲(chǔ)過程代碼。createsql類將數(shù)據(jù)庫指定表的信息生成sql語句。tbdataview類得到執(zhí)行sql語句的結(jié)果,并轉(zhuǎn)化成表的形式。用戶界面包設(shè)計(jì)(圖3-9):圖3-9 用戶界面包每個(gè)類的說明:main類構(gòu)成系統(tǒng)的主界面,與用戶進(jìn)行交互。toui類封裝了數(shù)據(jù)顯示的細(xì)節(jié)。newconnection類對數(shù)據(jù)庫進(jìn)行配置。outcodefileform類對代碼進(jìn)行導(dǎo)出。第四章 系統(tǒng)實(shí)現(xiàn)4.1 系統(tǒng)界面設(shè)計(jì)1、系統(tǒng)主界面(圖4-1):這是這是主要的用戶接口,提供用戶各種操作。左邊樹形控件用戶顯示數(shù)據(jù)庫信息,右邊用于設(shè)置及顯示數(shù)據(jù)結(jié)果。圖4-1 系統(tǒng)主界面2、新建數(shù)據(jù)連接界面(圖4-2):用戶通過此接口完成新的數(shù)據(jù)庫連接。目前數(shù)據(jù)庫類型只支持sqlserver2005和sqlserver2000。圖4-2 新建數(shù)據(jù)連接界面3、代碼導(dǎo)出界面(圖4-3):可以有選擇的導(dǎo)出庫表相關(guān)的不同類型的代碼。圖4-3 代碼導(dǎo)出界面4.2系統(tǒng)功能實(shí)現(xiàn)4.2.1 數(shù)據(jù)庫新連接(即導(dǎo)入數(shù)據(jù)庫信息)功能的實(shí)現(xiàn)數(shù)據(jù)庫新連接功能完成獲取數(shù)據(jù)庫信息。單擊工具欄上的新建連接服務(wù)器,系統(tǒng)進(jìn)入新建數(shù)據(jù)庫連接界面,用戶輸入數(shù)據(jù)庫類型、服務(wù)器名、用戶名和密碼,單擊連接按鈕。系統(tǒng)將得到數(shù)據(jù)庫信息,并且將數(shù)據(jù)庫信息加載到主界面左側(cè)的樹形控件中。4.2.2 代碼生成功能的實(shí)現(xiàn)代碼生成是本系統(tǒng)最基本也是最重要的功能。在左邊選擇一張表單擊右鍵選擇代碼生成器,系統(tǒng)右邊將顯示代碼生成器的設(shè)置窗口(圖4-4)。生成的代碼類型有數(shù)據(jù)庫腳本、c#代碼和web頁面代碼。c#代碼有基于工廠模式三層、簡單三層和單類結(jié)構(gòu)的代碼。用戶通過此窗口設(shè)置想要得到的代碼類型。然后單擊生成代碼按鈕,系統(tǒng)將生成相應(yīng)的代碼(圖4-5)。圖4-4 設(shè)置窗口圖4-5 生成代碼4.2.3 代碼導(dǎo)出功能的實(shí)現(xiàn)系統(tǒng)可以將代碼批量的導(dǎo)出以文件的形式存儲(chǔ)到計(jì)算機(jī)中。用戶單擊工具欄上的代碼導(dǎo)出按鈕。系統(tǒng)進(jìn)入代碼導(dǎo)出界面(4-3)。用戶選擇指定的數(shù)據(jù)庫名,系統(tǒng)將在列表框中列出該數(shù)據(jù)庫中表的集合。用戶將想要生成代碼的表加如到右邊的列表框內(nèi)。然后,用戶選擇不同的架構(gòu)、代碼類型、保存路徑及設(shè)置命名空間。單擊導(dǎo)出按鈕,系統(tǒng)將會(huì)把代碼導(dǎo)入到指定位置。4.2.4 數(shù)據(jù)庫查詢分析功能的實(shí)現(xiàn)系統(tǒng)可以根據(jù)表信息生成相應(yīng)的增刪查改的sql語句,供用戶使用,并且可以直接執(zhí)行sql語句,返回的結(jié)果會(huì)在窗口右下方顯示。選擇表單擊右鍵選擇生成sql語句,選擇sql語句類型并單擊,右邊窗口將得到相應(yīng)的sql語句模板。用戶也可以直接編輯sql語句,單擊工具欄的執(zhí)行按鈕,系統(tǒng)將執(zhí)行sql語句,并將結(jié)果在窗口右下方顯示(圖4-6)。圖4-6 數(shù)據(jù)庫查詢分析器第五章 難點(diǎn)與對策5.1 數(shù)據(jù)庫表信息的讀取想要讀取數(shù)據(jù)庫每個(gè)表類型信息(表名、表說明、類型長度、主鍵、標(biāo)識(shí)等)并不容易。這需要執(zhí)行復(fù)雜的sql語句。代碼實(shí)現(xiàn):/單表列集合 type:標(biāo)識(shí) 視圖/表 (v/u)public dataset getcolumns(string databasename, string tablename, string type) /sql語句 string sqlstr = select + case when a.colorder = 1 then d .name else end as 表名, + case when a.colorder = 1 then isnull(convert(nvarchar, f.value), ) else end as 表說明, + a.colorder as 字段序號(hào), + as 字段名, + case when columnproperty(a.id, , isidentity) = 1 then else end as 標(biāo)識(shí), + case when exists + (select 1 + from sysobjects + where parent_obj = object_id(d .name) and xtype = pk and name in + (select name + from sysindexes + where indid in + (select indid + from sysindexkeys + where id = a.id and colid = a.colid) + then else end as 主鍵, + as 類型, + a.length as 占用字節(jié)數(shù), + columnproperty(a.id, , precision) as 長度, + isnull(columnproperty(a.id, , scale), 0

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論