趙 偉,王志華,周 兵
(1.鄭州大學(xué) 軟件技術(shù)學(xué)院,河南 鄭州450002;2.河南省高等學(xué)校信息網(wǎng)絡(luò)重點(diǎn)開放實(shí)驗(yàn)室,河南 鄭州450052)
隨著基于瀏覽器/服務(wù)器模式的WEB系統(tǒng)的日益普及,此類系統(tǒng)的可擴(kuò)展性差、代碼復(fù)用率低等問題也屢見不鮮了,因此在軟件系統(tǒng)的開發(fā)生命周期中,選擇一個(gè)合適的軟件架構(gòu)對(duì)于系統(tǒng)及其同構(gòu)子系統(tǒng)是極其重要的因素[1]。目前采用 .NET框架技術(shù)開發(fā)成為開發(fā)WEB系統(tǒng)的主要選擇,首先是因?yàn)橛脩舻牟僮飨到y(tǒng)平臺(tái)大多都是Windows,再加上低廉的成本和微軟數(shù)據(jù)庫系統(tǒng)SQLSERVER無縫連接等原因讓.NET架構(gòu)的應(yīng)用越來越廣泛。其次應(yīng)用.NET框架的N-層技術(shù)開發(fā)的軟件系統(tǒng)可以在一定程度上提高代碼復(fù)用率,并且使系統(tǒng)具有更強(qiáng)的應(yīng)用性、開發(fā)性和擴(kuò)展性的 優(yōu) 勢(shì)[2]。
.NET的五層架構(gòu)模式如圖1所示。
在該架構(gòu)模式中,共分為五層,這五層從上到下依次為用戶界面層 (UI layer)、門面層 (Fa ade layer)、邏輯層(logic layer)和數(shù)據(jù)訪問層 (data access layer)以及數(shù)據(jù)存儲(chǔ)層 (data stored layer)。用戶界面層是由瀏覽器向系統(tǒng)提供訪問的用戶界面;門面層是依據(jù)門面模式的原理,為邏輯層和數(shù)據(jù)訪問層的全部調(diào)用提供一個(gè)統(tǒng)一的高層次的接口。邏輯層則實(shí)現(xiàn)了系統(tǒng)的具體業(yè)務(wù)規(guī)則并且解決系統(tǒng)功能的擴(kuò)展性問題。而系統(tǒng)中數(shù)據(jù)的存取是通過數(shù)據(jù)訪問層來實(shí)現(xiàn),數(shù)據(jù)訪問層是系統(tǒng)中數(shù)據(jù)交互的橋梁,該層不但通過存儲(chǔ)過程與下層的數(shù)據(jù)存儲(chǔ)層交互,而且以數(shù)據(jù)對(duì)象CSID(跨層調(diào)用標(biāo)準(zhǔn)接口數(shù)據(jù)集)的形式將數(shù)據(jù)返還給上層。
圖1 .NET的五層架構(gòu)模式
目前流行的是.NET的經(jīng)典的四層架構(gòu)模式[3-4]。如圖2所示。
圖2 .NET的經(jīng)典的四層架構(gòu)模式
UI層,即用戶界面層 (user interface layer)是瀏覽器為應(yīng)用程序提供訪問界面,這層主要是向用戶提供界面上的操作和實(shí)現(xiàn)各種頁面控件的事件處理。業(yè)務(wù)邏輯層(business logic layer)為用戶界面層提供對(duì)業(yè)務(wù)規(guī)則的統(tǒng)一調(diào)用接口。數(shù)據(jù)訪問層 (data access layer)為業(yè)務(wù)邏輯層提供數(shù)據(jù)服務(wù)。其功能主要是負(fù)責(zé)數(shù)據(jù)庫的訪問。具體就是實(shí)現(xiàn)對(duì)數(shù)據(jù)庫表的Select、Insert、Update、Delete的一些基本操作,結(jié)果可以返回?cái)?shù)據(jù)集,每層主要是通過CSID實(shí)例的形式返回給上層。最后一層是DataBase,對(duì)數(shù)據(jù)進(jìn)行封裝,并且與數(shù)據(jù)庫實(shí)體映射。
分N層結(jié)構(gòu)實(shí)現(xiàn)網(wǎng)絡(luò)服務(wù)的方法目前在業(yè)界已經(jīng)廣泛應(yīng)用,所劃分的層次視具體應(yīng)用而定,比較上述兩種業(yè)界廣泛采用的架構(gòu)模式我們可以發(fā)現(xiàn),兩者的區(qū)別主要體現(xiàn)在邏輯層和數(shù)據(jù)訪問層,UI層沒有發(fā)生變化,仍然是以頁面為中心的WEB模型,雖然對(duì)于小型WEB系統(tǒng)的開發(fā)開說,可以實(shí)現(xiàn)快速開發(fā)和一定程度的代碼復(fù)用,但是對(duì)于大型的業(yè)務(wù)邏輯復(fù)雜的系統(tǒng)的設(shè)計(jì)和維護(hù)就有一定的局限性了。再加上 “code-Behind”技術(shù)造成了用戶界面層與業(yè)務(wù)邏輯層的耦合度過高,不但導(dǎo)致頁面顯示和流程控制和的可分離性差,使其難以滿足復(fù)雜多變的用戶需求;而且也導(dǎo)致了頁面層與業(yè)務(wù)邏輯層的代碼復(fù)用率低。
現(xiàn)在很多的應(yīng)用程序都可以基于MVC(model-view-controller)模式進(jìn)行設(shè)計(jì)與實(shí)現(xiàn)[5-6],包括 Web應(yīng)用程序框架。ASP.NET的架構(gòu)模式也提供了對(duì) MVC的實(shí)現(xiàn)機(jī)制[7-8],在ASP.NET的架構(gòu)模式中,主要是其Page Controller模式來實(shí)現(xiàn)MVC模式,視圖由表示層的aspx文件實(shí)現(xiàn),模式由上面所述架構(gòu)中的業(yè)務(wù)邏輯層來實(shí)現(xiàn),每個(gè)頁面都有一個(gè)控制器,沒有核心控制器[9]。該機(jī)制實(shí)現(xiàn)MVC模式具有簡單易用、頁面和控制器功能劃分清晰、頁面、控制器和業(yè)務(wù)邏輯層之間的耦合度較低等優(yōu)點(diǎn)。但是同樣對(duì)于大型的復(fù)雜系統(tǒng)來說,由于缺少一個(gè)強(qiáng)大的核心控制器,無法合理有效地的統(tǒng)一控制,集成一個(gè)完整的系統(tǒng)。
綜上所述,本文以ASP.NET的多層架構(gòu)技術(shù)為基礎(chǔ),并對(duì)ASP.NET框架中的MVC實(shí)現(xiàn)機(jī)制進(jìn)行擴(kuò)展研究[10],提出一種新的MVC模式實(shí)現(xiàn)架構(gòu),論述其組成結(jié)構(gòu)和運(yùn)行機(jī)理,并以樣本選貨廳系統(tǒng)為例闡述說明各組成模塊的實(shí)現(xiàn)過程。
新的架構(gòu)模式分為五層,從上到下依次是UI Layer、Control Layer、Business Layer、DataAccess Layer和數(shù)據(jù)庫(DataBase)。新的MVC架構(gòu)模式圖如圖3所示。
圖3 基于.Net技術(shù)和MVC模式的新架構(gòu)模式
在新的架構(gòu)模式中,視圖就是頁面表示層 (UI layer),也就是我們Web應(yīng)用的外觀顯示,為客戶端提供對(duì)應(yīng)用程序的訪問界面,負(fù)責(zé)接收用戶的輸入、將輸出呈現(xiàn)給用戶。
控制層 (control layer),這層是相對(duì)于.NET經(jīng)典的三層架構(gòu)模式新加的一層,主要目的是連接模式層和UI層,是模式層和UI層之間的橋梁。該層主要由自定義PageBase類、Parameter類以及系統(tǒng)日志記錄組成。自定義PageBase類,繼承了System.Web.UI.Page類,并且將各種初始化和控制函數(shù)重新封裝,以滿足MVC模式中的核心控制器的要求。系統(tǒng)的所有頁面都繼承自定義的PageBase類,所有符合要求的用戶請(qǐng)求都要先轉(zhuǎn)發(fā)到該類進(jìn)行處理,再由該類分發(fā)給各個(gè)頁面的Page Controller進(jìn)行處理。Parameter類是用來保存每張畫面的數(shù)據(jù),并向模式層部分中的業(yè)務(wù)邏輯層的Facade類傳遞數(shù)據(jù)對(duì)象的類,所以與視圖層中的每張頁面一一對(duì)應(yīng)。另外我們也可以利用控制層來記錄系統(tǒng)的操作日志。
模式層由兩層組成,一層是Business Layer即業(yè)務(wù)邏輯層,另一層是DataAccess Layer即數(shù)據(jù)訪問層。業(yè)務(wù)邏輯層,一般在該層中進(jìn)行業(yè)務(wù)邏輯的處理,業(yè)務(wù)邏輯層通過CSID的形式與數(shù)據(jù)訪問層、控制層進(jìn)行交互,業(yè)務(wù)邏輯層的設(shè)計(jì)是整個(gè)系統(tǒng)設(shè)計(jì)中的關(guān)鍵問題。業(yè)務(wù)邏輯層中核心部分是Facade類,負(fù)責(zé)完成與具體業(yè)務(wù)密切相關(guān)的業(yè)務(wù)邏輯處理。數(shù)據(jù)訪問層,該層主要是向業(yè)務(wù)邏輯層提供數(shù)據(jù)服務(wù),具體在該架構(gòu)模式中,它包括三部分:第一部分是數(shù)據(jù)實(shí)體DataSet類,該類的作用是以強(qiáng)類型的Dateset在各層之間傳遞數(shù)據(jù)信息。當(dāng)數(shù)據(jù)庫中的表的結(jié)構(gòu)等如果發(fā)生改變時(shí),只需要對(duì)數(shù)據(jù)訪問層的代碼進(jìn)行修改就可以了,不需要再修改其它的地方。第二部分是數(shù)據(jù)源訪問管理類DBManager,由于數(shù)據(jù)訪問層用于存放應(yīng)用應(yīng)用系統(tǒng)的數(shù)據(jù)信息,一般采用關(guān)系型數(shù)據(jù)庫進(jìn)行存儲(chǔ),所以DBManage類屏蔽了系統(tǒng)對(duì)DBMS的依賴性,利用DBManage類可以與來自SQLServer、Oracle、DB2等不同的數(shù)據(jù)庫相連,第三部分是數(shù)據(jù)訪問操作類DAO類,它將對(duì)數(shù)據(jù)表的Select、Insert、Update、Delete的一些基本操作封裝在DAO類中。
新架構(gòu)的時(shí)序圖如圖4所示。用戶需要視圖層顯示相關(guān)信息,通過HandleEvent事件傳遞到控制層,控制層先對(duì)畫面的數(shù)據(jù)進(jìn)行封裝,封裝后調(diào)用模式層中Fa?ade中的方法,并通過模式層中DAO和數(shù)據(jù)庫發(fā)生交互,將查詢的結(jié)果以DATASET的形式傳遞到控制層,控制層將數(shù)據(jù)封裝后,根據(jù)用戶的需求最終顯示畫面并通知用戶。
圖書樣本選貨廳系統(tǒng)架構(gòu)如圖5所示。
本文以某書店的圖書樣本選貨廳系統(tǒng)為例進(jìn)行說明,該系統(tǒng)主要是實(shí)現(xiàn)客戶在進(jìn)入倉庫的前提下,通過RF終端掃描圖書樣本的條形碼,下采購訂單,倉庫接收到訂單信息后,快速準(zhǔn)確的配貨并最終發(fā)貨。客戶可以對(duì)訂單中的信息進(jìn)行查看、添加、修改和刪除操作。該系統(tǒng)主要有訂單管理模塊、樣本管理模塊、財(cái)務(wù)管理模塊、基礎(chǔ)數(shù)據(jù)管理4個(gè)模塊組成。該系統(tǒng)在實(shí)際編程中使用了Microsoft.NET平臺(tái)和ASP.NET技術(shù),后臺(tái)數(shù)據(jù)庫采用Microsoft SQL Server 2005作為數(shù)據(jù)庫服務(wù)器,客戶瀏覽器使用Microsoft Internet Explorer。
樣本選貨廳系統(tǒng)的架構(gòu)圖包括五層,自頂向下分別為UI Layer、Control Layer、Business Layer、DataAccessLayer和數(shù)據(jù)庫Microsoft SQL Server 2005。其中UI Layer的數(shù)據(jù)來源于兩個(gè)途徑:Form和Device,主要是針對(duì)樣本選貨廳系統(tǒng)特殊的業(yè)務(wù)流程而言的,樣本選貨廳里客戶下訂單是通過RF終端掃描圖書樣本的條碼和輸入的數(shù)量來生成訂單的,所以就在最上面是系統(tǒng)的數(shù)據(jù)來源Device和Form Screen。Control Layer根據(jù)UI Layer得到的數(shù)據(jù)控制頁面間的流轉(zhuǎn)以及最終的VIEW顯示,同時(shí)還有PageBase類和Parameter類。Business Layer是負(fù)責(zé)系統(tǒng)業(yè)務(wù)邏輯的處理,而DataAccess Layer包括三部分一部分是DAO類,該類封裝了對(duì)數(shù)據(jù)庫的操作行為,另外一部分是DATASET類,該類對(duì)應(yīng)于系統(tǒng)的數(shù)據(jù)庫中的所有表結(jié)構(gòu),最后一部分是Dbmanager類,負(fù)責(zé)理對(duì)數(shù)據(jù)源的連接服務(wù)。下文結(jié)合圖書樣本選貨廳系統(tǒng)中的圖書樣本查詢功能來說明新框架中各個(gè)部分的具體實(shí)現(xiàn)方法。
圖4 新架構(gòu)的時(shí)序圖
圖5 圖書樣本選貨廳系統(tǒng)架構(gòu)
視圖層的實(shí)現(xiàn)是依據(jù)客戶需求構(gòu)建aspx頁面的過程。
3.3.1 PageBase類的實(shí)現(xiàn)
PageBase繼 續(xù) 于 System.Web.UI.Page類,其 中 的PageLoad()是頁面初始化的重要事件,同時(shí)PageLoad()是該系統(tǒng)自動(dòng)的核心控制器,由它來統(tǒng)一處理用戶請(qǐng)求,除了初始化頁面的一些基本代碼由系統(tǒng)自動(dòng)產(chǎn)生,我們根據(jù)最終顯示的要求,通過SetDocumentTitle(),Set-MultiLanguage ( ), ProcessControlsWithStatus ( ),SetValue-ForDataControls(),GridView ()等方法來分別控制畫面最終的顯示結(jié)果。SetDocumentTitle()用于控制顯示畫面的標(biāo)題,最終顯示在IE瀏覽器的Title欄中。Set-MultiLanguage()設(shè)置畫面中相關(guān)需要表示為多語言的控件的多語言屬性。ProcessControlsWithStatus()根據(jù)畫面狀態(tài),設(shè)置畫面上的控件的狀態(tài)。例如:控件是否可以被編輯或者控件是否可見等狀態(tài)。SetValueForDataControls()根據(jù)Parameter設(shè)置畫面上控件的值。如果控件只需要設(shè)置一次值,如:列表類控件 (DropDownList,ListBox等)的數(shù)據(jù)綁定,則應(yīng)該在Not IsPostBack代碼塊中進(jìn)行處理。GridView ()綁定到DataTable,通過GirdView控件的形式在頁面中顯示數(shù)據(jù)。
3.3.2 Parameter類的實(shí)現(xiàn)
由于Parameter類中的數(shù)據(jù)與頁面中的數(shù)據(jù)也是一一對(duì)應(yīng)的,下文以圖書樣本的查詢畫面為例來說明Parameter類具體的實(shí)現(xiàn)方法。圖書樣本的查詢畫面中有3個(gè)檢索條件,分別是ISBN、書名和出版社。該畫面對(duì)應(yīng)的Parameter類的代碼如下所示:
public class ParameterT01A{
#region fields,properties
private string _BookNo;
public string BookNo
{ get{return _BookNo;} set{_BookNo=value;} }
private string _Book Name;
public string BookName
{ get{return _Book Name;} set{_Book Name=value;} }
……
#endregion fields,properties}
將畫面中的數(shù)據(jù)通過Parameter類的形式進(jìn)行封裝,并且用Parameter作為參數(shù),傳遞到業(yè)務(wù)邏輯層的fa ade類,最后進(jìn)行數(shù)據(jù)的查詢,并最終將查詢的結(jié)果以Parameter類的形式傳遞回畫面,顯示給用戶。這樣做最大的一個(gè)優(yōu)點(diǎn)就是極大地提高了系統(tǒng)的可擴(kuò)展性和提高代碼的復(fù)用率。因?yàn)槿绻麑嬅嬗蒞ebPage換成Winform,不需要修改業(yè)務(wù)邏輯層的Facade類,只需要修改Winform中的Parameter類。
3.4.1 業(yè)務(wù)邏輯層
public ParameterT01CSearchBooks(ParameterT01A t01a)
{//實(shí)例化一個(gè)BookDAO對(duì)象,并連接數(shù)據(jù)源
BookDAO daobook=new BookDAO (dbman)
//調(diào)用BookDAO中的方法Query根據(jù)條件在數(shù)據(jù)庫中查詢結(jié)果。
DataSetBook.BookDataTable bookTable = daobook.Query (t01aBookNo,t01a.BookName,t01aPublishinghouse);
//查詢后的結(jié)果綁定于gridview并顯示
t01a.GridViewDataSource=bookTable;
//關(guān)閉數(shù)據(jù)源連接
dbMan.Close ();
//返回parameter類的實(shí)例化對(duì)象t01a;
return t01a;}
3.4.2 數(shù)據(jù)訪問層
3.4.2.1 數(shù)據(jù)實(shí)體DataSet類
在.net環(huán)境下,DataSet類是對(duì)數(shù)據(jù)庫表的抽象,包括與數(shù)據(jù)庫表字段相對(duì)應(yīng)且名稱一致的成員變量以及設(shè)置、讀取變量值的set和get方法等。本項(xiàng)目中使用的是定制的DataSet,其優(yōu)點(diǎn)是可以按照客戶具體的業(yè)務(wù)需求自定義DataSet,有助于從面向?qū)ο蟮慕嵌葘?shí)現(xiàn)該系統(tǒng)。和其它使用ASP.NET進(jìn)行數(shù)據(jù)庫信息系統(tǒng)開發(fā)不同的是,我們的Dataset是一些通過Visual Studio設(shè)計(jì)器自動(dòng)產(chǎn)生的,通過拖放操作來生成Dataset類,并通過設(shè)計(jì)相應(yīng)的屬性來滿足我們的需要。我們?cè)谠撓到y(tǒng)開發(fā)中使用數(shù)據(jù)庫時(shí),數(shù)據(jù)一般被表示成不同的實(shí)體,如Book、Customers等。為了和這些數(shù)據(jù)一起工作,需要將它們以實(shí)體的形式封裝。如可以為每個(gè)實(shí)體寫一個(gè)定制的類。當(dāng)然,為了方便處理實(shí)體對(duì)象,自定制DataSet中的字段可以是和數(shù)據(jù)庫中的某個(gè)表字段一一對(duì)應(yīng),也可以是對(duì)數(shù)據(jù)庫中的多個(gè)表中的字段的抽象重新組合,甚至一個(gè)數(shù)據(jù)集中可以包涵多個(gè)數(shù)據(jù)庫表對(duì)象。通過Visual Studio設(shè)計(jì)器自動(dòng)產(chǎn)生的Dataset,在該項(xiàng)目中我們可以非常輕松地對(duì)數(shù)據(jù)進(jìn)行增刪改操作。從本質(zhì)上講,我們創(chuàng)建了一個(gè)Dataset,就相當(dāng)于創(chuàng)建了一個(gè)自定義的類。這和我們手工寫的類一樣,所不同的是,這是使用可視化的設(shè)計(jì)器來完成的。同時(shí)這個(gè)Dataset會(huì)和數(shù)據(jù)庫的schema保持同步。而Visual Studio的代碼產(chǎn)生器將為我們完成所有的底層操作。另外,由于這些Dataset從ADO.NET的相應(yīng)類型繼承,因此,它們可以繼承豐富的數(shù)據(jù)操作功能,同時(shí)這些功能還和ASP.NET的數(shù)據(jù)綁定相結(jié)合使用,極大的減少了手工寫代碼的工作量,提高了開發(fā)效率和開發(fā)進(jìn)度。
3.4.2.2 數(shù)據(jù)源訪問管理類 DBManager
在該系統(tǒng)中通過DBManager.cs類來管理對(duì)數(shù)據(jù)源的連接服務(wù)。在DBManager.cs中有一個(gè)方法getConnection,作用是得到連接字符串。
public static SqlConnection getConnection()
{//聲明連接字符串
String settings;
//使用用SqlConnection連接數(shù)據(jù)庫
SqlConnection connection;
//從Config文件中讀取連接字符串
settings = DAL.Properties.Settings.Default.testConnectionString;
String connectionString=settings;
connection=new SqlConnection
(connectionString); }
3.4.2.3 數(shù)據(jù)訪問類DAO類的實(shí)現(xiàn)
我們對(duì)數(shù)據(jù)表的Select、Insert、Update、Delete的一些基本操作封裝在DAO類中。例如:表查詢操作。
public static DataSetBook.BookDataTable Query
(string bno,string bname,string bpublishinghouse)
{ SqlCommand selectCommand=new System.Data.SqlClient.SqlCommand ();
selectCommand.Connection=conn;
selectCommand.Transaction = transaction;
selectCommand.CommandText= @"SELECT *
FROM book where BooNo LIKE Bno and BookName LIKE bname and Publishinghouse LIKE bpublishinghouse";
selectCommand.CommandType =System.Data.CommandType.Text;
DataSetBook BookDataTable table=new BookDataSet.BookDataTable ();
new SqlDataAdapter (selectCommand).Fill(table);
return table; }
3.4.2.4 具體實(shí)現(xiàn)步驟
(1)設(shè)置數(shù)據(jù)源訪問字符串。
<connectionStrings>
<add name="BookConnectionString"connection-String="Data Source=192.168.0.210;Initial Catalog=book;Persist Security Info=True;User ID=sa;Pass word=sa"providerName="System.Data.SqlClient"/>
</connectionStrings>
(2)得到數(shù)據(jù)源訪問字符串,.打開數(shù)據(jù)源連接,進(jìn)行數(shù)據(jù)庫的查詢操作,最后關(guān)閉數(shù)據(jù)源連接。
//通過DBManager類中的getConnection得到數(shù)據(jù)源訪問字符串。
SqlConnection conn=getConnection ();
//打開數(shù)據(jù)源連接
conn.Open ();
//進(jìn)行數(shù)據(jù)庫的查詢操作。
SqlTransaction transaction=conn.BeginTransaction ();
//調(diào)用BookDAO中的方法Query根據(jù)條件在數(shù)據(jù)庫中查詢結(jié)果。
DataSetBook.BookDataTable bookTable = daobook.Query (BookNo,BookName,Publishinghouse);
transaction.Commit();
//關(guān)閉數(shù)據(jù)源連接。
conn.Close ();
MVC模式在目前是一種應(yīng)用比較普遍的設(shè)計(jì)模式,本文提出新的模式融合MVC的設(shè)計(jì)思想和.NET架構(gòu)模式的優(yōu)點(diǎn),并成功地將此種架構(gòu)模式應(yīng)用于樣本選貨廳系統(tǒng)的架構(gòu)設(shè)計(jì)中,通過項(xiàng)目實(shí)踐證明該架構(gòu)模式更加明確了各個(gè)層次的職責(zé),大大減少了各個(gè)層次之間的藕合度,同時(shí)也提高了系統(tǒng)的可擴(kuò)展性和系統(tǒng)的可移植性,新架構(gòu)模式比較適合大型的以及業(yè)務(wù)邏輯復(fù)雜的系統(tǒng),為其它具有同種結(jié)構(gòu)的應(yīng)用系統(tǒng)的研發(fā)提供了一定的參考。
[1]Shaw M,Clements P.The golden age of software architecture[J].IEEE Software,2006,23 (2):31-39.
[2]ZHU Chuanbao,LI Congdong.Information management system of electric power capital construction based on.Net platform [J].Computer Engineering,2006,32 (14):255-257(in Chinese).[朱傳寶,李從東.基于.Net平臺(tái)的電力基建信息管理系統(tǒng) [J].計(jì)算機(jī)工程,2006,32 (14):255-257.]
[3]LUO Jing.Comment on N tier architecture based on.Net [J].Computer Engineering and Design,2006,27 (18):3467-3469(in Chinese). [羅靜.基于 .NET的 N層體系結(jié)構(gòu)的探討[J].計(jì)算機(jī)工程與設(shè)計(jì),2006,27 (18):3467-3469.]
[4] WANG Wen-fa,MA Yan,LI Hong-da.Four-tier structure based on.NET and its application in integrated information system [J].Computer Engineering and Design,2009,30 (4):912-914(in Chinese).[王文發(fā),馬燕,李紅達(dá).基于.NET的四層結(jié)構(gòu)及其在綜合信息系統(tǒng)中的應(yīng)用 [J].計(jì)算機(jī)工程與設(shè)計(jì),2009,30 (4):912-914.]
[5]LIU Ning,LU Rongguo,MIU Wansheng.Continuous software abstracting evolution from MVC architecture pattern to MVC architecture framework [J].Computer Engineering,2008,34 (4):107-110 (in Chinese). [劉寧,陸榮國,繆萬勝.MVC體系架構(gòu)從模式到框架的持續(xù)抽象進(jìn)化 [J].計(jì)算機(jī)工程,2008,34 (4):107-110.]
[6]SUN Zhao-yun,SUN Xiang-ke,SHA Ai-min.Design and implementation of teaching and management systems based on MVC [J].Computer Engineering and Design,2009,30(23):5541-5543 (in Chinese). [孫朝云,孫向科,沙愛民.基于MVC架構(gòu)網(wǎng)絡(luò)教學(xué)管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn) [J].計(jì)算機(jī)工程與設(shè)計(jì),2009,30 (23):5541-5543.]
[7]GONG Wei-h(huán)ua,WANG Chen-guang,YU Huan-jun.Design of company management information system based on MVC and.NET [J].Computer Engineering and Design,2007,28(9):2142-2144 (in Chinese).[龔薇華,王晨光,俞歡軍.基于MVC模式和.NET的公司內(nèi)部管理信息系統(tǒng)設(shè)計(jì) [J].計(jì)算機(jī)工程與設(shè)計(jì),2007,28 (9):2142-2144.]
[8]LI Yuan,CHEN Shi-ping.Application of MVC design pattern in ASP.NET [J].Computer Engineering and Design,2009,30 (13):3180-3184 (in Chinese). [李園,陳世平.MVC設(shè)計(jì)模式在ASP.NET平臺(tái)中的應(yīng)用 [J].計(jì)算機(jī)工程與設(shè)計(jì),2009,30 (13):3180-3184.]
[9]Shams Mukhtar.Applying robustness analysis on the modelview-controller(MVC)architecture in ASP.NET framework,using UML",available [EB/OL ] .http://www.cod,eproject.comL/aspnet/ModelViewController.asp,accessed,2006.
[10]WANG Ya-lin,ZHOU Ying,LEI You-cheng,et al.Shunting trip plan assistant making system based on MVC [J].Computer Engineering,2010,36 (21):257-259 (in Chinese).[王雅琳,周穎,雷友誠,等.基于MVC的調(diào)車作業(yè)計(jì)劃輔助編制系統(tǒng)[J].計(jì)算機(jī)工程,2010,36 (21):257-259.]