麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > .NET > 正文

面向對象在數據庫應用程序中的應用(dotNet)

2024-07-21 02:23:22
字體:
來源:轉載
供稿:網友
面向對象在數據庫應用程序中的應用(dotnet)



現在的應用程序很大一部分都是與數據庫相關的程序,而寫數據庫程序會涉及到很多數據表,訪問和操縱數據表構成了數據庫應用程序最常見的動作,所以,編寫出高效的程序對于程序員來說是不得不去考慮的。本文將討論這個話題,希望對讀者朋友有所裨益。



面向對象是當今程序界的普遍編程思想,他具有三個最基本的特征:封裝、繼承和多態。繼承對于代碼的復用非常有效,多態則是指函數(方法)的多種形態,可以通過子類重寫父類的方法來改變對象的行為,在面向對象編程中起到非常重要的作用。那么,在實際應用中,到底能起到什么樣的作用呢?也許使用例子最能表達這個思想。



比如,我們要寫一個簡單的論壇程序,經過分析,可以得出需要下面的表:用戶表(users)、版塊表(bbsblock)、回復表(reply)、主題表(topic)等(為了方便代碼的繼承,我把所有表的id號都設成相同的名稱:id)。對于這些表,都有一些相同的操作:瀏覽,刪除,添加和修改。那么,我們是不是對每個表都寫對應的方法來實現呢?顯示,這種方法是笨拙的。而繼承,在這里就會發揮極為重要的作用。思想是:寫一個父類,把這些基本的操作寫好,然后,將每個表抽象成一個類,并繼承剛才創建的父類,此時,所有的子類都具有這些基本操作了。



我們可以這樣定義父類:

public class dbbaseclass

{

protected string tablename;//表名

protected sqlconnection con;//連接對象



public dbbaseclass():this("users")

{

}

/// <summary>

/// 構造函數

/// </summary>

/// <param name="tablename">表名</param>

public dbbaseclass(string tablename)

{

this.tablename = tablename;

if(con == null)

{

con = new sqlconnection("server=accp-lzh;database=missbbs;uid=sa;pwd=sa");

}

else

{

if(con.state == connectionstate.open)

con.close();

}

}



/// <summary>

/// 獲取數據集

/// </summary>

/// <param name="count">如果count為0,則獲取所有數據集,否則獲取指定條數(從頂部)的記錄</param>

/// <returns>返回dataset</returns>

public dataset select(int count)

{

string sql;

if(count == 0)

sql = "select * from " + this.tablename ;

else

sql = "select top " + count.tostring() + " * from " + this.tablename + " oreder by id desc";

sqlcommand selectcmd = new sqlcommand(sql,con);



sqldataadapter adapter = new sqldataadapter();

adapter.selectcommand = selectcmd;



dataset ds = new dataset();

try

{

con.open();

adapter.fill(ds,"bbstable");

con.close();

}

catch(exception)

{

return null;

}



return ds;

}



}



在這個類中,我們定義了兩個重載的構造函數和一個用來獲取數據集的方法,同時,定義了兩個作用很大的字段,一個是表名,一個是連接對象。當其他類繼承這個類時,就不再需要再次定義表和連接對象了,最主要是的,這兩個字段為我們更好的實現繼承起到了關鍵的作用。



接下來,我們創建一個子類:users。這個類是表users的抽象:

public class user : dbbaseclass

{

/// <summary>

/// 無參構造函數

/// </summary>

public user():base("users")

{

}



/// <summary>

/// 構造函數

/// </summary>

/// <param name="tablename">表名</param>

public user(string tablename) : base(tablename)

{

}

}



現在,大家可以看出來,我們只是寫了該類的兩個構造函數,就具有返回表中所有數據集的功能了,因為該表繼承了dbbaseclass。



同樣,我們再寫一個子類:topic,該類是表topic的抽象。

public class topic : dbbaseclass

{

public topic() : base("topic")

{

}



public topic(string tablename) : base(tablename)

{

}

}



和user一樣,該類也同樣具有了返回所有數據集的功能。



實例化子類時,采用簡單對象工廠設計模式,返回不同類型的對象。

public class factory

{

public factory()

{



}



public static dbbaseclass getobject(string tablename)

{

switch(tablename)

{

case "users" :

return new user();



case "topic":

return new topic();



case "bbsblock":

return new bbsblock();



case "reply":

return new reply();



case "bbsmaster":

return new bbsmaster();



default:

return new dbbaseclass();

}

}

}



下面來看一看如何使用:

user user = (user)factory.getobject("users");

dataset ds1 = new dataset();

ds1 = user.select(0);



topic topic = (topic)factory.getobject("topic");

dataset ds2 = new dataset();

ds2 = topic.select(0);



看完之后,您有什么想法?如果您是一個經驗豐富的程序員,這種方法肯定會經常采用,如果您剛剛接觸,理解這種思想還是大有好處的。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 99精品在线视频观看 | 娇妻被各种姿势c到高潮小说 | 成人不卡免费视频 | 国产精品久久久久久影院8一贰佰 | 中日韩乱码一二新区 | 久久精品性视频 | 男人午夜小视频 | 精品一区二区三区毛片 | 黄色网址在线免费 | 性视频久久 | 成人三级免费电影 | 国产一级91 | 欧美雌雄另类xxxxx | 欧美18—19sex性hd | av日韩一区二区三区 | 久色亚洲 | 国产1区2区3区中文字幕 | 久久精品国产99久久久古代 | 成人mm视频在线观看 | 精品一区二区久久久久久按摩 | 久久国产精品99国产 | 精品成人久久久 | 国产欧美日韩视频在线观看 | 国产91九色视频 | 99精品国产一区二区三区 | 毛片av网 | 欧美亚洲另类在线 | 91久久在线观看 | 精品无码久久久久久国产 | 韩国三级日本三级香港三级黄 | 欧美成人午夜一区二区三区 | 日韩激情一区 | 国产91一区二区三区 | 毛片免费观看日本中文 | 欧美极品欧美精品欧美视频 | 一级毛片免费大片 | 在线观看中文字幕av | 毛片三区 | 亚洲一区二区三区日本久久九 | 国产精品一区在线免费观看 | 久久精品一区二区三区四区五区 |