亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        面向接口編程在.N E T三層結(jié)構(gòu)系統(tǒng)中的應(yīng)用研究

        2013-09-18 05:42:34劉軍華
        關(guān)鍵詞:表示層調(diào)用代碼

        劉軍華

        (湖南郵電職業(yè)技術(shù)學(xué)院,湖南長沙410015)

        Microsoft.Net Framework是微軟推出的一套新一代開發(fā)平臺。ASP.NET作為其中的一部分,其最大的優(yōu)點除了編譯執(zhí)行速度快外,還有一點就是頁面和代碼分離的編寫方式[1]。這就使得基于.NET平臺可以快速方便地部署B(yǎng)/S三層架構(gòu)Web應(yīng)用程序。然而,傳統(tǒng)的三層架構(gòu)之間一般是表示層引用業(yè)務(wù)邏輯層,業(yè)務(wù)邏輯層再引用數(shù)據(jù)訪問層。另外,在實際項目開發(fā)過程中,由于客戶需求的不確定性,很有可能會因為自身需要而經(jīng)常變化,這就使得程序員必須不停地改寫現(xiàn)有的業(yè)務(wù)代碼。這樣,就形成三個層次之間的依賴性太高,不便于實現(xiàn)層與層之間的可替換,而且還加大了軟件后期測試和維護的難度,影響系統(tǒng)本身的穩(wěn)定性。為了降低三層結(jié)構(gòu)系統(tǒng)中層與層之間的耦合度,增強系統(tǒng)的可拓展和可移植性,本文提出一種面向接口的編程思想應(yīng)用于三層架構(gòu)當(dāng)中,以實現(xiàn)層次之間的無縫結(jié)合,保證系統(tǒng)的通用性、標準化和數(shù)據(jù)庫的可移植性。

        1 接口

        1.1 定義

        外界觀察任何一個對象,最主要關(guān)注對象提供了哪些服務(wù)。至于這些服務(wù)的功能是如何在對象內(nèi)部實現(xiàn)的,外界并不關(guān)心。對象所提供的服務(wù)就是對象所提供的操作,而操作就是方法。因此,對象中所有外界能使用方法集合,構(gòu)成了對象與外界進行交互的“界面”,即接口。簡單地講,接口就是一些方法特征的集合,但不提供實現(xiàn)方式。下面以消息顯示功能為例說明接口的定義:

        public interface ITest{ //定義接口ITest

        void show(string strMsg);//定義接口成員方法show

        }

        以上是定義一個測試接口,相當(dāng)于在程序中設(shè)置一個約定的業(yè)務(wù)規(guī)范。

        1.2 用法

        由于接口只提供方法定義,不提供方法實現(xiàn)。一般交由繼承該接口的類去實現(xiàn),而一個接口可以被多個類繼承,因此,每一個類可以自由決定其實現(xiàn)方式的細節(jié),即是以不同的方式實現(xiàn)同一接口中的同名方法,使其具有完全不同的表現(xiàn)行為[2]。識別接口的代碼可以利用類的對象,因為接口對于這些對象是相同的。.NET允許充分利用“一個接口,多個方法”的多態(tài)性。如:

        public class A:ITest

        {public void show(string strMsg) {

        Console.WriteLine(strMsg+“明天更美好!”);

        }

        }

        public class B:ITest

        {public void show(string strMsg) {

        Console.WriteLine(strMsg+“明天更輝煌!”);

        }

        }

        A、B類都實現(xiàn)了ITest的規(guī)范,但表示行為完全不同。使用.NET接口標識類型,程序運行時,將根據(jù)實際創(chuàng)建的對象類型調(diào)用相應(yīng)的方法實現(xiàn)。public class Program

        {

        static void Main(string[]args) {

        #region沒有用接口時的一種做法

        //A a=new A();

        //a.show(“郵電事業(yè)”);

        //B b=new B();

        //b.show(“郵電事業(yè)”);

        #endregion

        #region有用接口時的一種做法

        ITest test=new A();

        test.show(“郵電事業(yè)”);

        test=new B();

        test.show(“郵電事業(yè)”);

        #endregion

        }

        }

        通過以上代碼可以清楚地看出,沒有使用接口時,編譯時可以通過方法調(diào)用對象的不同區(qū)分出調(diào)用哪個類中的show方法;而使用了接口之后,因為方法調(diào)用對象是同一個,所以必須在程序運行時,通過創(chuàng)建對象的類型來決定調(diào)用哪個類中的show方法。正因為接口的這一特點,為多層結(jié)構(gòu)之間的動態(tài)訪問成為現(xiàn)實,進一步提高了程序的靈活性。

        2 三層體系結(jié)構(gòu)

        2.1 傳統(tǒng)三層結(jié)構(gòu)的簡介

        傳統(tǒng)的三層架構(gòu)包括表示層、業(yè)務(wù)邏輯層和數(shù)據(jù)訪問層。示意圖如圖1所示。這樣做的目的就為了實現(xiàn)軟件的“高內(nèi)聚,低耦合”的架構(gòu)思想。每個層實現(xiàn)應(yīng)用程序一個方面的邏輯功能,通過層與層之間的交互,形成應(yīng)用程序體系架構(gòu),從而實現(xiàn)適應(yīng)于企業(yè)級應(yīng)用的、功能復(fù)雜的應(yīng)用程序[3]。

        圖1 三層架構(gòu)示意圖

        1)表示層:表示位于最外層,是離用戶最近的層。主要完成了兩個任務(wù):一是獲取數(shù)據(jù)并顯示,將從業(yè)務(wù)邏輯層中動態(tài)獲取的數(shù)據(jù)以適當(dāng)?shù)男问斤@示給用戶;二是接收數(shù)據(jù)并傳遞,將用戶從界面輸入的數(shù)據(jù)傳入業(yè)務(wù)邏輯層進行下一步的處理。

        2)業(yè)務(wù)邏輯層:邏輯層是整個分層模型的中間層。主要負責(zé)處理所有來自表示層的用戶請求,并根據(jù)具體應(yīng)用將用戶請求進行組合,形成一種業(yè)務(wù)規(guī)則轉(zhuǎn)換為對數(shù)據(jù)訪問層的請求;同時,將數(shù)據(jù)訪問層返回的結(jié)果提交給表示層。

        3)數(shù)據(jù)訪問層:數(shù)據(jù)訪問層是整個分層體系的最底層。主要實現(xiàn)對數(shù)據(jù)庫進行增刪查改操作。為業(yè)務(wù)邏輯層提供數(shù)據(jù)服務(wù),根據(jù)業(yè)務(wù)邏輯層的要求從數(shù)據(jù)庫中提取數(shù)據(jù)或者修改數(shù)據(jù)庫中的數(shù)據(jù)。由于訪問數(shù)據(jù)庫是系統(tǒng)中頻繁發(fā)生而且最消耗資源的操作,所以在這一層要對數(shù)據(jù)庫訪問進行優(yōu)化,提高系統(tǒng)的性能和可靠性[4]。

        2.2 傳統(tǒng)三層結(jié)構(gòu)的解決方案

        在傳統(tǒng)的三層體系結(jié)構(gòu)中,表示層依賴業(yè)務(wù)邏輯層,業(yè)務(wù)邏輯層依賴數(shù)據(jù)訪問層。例如,單擊表示層界面中某一測試按鈕,就將數(shù)據(jù)庫商品表中的最新10條記錄讀取并顯示在網(wǎng)格控件中。各層次參考代碼如下:

        1) WEB表示層:protected BLL.Products pr=new BLL.Products();

        protected void btnTest_Click(object sender,EventArgs e)

        { //獲取最新商品,顯示到newProducts控件中

        DataTable dt=pr.getNewProducts();

        newProducts.DataSource=dt;

        newProducts.DataBind();

        }

        2)BLL業(yè)務(wù)層代碼片斷:class Products

        {

        public DataTable getNewProducts(){

        string Sqlstr=”select top 10*from products order by id desc”;

        DataTable dt=DBUtility.SQLHelper.ExecuteDT(Sqlstr);

        return dt;

        }

        }

        3)DBUtility數(shù)據(jù)訪問層代碼:class SQLHelper

        {

        public static DataTable ExecuteDT (string Sqlstr)

        {

        sring ConnStr=SQLHelper.GetSqlConnection();

        using (sqlConnection conn=new sqlConnection(ConnStr)) {

        sqlDataAdapter da=new sqlDataAdapter(Sqlstr,conn);

        DataTable dt=new DataTable();

        conn.Open();

        da.Fill(dt);

        return dt;

        }

        }

        }

        通過對上述代碼分析,可以看出層次之間的深度依賴,業(yè)務(wù)邏輯層直接調(diào)用數(shù)據(jù)訪問層的ExecuteDT方法,這時,如果想換一種方式實現(xiàn)數(shù)據(jù)訪問層,那么就必須修改業(yè)務(wù)邏輯層所有相關(guān)代碼。不利于程序的測試、維護以及進一步擴展。

        2.3 應(yīng)用接口的三層結(jié)構(gòu)解決方案

        針對上述傳統(tǒng)三層體系結(jié)構(gòu)出現(xiàn)的問題,以及系統(tǒng)中許多應(yīng)用都是由兩個或更多的類通過彼此合作來實現(xiàn)業(yè)務(wù)邏輯,這使得每個對象都需要與和它合作的對象的引用,如果這個獲取過程要靠自身實現(xiàn),那么將導(dǎo)致代碼高度耦合且難以測試。此時,引入了面向接口編程思想,使上層類不能具體依賴于下層類,而只依賴于下層提供的一個接口。為此,需要在傳統(tǒng)三層結(jié)構(gòu)的基礎(chǔ)上,再添加三個邏輯層,分別是接口層、接口實現(xiàn)層以及工廠層。改進后的多層體系結(jié)構(gòu)如圖2所示。

        圖2 多層體系結(jié)構(gòu)圖

        其中,業(yè)務(wù)邏輯層不再僅依賴于某一具體數(shù)據(jù)訪問層,而是利用.NET中的依賴注入機制以及創(chuàng)建工廠類的方式來動態(tài)加載實現(xiàn)。下面給出各層的引用關(guān)系及功能介紹。

        1)WEB表示層:該層基本保持不變,與業(yè)務(wù)邏輯層之間采用緊耦合。另外,需要在該層中的Web.config文件的節(jié)點下添加節(jié)點。其中,value值為某一數(shù)據(jù)訪問層的程序集名稱,可根據(jù)實際需要靈活修改。

        2)BLL業(yè)務(wù)邏輯層:該層將不再直接引用數(shù)據(jù)訪問層,而是引用IDAL接口層和Factory工廠層。通過工廠層得到程序集指定類的實例并決定調(diào)用哪個數(shù)據(jù)訪問層的數(shù)據(jù)操作方法。

        3)IDAL接口層:該層的設(shè)置目的是使業(yè)務(wù)邏輯與接口實現(xiàn)層(數(shù)據(jù)訪問層)的完全分離,一般僅需引用實體層。該層與具體的數(shù)據(jù)訪問層無關(guān),主要定義了數(shù)據(jù)訪問層必須要實現(xiàn)的業(yè)務(wù)邏輯操作集。即是規(guī)定系統(tǒng)必須要實現(xiàn)的所有業(yè)務(wù)功能。

        4)Factory工廠層:該層引用接口層,主要是完成創(chuàng)建并返回所有的程序集實例。通過讀取web.config里設(shè)置的程序集名稱,加載類的實例,返回給BLL業(yè)務(wù)邏輯層使用。

        5) SQLServerDAL接口實現(xiàn)層:又稱 SQL Server數(shù)據(jù)訪問層。引用 Model和IDAL,且繼承IDAL中的接口,主要是實現(xiàn)接口層IDAL中定義的方法。為了支持更多數(shù)據(jù)庫還可以有OracleDAL、AccessDAL的實現(xiàn),具體使用哪個由Factory工廠層決定。

        6)DBUtility數(shù)據(jù)庫操作層:該層無需引用其它層。它是對ADO.NET數(shù)據(jù)訪問封裝的一個組件類庫,類庫中可以包括多個數(shù)據(jù)庫的訪問類,如SQLServerHelper、OracleHelper等,一般是為上層的具體某一數(shù)據(jù)訪問層提供通用的數(shù)據(jù)庫操作方法。

        7) Entity實體層:該層無需引用其它層。主要擔(dān)負著數(shù)據(jù)在軟件架構(gòu)各層次及模塊間傳遞的職責(zé)。自始至終貫穿于整個軟件框架各層,它是現(xiàn)實生活中實體特性在計算機中的表示,其基本映射策略是每個實體類對應(yīng)一個數(shù)據(jù)庫表,且類成員往往與該數(shù)據(jù)表的表結(jié)構(gòu)一致[5]。

        3 結(jié)束語

        基于ASP.NET三層架構(gòu)的軟件開發(fā)已經(jīng)成為一種流行的開發(fā)模式,然而,傳統(tǒng)的三層架構(gòu)系統(tǒng)各層次之間存在緊耦合問題,針對這一問題,論文提出了一種面向接口編程思想應(yīng)用于三層架構(gòu)當(dāng)中,充分利用.NET中的依賴注入機制以及創(chuàng)建工廠類的方式來動態(tài)加載實現(xiàn)。實踐證明,應(yīng)用接口的多層架構(gòu)的開發(fā)模式不僅可以降低層次間的依賴關(guān)系,有利于標準化和開發(fā)人員工作的分配。還使得程序的靈活性更高,有利于各層邏輯的復(fù)用以及軟件后期維護和擴展。

        [1]宋磊.基于ASP.NET的三層結(jié)構(gòu)實現(xiàn)方法研究[J].黑龍江科技信息,2010(15).

        [2]徐楓.ASP.NET三層架構(gòu)體系分析與應(yīng)用[J].數(shù)據(jù)技術(shù)與應(yīng)用,2011(8):109-110.

        [3]華銓平.抽象工廠設(shè)計模式在三層結(jié)構(gòu)開發(fā)中的應(yīng)用[J].大慶石油學(xué)院學(xué)報,2009,3(33).

        [4]劉軍華,張麗敏.基于數(shù)據(jù)字典的實體類的設(shè)計與實現(xiàn)[J].湖南工業(yè)職業(yè)技術(shù)學(xué)院學(xué)報,2012(5).

        猜你喜歡
        表示層調(diào)用代碼
        核電項目物項調(diào)用管理的應(yīng)用研究
        基于Spring的企業(yè)級Web項目架構(gòu)設(shè)計研究
        軟件(2019年6期)2019-10-08 06:27:21
        LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
        創(chuàng)世代碼
        動漫星空(2018年11期)2018-10-26 02:24:02
        創(chuàng)世代碼
        動漫星空(2018年2期)2018-10-26 02:11:00
        創(chuàng)世代碼
        動漫星空(2018年9期)2018-10-26 01:16:48
        創(chuàng)世代碼
        動漫星空(2018年5期)2018-10-26 01:15:02
        基于系統(tǒng)調(diào)用的惡意軟件檢測技術(shù)研究
        ASP.NET三層構(gòu)架解析
        基于SSH框架科研管理系統(tǒng)的設(shè)計
        久久老子午夜精品无码| 国产日产综合| 日本午夜免费福利视频| 北岛玲日韩精品一区二区三区 | 国产精品美女主播在线| 中文有码无码人妻在线| 丰满熟女人妻中文字幕免费| 亚洲另类激情专区小说婷婷久 | 亚洲欧美精品伊人久久| caoporon国产超碰公开| 日韩美女av一区二区三区四区 | 欧美a级毛欧美1级a大片免费播放| 国产男女猛烈无遮挡免费视频| 日本黄色一区二区三区视频| 亚洲97成人在线视频| 欧美乱妇高清无乱码在线观看| 精品欧美在线| 亚洲视一区二区三区四区| 国产内射爽爽大片| 久久久久久伊人高潮影院| a级国产精品片在线观看| 日本一区二区不卡二区| 手机福利视频| 精品国产看高清国产毛片| 性视频毛茸茸女性一区二区| 变态调教一区二区三区女同| 亚洲精品无码专区在线| 日本专区一区二区三区| 国产老熟女伦老熟妇露脸| 女人和拘做受全程看视频| 五月天欧美精品在线观看| av免费网站不卡观看| 人妻 丝袜美腿 中文字幕| 国产亚洲视频在线观看网址| 亚洲国产免费公开在线视频 | 激情综合色五月丁香六月欧美| 久久久精品久久日韩一区综合| av毛片一区二区少妇颜射| 午夜被窝精品国产亚洲av香蕉 | 亚洲AV无码一区二区二三区我| 极品精品视频在线观看|