• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于.NET的多數(shù)據(jù)源系統(tǒng)開(kāi)發(fā)與應(yīng)用

      2013-04-29 17:24:56趙愛(ài)美
      計(jì)算機(jī)時(shí)代 2013年5期

      趙愛(ài)美

      摘 要: 許多系統(tǒng)都用到了多個(gè)不同類(lèi)型的數(shù)據(jù)源,或在不同類(lèi)型數(shù)據(jù)源之間進(jìn)行切換。如果利用原有.NET三層架構(gòu),當(dāng)增加或改變一種不同類(lèi)型的數(shù)據(jù)源時(shí),需要修改大量的代碼。為此,基于.NET框架,采用簡(jiǎn)單工廠(chǎng)模式和反射機(jī)制對(duì)原有的三層架構(gòu)進(jìn)行了改進(jìn),使系統(tǒng)在不改變界面層和業(yè)務(wù)邏輯層的情況下,實(shí)現(xiàn)了數(shù)據(jù)源的擴(kuò)展。運(yùn)用改進(jìn)的方法以教學(xué)資源庫(kù)系統(tǒng)為例,以C#語(yǔ)言進(jìn)行了實(shí)現(xiàn)。

      關(guān)鍵詞: .NET; 簡(jiǎn)單工廠(chǎng)模式; 反射; 多數(shù)據(jù)源

      中圖分類(lèi)號(hào):TP311 文獻(xiàn)標(biāo)志碼:A 文章編號(hào):1006-8228(2013)05-43-02

      Development and application of multi-data source system based on .NET

      Zhao Aimei

      (Shandong Foreign Trade Vocational College, Qingdao, Shandong 266071, China)

      Abstract: Numerous systems use various types of data sources, or they switch between different types of data sources. If using the original .NET three-layer architecture, when adding or changing a different type of data source, considerable codes needs modifying. Therefore, based on .NET framework, simple factory pattern and reflection on the three-layer architecture is applied to improve the original system. The system is adjusted to adapt to the new different data source without changing the interface layer and business logic layer. In this paper, take teaching resource library system using improved method as an example, the C# language is realized.

      Key words: .NET; simple factory pattern; refrection; multi-data source

      0 引言

      應(yīng)用程序能夠支持多種不同類(lèi)型數(shù)據(jù)庫(kù),這對(duì)程序的擴(kuò)展,以及和現(xiàn)有系統(tǒng)共用數(shù)據(jù)庫(kù)都有很大的益處。以教學(xué)資源庫(kù)系統(tǒng)為例,一方面教學(xué)資源庫(kù)建設(shè)是一個(gè)長(zhǎng)期的系統(tǒng)工程,在教學(xué)資源庫(kù)系統(tǒng)建成后應(yīng)考慮系統(tǒng)的可擴(kuò)展性;另一方面教學(xué)資源庫(kù)系統(tǒng)應(yīng)充分利用現(xiàn)有數(shù)據(jù)庫(kù)資源。一直以來(lái)國(guó)家非常重視精品課程的建設(shè),各院校都有了一定數(shù)量的國(guó)家級(jí)、省級(jí)和院級(jí)的精品課程,這對(duì)提高教學(xué)質(zhì)量,提高學(xué)生的素質(zhì)無(wú)疑起到了很大的促進(jìn)作用。但這些精品課程網(wǎng)站采用了SQL Server、Aceess、Oracle等不同類(lèi)型的數(shù)據(jù)庫(kù),如果摒棄現(xiàn)有的數(shù)據(jù)庫(kù),在資源上會(huì)有很大的浪費(fèi),因此對(duì)現(xiàn)有的多數(shù)據(jù)源進(jìn)行集成是我們急需研究的課題。

      本文對(duì)現(xiàn)有三層Web應(yīng)用程序架構(gòu)加以改造,在三層架構(gòu)中的數(shù)據(jù)訪(fǎng)問(wèn)層加入了.NET簡(jiǎn)單工廠(chǎng)模式和反射機(jī)制,使系統(tǒng)在無(wú)需修改界面層和業(yè)務(wù)邏輯層源代碼,少量修改或增加數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)層源代碼的情況下就可以實(shí)現(xiàn)在不同類(lèi)型數(shù)據(jù)源之間的切換。改造后的系統(tǒng)在不影響現(xiàn)有性能,也不會(huì)帶來(lái)新缺陷的前提下,擴(kuò)展了對(duì)新數(shù)據(jù)源的適應(yīng)性。

      1 目前架構(gòu)存在的問(wèn)題

      目前軟件架構(gòu)普遍采用三層結(jié)構(gòu)化設(shè)計(jì),即將系統(tǒng)劃分為界面層(User Interface)、業(yè)務(wù)邏輯層(Business Logic Layer)和數(shù)據(jù)訪(fǎng)問(wèn)層(Data Access Layer)。三層架構(gòu)體現(xiàn)了“高內(nèi)聚,低耦合”的思想,這對(duì)權(quán)責(zé)劃分、軟件的復(fù)用、后期維護(hù)等方面都有很大的益處。

      但當(dāng)系統(tǒng)需要多種數(shù)據(jù)源或需要在多種數(shù)據(jù)源之間進(jìn)行切換時(shí)表現(xiàn)出的可移植性很差。如圖1所示,當(dāng)系統(tǒng)需要訪(fǎng)問(wèn)SQL Server數(shù)據(jù)庫(kù)時(shí),在數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)層需要直接使用一些諸如SqlConnection、SqlCommand等對(duì)象,業(yè)務(wù)邏輯層為了使用這些服務(wù),必須引用具體的數(shù)據(jù)訪(fǎng)問(wèn)類(lèi)(數(shù)據(jù)訪(fǎng)問(wèn)層)的對(duì)象。假設(shè)系統(tǒng)需要切換成Accesss數(shù)據(jù)庫(kù),數(shù)據(jù)訪(fǎng)問(wèn)層則使用OleDbConnection、OleDbCommand等對(duì)象,對(duì)應(yīng)的業(yè)務(wù)邏輯層也需要做相應(yīng)改變。因此運(yùn)用原有三層架構(gòu)數(shù)據(jù)訪(fǎng)問(wèn)層雖然封裝了數(shù)據(jù)訪(fǎng)問(wèn)的功能,并為業(yè)務(wù)邏輯層提供了服務(wù),但當(dāng)系統(tǒng)需要增加或修改某種數(shù)據(jù)源時(shí)必須修改或增加大量代碼。這增大了層間的耦合性,同時(shí)減弱了業(yè)務(wù)邏輯層的內(nèi)聚力。因此我們需要采用某種模式或機(jī)制,使業(yè)務(wù)邏輯層專(zhuān)注于使用下層提供的數(shù)據(jù)訪(fǎng)問(wèn)服務(wù)而不必管是由哪種數(shù)據(jù)源來(lái)提供這種服務(wù)的。

      [界面層(UI)][業(yè)務(wù)邏輯層(BLL)][SQLServerBLL][AccessBLL][數(shù)據(jù)訪(fǎng)問(wèn)層(DAL)][SQLServerDAL

      SqlConnection等][AccessDAL

      OleDbConnection等] [SQL Server

      數(shù)據(jù)庫(kù)] [Access

      數(shù)據(jù)庫(kù)]

      圖1 修改前的三層架構(gòu)

      2 解決方法:三層架構(gòu)+簡(jiǎn)單工廠(chǎng)模式+反射機(jī)制

      在原有三層架構(gòu)的基礎(chǔ)上,在數(shù)據(jù)訪(fǎng)問(wèn)層建立一個(gè)抽象工廠(chǎng)并抽象出一個(gè)通用接口,從而可以在不改變業(yè)務(wù)邏輯層的情況下有不同的數(shù)據(jù)訪(fǎng)問(wèn)層實(shí)現(xiàn),比如一個(gè)系統(tǒng)同時(shí)支持Access,SQL Server,Oralce數(shù)據(jù)庫(kù)的情況,我們只要設(shè)計(jì)一個(gè)界面層和業(yè)務(wù)邏輯層,就可以實(shí)現(xiàn)多個(gè)數(shù)據(jù)訪(fǎng)問(wèn)層,從而使同一個(gè)系統(tǒng)支持多種數(shù)據(jù)源。

      [業(yè)務(wù)邏輯層(BLL)][IDAL][DALFacotry][數(shù)據(jù)訪(fǎng)問(wèn)層

      (DAL)][SQLServerDAL

      SqlConnection等][AccessDAL

      OleDbConnection等] [SQL Server

      數(shù)據(jù)庫(kù)] [Access

      數(shù)據(jù)庫(kù)][界面層(UI)]

      圖2 修改后的三層架構(gòu)

      2.1 數(shù)據(jù)訪(fǎng)問(wèn)層接口

      .NET中的接口提供一組公共方法和屬性,不需要具體實(shí)現(xiàn),只是告訴繼承它的類(lèi)至少要實(shí)現(xiàn)哪些功能,繼承它的類(lèi)可以增加自己的方法。如果增加不同數(shù)據(jù)源,只需要在數(shù)據(jù)訪(fǎng)問(wèn)層增加一個(gè)類(lèi)即可,不會(huì)影響界面層和業(yè)務(wù)邏輯層,這對(duì)系統(tǒng)的擴(kuò)展有極大的用處。

      圖2中IDAL是數(shù)據(jù)訪(fǎng)問(wèn)層接口,這樣做的好處是使業(yè)務(wù)邏輯層調(diào)用數(shù)據(jù)訪(fǎng)問(wèn)層接口即可實(shí)現(xiàn)數(shù)據(jù)庫(kù)的增刪改等操作。業(yè)務(wù)邏輯層與數(shù)據(jù)訪(fǎng)問(wèn)層是一種抽象依賴(lài)的關(guān)系,而非具體依賴(lài),以教學(xué)資源庫(kù)系統(tǒng)的新聞為例,在該接口中有增加、刪除、修改數(shù)據(jù)庫(kù)的三個(gè)方法,特定的實(shí)現(xiàn)由具體數(shù)據(jù)庫(kù)類(lèi)完成。

      namespace TeachRes.IDAL

      { public interface INews

      { bool addNews(News New);

      bool delNews(int NewsID);

      bool updateNews(News New);

      }

      }

      2.2 簡(jiǎn)單工廠(chǎng)模式和反射機(jī)制

      簡(jiǎn)單工廠(chǎng)模式屬于創(chuàng)建型模式[1,2],又叫做靜態(tài)工廠(chǎng)方法(Static Factory Method)模式,是由一個(gè)工廠(chǎng)對(duì)象決定創(chuàng)建出哪一種產(chǎn)品類(lèi)的實(shí)例。圖2中DALFactory是簡(jiǎn)單工廠(chǎng)類(lèi),基本思想是讓業(yè)務(wù)邏輯層(BLL)僅僅知道工廠(chǎng)類(lèi), 并把產(chǎn)品以接口形式返回給業(yè)務(wù)邏輯層, 把對(duì)象的創(chuàng)建細(xì)節(jié)對(duì)業(yè)務(wù)邏輯層完全屏蔽。在該類(lèi)中根據(jù)用戶(hù)配置返回?cái)?shù)據(jù)庫(kù)的類(lèi)名,通過(guò)類(lèi)反射創(chuàng)建出類(lèi)的實(shí)例。

      反射[3]是在運(yùn)行時(shí)動(dòng)態(tài)分析、操縱和創(chuàng)建對(duì)象的機(jī)制,它是一種動(dòng)態(tài)實(shí)例化類(lèi)型的語(yǔ)言機(jī)制,利用反射實(shí)現(xiàn)動(dòng)態(tài)類(lèi)型實(shí)例化的關(guān)鍵在于獲得類(lèi)型名稱(chēng)。類(lèi)型是程序集(Assembly)的一部分,因此完整的類(lèi)型名稱(chēng)不僅要有類(lèi)所在名稱(chēng)空間、類(lèi)名,還要有所在程序集的名稱(chēng)。通過(guò)反射機(jī)制可以得到一個(gè)給定程序集的所有類(lèi)型列表。

      以教學(xué)資源庫(kù)系統(tǒng)為例[4],編碼如下。

      public sealed class DALFactory

      { //從Web.Config中讀取需要連接的數(shù)據(jù)源,可在Web.Config配

      置多個(gè),在這里動(dòng)態(tài)切換

      private static readonly string path=System.Configuration

      .ConfigurationManager.AppSettings["WebDAL"];

      //創(chuàng)建數(shù)據(jù)訪(fǎng)問(wèn)類(lèi) 并以接口的形式返回:INews

      public static INews createINews()

      { string classname="TeachRes."+path+".NewsDAL";

      return (INews)Assembly.Load(path)

      .CreateInstance(classname);

      }

      }

      2.3 可以根據(jù)需要?jiǎng)?chuàng)建多個(gè)數(shù)據(jù)訪(fǎng)問(wèn)層,這里假設(shè)有兩個(gè)分別支持SQL Server和Access

      ⑴ 訪(fǎng)問(wèn)SQL Server數(shù)據(jù)庫(kù)

      namespace TeachRes.SQLServerDAL

      { public class NewsDAL:INews

      { public bool addNews(News New)

      { //SQL實(shí)現(xiàn),訪(fǎng)問(wèn)SQL Server數(shù)據(jù)庫(kù)

      }

      }

      }

      ⑵ 訪(fǎng)問(wèn)Access數(shù)據(jù)庫(kù)

      namespace TeachRes.AccessDAL

      { public class NewsDAL:INews

      { public bool addNews(News New)

      { //OLEDB實(shí)現(xiàn),訪(fǎng)問(wèn)access數(shù)據(jù)庫(kù)

      }

      }

      }

      2.4 業(yè)務(wù)邏輯層訪(fǎng)問(wèn)方式

      namespace TeachRes.BLL

      { public class BNews

      { private INews iNews=null;

      public BNews()

      { iNews=DALFactory.createINews();

      }

      public bool addNews(News New)

      { return iNews.addNews(New);

      }

      }

      }

      3 結(jié)束語(yǔ)

      本文在經(jīng)典的三層架構(gòu)基礎(chǔ)上,提出了三層架構(gòu)+簡(jiǎn)單工廠(chǎng)模式+反射機(jī)制的方式開(kāi)發(fā)應(yīng)用程序。利用改進(jìn)的三層架構(gòu)可以在不改變界面層和業(yè)務(wù)邏輯層的情況下,實(shí)現(xiàn)多數(shù)據(jù)源的訪(fǎng)問(wèn)或切換。本解決方案的提出將有利于應(yīng)用程序的進(jìn)一步擴(kuò)展,可實(shí)現(xiàn)代碼的復(fù)用。同時(shí)本文以教學(xué)資源庫(kù)系統(tǒng)的開(kāi)發(fā)為例給出了核心實(shí)現(xiàn)方式,這對(duì)其他復(fù)雜系統(tǒng)的開(kāi)發(fā)有極大的借鑒意義。

      參考文獻(xiàn):

      [1] James W. Cooper.C#設(shè)計(jì)模式[M].電子工業(yè)出版社,2011.

      [2] Alan Shalloway James R. Trott.Design Patterns Explained[M].中國(guó)

      電力出版社,2001.

      [3] Robert C. Martin.敏捷軟件開(kāi)發(fā)-原則、模式與實(shí)踐[M].清華大學(xué)出

      版社,2003.

      [4] Don Box, Chris Sells. .NET本質(zhì)論 第1卷:公共語(yǔ)言運(yùn)行庫(kù)[M].中國(guó)

      電力出版社,2004.

      [5] 高雅俠,鄒海榮.計(jì)算機(jī)網(wǎng)絡(luò)教學(xué)平臺(tái)的開(kāi)發(fā)與設(shè)計(jì)[J].計(jì)算機(jī)時(shí)代,

      2012.8:13-15

      鲁山县| 哈密市| 涿鹿县| 西和县| 亚东县| 根河市| 始兴县| 桐柏县| 琼海市| 汉源县| 驻马店市| 和平县| 麦盖提县| 孝感市| 历史| 杨浦区| 长白| 司法| 香河县| 内黄县| 静乐县| 崇文区| 齐齐哈尔市| 垫江县| 永泰县| 瑞丽市| 余干县| 离岛区| 同仁县| 岐山县| 襄垣县| 津南区| 金川县| 海口市| 明星| 深圳市| 调兵山市| 金门县| 县级市| 湛江市| 梨树县|