對增刪改查用物件導向進行包裝

2021-09-05 20:39:29 字數 3584 閱讀 9049

已經有兩年多沒有做過這種後台的增刪改查的工作了,最近突然接到這種性質的工作,覺的如果還是和以前一樣做的話,是不是有點太泛味了,之前的一年多本人學習了設計模式,對物件導向的理解比以前有所增加。理解當然的想起**重構。

增刪改查,從字面上來講,無非就是四個操作,如果我們非要定義乙個名稱的話,我是這樣定義的,add,delete,update,getlist,也就是說無論是針對哪張表的維護無外乎這四個操作,唯一的不同就是每個表在維護時對於實體的操作不同,我們一般都會把資料庫的表對映到相應的實體類中,這點我們大可利用vs 2005就有的泛型來解決。下面我介紹下我的實現方式:

第一:專案結構介紹。這是不能少的。

1:mychinabusiness.iinte***ce,這個層用來放些介面或者是抽象類。

2:mychinabusiness.dal,這個層是資料處理層。

3:mychinabusiness.bll,這個層就是對應的業務邏輯層。

4:mychinabusiness.web,這個自然是表示層了。

5:mychinabusiness.model,這個層用來存放所有的實體物件。

第二:在iinte***ce層中建立乙個抽象類dataopration.cs,這個類是乙個泛型類。作用就是對所有的後台增刪改查操作進行約束。兩個抽象方法add,update都非常好理解,至於下面的getlist這裡為什麼定義了乙個虛方法呢?那是因為我對取資料以前封裝了乙個比較通用的方法,所以這裡想直接拿來復用,但這個方法會呼叫資料處理層的方法,如果直接把方法體拿過來會存在迴圈依賴的問題,所以這個方法只是簡單返回乙個空記錄集,實際呼叫時,會在具體的業務邏輯類中重寫它。

public

abstract

class

dataopration

<

t>

它包含了我們常的三個方法,**如下:

//////

新增資料

///

///

///

public

abstract

intadd(t t);

//////

修改資料

///

///

///

public

abstract

intupdate(t t);

//////

讀取記錄集

///

///

///

///

///

///

///

///

///

///

public

virtual

datatable getlist(

intirowcount, 

intipagenumber, 

string

procname, 

string

scondition, 

string

strscompositor, 

outint

pagecount, 

outint

recordcount, 

outint

inextpagenumber)

第三:下面是乙個具體資料處理類:它實現了泛型抽象類,目的是為了進行方法簽名的約束,其中的內容就是些常規的資料操作。注意這個類中並沒有重寫getlist方法,原因上面已經分析過。

public

class

dal_regulations : dataopration

<

regulations

>

//////

更新一條資料

///

public

override

intupdate(regulations model)

#endregion

成員方法}

第四:下面是對應的業務邏輯處理類:它同樣需要實現泛型抽象類,下面重寫的getlist就是上面說的為什麼抽象類中存在乙個虛方法的問題,在業務邏輯層中呼叫資料處理類就解決了迴圈依賴的問題,同時為資料的提取方式留下了擴充套件的空間,雖然方法的引數固定,但實現的過程是可以重寫的。

public

class

bll_regulations : dataopration

<

regulations

>

//////

更新一條資料

///

public

override

intupdate(regulations model)

//////

讀取資料記錄

///add by minjiang 09-3-25

///

///

///

///

///

///

///

///

///

///

public

override

datatable getlist(

intirowcount, 

intipagenumber, 

string

procname, 

string

scondition, 

string

strscompositor, 

outint

pagecount, 

outint

recordcount, 

outint

inextpagenumber)

#endregion

成員方法}

第五:做了這麼多,我們最後來看下表示層能得到什麼好處。下面是表示層的部分**:

首先:例項化乙個具體的業務處理類給抽象類。

dataopration

<

regulations

>

_dataopration 

=new

bll_regulations();

然後:下面的操作就是呼叫抽象類的方法,add,update,getlist。所有的增加,修改操作**都一樣,當然查詢也是一樣。

inti 

=_dataopration.add(model);

intj 

=_dataopration.update(model);

總結:做了這麼多的封裝,最後帶來的好處就是:

1:**結構較純面向過程要清晰,因為所有的操作都體現在抽象類的定義中。

2:客戶端**進一步得到簡化,無論是什麼表的維護,對於增加,刪除都是add,update,客戶端不用關心方法名到底是什麼。

3:這樣做可以讓乙個後台維護工作由幾個開發員分工合作,例如乙個負責前台頁面的處理,它最終呼叫抽象類的相關操作,但他並不關心如何實現,另一位開發人員只負責接收資料完成資料處理,這樣在開發效率上會高很多,因為乙個人負責一塊的內容在熟練程式上會大大增加,理所當然的開發效率會提高。

php ci對mysql進行增刪改查

php的ci是乙個mvc模式的框架,本文是通過php ci對mysql資料庫進行增刪改查。0.首先在mysql資料庫方建立資料庫和資料表 1 create database test 2use test 3create table user 4 id int 10 not null auto inc...

C 中對sqlserver進行增刪改查

using system.data using system.data sqldata string sqlconnection data source 註解1 database 註解2 uid 註解3 pwd 註解4 其實還有很多種寫法 參考 string myconn server 127.0....

通過PHP對MySQL進行增刪改查

建立資料庫 建立與mysql的連線 link mysqli connect localhost 3306 root root shuju if link 查詢資料 mysql命令在php中以字元的形式存在 sql select from tt 可以通過php的方法向mysql傳送命令 mysql的命...