国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

設(shè)計(jì)模式在管理信息系統(tǒng)開發(fā)中的應(yīng)用研究

2010-11-27 02:15:04宋娜娜
關(guān)鍵詞:設(shè)計(jì)模式面向?qū)ο?/a>子系統(tǒng)

宋娜娜

(鄭州航空工業(yè)管理學(xué)院 信息科學(xué)學(xué)院,河南 鄭州 450015)

管理信息系統(tǒng)(Management Information System,MIS)是一個(gè)建立在網(wǎng)絡(luò)環(huán)境下的綜合信息管理系統(tǒng),通過計(jì)算機(jī)網(wǎng)絡(luò),可實(shí)現(xiàn)企業(yè)不同部門之間數(shù)據(jù)的流通和共享,使得決策部門能及時(shí)得到需要的數(shù)據(jù),并將決策信息反饋給各部門.管理信息系統(tǒng)的開發(fā),無論是使用流行的第4代編程語言開發(fā),還是基于Web的應(yīng)用程序,人們常采用3層(表示層、業(yè)務(wù)層和持久層)體系結(jié)構(gòu),其中,對(duì)數(shù)據(jù)庫的使用是必不可少的.如何方便地實(shí)現(xiàn)數(shù)據(jù)庫的訪問是管理信息系統(tǒng)開發(fā)過程中需要重點(diǎn)考慮的部分.

隨著面向?qū)ο蠹夹g(shù)的成熟,在各種軟件開發(fā)環(huán)境中都提供了對(duì)數(shù)據(jù)庫訪問的支持,一般是通過一組類來實(shí)現(xiàn)的,在這些類之間存在著復(fù)雜的相互依賴關(guān)系.在面向?qū)ο蟮脑O(shè)計(jì)中,最困難的是尋找合適的對(duì)象來構(gòu)造軟件系統(tǒng),從而設(shè)計(jì)出理想的類,由于要考慮多種因素諸如封裝、粒度以及靈活性,而這些因素往往是沖突的,所以如何進(jìn)行權(quán)衡取舍找到一個(gè)合理的方案是相當(dāng)困難的.

在軟件設(shè)計(jì)工作中,當(dāng)找到對(duì)于某類問題好的解決方案時(shí),一般會(huì)從中抽象出模型并反復(fù)使用,這有助于我們將新的設(shè)計(jì)建立在以往工作的基礎(chǔ)上并復(fù)用以往成功的設(shè)計(jì)方案,使得面向?qū)ο蟮脑O(shè)計(jì)更靈活和更具復(fù)用性.目前,面向?qū)ο蠹夹g(shù)的研究人員正在嘗試使用設(shè)計(jì)模式這一概念.所謂設(shè)計(jì)模式,就是將這些面向?qū)ο蟮脑O(shè)計(jì)經(jīng)驗(yàn)按模式名稱、問題、解決方案和效果這4個(gè)基本要素系統(tǒng)地歸類以便重用,從而構(gòu)成不同設(shè)計(jì)之間通信的基礎(chǔ).它是一種可重用的“財(cái)富”,可以應(yīng)用于不同的問題域.本文使用面向?qū)ο箝_發(fā)技術(shù),應(yīng)用設(shè)計(jì)模式,提出了一個(gè)在.NET開發(fā)環(huán)境中數(shù)據(jù)庫訪問的解決方案.

1 設(shè)計(jì)模式

1.1 設(shè)計(jì)模式簡(jiǎn)介

設(shè)計(jì)模式的思想最初來源于建筑領(lǐng)域,建筑師 Christopher Alexander 首先提出了設(shè)計(jì)模式的概念,盡管他描述的是建筑和規(guī)劃中的設(shè)計(jì)模式,但其中體現(xiàn)的思想也適用于建筑設(shè)計(jì)以外的一些領(lǐng)域,例如面向?qū)ο筌浖O(shè)計(jì)領(lǐng)域.只是在這里,對(duì)象和接口取代了墻和門窗,但模式的核心都是一樣的,即在某種環(huán)境下解決特定問題的通用方法[1].

設(shè)計(jì)模式關(guān)注的是特定設(shè)計(jì)問題及其解決方案,在每種模式中均描述一個(gè)設(shè)計(jì)問題和一個(gè)經(jīng)過驗(yàn)證的、通用的解決方案,這個(gè)解決方案是對(duì)反復(fù)出現(xiàn)的設(shè)計(jì)結(jié)構(gòu)進(jìn)行識(shí)別和抽象得到的,它通常由多個(gè)對(duì)象組成,模式中不僅描述對(duì)象的設(shè)計(jì),而且描述對(duì)象間的通信.同時(shí),在每種模式中還包括該模式的適用環(huán)境、使用效果和利弊的權(quán)衡以及該模式是否與其他模式有關(guān)等內(nèi)容.

設(shè)計(jì)模式的基本描述格式通常包括:

(1)模式的名稱;

(2)模式要解決的問題及模式所適用的環(huán)境;

(3)一個(gè)通用的解決方案,包括模式中的組件、組件間的交互以及它們的職責(zé)、關(guān)系和協(xié)作;

(4)使用這種解決方案會(huì)產(chǎn)生的效果.

依據(jù)目的不同,模式可分為創(chuàng)建型模式、結(jié)構(gòu)型模式和行為模式3類.創(chuàng)建型模式與對(duì)象的創(chuàng)建有關(guān);結(jié)構(gòu)型模式處理類和對(duì)象的組合,將一組對(duì)象組合成一個(gè)大的結(jié)構(gòu),例如復(fù)雜的用戶界面;行為模式描述類或?qū)ο蟮慕换ズ吐氊?zé)分配,定義對(duì)象間的通信和復(fù)雜程序中的控制流.

1.2 Facade模式簡(jiǎn)介

Facade模式要求一個(gè)子系統(tǒng)的外部與其內(nèi)部的通信必須通過一個(gè)統(tǒng)一的門面(Facade)對(duì)象進(jìn)行.Facade模式提供了一個(gè)高層次的接口,使得子系統(tǒng)更易于使用.Facade模式的門面類將客戶端與子系統(tǒng)的內(nèi)部復(fù)雜性分隔開,使得客戶端只需要與門面對(duì)象打交道,而不需要與子系統(tǒng)內(nèi)部的很多對(duì)象打交道[2].

(1)意圖

為子系統(tǒng)中的一組接口提供一致的界面,F(xiàn)acade模式定義了一個(gè)高層接口,這個(gè)接口使得這一子系統(tǒng)更加容易使用.

(2)適用性

為一個(gè)復(fù)雜子系統(tǒng)提供一個(gè)簡(jiǎn)單接口時(shí),可以使用Facade模式.

子系統(tǒng)往往因?yàn)椴粩嘌莼兊迷絹碓綇?fù)雜.大多數(shù)模式使用時(shí)都會(huì)產(chǎn)生更多更小的類,這使得子系統(tǒng)更具可重用性,也更容易對(duì)子系統(tǒng)進(jìn)行定制,但這也給那些不需要定制子系統(tǒng)的用戶帶來一些使用上的困難.Facade可以提供一個(gè)簡(jiǎn)單的缺省視圖,這一視圖對(duì)大多數(shù)用戶來說已經(jīng)足夠,而那些需要更多的可定制性的用戶可以越過Facade層.

客戶程序與抽象類的實(shí)現(xiàn)部分之間存在著很大的依賴性.引入Facade將這個(gè)子系統(tǒng)與客戶以及其他的子系統(tǒng)分離,可以提高子系統(tǒng)的獨(dú)立性和可移植性.

當(dāng)需要構(gòu)建一個(gè)層次結(jié)構(gòu)的子系統(tǒng)時(shí),使用Facade模式定義子系統(tǒng)中每層的入口點(diǎn).如果子系統(tǒng)之間是相互依賴的,可以讓它們僅通過Facade進(jìn)行通訊,從而簡(jiǎn)化了它們之間的依賴關(guān)系.

(3)結(jié)構(gòu)圖

圖1 Facade模式的通用結(jié)構(gòu)圖Fig.1 General structure of Facade pattern

2 設(shè)計(jì)模式在MIS開發(fā)中數(shù)據(jù)庫設(shè)計(jì)中的應(yīng)用

現(xiàn)在有多種流行的數(shù)據(jù)庫,包括Microsoft公司的Access、Foxpro、SQL Server,IBM公司的DB/2、Oracle、Sybase等.這些數(shù)據(jù)庫都支持SQL語言,所以似乎應(yīng)該是可以互換使用的,但是由于這些數(shù)據(jù)庫系統(tǒng)都有各自的用戶接口和編程接口以及不同的特點(diǎn),盡管它們都支持SQL,但每個(gè)數(shù)據(jù)庫系統(tǒng)都有自己的接受SQL查詢和返回查詢結(jié)果的方法,所以這些系統(tǒng)不能互換使用.

為了解決這個(gè)問題,在.NET平臺(tái)上提供了一個(gè)新的數(shù)據(jù)庫訪問模型ADO.NET,它由一組互相聯(lián)系類組成[3]:

(1)OleDbConnection——代表了實(shí)際到數(shù)據(jù)庫的連接,實(shí)際編程時(shí)可以實(shí)例化該類的一個(gè)對(duì)象,在需要時(shí)打開和關(guān)閉該對(duì)象,在使用完成后關(guān)閉它以便垃圾回收.

(2)OleDbCommand——代表發(fā)送給數(shù)據(jù)庫的一個(gè)SQL命令,該命令可能不返回結(jié)果.

(3)OleDbDataAdapter——在數(shù)據(jù)庫和本地?cái)?shù)據(jù)集之間的數(shù)據(jù)交互提供一個(gè)橋梁,可以指定OleDbCommand、數(shù)據(jù)集和數(shù)據(jù)連接.

(4)DataSet——代表一個(gè)或多個(gè)數(shù)據(jù)表或查詢返回結(jié)果.

(5)DataTable——代表數(shù)據(jù)庫中的一個(gè)數(shù)據(jù)表或從查詢返回的表.

(6)DataRow——代表DataTable中的一行.

這些類相互之間是緊密聯(lián)系的,使用以上這組類進(jìn)行數(shù)據(jù)庫訪問的一般方式如下:

a、首先創(chuàng)建一個(gè)數(shù)據(jù)庫鏈路;

b、請(qǐng)求一個(gè)記錄集合;

c、把記錄集合暫存到DataSet;

d、如果需要,返回第2步(DataSet可以容納多個(gè)數(shù)據(jù)集合);

e、關(guān)閉數(shù)據(jù)庫鏈路;

f、在DataSet上作所需要的操作.

對(duì)數(shù)據(jù)庫的訪問需要這些類配合完成,直接使用這些類來完成數(shù)據(jù)庫訪問的任務(wù),類之間的關(guān)系復(fù)雜,使用起來不易掌握.Facade模式是管理這些類對(duì)象的理想方法.Facade模式由兩個(gè)類組成:Dbase和DBTable,其中Dbase包裝了ADOConnection、Database、DataTable、ADOCommand、ADODatasetCommand類,DBTable包裝了ADOCommand、Dataset、Datarow、Datatable、ADODatasetCommand類.具體實(shí)現(xiàn)如下:

public abstract class DBase {

protected OleDbConnection conn;

private void openConnection() {

if (conn.State == ConnectionState.Closed){

conn.Open ();

}

}

private void closeConnection() {

if (conn.State == ConnectionState.Open ){

conn.Close ();

}

}

public DataTable openTable (string tableName) {

OleDbDataAdapter adapter = new OleDbDataAdapter ();

DataTable dtable = null;

string query = "Select * from " + tableName;

adapter.SelectCommand = new OleDbCommand (query, conn);

DataSet dset = new DataSet ("mydata");

try {

openConnection();

adapter.Fill (dset);

dtable = dset.Tables [0];

}

catch(Exception e) {

Console.WriteLine (e.Message );

}

return dtable;

}

public DataTable openQuery(string query) {

OleDbDataAdapter dsCmd = new OleDbDataAdapter ();

DataSet dset = new DataSet ();

DataTable dtable = null;

try {

dsCmd.SelectCommand = new OleDbCommand(query, conn);

openConnection();

dsCmd.Fill(dset, "mine");

dtable = dset.Tables[0];

closeConnection();

return dtable;

}

catch (Exception e) {

Console.WriteLine (e.Message);

return null;

}

}

public void openConnection(string connectionString) {

conn = new OleDbConnection(connectionString);

}

public OleDbConnection getConnection() {

return conn;

}

}

類DBTable只給出粗略的定義:

public class DBTable {

protected DBase db;

protected string tableName;

private bool filled, opened;

private DataTable dtable;

private int rowIndex;

private Hashtable names;

private string columnName;

private DataRow row;

private OleDbConnection conn;

private int index;

public DBTable(DBase datab, string tb_Name) {//-----}

public void createTable() {//-----}

public bool hasMoreElements() {//-----}

public int getKey(string nm, string keyname){//-----}

public virtual void makeTable(string cName) {//-----}

private void closeConn() {//-----}

private void openConn() {//-----}

public void openTable() {//-----}

public void delete() {//-----}

}

在實(shí)際應(yīng)用開發(fā)中,可使用從這兩個(gè)類派生的子類并加以實(shí)例化.Facade模式為客戶提供了一個(gè)簡(jiǎn)單的編程接口,客戶不需使用復(fù)雜的數(shù)據(jù)庫訪問子系統(tǒng)部件.而且,使用Facade模式并不阻止客戶使用底層的復(fù)雜的子系統(tǒng)部件,還可以更改底層的子系統(tǒng)而不更改客戶代碼.

3 結(jié)束語

在當(dāng)前的軟件開發(fā)中,良好的軟件設(shè)計(jì)方法能夠大幅度提升軟件設(shè)計(jì)的質(zhì)量和效率.以往,只有具有豐富軟件設(shè)計(jì)經(jīng)驗(yàn)的設(shè)計(jì)職員才能設(shè)計(jì)出結(jié)構(gòu)均衡、質(zhì)量保證的軟件;現(xiàn)在,應(yīng)用軟件設(shè)計(jì)模式方法能夠很好地重用優(yōu)秀的軟件設(shè)計(jì)方案,進(jìn)而得到良好的設(shè)計(jì)結(jié)果.本文介紹了設(shè)計(jì)模式的一般特點(diǎn),并詳細(xì)分析了Facade模式.在此基礎(chǔ)上,提出了一個(gè)使用Facade模式的數(shù)據(jù)庫訪問模型,并給出了實(shí)際的實(shí)現(xiàn).該模型應(yīng)用在實(shí)際MIS開發(fā)過程中,可以使開發(fā)人員避免使用以往的復(fù)雜的數(shù)據(jù)庫訪問技術(shù),從而大大提高開發(fā)效率.

參考文獻(xiàn):

[1] 鄒娟,田玉敏. 軟件設(shè)計(jì)模式的選擇與實(shí)現(xiàn)[J] .計(jì)算機(jī)工程,2004(10) : 29-31.

[2] ERICH G, RICHARD H, RALPH J, et al. 設(shè)計(jì)模式——可復(fù)用面向?qū)ο筌浖幕A(chǔ):英文版[M].北京:機(jī)械工業(yè)出版社,2002:121-127.

[3] TOM A. C#技術(shù)內(nèi)幕[M].侯曉霞,柴洪輝,譯.北京:清華大學(xué)出版社,2002:290-305.

猜你喜歡
設(shè)計(jì)模式面向?qū)ο?/a>子系統(tǒng)
仿生設(shè)計(jì)模式的創(chuàng)新應(yīng)用探索
玩具世界(2023年6期)2024-01-29 12:14:36
不對(duì)中轉(zhuǎn)子系統(tǒng)耦合動(dòng)力學(xué)特性研究
“1+1”作業(yè)設(shè)計(jì)模式的實(shí)踐探索
GSM-R基站子系統(tǒng)同步方案研究
駝峰測(cè)長(zhǎng)設(shè)備在線監(jiān)測(cè)子系統(tǒng)的設(shè)計(jì)與應(yīng)用
交通機(jī)電工程設(shè)計(jì)模式創(chuàng)新探討
面向?qū)ο蟮挠?jì)算機(jī)網(wǎng)絡(luò)設(shè)計(jì)軟件系統(tǒng)的開發(fā)
面向?qū)ο蟮臄?shù)據(jù)交換協(xié)議研究與應(yīng)用
面向?qū)ο骔eb開發(fā)編程語言的的評(píng)估方法
車載ATP子系統(tǒng)緊急制動(dòng)限制速度計(jì)算
叶城县| 城步| 长宁区| 通许县| 滨州市| 泰和县| 仁寿县| 花莲市| 昆山市| 垫江县| 嫩江县| 峨眉山市| 城市| 太原市| 玉屏| 肃宁县| 永修县| 海阳市| 九江县| 特克斯县| 湟源县| 枣阳市| 辽中县| 稻城县| 阜新市| 砚山县| 静安区| 马山县| 吉林省| 永顺县| 海林市| 扎囊县| 宁晋县| 宁都县| 海丰县| 巴塘县| 甘德县| 富蕴县| 特克斯县| 惠水县| 海口市|