999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于.NET的多數據源系統開發與應用

2013-04-29 17:24:56趙愛美
計算機時代 2013年5期

趙愛美

摘 要: 許多系統都用到了多個不同類型的數據源,或在不同類型數據源之間進行切換。如果利用原有.NET三層架構,當增加或改變一種不同類型的數據源時,需要修改大量的代碼。為此,基于.NET框架,采用簡單工廠模式和反射機制對原有的三層架構進行了改進,使系統在不改變界面層和業務邏輯層的情況下,實現了數據源的擴展。運用改進的方法以教學資源庫系統為例,以C#語言進行了實現。

關鍵詞: .NET; 簡單工廠模式; 反射; 多數據源

中圖分類號:TP311 文獻標志碼:A 文章編號: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 引言

應用程序能夠支持多種不同類型數據庫,這對程序的擴展,以及和現有系統共用數據庫都有很大的益處。以教學資源庫系統為例,一方面教學資源庫建設是一個長期的系統工程,在教學資源庫系統建成后應考慮系統的可擴展性;另一方面教學資源庫系統應充分利用現有數據庫資源。一直以來國家非常重視精品課程的建設,各院校都有了一定數量的國家級、省級和院級的精品課程,這對提高教學質量,提高學生的素質無疑起到了很大的促進作用。但這些精品課程網站采用了SQL Server、Aceess、Oracle等不同類型的數據庫,如果摒棄現有的數據庫,在資源上會有很大的浪費,因此對現有的多數據源進行集成是我們急需研究的課題。

本文對現有三層Web應用程序架構加以改造,在三層架構中的數據訪問層加入了.NET簡單工廠模式和反射機制,使系統在無需修改界面層和業務邏輯層源代碼,少量修改或增加數據庫訪問層源代碼的情況下就可以實現在不同類型數據源之間的切換。改造后的系統在不影響現有性能,也不會帶來新缺陷的前提下,擴展了對新數據源的適應性。

1 目前架構存在的問題

目前軟件架構普遍采用三層結構化設計,即將系統劃分為界面層(User Interface)、業務邏輯層(Business Logic Layer)和數據訪問層(Data Access Layer)。三層架構體現了“高內聚,低耦合”的思想,這對權責劃分、軟件的復用、后期維護等方面都有很大的益處。

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

[界面層(UI)][業務邏輯層(BLL)][SQLServerBLL][AccessBLL][數據訪問層(DAL)][SQLServerDAL

SqlConnection等][AccessDAL

OleDbConnection等] [SQL Server

數據庫] [Access

數據庫]

圖1 修改前的三層架構

2 解決方法:三層架構+簡單工廠模式+反射機制

在原有三層架構的基礎上,在數據訪問層建立一個抽象工廠并抽象出一個通用接口,從而可以在不改變業務邏輯層的情況下有不同的數據訪問層實現,比如一個系統同時支持Access,SQL Server,Oralce數據庫的情況,我們只要設計一個界面層和業務邏輯層,就可以實現多個數據訪問層,從而使同一個系統支持多種數據源。

[業務邏輯層(BLL)][IDAL][DALFacotry][數據訪問層

(DAL)][SQLServerDAL

SqlConnection等][AccessDAL

OleDbConnection等] [SQL Server

數據庫] [Access

數據庫][界面層(UI)]

圖2 修改后的三層架構

2.1 數據訪問層接口

.NET中的接口提供一組公共方法和屬性,不需要具體實現,只是告訴繼承它的類至少要實現哪些功能,繼承它的類可以增加自己的方法。如果增加不同數據源,只需要在數據訪問層增加一個類即可,不會影響界面層和業務邏輯層,這對系統的擴展有極大的用處。

圖2中IDAL是數據訪問層接口,這樣做的好處是使業務邏輯層調用數據訪問層接口即可實現數據庫的增刪改等操作。業務邏輯層與數據訪問層是一種抽象依賴的關系,而非具體依賴,以教學資源庫系統的新聞為例,在該接口中有增加、刪除、修改數據庫的三個方法,特定的實現由具體數據庫類完成。

namespace TeachRes.IDAL

{ public interface INews

{ bool addNews(News New);

bool delNews(int NewsID);

bool updateNews(News New);

}

}

2.2 簡單工廠模式和反射機制

簡單工廠模式屬于創建型模式[1,2],又叫做靜態工廠方法(Static Factory Method)模式,是由一個工廠對象決定創建出哪一種產品類的實例。圖2中DALFactory是簡單工廠類,基本思想是讓業務邏輯層(BLL)僅僅知道工廠類, 并把產品以接口形式返回給業務邏輯層, 把對象的創建細節對業務邏輯層完全屏蔽。在該類中根據用戶配置返回數據庫的類名,通過類反射創建出類的實例。

反射[3]是在運行時動態分析、操縱和創建對象的機制,它是一種動態實例化類型的語言機制,利用反射實現動態類型實例化的關鍵在于獲得類型名稱。類型是程序集(Assembly)的一部分,因此完整的類型名稱不僅要有類所在名稱空間、類名,還要有所在程序集的名稱。通過反射機制可以得到一個給定程序集的所有類型列表。

以教學資源庫系統為例[4],編碼如下。

public sealed class DALFactory

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

置多個,在這里動態切換

private static readonly string path=System.Configuration

.ConfigurationManager.AppSettings["WebDAL"];

//創建數據訪問類 并以接口的形式返回:INews

public static INews createINews()

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

return (INews)Assembly.Load(path)

.CreateInstance(classname);

}

}

2.3 可以根據需要創建多個數據訪問層,這里假設有兩個分別支持SQL Server和Access

⑴ 訪問SQL Server數據庫

namespace TeachRes.SQLServerDAL

{ public class NewsDAL:INews

{ public bool addNews(News New)

{ //SQL實現,訪問SQL Server數據庫

}

}

}

⑵ 訪問Access數據庫

namespace TeachRes.AccessDAL

{ public class NewsDAL:INews

{ public bool addNews(News New)

{ //OLEDB實現,訪問access數據庫

}

}

}

2.4 業務邏輯層訪問方式

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 結束語

本文在經典的三層架構基礎上,提出了三層架構+簡單工廠模式+反射機制的方式開發應用程序。利用改進的三層架構可以在不改變界面層和業務邏輯層的情況下,實現多數據源的訪問或切換。本解決方案的提出將有利于應用程序的進一步擴展,可實現代碼的復用。同時本文以教學資源庫系統的開發為例給出了核心實現方式,這對其他復雜系統的開發有極大的借鑒意義。

參考文獻:

[1] James W. Cooper.C#設計模式[M].電子工業出版社,2011.

[2] Alan Shalloway James R. Trott.Design Patterns Explained[M].中國

電力出版社,2001.

[3] Robert C. Martin.敏捷軟件開發-原則、模式與實踐[M].清華大學出

版社,2003.

[4] Don Box, Chris Sells. .NET本質論 第1卷:公共語言運行庫[M].中國

電力出版社,2004.

[5] 高雅俠,鄒海榮.計算機網絡教學平臺的開發與設計[J].計算機時代,

2012.8:13-15

主站蜘蛛池模板: 成人另类稀缺在线观看| 一本一道波多野结衣av黑人在线| 日韩免费中文字幕| 久久久久久久97| 中文字幕2区| 国产成人亚洲综合a∨婷婷| 亚洲一区网站| 首页亚洲国产丝袜长腿综合| 色屁屁一区二区三区视频国产| 亚洲国产亚洲综合在线尤物| 亚洲国产成人麻豆精品| 成人一区在线| jijzzizz老师出水喷水喷出| 国产欧美中文字幕| 亚洲香蕉在线| 午夜福利视频一区| 香蕉综合在线视频91| 999精品色在线观看| 成人午夜视频在线| 国产乱人乱偷精品视频a人人澡| 国产手机在线ΑⅤ片无码观看| 国产网站免费看| 国内视频精品| 国内精品久久九九国产精品| 国产激爽大片在线播放| 日本在线免费网站| 日本国产在线| 2021最新国产精品网站| 丁香五月婷婷激情基地| 就去吻亚洲精品国产欧美| 在线国产综合一区二区三区| 高清无码不卡视频| 波多野结衣一二三| 日本午夜精品一本在线观看| 国产亚洲美日韩AV中文字幕无码成人 | 制服丝袜一区| 亚洲香蕉在线| 国产99视频在线| 亚洲国产精品日韩欧美一区| 制服丝袜一区二区三区在线| 欧美亚洲中文精品三区| 尤物精品国产福利网站| 国产高清又黄又嫩的免费视频网站| 日本欧美一二三区色视频| 成人在线观看不卡| 91小视频在线| a天堂视频| 国产青榴视频| 日本午夜三级| 午夜电影在线观看国产1区| 精品99在线观看| 国产噜噜在线视频观看| 萌白酱国产一区二区| av在线5g无码天天| 亚洲国产中文综合专区在| 成人午夜视频免费看欧美| 日韩中文精品亚洲第三区| 97国产精品视频自在拍| 欧美中文字幕第一页线路一| 少妇被粗大的猛烈进出免费视频| 精品撒尿视频一区二区三区| 91福利一区二区三区| 欧美无遮挡国产欧美另类| 亚洲IV视频免费在线光看| 日本精品一在线观看视频| 男女性午夜福利网站| 亚洲成网777777国产精品| 亚洲欧美在线综合一区二区三区| 国产99精品久久| 国产欧美日韩va另类在线播放| 在线日本国产成人免费的| 国产性生交xxxxx免费| 国产成人AV综合久久| 国产区成人精品视频| 日韩精品毛片人妻AV不卡| 国产成人精品三级| 91在线激情在线观看| 日韩久草视频| 国产色网站| 欧美视频免费一区二区三区| 国产色网站| 最新无码专区超级碰碰碰|