穆仕華 陳月英
(1.貴州省科技信息中心,貴州貴陽 550002;2.貴州省信息技術創(chuàng)新服務中心,貴州貴陽 550002)
基于三層架構的映射方法研究
穆仕華1陳月英2
(1.貴州省科技信息中心,貴州貴陽550002;2.貴州省信息技術創(chuàng)新服務中心,貴州貴陽550002)
傳統(tǒng)的三層架具有層次清晰、任務明確的特點,但軟件的設計和編碼也涉及到三個層次,不同層次涉及到不同的開發(fā)語言、工具和方法,使得軟件的設計、編碼、測試和維護困難,軟件開發(fā)效率和質量難以保障。本文通過對三層架構映射模型的建立,采用規(guī)則引擎、組件引擎、代碼生成技術和組件解析技術實現(xiàn)了一層到三層的映射,在保留三層架構優(yōu)點的基礎上,簡化了軟件設計和開發(fā)的難度,提高了軟件開發(fā)的效率和質量。
三層架構映射方法組件引擎規(guī)則引擎代碼生成
三層架構是指在客戶端瀏覽器與后臺數(shù)據(jù)庫間加入了一個可稱為組件層的中間層。組件層分為業(yè)務邏輯層BLL、數(shù)據(jù)訪問層DAL、數(shù)據(jù)對象模型層Model[1]。三層架構的優(yōu)點是層次清晰,提高了系統(tǒng)設計的靈活性、可擴展性和可維護性。但是,從三層架構的各層來看,具有涉及的開發(fā)語言多、開發(fā)工具多的特點:(1)表示層的設計復雜。在表示層,需要對用戶界面進行設計,界面是實現(xiàn)人機友好交互的接口,界面的友好性對用戶體驗有直接影響[2]。WEB表示層的設計涉及頁面布局、圖片處理、人機會話等技術,這些技術需要多種工具和語言來完成,如Photoshop、html、div、js等,不同內核的瀏覽器在表示層存在較大的兼容性問題,導致同樣的界面在不同瀏覽器中的表現(xiàn)形式不一致,甚至部分功能失效。(2)業(yè)務邏輯層的實現(xiàn)復雜。在業(yè)務邏輯層,通過對業(yè)務邏輯的封裝,對表示層進行隱藏實現(xiàn),表示層通過調用業(yè)務邏輯層的接口來實現(xiàn)各種操作。業(yè)務邏輯層是表示層和數(shù)據(jù)訪問層的紐帶,需要處理各種復雜的算法實現(xiàn)問題。實現(xiàn)業(yè)務邏輯層的語言有VB、C#、JAVA等,不同語言的開發(fā)環(huán)境、語法格式、基礎類庫等差異較大,開發(fā)過程中需要進行大量的編碼工作。(3)數(shù)據(jù)訪問層的差異較大。在數(shù)據(jù)訪問層,需要解決不同數(shù)據(jù)庫的存取問題,不同類型的數(shù)據(jù)庫在連接方法、數(shù)據(jù)類型、SQL查詢語句、存儲過程、用戶自定義函數(shù)的語法格式方面存在差異,這些差異需要技術人員在開始過程中查閱相關的幫助文檔才能解決,消耗了大量的時間和精力。
1.1MVC
MVC在開發(fā)復雜的大型網(wǎng)站時,能將不同的功能作切割,提高程序代碼的可讀性,以及組件的可重用性。MVC縱向切割了開發(fā)過程中的代碼,從服務器到瀏覽器層層分離。層次之間耦合度很低。但MVC無法封裝,所以無法被重用[3]。
1.2MVP
MVP演變自MVC,通過表示器將視圖與模型巧妙地分開。在該模式中,視圖通常由表示器初始化,它呈現(xiàn)用戶界面(UI)并接受用戶所發(fā)出命令,但不對用戶的輸入作任何邏輯處理,而僅僅是將用戶輸入轉發(fā)給表示器[4]。
1.3WPF
WPF涵蓋了桌面應用程序開發(fā)、網(wǎng)絡應用程序開發(fā)和移動應用程序開發(fā),是微軟開發(fā)技術未來十年的主要方向。WPF基于DirectX底層接口,帶來優(yōu)秀的圖形向量渲染引擎,因此相對于上一代GDI/ GDI+編程模型有了質的飛躍,可以輕松實現(xiàn)2D/3D絢麗效果,比如半透明、圖形翻轉、平移、縮放等[5]。
通過對三層架構常見模式的優(yōu)缺點進行比較,提出三層架構的映射模型,如圖1所示。
2.1偽碼文檔
偽碼文檔是一個二維表結構,其行列結構可通過代碼生成器的算法轉化為HTML代碼。在偽碼文檔的單元格中,通過規(guī)則表達式描述各單元格中的組件類型、組件屬性以及組件的數(shù)據(jù)接口。按照組件引擎和規(guī)則引擎的約定,在偽碼文檔中還可描述數(shù)據(jù)庫的表結構、表間關系、業(yè)務流程及用戶權限。
2.2組件引擎
組件引擎是由表單、數(shù)據(jù)列表、報表、業(yè)務流程、圖文、視頻等具有通用性的組件組成的組件庫,其底層實現(xiàn)細節(jié)通過JAVA、C#等支持面向對象的WEB開發(fā)語言實現(xiàn)。組件引擎除包含常見的組件外,還可根據(jù)其提供的標準和統(tǒng)一接口進行組件擴展,組件的標準接口包括組件ID、組件類型、數(shù)據(jù)庫類型、可編程性數(shù)據(jù)接口、界面描述、外部文件引入路徑,在此基礎上,可擴展新加入組件的其他屬性。
2.3規(guī)則引擎
2.3.1表結構描述規(guī)則
(1)表結構描述規(guī)則。關系數(shù)據(jù)庫的表結構通過“TableName={字類名$字段類型$字段長度$驗證方式$字段說明}”的方式進行描述,字段的驗證方式是指對字段對應的控件在接收用戶輸入的數(shù)據(jù)時進行的有效性驗證,常見的驗證方式包括身份證號、電話、郵編、電子郵箱、整數(shù)、小數(shù)、日期、時間等,用其對應的英文名作為偽碼描述。
(2)表間關系描述規(guī)則。表單關系包括1對1,1對多和多對多關系,通過規(guī)則表達式“{表x->字段1orn=表y->字段1orn}”進行描述。若同一表與多表之間存在關系,則可通過編寫多個表間關系表達式進行描述。
2.3.2組件描述規(guī)則
組件描述通過規(guī)則表達式“Component=組件ID$組件類型$屬性集合”進行描述,屬性集合以“{屬性ID=屬性值},{屬性ID=屬性值}”的方式描述組件的多個屬性。
由于組件在實現(xiàn)業(yè)務功能時可能需要引入一些外部文件作為支撐,因此,對于文件的引入規(guī)則采用“<FileType=文件類型Path=文件路徑”進行描述。文件類型JS、CSS、Image三種。
2.3.3參數(shù)描述規(guī)則
圖1 三層架構映射模型
圖2 代碼生成器的工作流程
在規(guī)則引擎中還需制定各種參數(shù)的傳遞和接收方法,WEB應用中的參數(shù)傳遞方式主要包括Post、Get,Session和Cookie三種,對于Post和Get,其偽碼表達式為“參數(shù)變量=request.參數(shù)名”,Session和Cookie則分別為“參數(shù)變量=Cookie.參數(shù)名”和“參數(shù)變量=Session.參數(shù)名”。
2.4代碼生成器
代碼生成器的作用是將偽碼文檔轉換成組件的XML配置文檔及相關的文件。代碼生成器的工作流程為導入偽碼文檔,對偽碼文檔的類型進行判斷,若偽碼文檔為表結構偽碼,則通過SQL代碼生成器生成特定關系數(shù)據(jù)庫的SQL建表腳本和用于實現(xiàn)數(shù)據(jù)增加、刪除和修改的腳本。若偽碼文檔是組件結構,則根據(jù)組件的結構生成HTML、CSS、JS文件和組件的XML配置文檔。代碼生成器的工作流程如圖2所示。
2.5組件解析器
組件解析器的作用是將組件的XML文檔轉換成WEB應用程序。組件解析器的工作流程是對代碼生成器生成的XML文檔進行加載,并根據(jù)組件的參數(shù)描述從外部獲取session、post等方式傳遞的參數(shù),與此同時,調用一個通用數(shù)據(jù)接口獲取關系數(shù)據(jù)庫中的數(shù)據(jù)并創(chuàng)建組件,組件創(chuàng)建完畢后,根據(jù)組件的HTML界面布局呈現(xiàn)組件。
映射模型實現(xiàn)的關鍵是通過各種算法對偽碼文檔進行解析,以生成組件的XML配置文檔,而組件的XML配置文檔中包含了組件的屬性描述、界面描述、數(shù)據(jù)接口描述,XML配置文檔是組件解析器將其轉換為WEB應用的基礎,因此映射模型需要對代碼生成算法和組件解析算法進行實現(xiàn)。
3.1代碼生成算法
三層架構映射模型的關鍵是實現(xiàn)HTML、JS、XML和SQL的代碼生成,各種代碼的生成原理和方法差異較大。
3.1.1HTML生成算法
HTML生成算法根據(jù)偽碼文檔描述的二維表結構生成WEB應用程序的界面布局,其算法的關鍵步驟如下:
(1)遍歷二維表的所有行和列,開始遍歷前生成“<table>”標簽;(2)讀取每一個單元格式的值,如果不為空,產(chǎn)生一個“<td><td>”標識,如果為空,并入其左側的單元格;(3)如果某一單元格的下方存在空單元格,則將其合并;(4)所有單元格遍歷結束生成“</table>”標簽。
3.1.2JS生成算法
JS代碼用于實現(xiàn)數(shù)據(jù)的驗證、在前端實現(xiàn)計算等,其代碼生成算法的關鍵步驟如下:(1)根據(jù)組件的描述規(guī)則引入JS文件;2)如果組件涉及函數(shù)庫的調用,則將調用函數(shù)庫所需的相關參數(shù)轉換為接收到的實際參數(shù);(3)對于表單組件,若發(fā)現(xiàn)算法運算或邏輯運算表達式,則采用二叉樹的遍歷算法遍歷整個表達式,以獲取表達式中的控件ID,同時調用JQuery函數(shù)庫中的組件選擇器獲取特定控件的值,并將整個表達式轉換為條件表達式,以實現(xiàn)對表單中相關數(shù)據(jù)的驗證。
3.1.3XML生成算法
XML生成算法將偽碼文檔的整體結構生成一個XML文檔,并將偽碼文檔中描述的組件作為XML文檔的子節(jié)點。XML生成算法的關鍵步驟如下:(1)遍歷二維表的所有行和列,開始遍歷前生成“<Page>”根節(jié)點;(2)讀取每一個單元格式的值,如果找到Component標識,則獲取組件的類型,根據(jù)組件的結構為偽碼文檔的描述生成組件和XML描述文檔,同時作為“<Page>”根節(jié)點的子節(jié)點;(3)遍歷完成后,生成”</Page>”結束標簽。
3.1.4SQL生成算法
SQL生成算法將偽碼文檔中描述數(shù)據(jù)庫表結構的偽碼生成為數(shù)據(jù)庫的建表腳本,同時根據(jù)偽碼文檔中描述的組件接口的需要,生成相應的數(shù)據(jù)處理腳本,其關鍵的代碼生成步驟如下:(1)遍歷二維表的所有行和列,若發(fā)現(xiàn)“TableName”標簽,則說明是一個數(shù)據(jù)為表結構相關的偽碼描述;(2)獲取每一個單元格的值,拆分偽碼表達式以獲取字段名、字段類型、長度和備注信息,存入數(shù)組;(3)遍歷結束后,判斷當前選用的關鍵數(shù)據(jù)庫類型,調用特定關系數(shù)據(jù)庫的建表方法生成數(shù)據(jù)庫表結構;(4)遍歷描述組件的偽碼文檔,根據(jù)組件的數(shù)據(jù)接口需求生成特定的數(shù)據(jù)處理腳本。
3.2組件解析算法
組件解析算法根據(jù)組件的XML文檔生成WEB應用程序,組件解析算法以組件的XML文檔為基礎,從XML文檔的根節(jié)點開始對整個XML文檔進行遍歷,當讀取到組件類型標簽時,首先創(chuàng)建一個組件實例,同時從XML文檔獲取組件的其他參數(shù)對組件實例的接口進行配置。單個組件創(chuàng)建完成后,根據(jù)XML文檔中提供的界面布局對各組件進行呈現(xiàn)。組件呈現(xiàn)時,如果需獲取相關參數(shù)、設置組件的初始值,則根據(jù)規(guī)則表達式對參數(shù)進行解析,通過通用的數(shù)據(jù)接口獲取組件的數(shù)據(jù)源,調用其數(shù)據(jù)接口代碼獲取數(shù)據(jù)源中的數(shù)據(jù),并綁定到組件中。
基于三層架構的映射技術在建立三層架構映射技術的基礎上,以組件引擎為基礎,通過自定義的規(guī)則表達式對組件進行描述,形成偽碼文檔,實現(xiàn)了界面層、業(yè)務邏輯層和數(shù)據(jù)訪問層的設計通過一個文檔完成。在構建偽碼文檔的基礎上,通過代碼生成器將偽碼文檔轉化為組件的XML配置文檔,組件解析器將XML配置文檔轉換成WEB應用程序,從實現(xiàn)了通過XML代碼文檔向三層代碼的映射關系,簡化了軟件設計的過程,改變了WEB應用軟件代碼編寫的方式,從而提高了軟件的開發(fā)效率和質量。
[1]張士敏.ASP.NET的三層架構與實現(xiàn)[J].硅谷,2013,(第4期).
[2]HOU Yan'e,DANG Lanxue,WEI Dan.Design and implementation of web user interface automatic generation tool[J].Journal of Henan University(Natural Science),2011,41(6):641-644.
[3]張志剛.基于ASP.NET MVC框架的研究[J].計算機光盤軟件與應用,2014,(第18期).
[4]王念橋.應用MVP模式改進軟件架構[J].計算機時代,2012,(第4期).
[5]王嬋娟.淺談WPF架構及其應用[J].科技信息,2011,(第21期).