AgileEAS.NET平臺做為一個快速應用開發(fā)平臺,其目的為是為了提高應用軟件的生產(chǎn)效率,如何軟件開發(fā)的生產(chǎn)效率,方法是多種多樣的;使用工作簡化開發(fā)中低技術(shù)重復工作可以是一種行之有效的途徑。
在AgileEAS.NET平臺中,我們提供了一個集數(shù)據(jù)庫設計、代碼生成、DDL定義與一體的數(shù)據(jù)實體設計器。
在早期的AgileEAS.NET版本中包含一個代碼生成器,用于根據(jù)現(xiàn)在數(shù)據(jù)庫生成ORM代碼,后來的思路是想介入項目的數(shù)據(jù)庫設計環(huán)節(jié),所以設計了這么一個數(shù)據(jù)對象設計器,提供一個數(shù)據(jù)表定義工具,在項目的數(shù)據(jù)庫設計階段(環(huán)節(jié)),使用數(shù)據(jù)表設計工具同時定義數(shù)據(jù)庫和數(shù)據(jù)實體模型,對象設計器會生成數(shù)據(jù)庫設計文檔、數(shù)據(jù)定義語言、基于分層的數(shù)據(jù)訪問層代碼。
在基于數(shù)據(jù)庫的應用開發(fā)項目中,數(shù)據(jù)庫設計是很一個很重要的過程,而這個過程寫數(shù)據(jù)庫設計文件是一個環(huán)節(jié),在很多軟件公司中,都是使用Word、WPS等文字表格工具寫數(shù)據(jù)庫文檔,但是數(shù)據(jù)庫文檔與數(shù)據(jù)庫建立、程序編寫過程脫節(jié)。
AgileEAS.NET平臺的對象設計工作,試圖在這方面進行集成,即設計器產(chǎn)生的模型定義即可以生成數(shù)據(jù)庫文檔、數(shù)據(jù)庫定義語句、也可以生成開發(fā)過程的代碼。
關于數(shù)據(jù)模型
AgileEAS.NET平臺針對應用開發(fā)之中的數(shù)據(jù)對象定義、存儲和交流定義一個數(shù)據(jù)對象結(jié)構(gòu)模型定義文件,數(shù)據(jù)設計器建立好的項目定義最后存儲在以.sdm為擴展名一個數(shù)據(jù)模型定義文件。
介紹
AgileEAS.NET平臺的模型定義既為對象設計的導航定義:
其組織結(jié)構(gòu)為項目包含實體和模型兩大類,模型存儲數(shù)據(jù)對象的關系(目前不支持),實體存儲數(shù)據(jù)對象的定義,實體可以選擇按目錄組織,即如果項目中的實體很多,為了視覺和組織上的方便,建立目錄,并在目錄中創(chuàng)建實體,只支持一級目錄。
AgileEAS.NET系統(tǒng)主界面
主窗口中共包括了5個不同的工作區(qū):系統(tǒng)菜單、工具欄、功能導航欄、業(yè)務工作區(qū)、系統(tǒng)狀態(tài)欄,系統(tǒng)中的所有業(yè)務功能均可通過系功能導航欄訪問操作。
系統(tǒng)菜單
對象設計器采用導航式界面樣式,系統(tǒng)功能由導航和菜單兩部分組成,提供文件、編輯、工具、窗口和幫助等菜單。
工具欄
工作欄上放置了與系統(tǒng)菜單相關的快速工具欄,可以通過這些工具欄快速訪問相關功能模塊。
導航欄
系統(tǒng)導航欄上列舉了項目中的數(shù)據(jù)對象組織機構(gòu),可以在導航欄上增加新的數(shù)據(jù)對象、刪除現(xiàn)在數(shù)據(jù)對象,設置項目屬性等功能。
導航欄默認顯示在界面的左邊,如果你想讓業(yè)務工作區(qū)更大些,以便有更大的界面空間處理業(yè)務功能,你可以在進入相關的業(yè)務功能模塊后,通過系統(tǒng)菜單或工具欄的導航命令隱藏或顯示功能導航欄。
工作區(qū)
工作區(qū)是系統(tǒng)工作區(qū)域,工作區(qū)根據(jù)導航和菜單的不同選擇與操作,將會加載不同的功能模塊,用于完成必要的任務。
狀態(tài)欄
系統(tǒng)狀態(tài)欄上顯示了系統(tǒng)當前的處理任務及任務處理狀態(tài),用于通知用戶,以便及時了解系統(tǒng)的運行情況。
關于
wps_clip_image-17230" border="0" alt="wps_clip_image-17230" src="/up/2010-9/201099224152194.png" />
提供對當前應用程序的描述信息。包括產(chǎn)品名稱、版本、開發(fā)商、授權(quán)信息等。
數(shù)據(jù)解決方案
概述
在進行設計數(shù)據(jù)對象之前,需要先規(guī)劃自己的項目以及項目中的項目組織,定義好的數(shù)據(jù)對象項目保存在硬盤上,以方便開發(fā)人員的交流和以后的修改。
新建項目
打開文件菜單的新建或者工具條上的建新按鈕,對象設計器新建一個數(shù)據(jù)模型項目,并重置導航欄和工具區(qū)。
保存項目
使用文件菜單中的保存或者工具條中的保存按鈕,如果項目文件已經(jīng)存在于文件系統(tǒng)上,則直接保存文件,如果是新建項目后的第一次保存,則打開另存為對話框保持文件。
在文件菜單中還提供了一個別存為功能,用于把設計模型保存到其他的文件之中。
打開項目
使用文件菜單中的打開或者工具條中的打開按鈕,彈出文件打開對話框:
選擇文件系統(tǒng)已經(jīng)存在的項目文件并打開,系統(tǒng)根據(jù)模型文件重置導航欄和清空工作區(qū):
項目設置
在數(shù)據(jù)模型中定義了項目的一些命名空間,名稱,標題,開發(fā)語言,數(shù)據(jù)庫設定這樣的東西,在模型設計時可以能過項目參數(shù)進行修改。
在導航欄的解決方案節(jié)點右鍵選擇“參數(shù)設定”,打開參數(shù)設定模塊:
解決方案參數(shù)設計分項目參數(shù)和數(shù)據(jù)庫連接參數(shù),上圖是項目參數(shù),數(shù)據(jù)庫連接設定:
項目名稱、項目標準、程序語言、命名空間等參數(shù)用于在生成數(shù)據(jù)訪問層代碼的過程之中用到,輸出目錄為生成的代碼、文檔、SQL腳本的輸出根目錄。
數(shù)據(jù)庫連接參數(shù)用于從數(shù)據(jù)庫生成數(shù)據(jù)對象時連接數(shù)據(jù)庫服務器,目前支持SQL2000/2005/2008/Oracle數(shù)據(jù)庫。
數(shù)據(jù)對象定義
概述
定義數(shù)據(jù)對象是對象設計器中最重要的工作,在對象定義信息中,存儲了程序中ORM對象所需要的對象屬性與數(shù)據(jù)庫表的字段映射信息,同時也存儲了數(shù)據(jù)庫表的定義信息。
對象設計器設計成的模型用與生成項目的數(shù)據(jù)庫定義文件、數(shù)據(jù)庫DDL腳本以及數(shù)據(jù)訪問層的程序代碼。
對象組織
對象設計器中提供了一個目錄的概念,即對于數(shù)據(jù)對象很多的解決方案,我們可以選擇在解決方案之中根據(jù)應用建立目錄,數(shù)據(jù)對象按目錄進行組織。
添加目錄
在導航欄中的實體節(jié)點右鍵點開快捷菜單,選擇“新建目錄”,系統(tǒng)打開目錄屬性圣誕框:
填寫目錄名稱和說明后點解“確定”按鈕,對話框關閉,新建的目錄加載到導航欄,“取消”按鈕放棄目錄的添加。
注意:目錄名稱不能為空,也不能和現(xiàn)有的目錄重名。
目錄屬性
在導航欄中的某個目錄節(jié)點右鍵點開快捷菜單,選擇“目錄屬性”,系統(tǒng)打開目錄屬性圣誕框:
在目錄屬性對話框中,可以修改目錄名稱和說明,完成成點擊“確定”按鈕完成屬性修改,“取消”按鈕放棄目錄的修改。
刪除目錄
在導航欄中的某個目錄節(jié)點右鍵點開快捷菜單,在彈出的菜單中選擇“刪除目錄”,系統(tǒng)會提示您是否確認刪除,點擊“是”刪除相應的目錄。
注意:刪除目錄是系統(tǒng)中刪除目錄信息,不刪除目錄中的數(shù)據(jù)對象定義,原目錄的中的數(shù)據(jù)對象轉(zhuǎn)移到解決方案實體節(jié)點之下。
對象管理
設計器中數(shù)據(jù)對象有兩個存在模型,直接位于解決方案這下,也可以依附于解決方案的目錄之中,兩種不同的方案可以混合使用,根據(jù)項目的規(guī)模進行合理構(gòu)建。
添加對象
在導航欄中的實體節(jié)點或者目錄節(jié)點右鍵點開快捷菜單,選擇“新建實體”,系統(tǒng)工作區(qū)打開一個新的對象定義Tab頁:
在對象定義Tab頁中,可以完成數(shù)據(jù)對象所指向的數(shù)據(jù)庫表信息定義(數(shù)據(jù)表名及字段信息)、ORM對象定義(屬性及屬性與數(shù)據(jù)字的映射)。
刪除實體
在導航欄中的某個目錄節(jié)點右鍵點開快捷菜單,在彈出的菜單中選擇“刪除目錄”,系統(tǒng)會提示您是否確認刪除,點擊“是”刪除相應的目錄。
注意:刪除目錄是系統(tǒng)中刪除目錄信息,不刪除目錄中的數(shù)據(jù)對象定義,原目錄的中的數(shù)據(jù)對象轉(zhuǎn)移到解決方案實體節(jié)點之下。
定義實體
在日常應用中,對象設計器工作的90%是由上圖的界面完成的,在這個界面中,我們完成數(shù)據(jù)對象的定義,間接的完成了數(shù)據(jù)庫的設計、ORM對象的設計。
實體包含名稱,數(shù)據(jù)表,說明和1-N個屬性記錄,實體的名稱,數(shù)據(jù)庫,說明直接在文本框填寫。
實體的屬性集合由下面的表格中進行填寫,增加新的屬性/列,在*標記的行中直接進行寫,刪除一條記錄時使用選中某一條,按下刪除鍵即可。
在屬性定義中,屬性的類型(程序類型)與數(shù)據(jù)類型是聯(lián)動的,即如果在這兩個類型中任務選擇一種,另一個類型都會根據(jù)類型轉(zhuǎn)換器得到一個對應的類型,因為程序中的類型比較廣泛,而數(shù)據(jù)庫的類型比較嚴謹,所以建議的做法是設置數(shù)據(jù)類型比較準確一些。
實體定義模塊的UI包含著7個Tab頁,最主要的是實體定義Tab頁,還附加了4個代碼Tab頁、一個數(shù)據(jù)庫腳本、一個文檔Tab頁。
四類代碼
因為AgileEAS.NET平臺ORM系統(tǒng)中對實體和表進行了分別的定義,所以針對每個數(shù)據(jù)對象定義,會生成4個代碼文件,分別為表接口、表實現(xiàn)、實體接口、實體實現(xiàn)。
在設計器環(huán)境中直接向IDE環(huán)境復制代碼,使用右鍵菜單中的全選、復制即可,也可以通過Ctrl+A、Ctrl+C實現(xiàn)。
DDL腳本
針對每個數(shù)據(jù)對象定義,工具會生成一段SQL腳本,定義數(shù)據(jù)表的創(chuàng)建和字段,數(shù)據(jù)表和字段的注視等自描述信息也會一并寫進腳步。
同樣,和程序代碼一樣,可以使用右鍵菜單中的全選、復制即可,也可以通過Ctrl+A、Ctrl+C實現(xiàn)。
文檔定義
針對每個數(shù)據(jù)對象定義,工具都生成一段數(shù)據(jù)庫定義文檔,包含數(shù)據(jù)表名稱、說明、所有者,各數(shù)據(jù)列名稱、數(shù)據(jù)類型、是否為空、主鍵等信息。
解決方案輸出
概述
對象設計器提供基于解決方案的代碼輸出、文檔輸出、DDL腳本輸出,可以一步生成供vs2005之上打開的數(shù)據(jù)層項目和解決方案。
輸出代碼
通過工具菜單中的生成代碼功能打開代碼輸出對話框:
在對話框中選擇輸入目錄,默認為在解決方案屬性中設計的輸出目錄,點擊“生成”按鈕完成解決方案的生成,輸入如下目錄結(jié)構(gòu):
我們在VS環(huán)境中打開AgilePM解決方案:
模型修改
對象設計器生成的代碼采用了分部類的技術(shù)方案,即同一個數(shù)據(jù)對象把生成的4個代碼文件分解成8個代碼文件,其中4個代碼文件生成與數(shù)據(jù)對象屬性定義相關,建議不做修改,文件名中帶有.Generator.cs,并且全部組織在項目的Generat文件夾中,程序代碼中有以下注釋:
//------------------------------------------------------------------------------
// <auto-generated>
// 此代碼由SmartEAS.NET/AgileEAS.NET數(shù)據(jù)模型設計工具生成。
// 運行時版本:2.0.50727.3053
//
// 對此文件的更改可能會導致不正確的行為,并且如果
// 重新生成代碼,這些更改將會丟失。
// </auto-generated>
//------------------------------------------------------------------------------
另外4個文件用于存儲用戶自定義的數(shù)據(jù)訪問代碼,文件名不帶.Generator.cs,生成的代碼位于項目的根目錄之中。
為什么要做這樣的設定呢,這得益長期的開發(fā)實踐,市面上有很多代碼生成工具,雖然說生成器工具可以加速開發(fā),但是生成的代碼是絕對不會滿足復雜應用,程序員必須對生成的代碼增加新的功能或者修改,那么當數(shù)據(jù)定義模型發(fā)生改變之后,重新生成的代碼就會把程序員所做的修改覆蓋。
采用分部類的方案進行分解之后,我們把與數(shù)據(jù)模型定義與程序員的特殊業(yè)務代碼進行了分離,當模型發(fā)生改變之后,重新生成的代碼保留了程序員的修改,只覆蓋Generat文件夾中的代碼文件。
接口驅(qū)動的數(shù)據(jù)訪問層
AgileEAS.NET平臺一直在實踐著接口驅(qū)動的思想,同時也在建議應用開發(fā)基于接口驅(qū)動,AgileEAS.NET平臺實現(xiàn)一組實用并且簡單的ORM,應用開發(fā)的數(shù)據(jù)訪問層也就是基于ORM技術(shù)的數(shù)據(jù)訪問層。
我們在應用開發(fā)中,經(jīng)常會遇到同樣的產(chǎn)品需要運行在不同的數(shù)據(jù)庫系統(tǒng)之上,比臺有客戶需要運行在SQLServer之上的版本、有的需要運行在ORACLR之上的版本。
在這種情況下,采用接口驅(qū)動的數(shù)據(jù)訪問層是一個不錯的選擇;定義一組數(shù)據(jù)訪問層接口組件及其不同數(shù)據(jù)庫類型的的數(shù)據(jù)訪問層實現(xiàn)組件,業(yè)務實現(xiàn)依賴于數(shù)據(jù)接口層而與數(shù)據(jù)實現(xiàn)層解耦,運行期不同的數(shù)據(jù)庫類型需求只需要修改系統(tǒng)的配置文件。
有關于數(shù)據(jù)接口層的配置請參考《AgileEAS.NET平臺開發(fā)指南》,這里不在詳細說明。
對象設計器生成的代碼默認是基于接口驅(qū)動的數(shù)據(jù)層,即解決方案中包含兩個項目,一個是數(shù)據(jù)訪問接口層,另一個是基于當前設計時環(huán)境的數(shù)據(jù)庫實現(xiàn)。
在現(xiàn)實環(huán)境中,有些應用我們從一開始就知道他只可能應用于某種單一的數(shù)據(jù)庫環(huán)境,對于這種應用,如果還采用基于接口驅(qū)動的數(shù)據(jù)訪問層,其修改成本就會略高一些,AgileEAs.NET平臺也支持這種非接口驅(qū)動的數(shù)據(jù)層,即生成單一的數(shù)據(jù)層項目。
在對象設計器的解決方案屬性中有一個選項“是否生成接口層”,這個選項默認是選中的,如果只是基于單一數(shù)據(jù)庫,請取消選擇,項目的輸出方案則變?yōu)椋?/p>
DDL腳本
通過工具菜單中的生成腳本功能打開腳本輸出對話框:
在對話框中選擇輸入文件,默認為在解決方案屬性中設計的輸出目錄之下的SqlScript\TableCreate.sql,點擊“生成”按鈕完成DDL腳本的生成,用SQL Server Management Studio打開生成的腳本文件:
文檔瀏覽
通過在“工具”菜單中的“文檔瀏覽”即可以在工作區(qū)打開一個解決方案文檔瀏覽窗口,顯示解決方案中所有數(shù)據(jù)對象/數(shù)據(jù)表定義信息:
開發(fā)人員可以直接復制到word、wps等字處理軟件進行編輯,也可以直接使用“工具”菜單中的輸出文件(Rtf、Excel、Html)直接輸出數(shù)據(jù)庫定義文檔:
輸出文檔
通過在“工具”菜單中的“輸出文件(Rtf)”、“輸出文件(Excel)”、“輸出文件(html)”打開文檔輸出對話框:
通過“瀏覽..."按鈕選擇輸出文件或者使用默認的文件路徑,最后點擊“生成”按鈕完成數(shù)據(jù)庫文件的輸出:
Excel格式:
html格式:
Rtf格式:
從數(shù)據(jù)庫生成
概述
對象設計器不僅提供了基于原生的數(shù)據(jù)對象定義模型生成數(shù)據(jù)庫表對象的能力,同時也提供了從現(xiàn)在的數(shù)據(jù)庫對象反向生成數(shù)據(jù)對象定義的能力(反向生成)。
操作步驟
通過“工具”菜單中的“從數(shù)據(jù)庫生成”功能打開數(shù)據(jù)庫連接對話框:
選擇反向生成的源數(shù)據(jù)庫類型,填寫服務器、用戶名、密碼等信息(默認為解決方案的數(shù)據(jù)庫連接信息),點擊“下一步”打開數(shù)據(jù)庫表、視圖選擇對話框:
數(shù)據(jù)庫中的數(shù)據(jù)庫、視圖基于用戶/架構(gòu)、數(shù)據(jù)表/視圖的組織方式,首先選擇相應的用戶/架構(gòu),再選擇要導入的數(shù)據(jù)庫表、視圖,點擊“開始”完成導入數(shù)據(jù)對象到當前模型定義:
反向生成工具會讀取數(shù)據(jù)庫元數(shù)據(jù)定義信息如字段名稱、數(shù)據(jù)類型、長度、主鍵、是否為空、注釋等信息,生成相應的數(shù)據(jù)定義模型,開發(fā)人員需要進行修改,主要是數(shù)據(jù)對象的屬性名稱大小寫調(diào)整,默認生成的屬性為首字母大寫,以及補充數(shù)據(jù)對象、數(shù)據(jù)庫表字段的標題、注釋信息。