C 基礎篇 委託

2021-10-13 12:42:10 字數 4533 閱讀 2589

資料實體

通常情況下,乙個專案的資料實體中字段並不是完全沒有規律可尋。通常情況下,必須有乙個主鍵。有些時候,會要求在資料表中增加上次修改時間和建立時間,以及建立人和修改人的主鍵。

所以,我們可以建立乙個泛型父類,來幫我們定義這些公共字段:

using system;

namespace data

.infrastructure

public string modifyuserid

public

datetime? modifytime

public string creatorid

public

datetime? createtime

}}

看上述**裡,命名空間並不在data裡,而是在data.infrastructure裡。這個命名空間 infrastructure 用來存放一些專案的架構類或者介面,裡面還會其他的類。

那麼,給這個類補充一些可能有用的方法:

public void create

(object userid)

public void create

(object userid,

datetime createtime)

public void modify

(object userid)

public void modify

(object userid,

datetime modifytime)

這裡用來儲存使用者id的字段,我都用了字串做儲存,是借用字串型別儲存資料時能容納更多的資料型別。

常見資料操作介面

在正常開發中,乙個完整的資料操作介面會有很多分類,但是很多時候我們需要分開增刪改和查詢這兩種操作。對於資料庫而言,檢視和有些資料表都是不被允許改變的,這時候就需要我們只對呼叫方開放查詢介面,而不開放修改介面。

所以,在domain下應該有以下兩個介面:

using system;

using system.collections.generic;

using system.linq.expressions;

namespace domain.infrastructure

}

上述是更新介面,那麼我們回過頭來寫查詢介面,查詢介面的方法有很多。我們先建立乙個介面檔案:

using system;

using system.linq.expressions;

namespace domain.infrastructure

}

乙個查詢介面應該包括以下方法:

獲取單個資料

///

/// 根據主鍵獲取資料

///

///

///

t get(object key);

///

/// 查詢

///

///

///

t get(expressionbool

>> predicate)

;統計數量:

///

/// 返回資料庫中的資料條目

///

///

intcount()

;///

/// 返回資料庫中的資料條目,型別為long

///

///

long longcount();

///

/// 返回符合條件的資料數目

///

///

///

intcount

(expressionbool

>> predicate)

;///

/// 返回長整形的符合條件的數目

///

///

///

long longcount(expressionbool

>> predicate)

;存在性判斷

///

/// 是否存在滿足條件的資料

///

///

///

bool i***ists(expressionbool

>> predicate);查詢

// /// 返回資料庫中所有記錄

///

///

list search();

///

/// 返回所有符合條件的資料

///

///

///

list search(expressionbool

>> predicate)

;///

/// 返回乙個延遲查詢的物件

///

///

ienumerable query();

///

/// 返回乙個延遲查詢的物件,並預設了乙個查詢條件

///

///

///

ienumerable query(expressionbool

>> predicate);排序

///

/// 排序查詢,預設公升序

///

///

///

///

///

list search(expressionbool

>> predicate, expression>

order);

///

/// 排序查詢,指定是否降序排列

///

///

///

///

///

///

list search(expressionbool

>> predicate, expression>

order

,bool isdesc)

;

分頁

實際上分頁的介面定義模型需要兩個類的輔助,如果沒有這兩個類,介面的定義會變得十分複雜,不利於**的可讀性:

using system;

using system.collections.generic;

using system.linq.expressions;

namespace data

.infrastructure

///

/// 排序字段

///

///

public string orderproperty

///

/// 公升序排序或者降序排序,公升序為 asc或者空,降序為desc

///

///

public string sort

///

/// 每頁最大資料容量

///

///

public

int perpagesize

///

/// 當前頁

///

///

public

int currentpage

}///

/// 分頁結果

///

///

public class pagemodel

///

/// 當前頁碼

///

///

public

int currentpage

///

/// 每頁最大資料容量

///

///

public

int perpagesize

///

/// 查詢資料總數

///

///

public long totalcount

///

/// 總頁碼

///

///

public

int totalpages

}}

這是兩個輔助類,可以簡單看vb.net教程一下如果這些引數不進行封裝直接傳給方法,可以預見方法的引數列表會特別長,這對於可讀性和可維護性來說簡直就是災難。我曾經接手過乙個專案的維護,上一位開發者在乙個方法寫了近15個引數,而且還有大量的可選引數,嗯,十分頭疼。所以,我c#教程不建議大家這樣寫,乙個方法引數超過4個我建議還是封裝一下。

那麼,看一看方法的宣告:

///

/// 根據分頁引數設定,進行分頁查詢

///

///

///

pagemodel search(pagecondition condition);

這是使用引數封裝了請求的寫法,小夥伴們可以試試不用封裝,方法是如何宣告的。

總結在這一篇帶領大家梳理了一下資料訪問的介面定義,對乙個系統來說,這些方法都是有必要的(但不是每個方法使用頻率都一樣高)。也是簡單的跟大家分享一下我在實際工作中寫**的總結。

C 委託基礎1 委託基礎

委託和其委託的方法必須具有相同的簽名。簽名相同 1.引數型別相同 2.引數數量相同 3.返回值一致 例一 class program static void main string args mm 7,6 console.readline 例二 class program double subtra...

c 委託基礎

委託 1.概念 委託是函式的封裝,它代表一 類 函式。它們都符合一定的簽名 擁有相同的引數列表 返回值型別。同時,委託也可以看成是對 函式的抽象,是函式的 類 2.語法 delegate argument list 3.用法 1.宣告委託,比如 public delegate void del st...

C 基礎 委託

一 委託 當我們需要把方法做為引數傳遞給其他方法的時候,就需要使用委託。因為有時候,我們要操作的物件,不是針對資料進行的,而是針對某個方法進行的操作。我們還是來以 入手 using system using system.collections.generic using system.linq u...