版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 畢業(yè)論文</b></p><p> 通用的Web信息管理系統(tǒng)框架</p><p> 專業(yè)名稱: 計(jì)算機(jī)科學(xué)與技術(shù) </p><p><b> 摘要</b></p><p> 在Web數(shù)據(jù)庫應(yīng)用系統(tǒng)(如MIS、ERP、CRM等)的開發(fā)中,軟件開發(fā)人員往往要面臨重復(fù)
2、編寫一些簡單的、令人乏味的代碼的問題,而且每當(dāng)新需求來臨的時(shí)候, 又不得不一再重復(fù)以前的工作。但是在面向?qū)ο蟮木幊讨校瑢?shí)際情況是,一旦項(xiàng)目開發(fā)的整體框架和需求或是數(shù)據(jù)模型確定時(shí),很多與項(xiàng)目相關(guān)的工作都可以自動(dòng)生成。為了使編程人員從繁復(fù)的代碼開發(fā)中解放出來,基于MDA 的代碼生成技術(shù)很好的解決了這些問題。基于MDA 的代碼生成技術(shù)就是一個(gè)專注于解放編碼生產(chǎn)力,用程序來編程的研究方向。</p><p> 系統(tǒng)使用M
3、icrosoft Visual Studio 2008為主要開發(fā)工具。畢業(yè)設(shè)計(jì)為一個(gè)asp.net三層架構(gòu)的Web應(yīng)用開發(fā)了一個(gè)基于Xml技術(shù)軟件項(xiàng)目生成系統(tǒng),生成的產(chǎn)品包括了項(xiàng)目源代碼、數(shù)據(jù)庫、項(xiàng)目文檔。在軟件開發(fā)人員平時(shí)的開發(fā)中,當(dāng)系統(tǒng)的需求分析和開發(fā)使用的軟件框架確定后,采用此軟件項(xiàng)目生成系統(tǒng),就可以快速生成基于Web系統(tǒng)框架的軟件(包括了對(duì)數(shù)據(jù)實(shí)體的添加、修改、刪除、下載等通用操作)。軟件項(xiàng)目生成系統(tǒng),是在微軟的WPF框架而開發(fā)
4、,使用了Ribbon界面,迎合了當(dāng)代軟件界面的趨勢(shì)。WPF框架做到了分離界面設(shè)計(jì)人員與開發(fā)人員的工作,提供了全新的多媒體交互用戶圖形界面,可以迅速開發(fā)出絢麗的界面。</p><p> 在基于MDA技術(shù)的軟件生成的研究的理論基礎(chǔ)上,本文結(jié)合一個(gè)穩(wěn)定的asp.net Web三層框架,最終設(shè)計(jì)出基于Xml軟件項(xiàng)目生成系統(tǒng)。論文分五個(gè)部分詳細(xì)闡述了軟件項(xiàng)目生成系統(tǒng)從設(shè)計(jì)到實(shí)現(xiàn)的全過程。第一部分簡要敘述了軟件項(xiàng)目生成系統(tǒng)
5、的背景、現(xiàn)狀以及用到的核心技術(shù);第二部分詳細(xì)描述了系統(tǒng)的功能需求以及可行性;第三部分闡述了系統(tǒng)模塊設(shè)計(jì)以及數(shù)據(jù)設(shè)計(jì);第四部分詳細(xì)討論了系統(tǒng)核心功能的實(shí)現(xiàn);第五部分簡述了系統(tǒng)測(cè)試,包括黑盒測(cè)試和白盒測(cè)試。</p><p> 關(guān)鍵詞:MDA;WPF;代碼生成器;Asp.net</p><p><b> ABSTRACT</b></p><p>
6、 In a Web database application system (such as MIS, ERP, CRM, etc.) development, the software developers are often repeat to write some simple, boring code problem, and when new requirements come, and have to repeat pre
7、vious work. But in object-oriented programming, the reality is, once the project development or data model to determine the overall framework and demand a lot of project related work can be generated automatically. A pro
8、grammer from heavy and complicated to make code development, c</p><p> System uses Microsoft Visual Studio 2008 as main development tools. Graduation design is an asp.net three layer architecture of Web app
9、lications which has developed a software program generating system based on Xml technology, the generated products including the project source code, database, project documentation. During the development of software de
10、velopers at ordinary times, when the development of the use of system requirement analysis and software framework is determined, using the softwa</p><p> Based on MDA technology research based on the theory
11、 of generated by the software, this paper combined with a stable asp.net Web three layers framework, final design based on Xml software projects generating system. Paper is divided into five parts in detail elaborated th
12、e software project during the process of production system from design to implementation. The first part briefly describes the background of a software project, the present situation as well as the use of core technology
13、; The se</p><p> Key words: the MDA; WPF; The code generator; ASP.NET </p><p><b> 目 錄</b></p><p><b> 1緒論1</b></p><p><b> 1.1背景2</
14、b></p><p><b> 1.2意義2</b></p><p> 1.3系統(tǒng)開發(fā)工具及相關(guān)核心技術(shù)3</p><p> 1.3.1 開發(fā)工具3</p><p> 1.3.2 核心技術(shù)4</p><p><b> 2用戶需求分析5</b><
15、/p><p><b> 2.1需求描述5</b></p><p><b> 2.2需求分析5</b></p><p> 2.2.1 可行性分析5</p><p> 2.2.2 WEB架構(gòu)分析6</p><p> 2.2.3 數(shù)據(jù)庫及項(xiàng)目文檔分析7</p&
16、gt;<p><b> 2.3需求設(shè)計(jì)7</b></p><p> 3系統(tǒng)總體設(shè)計(jì)11</p><p> 3.1體系結(jié)構(gòu)設(shè)計(jì)11</p><p> 3.2 數(shù)據(jù)設(shè)計(jì)13</p><p> 3.2.1 數(shù)據(jù)模型實(shí)體13</p><p> 3.2.2設(shè)計(jì)模式15&
17、lt;/p><p> 4系統(tǒng)詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)17</p><p> 4.1 Web三層架構(gòu)模板的抽象17</p><p> 4.2 Ribbon界面的實(shí)現(xiàn)19</p><p> 4.3系統(tǒng)流程分析20</p><p> 4.3.1 內(nèi)存共享20</p><p> 4.3.2數(shù)據(jù)庫
18、生成流程22</p><p> 4.3.3文檔生成流程24</p><p> 4.3.4代碼生成流程26</p><p><b> 5系統(tǒng)測(cè)試30</b></p><p> 5.1測(cè)試基礎(chǔ)30</p><p> 5.2黑盒測(cè)試30</p><p>
19、5.2.1 輸出源代碼及數(shù)據(jù)庫測(cè)試30</p><p> 5.2.1 輸出文檔測(cè)試32</p><p><b> 結(jié)束語33</b></p><p><b> 致 謝34</b></p><p><b> 參考文獻(xiàn)35</b></p><p
20、> 通用的Web信息管理系統(tǒng)框架</p><p><b> 1緒論</b></p><p> 軟件開發(fā)的高效性、簡便性一直受到學(xué)術(shù)界和軟件業(yè)界的高度重視,軟件的自動(dòng)生成更是業(yè)界努力發(fā)展的目標(biāo)。1968 年Mcllroy 在的NATO 軟件工程會(huì)議論文《大量生產(chǎn)的軟件構(gòu)件》中,第一次提出了“軟件組裝生產(chǎn)線”的思想。從那年開始,采用構(gòu)件技術(shù)實(shí)現(xiàn)軟件復(fù)用,并以“
21、搭積木” 的方式來生產(chǎn)軟件,成為軟件開發(fā)人員長期的夢(mèng)想。</p><p> 軟件復(fù)用與軟件構(gòu)件技術(shù)的研究,最大程度地利用了已有設(shè)計(jì)成果。在軟件工程的發(fā)展過程中,許許多多的計(jì)算機(jī)科學(xué)家為了降低軟件開發(fā)強(qiáng)度,縮短軟件開發(fā)周期,減少軟件代碼的重復(fù)書寫,從而減輕程序員的編碼負(fù)擔(dān), 一直以來都致力于代碼自動(dòng)生成方面的研究。</p><p> 代碼生成可以歸為下列形式:代碼重塑,內(nèi)聯(lián)代碼展開,混合
22、代碼生成,局部類生成,層次化生成,全領(lǐng)域語言描述等?,F(xiàn)存的代碼生成工具為自動(dòng)生成代碼提供了大量的解決方案。但是,如果把這些方案和已有的系統(tǒng)進(jìn)行集成會(huì)遇到很多困難。另外,雖然各種技術(shù)層出不窮,但都是基于傳統(tǒng)的代碼生成方法,即代碼生成和模型設(shè)計(jì)脫離;對(duì)模型驅(qū)動(dòng)架構(gòu)(Model-Driven Architecture, MDA)的研究多半基于模型轉(zhuǎn)換,很少有模型到代碼轉(zhuǎn)換的研究與實(shí)現(xiàn)。本文的重點(diǎn)在于后者的研究也實(shí)現(xiàn),最終的目標(biāo)是生成項(xiàng)目源代碼
23、以及相關(guān)的文檔和數(shù)據(jù)庫。</p><p> MDA 的主要思想是分離業(yè)務(wù)功能分析設(shè)計(jì)和實(shí)現(xiàn)技術(shù)平臺(tái)之間緊耦合的關(guān)系,從而將技術(shù)與平臺(tái)變化對(duì)系統(tǒng)的影響降到最低。一個(gè)MDA 的應(yīng)用是從建立平臺(tái)無關(guān)模型(Platform Independent Model, PIM)開始,然后使用相應(yīng)的轉(zhuǎn)換工具,結(jié)合具體技術(shù),將PIM 映射為特定平臺(tái)上的平臺(tái)相關(guān)模型(Platform Specific Model, PSM),最后通
24、過這個(gè)特定平臺(tái)上的PSM,使用代碼生成器自動(dòng)生成全部或部分特定平臺(tái)上的程序代碼。在實(shí)際應(yīng)用中,代碼生成器也可以直接根據(jù)PIM 生成程序代碼。</p><p> PIM 的核心是企業(yè)的業(yè)務(wù)模型。在ERP 中,業(yè)務(wù)模型的核心是過程視圖,而每一個(gè)業(yè)務(wù)過程可看作是一系列業(yè)務(wù)活動(dòng)的組合。業(yè)務(wù)活動(dòng)包括所處理的業(yè)務(wù)對(duì)象的屬性、作用于業(yè)務(wù)對(duì)象內(nèi)部的操作及處理業(yè)務(wù)對(duì)象間關(guān)系的操作3個(gè)部分。如果能夠建立靈活的業(yè)務(wù)對(duì)象及其操作模型,
25、就可以實(shí)現(xiàn)ERP 系統(tǒng)的敏捷性。從業(yè)務(wù)對(duì)象模型的結(jié)構(gòu)考慮,模型包含穩(wěn)定部分和頻繁變化部分。穩(wěn)定部分包括業(yè)務(wù)對(duì)象(包含屬性、內(nèi)部狀態(tài)等要素)及處理業(yè)務(wù)對(duì)象內(nèi)部邏輯的操作(稱為簡單操作,如采購需求單的新增、審核等操作),穩(wěn)定部分在系統(tǒng)建模時(shí)很容易得到且很少變化。頻繁變化部分是實(shí)現(xiàn)業(yè)務(wù)對(duì)象之間關(guān)聯(lián)的業(yè)務(wù)操作(稱為復(fù)合操作,如由采購需求單生成采購訂單)。本文基于穩(wěn)定部分和頻繁變化部分分離的思想,把復(fù)合操作與業(yè)務(wù)對(duì)象本身分離,分別建立PIM,再由
26、代碼生成器生成各自的代碼,最后加以組裝形成完整的業(yè)務(wù)對(duì)象處理程序。</p><p><b> 1.1背景</b></p><p> 隨著互聯(lián)網(wǎng)技術(shù)的飛速發(fā)展,越來越多的企業(yè)利用互聯(lián)網(wǎng)技術(shù)來實(shí)現(xiàn)自己的業(yè)務(wù)系統(tǒng),許多企業(yè)都要求建立基于Web業(yè)務(wù)系統(tǒng)或?qū)F(xiàn)有的業(yè)務(wù)系統(tǒng)改造成基于Web形式??蛻舳瞬僮鹘缑娴囊恢滦砸约胺?wù)器端系統(tǒng)維護(hù)的簡便性和基于標(biāo)準(zhǔn)的連接方案,大大加強(qiáng)了
27、企業(yè)與外部的聯(lián)系。同時(shí),動(dòng)態(tài)的、交互式的信息發(fā)布改進(jìn)了企業(yè)的服務(wù)質(zhì)量,增加企業(yè)的商業(yè)機(jī)會(huì)。</p><p> 雖然這些Web業(yè)務(wù)系統(tǒng)因具體業(yè)務(wù)不同,在業(yè)務(wù)邏輯上會(huì)有所不同,但從軟件開發(fā)的角度看,這些軟件應(yīng)用系統(tǒng)的開發(fā)過程是相似的。當(dāng)前,在開發(fā)這些基于Web業(yè)務(wù)系統(tǒng)時(shí),軟件開發(fā)人員不斷重復(fù)著一些不必要而且浪費(fèi)很多時(shí)間的技術(shù)性勞動(dòng)。如果能夠按照一定的方法和流程,自動(dòng)的生成全部或者大部分的業(yè)務(wù)系統(tǒng)代碼,一方面能夠縮短
28、軟件項(xiàng)目開發(fā)周期,降低成本,另一方面,能夠解放開發(fā)人員的生產(chǎn)力,提高軟件產(chǎn)品的設(shè)計(jì)質(zhì)量。因此,基于Web業(yè)務(wù)系統(tǒng)代碼自動(dòng)生成技術(shù)越來越引起業(yè)界的重視。</p><p> 為了簡化基于Web業(yè)務(wù)系統(tǒng)的開發(fā),一些公司先后提出了一些開發(fā)框架,如Struts、Hibernate、Ruby on Rails等,這些開發(fā)框架可以有效提高系統(tǒng)的開發(fā)效率,但是由于其未充分考慮實(shí)際系統(tǒng)的業(yè)務(wù)邏輯,因此要求開發(fā)人員至少進(jìn)行基于某種
29、腳本語言的開發(fā),當(dāng)系統(tǒng)的業(yè)務(wù)功能龐雜且用戶需求變化很快時(shí),系統(tǒng)的開發(fā)周期與所開發(fā)代碼的質(zhì)量仍很難滿足實(shí)際需要。</p><p><b> 1.2意義</b></p><p> 在以數(shù)據(jù)庫為核心的業(yè)務(wù)系統(tǒng)中,相當(dāng)一部分業(yè)務(wù)屬于錄入、編輯、刪除、查詢或基于上述基本功能的組合業(yè)務(wù)模式。因此,基本業(yè)務(wù)系統(tǒng)是業(yè)務(wù)系統(tǒng)的基礎(chǔ),基本業(yè)務(wù)系統(tǒng)的質(zhì)量直接決定了最終的業(yè)務(wù)系統(tǒng)的質(zhì)量。
30、</p><p> 基本業(yè)務(wù)系統(tǒng)都是以對(duì)數(shù)據(jù)庫信息的操作為核心,在基本業(yè)務(wù)系統(tǒng)的開發(fā)過程中,每種基本業(yè)務(wù)的業(yè)務(wù)邏輯存在著很多相似的地方。目前,在開發(fā)基本業(yè)務(wù)系統(tǒng)時(shí),軟件開發(fā)人員不斷重復(fù)著一些不必要且耗時(shí)的技術(shù)性勞動(dòng);另一方面,這類系統(tǒng)用戶需求變化很快,如何縮開發(fā)周期并應(yīng)對(duì)用戶對(duì)系統(tǒng)需求的快速變和后期維護(hù)中最大難題。</p><p> 在這些業(yè)務(wù)系統(tǒng)的開發(fā)過程中,特別是對(duì)基本業(yè)務(wù)的開發(fā)存
31、在很多重復(fù)的勞動(dòng)。本文決定在為企業(yè)開發(fā)基于Web業(yè)務(wù)系統(tǒng)時(shí),以突出代碼重用性為重點(diǎn),并且為達(dá)到這個(gè)目標(biāo)設(shè)計(jì)和開發(fā)一套基本業(yè)務(wù)代碼生成平臺(tái),用于業(yè)務(wù)系統(tǒng)中基本業(yè)務(wù)系統(tǒng)的設(shè)計(jì)和開發(fā)。本次研究定位為基于.NET平臺(tái)的基本業(yè)務(wù)的自動(dòng)生成。實(shí)際客戶需求千變?nèi)f化,但仍然具有一定規(guī)則和相同之處。開發(fā)人員在開發(fā)不同系統(tǒng)時(shí),有大量重復(fù)工作,浪費(fèi)大量人力。因?yàn)闄C(jī)械的重復(fù)編碼工作對(duì)人力資源的大量消耗,設(shè)計(jì)和開發(fā)人員沒有足夠時(shí)間和精力研究客戶需求。.NET的技
32、術(shù)已日趨成熟,其優(yōu)異的性能幫助軟件工作者解決了很多棘手的問題。</p><p> 1.3系統(tǒng)開發(fā)工具及相關(guān)核心技術(shù)</p><p> 1.3.1 開發(fā)工具</p><p> 系統(tǒng)開發(fā)環(huán)境的選擇對(duì)于系統(tǒng)的建立來說至關(guān)重要,它將決定著系統(tǒng)開發(fā)工作量的大小,系統(tǒng)的性能特點(diǎn)以及系統(tǒng)今后的維護(hù)工作難易等。因此在開發(fā)系統(tǒng)之前,應(yīng)該對(duì)系統(tǒng)所采用的技術(shù)、實(shí)現(xiàn)功能進(jìn)行評(píng)估,在選
33、擇開發(fā)環(huán)境時(shí),主要考慮因素有擴(kuò)展性,總成本,是否容易開發(fā)與管理,另外開放性和互操作性也是需要考慮的一個(gè)重要方面。因?yàn)樵撓到y(tǒng)是運(yùn)行WindowsNT系統(tǒng)上的,用戶平臺(tái)的差異決定了與其它系統(tǒng)的互操作性是不可避免的。</p><p> 系統(tǒng)基于.NET平臺(tái)開發(fā),其主要開發(fā)工具為Microsoft Visual Studio2008。.NET為全球著名軟件公司Microsoft公司為新一代軟件開發(fā)商提供的全新的開發(fā)平臺(tái)
34、,具有安全、高效、便捷的特點(diǎn)。</p><p> Microsoft.NET技術(shù)框架是一個(gè)新的開發(fā)平臺(tái),它為局域網(wǎng)(LAN)和Internet上的分布式企業(yè)應(yīng)用提供了一致和有效的支持。該平臺(tái)的關(guān)鍵特性包括:統(tǒng)一的、語言無關(guān)的、面向?qū)ο箝_發(fā)環(huán)境。它充分利用開發(fā)者已有的編程知識(shí)無沖突軟件部署,避免組件的版本沖突豐富的可執(zhí)行模式,與存儲(chǔ)位置無關(guān),組件可以在本地存儲(chǔ)執(zhí)行,或者遠(yuǎn)程存儲(chǔ)本地執(zhí)行,或者在Internet上遠(yuǎn)
35、程存儲(chǔ)執(zhí)行安全代碼執(zhí)行,具有高級(jí)安全設(shè)置以滿足現(xiàn)代組織的安全需求,Windows和Web應(yīng)用程序具有統(tǒng)一的編程環(huán)境,通過在各自環(huán)境中高效的代碼編譯提升Windows和Web應(yīng)用程序的執(zhí)行性能兼容的通信標(biāo)準(zhǔn),確保.NET應(yīng)用程序可以與其它應(yīng)用程序和其它平臺(tái)的應(yīng)用程序共存和集成。</p><p> 1.3.2 核心技術(shù)</p><p> 可擴(kuò)展標(biāo)記語言 (Extensible Markup
36、 Language, XML) ,用于標(biāo)記電子文件使其具有結(jié)構(gòu)性的標(biāo)記語言,可以用來標(biāo)記數(shù)據(jù)、定義數(shù)據(jù)類型,是一種允許用戶對(duì)自己的標(biāo)記語言進(jìn)行定義的源語言。 XML是標(biāo)準(zhǔn)通用標(biāo)記語言(SGML) 的子集,非常適合 Web 傳輸。XML 提供統(tǒng)一的方法來描述和交換獨(dú)立于應(yīng)用程序或供應(yīng)商的結(jié)構(gòu)化數(shù)據(jù)。XML與HTML的設(shè)計(jì)區(qū)別是:XML的核心是數(shù)據(jù),其重點(diǎn)是數(shù)據(jù)的內(nèi)容。而HTML 被設(shè)計(jì)用來顯示數(shù)據(jù),其重點(diǎn)是數(shù)據(jù)的顯示。</p>
37、<p> 微軟的.NET框架可以用來快速構(gòu)建企業(yè)解決方案。在.NET類庫中提供了對(duì)XML操作的多種方法,包括文檔對(duì)象模型(DOM)、XML框架、流式讀寫XML,可擴(kuò)展的樣式轉(zhuǎn)化(XSLT)、XML序列化與反序列化等較為完善的XML支持。.NET 2.0框架提供了內(nèi)存中處理XML的兩種方式,分別為XmlDocument類和XPathNavigator類。前者基于W3C DOM第1級(jí)核心和第2級(jí)核心的建議。后者使用XPath
38、數(shù)據(jù)模型,在內(nèi)存中提供XML文檔的快速只讀形式,在一定場(chǎng)合下還可以用于選擇計(jì)算、瀏覽、編輯XML數(shù)據(jù)。.NET中提供了一些類可以從XML文檔實(shí)例推斷出相應(yīng)的XML架構(gòu)結(jié)構(gòu),以便于自動(dòng)生成效驗(yàn)XML數(shù)據(jù)的架構(gòu)。XML序列化和反序列化是溝通面向?qū)ο缶幊填I(lǐng)域的利器。.NET中的XML序列化與Java等語言的序列化概念不同。Java中的XML序列化是將內(nèi)存中的XML模型輸出到磁盤、網(wǎng)絡(luò)輸出流或其他對(duì)象中。而.NET中的XML序列化是將.NET對(duì)
39、象的公共字段、屬行或方法的參數(shù)和返回值轉(zhuǎn)換為XML形式數(shù)據(jù),而反序列化即將XML形式數(shù)據(jù)構(gòu)造類或結(jié)構(gòu)的實(shí)例對(duì)象。.NET提供的XML技術(shù)并不局限于</p><p> 本畢業(yè)設(shè)計(jì)中主要使用了XML的序列化以及反序列化以及可擴(kuò)展的樣式轉(zhuǎn)化(XSLT)相關(guān)的技術(shù)。對(duì)這些技術(shù)的應(yīng)用貫穿設(shè)計(jì)的始終。相關(guān)的其他XML技術(shù)都有或多或少的涉及。</p><p><b> 2用戶需求分析<
40、;/b></p><p> 軟件需求是數(shù)據(jù)庫信息管理開發(fā)的第一步,對(duì)于用戶需求的準(zhǔn)確分析和定位能為以后的開發(fā)打下一個(gè)堅(jiān)實(shí)的基礎(chǔ)。需求分析就是描述系統(tǒng)的需求,通過定義系統(tǒng)中的關(guān)鍵域進(jìn)一步建立模型。分析的根本目的是在開發(fā)者和提出需求的人之間建立一座理解和溝通的橋梁,通過了解用戶的實(shí)際業(yè)務(wù)流程和數(shù)據(jù)流程來達(dá)到與客戶需求的契合。</p><p> 本系統(tǒng)面向的用戶主要是有一定開發(fā)經(jīng)驗(yàn)的軟
41、件開發(fā)者,包括軟件設(shè)計(jì)人員、軟件架構(gòu)人員、軟件工程管理人員、程序員。本系統(tǒng)的實(shí)現(xiàn)將有助于更高效的管理軟件開發(fā)過程,以解決軟件開發(fā)中很多繁復(fù)瑣碎環(huán)節(jié)中常遇到的問題。系統(tǒng)的輸出產(chǎn)品包括源代碼、項(xiàng)目文檔、數(shù)據(jù)庫。</p><p><b> 2.1需求描述</b></p><p> 通用的Web信息管理系統(tǒng)框架,主要解決的問題包括:1 開發(fā)過程中部分代碼需要重復(fù)使用,分散
42、了軟件開發(fā)人員尤其是程序員的大部分精力;2 由于項(xiàng)目開發(fā)時(shí)間緊張或其他問題,很多開發(fā)中需要的文檔沒有時(shí)間書寫,同時(shí)加上公司人事的頻繁調(diào)動(dòng),導(dǎo)致后期無法有效維護(hù)軟件項(xiàng)目。3 在.net方面還比較完善、開源的asp.net框架,數(shù)據(jù)庫的設(shè)計(jì)與代碼的設(shè)計(jì)分離,降低軟件開發(fā)的效率。</p><p> 本畢業(yè)設(shè)計(jì)需要解決以上提到軟件開發(fā)中亟待解決的問題。本畢業(yè)設(shè)計(jì)需要做到,把軟件設(shè)計(jì)人員做的需求分析,包括軟件實(shí)體的ER圖
43、所表達(dá)的信息轉(zhuǎn)化為數(shù)據(jù)模型,輸入本系統(tǒng),然后經(jīng)過本系統(tǒng)的加工處理,輸出軟件項(xiàng)目中的產(chǎn)品包括程序源代碼、項(xiàng)目文檔以及數(shù)據(jù)庫。同時(shí)輸出的源代碼基于特定的Web框架,生成的源代碼主要實(shí)現(xiàn)了對(duì)數(shù)據(jù)庫中表中數(shù)據(jù)的添加、修改、刪除、瀏覽、下載等操作以及在Web頁面展示時(shí)分頁顯示等功能。通過本系統(tǒng),可以將開發(fā)人員從繁復(fù)的工作中解脫出來,將精力用在關(guān)鍵技術(shù)的開發(fā)中,提高軟件開發(fā)的工作效率。</p><p><b>
44、2.2需求分析</b></p><p> 2.2.1 可行性分析</p><p> 系統(tǒng)的實(shí)現(xiàn)需要用到代碼生成技術(shù),查詢相關(guān)資料收集到如下代碼生成技術(shù)實(shí)現(xiàn)的方法。</p><p> 第一種方法是在Windows Form 的代碼中包含全部的模型邏輯、控制器邏輯、視圖邏輯;第二種方法是表示層采用服務(wù)器視圖模板引擎的MVC 結(jié)構(gòu),如JSP 視圖引擎、A
45、SP、ASPX、PHP 等服務(wù)器視圖引擎;第三種方法是與Code Smith 類似,自行開發(fā)一個(gè)視圖模板引擎,然后基于該模板引擎實(shí)現(xiàn)一個(gè)MVC 的代碼生成器;第四種方法是基于開源模板引擎Velocity,String Template 建造一個(gè)MVC 的代碼生成器;第五種方法是基于流行的動(dòng)態(tài)語言開發(fā)一個(gè)代碼生成器,這些語言可以是ruby、python 等;第六種方法是視圖引擎采用Velocity、String Template 等開源引
46、擎,控制器引擎采用JAVA、NET 接口采用動(dòng)態(tài)語言,利用動(dòng)態(tài)語言把模板引擎和控制器引擎有機(jī)地結(jié)合起來。第七種方法是在特定項(xiàng)目的數(shù)據(jù)庫中建幾個(gè)存儲(chǔ)過程來實(shí)現(xiàn)代碼的自動(dòng)生成。</p><p> 以上提到的代碼生成技術(shù)部分已有相關(guān)的產(chǎn)品,而且代碼生成技術(shù)已經(jīng)發(fā)展了很多年,應(yīng)經(jīng)相當(dāng)成熟。因此,靈活、合理地應(yīng)用上邊提到的方法,就可以實(shí)現(xiàn)軟件項(xiàng)目生成系統(tǒng)中代碼生成的功能,從而開發(fā)出通用的Web信息管理系統(tǒng)框架。</
47、p><p> 2.2.2 WEB架構(gòu)分析</p><p> 軟件項(xiàng)目生成系統(tǒng)輸出產(chǎn)品中包括項(xiàng)目源代碼。但是對(duì)于不同的Web框架,架構(gòu)設(shè)計(jì)人員對(duì)源代碼的組織形式會(huì)有或多或少的差別,因此需要選取特定的WEB框架。此次畢業(yè)設(shè)計(jì)中選取了一個(gè)asp.net Web三層框架作為實(shí)例,專門為其定做了一份代碼生成系統(tǒng),并考慮到軟件生成系統(tǒng)將來的擴(kuò)展,所以為于其他的Web框架留下了相應(yīng)的擴(kuò)展接口。</
48、p><p> 通常意義上Asp.net Web三層架構(gòu)就是將整個(gè)業(yè)務(wù)應(yīng)用劃分為:表現(xiàn)層(UI)、業(yè)務(wù)邏輯層(BLL)、數(shù)據(jù)訪問層(DAL)。區(qū)分層次的目的即為了“高內(nèi)聚,低耦合”的思想。表現(xiàn)層(UI),通俗講就是展現(xiàn)給用戶的界面,即用戶在使用一個(gè)系統(tǒng)的時(shí)候他的所見所得。業(yè)務(wù)邏輯層(BLL),針對(duì)具體問題的操作,也可以說是對(duì)數(shù)據(jù)層的操作,對(duì)數(shù)據(jù)業(yè)務(wù)邏輯處理。數(shù)據(jù)訪問層(DAL),所做事務(wù)直接操作數(shù)據(jù)庫,針對(duì)數(shù)據(jù)的增、
49、刪、改、查。</p><p> 在Asp.net Web三層架構(gòu)中,數(shù)據(jù)的訪問層是對(duì)數(shù)據(jù)庫的操作,所以對(duì)于不同的實(shí)體可以實(shí)現(xiàn)共用。而對(duì)于業(yè)務(wù)邏輯層和表示層,不同的實(shí)體代碼不同,而這些代碼的差異又與實(shí)體以及實(shí)體的屬性具有密切的關(guān)系,所以有效地抽象邏輯層和表示層的代碼文件,采用模板的形式可以統(tǒng)一的管理軟件項(xiàng)目中的源代碼。</p><p> 但同時(shí)應(yīng)該注意,自動(dòng)生成的代碼僅包括通用操作,例如
50、添加、修改、刪除、瀏覽、下載等操作,這些操作屬于程序中的原子操作。而對(duì)于更復(fù)雜的操作需要軟件開發(fā)者合理的組合這些原子操作,以實(shí)現(xiàn)比較復(fù)雜的業(yè)務(wù)邏輯。</p><p> 2.2.3 數(shù)據(jù)庫及項(xiàng)目文檔分析</p><p> 在我們?nèi)粘\浖_發(fā)中,最常用的是關(guān)系數(shù)據(jù)庫庫。關(guān)系數(shù)據(jù)庫是建立在關(guān)系數(shù)據(jù)庫模型基礎(chǔ)上的數(shù)據(jù)庫,借助于集合代數(shù)等概念和方法來處理數(shù)據(jù)庫中的數(shù)據(jù)。目前主流的關(guān)系數(shù)據(jù)庫有Or
51、acle、SQL Server、Access、db2、sybase等。</p><p> 在軟件開發(fā)中,程序員根據(jù)從軟件設(shè)計(jì)人員得到的ER模型,在數(shù)據(jù)庫服務(wù)器上生成我們需要的數(shù)據(jù)庫。雖然每種的數(shù)據(jù)庫的Sql語句有些差別,但是它們同為關(guān)系數(shù)據(jù)庫,而且都是對(duì)基本的Sql語句的擴(kuò)展,所以對(duì)于我們要實(shí)現(xiàn)有程序來生成數(shù)據(jù)庫提供了共同的理論基礎(chǔ)。但是系統(tǒng)只負(fù)責(zé)生成數(shù)據(jù)庫的最基本組成元素,包含了基本的表與視圖,若開發(fā)者需要使
52、用觸發(fā)器、存儲(chǔ)過程等高級(jí)操作,需要開發(fā)者手工設(shè)置。</p><p> 項(xiàng)目文檔是軟件項(xiàng)目中重要的組成成分。文檔是與程序開發(fā),維護(hù)和使用有關(guān)的圖文材料。開發(fā)過程中的典型文檔包括軟件需求規(guī)格說明書,它描述將要開發(fā)的軟件做什么;項(xiàng)目計(jì)劃,它描述將要完成的任務(wù)及其順序,并估計(jì)所需要的時(shí)間及工作量;軟件測(cè)試計(jì)劃,它描述如何測(cè)試軟件,使之確保軟件應(yīng)實(shí)現(xiàn)規(guī)定的功能,并達(dá)到預(yù)期的性能。軟件設(shè)計(jì)說明書,它描述軟件的結(jié)構(gòu),包括概要
53、設(shè)計(jì)及詳細(xì)設(shè)計(jì)。用戶手冊(cè),它描述如何使用軟件。 </p><p> 這些文檔包含的內(nèi)容描述了軟件生命周期中的各個(gè)階段的內(nèi)容,可謂相當(dāng)復(fù)雜,應(yīng)用本系統(tǒng)不可能要生成所有的這些文檔。系統(tǒng)秉承減少軟件開發(fā)人員繁復(fù)工作的宗旨,生成的項(xiàng)目文檔只包含了簡單的信息(這些信息都由軟件設(shè)計(jì)人員輸入系統(tǒng)),而且只要輸出的模板確定,最終的文檔的格式不在需要開發(fā)者設(shè)置,而將精力放在核心的內(nèi)容的編輯中。</p><p&
54、gt;<b> 2.3需求設(shè)計(jì)</b></p><p> 通過對(duì)需求的分析,本畢業(yè)設(shè)計(jì)的的流程圖如下。</p><p> 軟件設(shè)計(jì)人員將需求分析的成果輸入軟件項(xiàng)目生成系統(tǒng),軟件架構(gòu)人員將對(duì)Web框架抽象得到的XSLT模板文件輸入系統(tǒng),然后通過本系統(tǒng)分析、處理,最終輸出軟件開發(fā)中需要的項(xiàng)目文檔、數(shù)據(jù)庫、源代碼等產(chǎn)品。頂層數(shù)據(jù)流圖如圖2-1,一級(jí)數(shù)據(jù)流圖如圖2-2。
55、</p><p> 圖2-1 軟件項(xiàng)目生成系統(tǒng)頂層數(shù)據(jù)流圖</p><p> 圖2-2 軟件項(xiàng)目生成系統(tǒng)一級(jí)數(shù)據(jù)流圖</p><p> 系統(tǒng)的需要開發(fā)者做的工作是向本系統(tǒng)輸入數(shù)據(jù)模型。在實(shí)際情況中,由于各種原因,一次設(shè)計(jì)后可能需要更改,所以需要對(duì)已設(shè)計(jì)內(nèi)容保存,以便今后打開后繼續(xù)設(shè)計(jì)。而且還可以設(shè)計(jì)軟件的膚色,給軟件開發(fā)者更好的用戶體驗(yàn)。如圖2-3,圖2-4。
56、</p><p> 圖2-3 S1 acproject文件、膚色的數(shù)據(jù)流圖</p><p> 圖2-4 S2項(xiàng)目數(shù)據(jù)模型設(shè)置的數(shù)據(jù)流圖</p><p> 最后處理分析用戶輸入的數(shù)據(jù)模型,通過映射的方式輸出產(chǎn)品,包括數(shù)據(jù)庫、源代碼、項(xiàng)目文檔,如圖2-5。</p><p> 圖2-5 S3系統(tǒng)生成引擎數(shù)據(jù)流圖</p><
57、;p><b> 3系統(tǒng)總體設(shè)計(jì)</b></p><p> 軟件的系統(tǒng)設(shè)計(jì)是一個(gè)將需求轉(zhuǎn)變?yōu)檐浖愂觯ū磉_(dá))的過程。這種陳述給一個(gè)對(duì)軟件的全局觀點(diǎn)。系統(tǒng)通過逐步求精使得設(shè)計(jì)陳述逐漸接近源代碼。這里有兩個(gè)基本步驟;第一步是初步設(shè)計(jì) Preliminary design,關(guān)注于如何將需求轉(zhuǎn)換成數(shù)據(jù)和軟件框架。第二步是 詳細(xì)設(shè)計(jì)Detail design,關(guān)注于將框架逐步求精細(xì)化為具體的數(shù)
58、據(jù)結(jié)構(gòu)和軟件的算法表達(dá)。發(fā)生中的設(shè)計(jì)行為、數(shù)據(jù)、算法和程序設(shè)計(jì)都需要由現(xiàn)代程序所需的界面設(shè)計(jì)這一清晰的行為結(jié)合起來。界面設(shè)計(jì)Interface design建立程序布局和人機(jī)交互機(jī)制。貫穿設(shè)計(jì)過程的質(zhì)量由一系列的正式技術(shù)評(píng)定formal technical reviews或設(shè)計(jì)排演design walkthroughs來評(píng)價(jià)。</p><p><b> 3.1體系結(jié)構(gòu)設(shè)計(jì)</b></
59、p><p> 系統(tǒng)的主要完成的功能是軟件設(shè)計(jì)人員根據(jù)需求分析得到的數(shù)據(jù)模型,在本系統(tǒng)中進(jìn)行設(shè)置要實(shí)現(xiàn)的項(xiàng)目的基本信息,將數(shù)據(jù)模型轉(zhuǎn)化為本系統(tǒng)能夠識(shí)別的模型,然后輸出產(chǎn)品(代碼、項(xiàng)目文檔、數(shù)據(jù)庫)。在Xml技術(shù)的基礎(chǔ)之上,可以臨時(shí)保存已經(jīng)設(shè)計(jì)的數(shù)據(jù)模型,便于用戶下次繼續(xù)設(shè)計(jì),以及增加了軟件的皮膚功能。系統(tǒng)結(jié)構(gòu)如圖3-1。</p><p><b> 圖3-1 系統(tǒng)結(jié)構(gòu)</b&g
60、t;</p><p> 項(xiàng)目文件管理模塊分為新建項(xiàng)目,打開項(xiàng)目,保存項(xiàng)目三個(gè)子模塊。新建項(xiàng)目主要在指定文件夾形成一個(gè)系統(tǒng)定義的、擴(kuò)展名是acproject文件,此文件主要存儲(chǔ)軟件開發(fā)者已經(jīng)輸入軟件生成系統(tǒng)的信息,以便于今后打開后繼續(xù)修改完善。打開項(xiàng)目就是前邊提到新建的項(xiàng)目文件,繼續(xù)修改設(shè)計(jì)信息。保存項(xiàng)目是保存現(xiàn)在的修改到項(xiàng)目文件中。acproject文件是自定義的XML文件。</p><p&
61、gt; 皮膚管理模塊主要設(shè)置軟件的背景顏色,給軟件開發(fā)者更好的工作環(huán)境。</p><p> 項(xiàng)目設(shè)計(jì)模塊分為項(xiàng)目基本信息、實(shí)體基本信息、實(shí)體屬性信息、實(shí)體分組模等模塊。項(xiàng)目設(shè)計(jì)模塊主要描述數(shù)據(jù)模型的信息,以便項(xiàng)目生成模塊提取分析得到需要的信息。項(xiàng)目基本信息主要包括了項(xiàng)目的名稱設(shè)置、英文名稱設(shè)置、項(xiàng)目組人員信息設(shè)置、項(xiàng)目開發(fā)時(shí)間設(shè)置、項(xiàng)目使用數(shù)據(jù)庫的類型設(shè)置、數(shù)據(jù)庫連接字符串的設(shè)置、生成的項(xiàng)目源代碼使用模板的設(shè)
62、置、生成的程序類型的設(shè)置(包括Winform和WebForm以及WPF)、以及使用的模板各層命名空間的設(shè)置、項(xiàng)目子模塊分組的設(shè)置等信息。這里主要是對(duì)項(xiàng)目基本信息的設(shè)置,對(duì)于這些信息的使用在后續(xù)模塊。</p><p> 項(xiàng)目生成模塊包括數(shù)據(jù)庫生成、項(xiàng)目文檔生成、項(xiàng)目源代碼生成等子模塊。數(shù)據(jù)庫生成模塊主要生成項(xiàng)目所需要的數(shù)據(jù)庫,包括表、視圖等基本信息,開發(fā)者若要使用存儲(chǔ)過程等其他高級(jí)功能,需要開發(fā)者手動(dòng)在數(shù)據(jù)庫操作
63、。項(xiàng)目文件生成模塊主要生成軟件開發(fā)中所需要的文檔,這些文檔和軟件設(shè)計(jì)人員手里的文檔或許會(huì)有沖突,但是這里生成的文檔是按標(biāo)準(zhǔn)格式設(shè)計(jì)好的文檔,雖然生成的信息不夠完善,需要軟件工程管理人員將這些信息補(bǔ)充完整,然后存檔以便將來需要時(shí)查閱。源代碼生成模塊主要生成程序員需要的源代碼,這些源代碼已完成了最基本的添加、修改、刪除等操作,更復(fù)雜的業(yè)務(wù)邏輯才是程序員需要維護(hù)的核心,也是軟件開發(fā)的核心。</p><p><b&
64、gt; 3.2 數(shù)據(jù)設(shè)計(jì)</b></p><p> 3.2.1 數(shù)據(jù)模型實(shí)體</p><p> 為了管理軟件設(shè)計(jì)人員在使用軟件生成系統(tǒng)中對(duì)數(shù)據(jù)模型所做的設(shè)計(jì)信息。定義如圖3-2所示的數(shù)據(jù)結(jié)構(gòu)。</p><p> 圖3-2 數(shù)據(jù)模型設(shè)計(jì)</p><p> DaXiaoSet實(shí)體記錄了設(shè)計(jì)時(shí)對(duì)屬性和方法大小寫的設(shè)置。<
65、/p><p> O_Control實(shí)體該類記錄了設(shè)計(jì)中所使用控件的縮寫的設(shè)置。</p><p> O_Pack實(shí)體記錄了設(shè)計(jì)時(shí)要生成的項(xiàng)目分包的情況。</p><p> Attribute實(shí)體為核心實(shí)體,包括了開發(fā)中屬性的大部分信息,有屬性的名稱(英文),屬性的友好名稱,屬性的類型,精度,是否為空,在頁面顯示時(shí)的索引、所使用的空間、所屬于的組等信息。</p&
66、gt;<p> P_Template實(shí)體記錄了代碼生成時(shí)所使用的模板(本畢業(yè)設(shè)計(jì)由于時(shí)間有限目前只寫了一套Asp.net Web三層架構(gòu)的模板)。</p><p> P_NameSpaces實(shí)體記錄了設(shè)計(jì)中命名空間情況。</p><p> P_DataBase實(shí)體記錄了生成代碼時(shí)所使用的數(shù)據(jù)庫類型及連接字符串(本畢業(yè)設(shè)計(jì)由于時(shí)間有限目前只能訪問Sql server數(shù)據(jù)庫
67、)。</p><p> P_BaseInfo實(shí)體記錄了項(xiàng)目的基本信息,如開發(fā)者姓名,項(xiàng)目名稱等。</p><p> 為了滿足代碼生成時(shí)有效的管理各個(gè)實(shí)體信息,定義如下數(shù)據(jù)結(jié)構(gòu)。圖3-3主要用來描述以實(shí)體為單位存儲(chǔ)實(shí)體的基本信息,而上面提到放入數(shù)據(jù)結(jié)構(gòu)也含有此信息,但是數(shù)據(jù)的層次有差別。</p><p><b> 圖3-3 實(shí)體信息</b>
68、</p><p> Entity實(shí)體是對(duì)軟件開發(fā)中實(shí)體的抽象。包括了實(shí)體在軟件生成系統(tǒng)中的名稱,實(shí)體的表名稱,實(shí)體的命名空間等信息。</p><p> Property實(shí)體是對(duì)屬性的抽象。包括了屬性的名稱、屬性的類型以及屬性在數(shù)據(jù)庫中的名稱類型等信息。</p><p><b> 3.2.2設(shè)計(jì)模式</b></p><p
69、> 此系統(tǒng)面向不同的數(shù)據(jù)庫類型。對(duì)于不同的數(shù)據(jù)庫像SqlServer、Oracle、Access,雖然都同為關(guān)系數(shù)據(jù)庫,但是各個(gè)數(shù)據(jù)庫復(fù)雜程度差別很大。比如要獲取數(shù)據(jù)庫的基本信息如表、字段、索引、鍵等,這些都可以通過數(shù)據(jù)庫中的系統(tǒng)表獲得,但是對(duì)于每種數(shù)據(jù)庫獲取的方法略有不同。對(duì)于SQLServer,數(shù)據(jù)庫中有SysObjects 和SysColumns這兩個(gè)系統(tǒng)表,可以查詢系統(tǒng)表來獲得所有的表名稱和字段名稱以及格式,還有一個(gè)sp
70、_helpindex的系統(tǒng)預(yù)定義存儲(chǔ)過程來獲得指定表的字段索引信息。對(duì)于Oracle 數(shù)據(jù)庫,有一個(gè)名為Col的系統(tǒng)預(yù)定義視圖,可以查詢這個(gè)視圖獲得所有的表名和字段定義信息。還有一個(gè)user_ind_columns的系統(tǒng)預(yù)定義視圖, 可以獲得關(guān)鍵字段信息。對(duì)于Access 2000 數(shù)據(jù)庫, 沒有這些系統(tǒng)表, 因此使用.NET 框架中的OleDB 數(shù)據(jù)連接對(duì)象的GetOleDbSchemaTable 函數(shù)來獲得數(shù)據(jù)庫表和字段定義信息。所
71、以雖然同為獲得數(shù)據(jù)庫的基本信息,但是對(duì)不同數(shù)據(jù)庫操作時(shí)需要不同的方法。解決此問題是通過設(shè)計(jì)模式中的工程模式。</p><p> 工廠模式是對(duì)象創(chuàng)建模式之一,它通常在類或類的靜態(tài)方法中去實(shí)現(xiàn)。構(gòu)造對(duì)象的一種方式是使用new操作符,但使用new時(shí)正是針對(duì)實(shí)現(xiàn)編程,會(huì)造成“耦合”問題,與具體的類關(guān)系緊密,導(dǎo)致代碼更脆弱,缺乏彈性,在復(fù)雜邏輯的項(xiàng)目中建議是面向接口編程。圖3-4是實(shí)現(xiàn)工廠模式的類圖。</p>
72、<p><b> 圖3-4 工廠模式</b></p><p> 4系統(tǒng)詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)</p><p> 4.1 Web三層架構(gòu)模板的抽象</p><p> 可擴(kuò)展樣式表語言轉(zhuǎn)化(Extensible Stylesheet Language Transformations,XSLT)是XML最重要的應(yīng)用技術(shù)之一。雖然使用DO
73、M、SAX、XMLPULL等編程模型也可以處理XML文件,將其中的信息抽取出來,轉(zhuǎn)化成其他格式的數(shù)據(jù),但如對(duì)每個(gè)任務(wù)都編制專門程序,這無疑是低效而枯燥的。引入XSL轉(zhuǎn)換的目的,是為了提供將XML文檔方便地轉(zhuǎn)化為素需要數(shù)據(jù)形式的途徑。</p><p> XSLT的元素既有標(biāo)記性元素,又有像高級(jí)語言那樣的程序控制元素,如下面包含的<xsl:if > </xsl:if>和<xsl:for
74、-each ></xsl:for-each>。以下是一個(gè)數(shù)據(jù)訪問層的代碼模板。</p><p> 模板文件部分代碼如下。</p><p> <xsl:for-each select="propertys/Property"></p><p> <xsl:text>dt.Columns.Add(&qu
75、ot;</xsl:text><xsl:value-of select ="PropertyName"/>",typeof(<xsl:value-of select ="PropertyType"/><xsl:text>));</p><p> </xsl:text></p><p&g
76、t; </xsl:for-each></p><p> <xsl:text>dt.Columns.Add("tableID");</p><p> return dt; </p><p><b> }</b></p><p><b> }</b&g
77、t;</p><p> }</xsl:text></p><p> </xsl:template></p><p> <!--獲得數(shù)據(jù)訪問層類名--></p><p> <xsl:template name="EntityName"></p><p
78、> <xsl:value-of select ="EntityName"/></p><p> </xsl:template></p><p> <xsl:template name="TableName"></p><p> <xsl:value-of select =
79、"TableName"/></p><p> </xsl:template></p><p> <xsl:template name="D_NameSpace"></p><p> <xsl:value-of select ="D_NameSpace"/>&l
80、t;/p><p> </xsl:template></p><p> </xsl:stylesheet></p><p> 通過.NET中的XslCompiledTransform類加載Xml文件和Xslt文件既可以生成所需要的類文件。</p><p> 本文用到的模板文件見表4-1。</p><
81、;p><b> 表4-1</b></p><p> 4.2 Ribbon界面的實(shí)現(xiàn)</p><p> Ribbon界面提供了豐富的控件,大多數(shù)控件是相互嵌套而成。如圖4-1,是完整的Ribbon界面。</p><p> 4-1 Ribbon界面</p><p> 圖4-2介紹RibbonButton按鈕類
82、的實(shí)現(xiàn),其他控件實(shí)現(xiàn)方式和其相似。</p><p> 首先定義IRibbonButton接口來定義RibbonButton所需要的屬性,然后定義RibbonButton類使其繼承與IRibbonButton接口和Button類,以實(shí)現(xiàn)RibbonButton所需要的邏輯。</p><p> 圖4-2 RibbonButton的實(shí)現(xiàn)</p><p> 最后在WP
83、F的XAML頁面的模板標(biāo)簽使TargetType屬性指向所定義的類就可以實(shí)現(xiàn)RibbonButton按鈕,部分代碼如下。</p><p> <ControlTemplate x:Key="InternalRibbonButton" TargetType="{x:Type odc:RibbonButton}" ></p><p> &l
84、t;odc:RibbonChrome RenderFlat="False" </p><p> RenderPressed="{TemplateBinding IsPressed}" </p><p> RenderMouseOver="{TemplateBinding IsMouseOver}" </p>&l
85、t;p> CornerRadius="{TemplateBinding CornerRadius}"</p><p> Content="{TemplateBinding Content}"/></p><p> </ControlTemplate></p><p><b> 4.3系
86、統(tǒng)流程分析</b></p><p> 4.3.1 內(nèi)存共享</p><p> 開發(fā)中遇到的第一個(gè)問題是多個(gè)窗體之間內(nèi)存的共享,包括子窗體與子窗體的共享,子窗體與主窗體的共享。</p><p> 解決的流程如下。首先在主窗體定義一個(gè)AcProject對(duì)象,子窗體初始化時(shí)判斷是否對(duì)此窗體設(shè)計(jì)過,如果設(shè)計(jì)過還原設(shè)計(jì)的內(nèi)容,如果還沒有設(shè)計(jì),等待用戶設(shè)計(jì)。子
87、窗體關(guān)閉時(shí),在主窗體實(shí)現(xiàn)SaveOldInfo()方法用于保存舊窗體的數(shù)據(jù),然后打開新的窗體。內(nèi)存共享的流程圖如圖4-3。</p><p> 圖4-3 內(nèi)存共享流程</p><p> 例如,圖4-4是本系統(tǒng)定義的對(duì)象到數(shù)據(jù)庫中表和屬性映射的過程,當(dāng)離開此頁面時(shí)我們已經(jīng)設(shè)置好的信息通過SaveOldInfo方法保存在定義的AcProject對(duì)象中,然后再次回到頁面時(shí),會(huì)根據(jù)AcProj
88、ect中的信息初始化此頁面。而且保存在AcProject中的數(shù)據(jù)允許其他頁面的進(jìn)程訪問。</p><p> 圖4-4 數(shù)據(jù)映射頁面</p><p><b> 核心的代碼如下</b></p><p> int index = CB_ClassType.SelectedIndex;</p><p> oldIndex
89、 = index;</p><p> if (index >= 0)</p><p><b> {</b></p><p> dt[index].Rows.Clear();</p><p> for (int i = 0; i < acproject.o_objects[index].attibute
90、s.Count; i++)</p><p><b> {</b></p><p> DataRow dr = dt[index].NewRow();</p><p> dr["Name"] = acproject.o_objects[index].attibutes[i].Name;</p><p&
91、gt; dr["TC_Name"]= acproject.o_objects[index].attibutes[i].TC_Name;</p><p> dr["TC_Type"] = acproject.o_objects[index].attibutes[i].TC_Type;</p><p> dr["TC_jingdu&quo
92、t;] = acproject.o_objects[index].attibutes[i].TC_jingdu;</p><p> dr["TC_IsNull"] = acproject.o_objects[index].attibutes[i].TC_IsNull;</p><p> dt[index].Rows.Add(dr);</p><p
93、><b> }</b></p><p> dataGrid1.ItemsSource = dt[index].DefaultView;</p><p><b> } </b></p><p> 4.3.2數(shù)據(jù)庫生成流程</p><p> 圖4-5 是數(shù)據(jù)庫生成功能界面,可
94、以預(yù)覽生成的用戶表和視圖腳本,也可以將腳本另存到磁盤上。點(diǎn)擊生成數(shù)據(jù)庫按鈕直接在數(shù)據(jù)可系統(tǒng)上生成目標(biāo)系統(tǒng)的數(shù)據(jù)庫。</p><p><b> 圖4-5</b></p><p> 數(shù)據(jù)庫生成的流程圖如圖4-6。主要過程是首先訪問master數(shù)據(jù)庫生成數(shù)據(jù)庫信息,然后獲得系統(tǒng)表與視圖的信息。接著獲取用戶表和視圖的信息,最終將獲得的信息分割成可執(zhí)行的Sql語句,訪問上邊
95、建立的數(shù)據(jù)庫執(zhí)行建立表和視圖的操作。</p><p> 圖4-6 數(shù)據(jù)庫生成</p><p><b> 部分代碼如下</b></p><p> O_Objects obs = acproject.o_objects;</p><p> for (int i = 0; i < objectCount; i++
96、)</p><p><b> {</b></p><p> O_Object ob = obs[i];</p><p> int popCount = ob.attibutes.Count;</p><p> if (popCount == 0)</p><p><b> {&
97、lt;/b></p><p><b> break;</b></p><p><b> }</b></p><p> scriptTable += "/****** 對(duì)象: Table [" + obs[i].BaseInfo.TableName + "] 腳本日期: &q
98、uot; + DateTime.Now.ToString("MM-dd-yyyy HH:mm:ss") + " ******/" + Huanhang;</p><p> scriptView += "/****** 對(duì)象: View [" + obs[i].BaseInfo.TableName + "_View] 腳本日期: &qu
99、ot; + DateTime.Now.ToString("MM-dd-yyyy HH:mm:ss") + " ******/" + Huanhang;</p><p> scriptTable += "GO" + Huanhang;</p><p> scriptView += "GO" + Huanhan
100、g;</p><p> scriptTable += "Create Table" + " " + obs[i].BaseInfo.TableName + " (" + Huanhang;</p><p> scriptView += "Create View " + obs[i].BaseInfo.Tab
101、leName + "_View" + Huanhang + "As" + Huanhang + "Select ";</p><p> for (int j = 0; j < popCount; j++)</p><p><b> {</b></p><p> scr
102、iptTable += " " + ob.attibutes[j].TC_Name + " " + ProduceType(ob.attibutes[j]) + " " + (ob.attibutes[j].TC_IsNull ? "NULL" : "NOT NULL") + "," + Huanhang;&
103、lt;/p><p> scriptView += obs[i].BaseInfo.TableName + "." + ob.attibutes[j].TC_Name + ", ";</p><p><b> }</b></p><p> scriptView += obs[i].BaseInfo.Tab
104、leName + "." + "tableID From " + obs[i].BaseInfo.TableName + Huanhang;</p><p> scriptTable += " tableID bigint IDENTITY(1,1) NOT NULL)" + Huanhang;</p><p>&
105、lt;b> }</b></p><p> 4.3.3文檔生成流程</p><p> 如圖4-7 是文檔生成界面,可以選擇不同的文檔進(jìn)行生成,包括需求分析文檔、詳細(xì)設(shè)計(jì)文檔、數(shù)據(jù)庫表結(jié)構(gòu)文檔。選擇本地磁盤后點(diǎn)擊輸出文檔按鈕,文檔會(huì)保存在相應(yīng)的磁盤下。</p><p><b> 圖4-7 文檔生成</b></p>
106、;<p> 數(shù)據(jù)庫生成的流程圖如圖4-8。流程為首先獲取要生成數(shù)據(jù)庫的類型,然后生成文檔所需要的數(shù)據(jù),接著加載定義好的文檔模板,最后生成目標(biāo)文檔。</p><p><b> 圖4-8 文檔生成</b></p><p><b> 核心代碼如下:</b></p><p> for (int i = 0;
107、i < acproject.o_objects.Count ; i++)</p><p><b> {</b></p><p> Microsoft.Office.Interop.Word.Paragraph para = oDoc.Paragraphs.Add(ref oMissing); ;</p><p><b>
108、……</b></p><p> oWord.Selection.MoveDown(ref WdLine, ref count, ref oMissing);</p><p> int rowCount = acproject.o_objects[i].attibutes.Count;</p><p> Microsoft.Office.Intero
109、p.Word.Table newTable = oDoc.Tables.Add(oWord.Selection.Range , rowCount + 2, 6, ref oMissing, ref oMissing);</p><p><b> ……</b></p><p> for (int j = 0; j < rowCount; j++)</p&
110、gt;<p><b> {</b></p><p><b> ……</b></p><p><b> }</b></p><p> oWord.Selection.MoveDown(ref WdLine, ref count,ref oMissing ); // 移動(dòng)焦點(diǎn)<
111、/p><p> oWord.Selection.TypeParagraph(); // 插入段落</p><p><b> }</b></p><p><b> }</b></p><p> catch (Exception ex)</p><p><b>
112、{</b></p><p> System.Windows.Forms.MessageBox.Show(ex.Message);</p><p><b> }</b></p><p><b> finally</b></p><p><b> {</b>&l
113、t;/p><p><b> …….</b></p><p> oWord.Quit(ref oMissing, ref oMissing, ref oMissing);</p><p> System.Windows.Forms.MessageBox.Show("創(chuàng)建Word文檔成功!", "提示",
114、MessageBoxButtons.OK, MessageBoxIcon.Information);</p><p><b> }</b></p><p> 4.3.4代碼生成流程</p><p> 如圖4-9 是最終項(xiàng)目源代碼生成界面,目前只提供了.net中Asp.net的生成。對(duì)于Wpf程序只要編寫在一定的框架下編寫相應(yīng)的XSLT模板
溫馨提示
- 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. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 信息管理畢業(yè)設(shè)計(jì)--設(shè)備信息管理系統(tǒng)設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)---基于web學(xué)生信息管理系統(tǒng)設(shè)計(jì)與開發(fā)
- 通用信息管理框架系統(tǒng)的通用信息定義子系統(tǒng)設(shè)計(jì)及應(yīng)用.pdf
- 畢業(yè)設(shè)計(jì)--學(xué)生信息管理系統(tǒng)畢業(yè)設(shè)計(jì)
- 基于web的通用信息管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 畢業(yè)設(shè)計(jì)基于web的通用權(quán)限管理系統(tǒng)
- 畢業(yè)設(shè)計(jì)--職工信息管理系統(tǒng)
- 畢業(yè)設(shè)計(jì)---客戶信息管理系統(tǒng)
- 學(xué)校信息管理系統(tǒng)畢業(yè)設(shè)計(jì)
- 學(xué)生信息管理系統(tǒng)畢業(yè)設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)---學(xué)生信息管理系統(tǒng)
- 畢業(yè)設(shè)計(jì)---客戶信息管理系統(tǒng)
- 畢業(yè)設(shè)計(jì)---學(xué)生信息管理系統(tǒng)
- 畢業(yè)設(shè)計(jì)----學(xué)生信息管理系統(tǒng)
- 畢業(yè)設(shè)計(jì)-班級(jí)信息管理系統(tǒng)
- 小區(qū)信息管理系統(tǒng)畢業(yè)設(shè)計(jì)
- 學(xué)生信息管理系統(tǒng)畢業(yè)設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)---超市信息管理系統(tǒng)
- 畢業(yè)設(shè)計(jì)---客戶信息管理系統(tǒng)
- 期刊信息管理系統(tǒng)畢業(yè)設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論