論基于ASP.NET的企業(yè)進(jìn)銷存儲管理信息系統(tǒng)的設(shè)計與實現(xiàn)
論基于ASP.NET的企業(yè)進(jìn)銷存儲管理信息系統(tǒng)的設(shè)計與實現(xiàn)
1 背景
在應(yīng)用系統(tǒng)開發(fā)過程中,C/S兩層體系結(jié)構(gòu)的開發(fā)模式得到了廣泛的應(yīng)用。其應(yīng)用程序邏輯通常只分布在客戶和服務(wù)器兩端,它采用由客戶端發(fā)出數(shù)據(jù)資源訪問請求,然后服務(wù)器端將結(jié)果返回到客戶端的信息傳遞機(jī)制,對系統(tǒng)的性能、升級與維護(hù)等有很大制約。隨著面向?qū)ο蠹夹g(shù)、分層建模技術(shù)和網(wǎng)絡(luò)瀏覽器導(dǎo)航技術(shù)的逐步成熟,B/S模式的多層應(yīng)用體系結(jié)構(gòu)得到了越來越多的應(yīng)用。應(yīng)用系統(tǒng)開發(fā)模式從原來的兩層結(jié)構(gòu)向三層甚至N層結(jié)構(gòu)的轉(zhuǎn)變,主要是在客戶端和服務(wù)器之間加入了一個被稱為“應(yīng)用服務(wù)器”的一層或多層應(yīng)用服務(wù)程序,使原來集成表示層處理和業(yè)務(wù)邏輯處理的臃腫胖客戶端得以釋放,演變?yōu)楸硎緦雍蜆I(yè)務(wù)邏輯層分開實現(xiàn)的模式,使開發(fā)人員在保證為用戶提供必要功能操作的簡潔界面前提下,將主要精力集中在系統(tǒng)核心業(yè)務(wù)邏輯的分析、設(shè)計和開發(fā)上;從C/S模式到B/S模式的轉(zhuǎn)變,使得原客戶端維護(hù)工作發(fā)生了翻天覆地的變化。C/S模式應(yīng)用程序的客戶端要求管理人員在每個客戶端計算機(jī)系統(tǒng)上安裝客戶端程序,當(dāng)需要維護(hù)系統(tǒng)時,管理人員需要到客戶端的用戶那里一個一個地解決問題;而B/S模式只需用戶在自己的電腦系統(tǒng)中安裝瀏覽器軟件(該軟件通常在操作系統(tǒng)中可附帶自動安裝),應(yīng)用系統(tǒng)的全部程序可以集中放在服務(wù)器中由管理人員統(tǒng)一管理維護(hù),這可以大大節(jié)省系統(tǒng)維護(hù)的開銷。在多層結(jié)構(gòu)模式的B/S系統(tǒng)架構(gòu)中,B/S的三層結(jié)構(gòu)是目前流行的架構(gòu)設(shè)計模式,它由表示層、業(yè)務(wù)邏輯層和數(shù)據(jù)訪問層3個層次結(jié)構(gòu)組成。微軟公司的ASP.NET充分地發(fā)揮了面向?qū)ο蟮募夹g(shù)特點,能輕松實現(xiàn)三層結(jié)構(gòu)的B/S系統(tǒng)架構(gòu),并在很大程度上提高開發(fā)效率,增強(qiáng)系統(tǒng)的可維護(hù)性和擴(kuò)展性。本文研究如何基于ASP.NET(C#)技術(shù)實現(xiàn)三層結(jié)構(gòu)應(yīng)用系統(tǒng)的設(shè)計。
2 三層結(jié)構(gòu)系統(tǒng)模型
選擇合適的系統(tǒng)體系架構(gòu)是一項影響整個應(yīng)用系統(tǒng)設(shè)計的關(guān)鍵工作。架構(gòu)設(shè)計主要完成定義和說明包(子系統(tǒng)),以及包與包之間的依賴關(guān)系與通信機(jī)制。B/S模式的三層結(jié)構(gòu)是一種簡單、成熟,并得到普遍應(yīng)用的應(yīng)用程序架構(gòu),它將應(yīng)用程序結(jié)構(gòu)劃為分3個相對獨立層,包括用戶表示層、業(yè)務(wù)邏輯層和數(shù)據(jù)訪問層。每一層只實現(xiàn)該層內(nèi)相對獨立的功能,而當(dāng)任何一層發(fā)生變化時,只要保持層間接口關(guān)系不變,則其他各層都不會受到影響。三層結(jié)構(gòu)是一種嚴(yán)格的分層協(xié)作, 即數(shù)據(jù)訪問層只能被業(yè)務(wù)邏輯層訪問, 業(yè)務(wù)邏輯層只能被表示層訪問。用戶通過表示層將請求傳送給業(yè)務(wù)邏輯層, 業(yè)務(wù)邏輯層完成相關(guān)業(yè)務(wù)規(guī)則和邏輯, 并通過數(shù)據(jù)訪問層訪問數(shù)據(jù)庫獲得數(shù)據(jù), 然后按照相反的順序依次返回, 將數(shù)據(jù)顯示在用戶界面層。
2.1 用戶表示層(USL)
用戶表示層也叫用戶界面層,封裝人機(jī)界面的所有表單和組件,是應(yīng)用系統(tǒng)與系統(tǒng)用戶之間的直接接口。主要用于顯示由業(yè)務(wù)邏輯層動態(tài)傳送過來的數(shù)據(jù)信息,結(jié)合使用相應(yīng)的HTML標(biāo)記和樣式表定義來實現(xiàn);用戶錄入數(shù)據(jù)信息并通過簡單的校驗后,經(jīng)由數(shù)據(jù)接口傳送給業(yè)務(wù)邏輯層下載論文。
2.2 業(yè)務(wù)邏輯層(BLL)
業(yè)務(wù)邏輯層主要完成對應(yīng)用系統(tǒng)相關(guān)業(yè)務(wù)規(guī)則和邏輯的封裝,在為用戶表示層訪問提供功能調(diào)用的同時,它又通過調(diào)用數(shù)據(jù)訪問層所提供的功能來訪問數(shù)據(jù)庫。業(yè)務(wù)邏輯層主要根據(jù)系統(tǒng)設(shè)計的需要,通過構(gòu)建系統(tǒng)的關(guān)鍵對象類,實現(xiàn)系統(tǒng)的大部分邏輯控制功能。
2.3 數(shù)據(jù)訪問層(DAL)
數(shù)據(jù)訪問層只能被業(yè)務(wù)邏輯層訪問,并且系統(tǒng)只通過它訪問數(shù)據(jù)庫來獲取數(shù)據(jù)。當(dāng)數(shù)據(jù)訪問層根據(jù)業(yè)務(wù)邏輯層的要求與數(shù)據(jù)庫進(jìn)行交互時,主要完成從數(shù)據(jù)庫中提取數(shù)據(jù)庫記錄的查詢和插入、修改與刪除數(shù)據(jù)庫記錄的更新數(shù)據(jù)功能。眾所周知,數(shù)據(jù)庫訪問是動態(tài)信息管理應(yīng)用系統(tǒng)中最頻繁、最消耗資源的操作,所以必須優(yōu)化對數(shù)據(jù)庫的訪問策略,以提高系統(tǒng)的性能和可靠性。B/S模式的三層結(jié)構(gòu)是一種嚴(yán)格的分層定義,它首先將應(yīng)用系統(tǒng)復(fù)雜的開發(fā)工作劃分為相對簡單的小分塊,然后在每一層中只實現(xiàn)系統(tǒng)相應(yīng)層的功能設(shè)計,層間的交互由相鄰層對應(yīng)的功能模塊進(jìn)行調(diào)用,信息傳遞只由接口進(jìn)行傳送。
數(shù)據(jù)訪問層一般由兩部分組成:業(yè)務(wù)實體和數(shù)據(jù)操作。Microsoft公司提供的標(biāo)準(zhǔn)術(shù)語稱為業(yè)務(wù)實體組件和數(shù)據(jù)訪問邏輯組件。在三層結(jié)構(gòu)中,數(shù)據(jù)訪問層是唯一與數(shù)據(jù)庫打交道的層,所以該層的設(shè)計要盡量以提高速度和安全為目標(biāo)。
業(yè)務(wù)實體組件體現(xiàn)的是現(xiàn)實生活中的業(yè)務(wù)數(shù)據(jù),而數(shù)據(jù)訪問邏輯組件則是在數(shù)據(jù)庫中檢索數(shù)據(jù)或把業(yè)務(wù)實體數(shù)據(jù)保存到數(shù)據(jù)庫。
2.3.1 數(shù)據(jù)訪問邏輯組件
數(shù)據(jù)訪問邏輯組件,簡單來講就是實現(xiàn)對數(shù)據(jù)庫中數(shù)據(jù)進(jìn)行操作的組件,以及實現(xiàn)數(shù)據(jù)相關(guān)操作所需的業(yè)務(wù)邏輯。數(shù)據(jù)訪問邏輯組件的主要功能如下:
(1)在數(shù)據(jù)庫中添加記錄。
(2)讀取數(shù)據(jù)庫的記錄,并以業(yè)務(wù)實體數(shù)據(jù)的形式返回給調(diào)用者。
(3)將調(diào)用者修改的業(yè)務(wù)實體數(shù)據(jù)更新到數(shù)據(jù)庫。
(4)刪除數(shù)據(jù)庫中的記錄。
并不是所有的數(shù)據(jù)庫表都由一個數(shù)據(jù)訪問邏輯組件操作,其實,一個邏輯組件封裝的是對數(shù)據(jù)庫中的一個表或一組相關(guān)的表的操作。
2.3.2業(yè)務(wù)實體組件
業(yè)務(wù)實體是以數(shù)據(jù)的形式表示現(xiàn)實生活中的業(yè)務(wù)模型。業(yè)務(wù)實體的屬性與數(shù)據(jù)庫中的表有一一對應(yīng)的關(guān)系,每個數(shù)據(jù)庫訪問組件都對應(yīng)一個業(yè)務(wù)實體。
2.3.2.1業(yè)務(wù)實體的特點
(1)提供對業(yè)務(wù)數(shù)據(jù)及相關(guān)功能進(jìn)行編程訪問。
(2)可以使用具有復(fù)雜架構(gòu)的數(shù)據(jù)來創(chuàng)建,這些復(fù)雜的數(shù)據(jù)一般表現(xiàn)為數(shù)據(jù)庫中可以作為業(yè)務(wù)流程中的輸入輸出的相關(guān)聯(lián)的多個表。
(3)可以作為業(yè)務(wù)流程中的輸入輸出參數(shù)來傳遞整體數(shù)據(jù)。
(4)業(yè)務(wù)實體不參與事務(wù)處理,只是事務(wù)處理過程中的一部分?jǐn)?shù)據(jù),事務(wù)處理由數(shù)據(jù)訪問層完成。
2.3.2.2業(yè)務(wù)實體的表現(xiàn)形式
在應(yīng)用程序中,業(yè)務(wù)實體有很多種表現(xiàn)方式。有以數(shù)據(jù)為中心的表示方式,也有面向?qū)ο蟮谋硎痉绞?。具體包括以下幾種方式。
(1)XML:使用XML字符串或XML文檔對象模型來表示。
(2)DataSet:DataSet是緩存在內(nèi)存中一個或多個表的集合,一般來源于數(shù)據(jù)庫或XML文檔。
(3)自定義業(yè)務(wù)實體組件:一種自定義的類庫,用于保存業(yè)務(wù)流程中的數(shù)據(jù)。包含一些數(shù)據(jù)表中的字段和其他公共屬性。
本文采用第三種方法:自定義業(yè)務(wù)實體組件。業(yè)務(wù)實體可以被數(shù)據(jù)訪問組件調(diào)用,也可以被業(yè)務(wù)邏輯層調(diào)用,通常的三層結(jié)構(gòu)將業(yè)務(wù)實體包括在數(shù)據(jù)訪問層中,如圖1所示。
有的系統(tǒng)把業(yè)務(wù)實體單獨放在一層中,如圖2所示,這兩種方式都正確,關(guān)鍵要看設(shè)計者的意圖以及實際的開發(fā)項目,本文采用第二種形式。
3 三層結(jié)構(gòu)優(yōu)缺點
3.1 三層結(jié)構(gòu)的優(yōu)點
(1)提高程序的可維護(hù)性:三層架構(gòu)層次分明,一旦運(yùn)行出現(xiàn)問題,可以快速判斷是哪一層的問題,利于維護(hù)。
(2)可以合理開發(fā):因為三層之間除了調(diào)用沒有其他關(guān)聯(lián),只需要先把三層之間的接口定義好,程序員可以并行開發(fā),提高了開發(fā)的速度。
(3)提高系統(tǒng)的安全性:每層都有安全設(shè)置,即使表示層被攻破,下一層的安全還有保障。
(4)提高系統(tǒng)的擴(kuò)展性:三層結(jié)構(gòu)最大的好處是在擴(kuò)展應(yīng)用系統(tǒng)時,改動的部分不會影響到大局,比如要給這個系統(tǒng)增加Oracle數(shù)據(jù)庫的功能,只需要改動數(shù)據(jù)層就可以了,其他層保持不變。
3.2 三層結(jié)構(gòu)的缺點
三層結(jié)構(gòu)開發(fā)模式的一個非常明顯的缺點就是其執(zhí)行速度不夠快。當(dāng)然這個“執(zhí)行速度”是相對于非分層的應(yīng)用程序來說的。 “三層結(jié)構(gòu)”開發(fā)模式,不適用于對執(zhí)行速度要求過于苛刻的系統(tǒng),如在線訂票、在線炒股等。它比較適用于商業(yè)規(guī)則容易變化的系統(tǒng)。
4 ASP.NET的三層設(shè)計和實現(xiàn)
基于以上對B/S三層結(jié)構(gòu)的介紹,下面引用一個基于ASP.NET技術(shù)的B/S三層結(jié)構(gòu)模式的進(jìn)銷存管理系統(tǒng)的開發(fā)設(shè)計方法,介紹ASP.NET應(yīng)用系統(tǒng)三層結(jié)構(gòu)的具體實現(xiàn)。ASP.NET的三層結(jié)構(gòu)應(yīng)用程序目錄結(jié)構(gòu)如圖3所示,目錄BLL業(yè)務(wù)邏輯層,DAL為數(shù)據(jù)訪問層,DBUtility存儲的是一些常用的類和方法,Model為業(yè)務(wù)實體層,JXC為用戶表示層。
(1)Model(業(yè)務(wù)實體層):都是一些屬性,業(yè)務(wù)實體的屬性與數(shù)據(jù)庫中的表為一一對應(yīng)的關(guān)系,每個數(shù)據(jù)庫訪問邏輯組件對應(yīng)一個業(yè)務(wù)實體。
(2)DBUtility公共類:數(shù)據(jù)庫操作的一些類庫,其中包括pubconstant.cs類(實現(xiàn)從web.config獲取數(shù)據(jù)庫連接字符串)、DbHelperSQL.cs 數(shù)據(jù)庫助手類、對數(shù)據(jù)訪問的類。
(3)DAL(數(shù)據(jù)訪問層)的實現(xiàn):對應(yīng)著數(shù)據(jù)庫中的表,實現(xiàn)對表常用的操作,如增刪改等常用操作。
(4)BLL(業(yè)務(wù)邏輯層)的實現(xiàn):創(chuàng)建每個類,每個類對應(yīng)著數(shù)據(jù)庫的每張表,完成數(shù)據(jù)表的一些業(yè)務(wù)邏輯,完成對數(shù)據(jù)層的調(diào)用過程。
(5)JXC(用戶表示層):界面的編寫。
5 總結(jié)
以上介紹了應(yīng)用基于ASP.NET技術(shù)的三層結(jié)構(gòu)模式來設(shè)計和實現(xiàn)B/S結(jié)構(gòu)應(yīng)用系統(tǒng)的總體方法。通過介紹示例的具體分層規(guī)劃,體現(xiàn)了利用ASP.NET技術(shù)編寫三層結(jié)構(gòu)的清晰邏輯,并有效地實現(xiàn)了系統(tǒng)中各功能層的相對獨立,使系統(tǒng)具有更強(qiáng)大的靈活性、可擴(kuò)展性和可維護(hù)性;而且系統(tǒng)分層管理使分級分布部署成為現(xiàn)實,可極大地提高系統(tǒng)的性能和安全性,滿足日益壯大的B/S模式應(yīng)用系統(tǒng)的需求。借鑒此方法還可以開發(fā)企業(yè)其他各類應(yīng)用系統(tǒng),提高企業(yè)的信息化水平。