前言撒:
最近在園子裡看到不少老鳥們寫一些orm相關的文章。。。做為菜鳥的我有感而發,因為本人也一直在完善自己的om框架做為平時的娛樂。
所謂「授人以魚,不如授之以漁」,當我看到老鳥們寫的文章時,大部份只寫了部分核心**和使用方法並且開源。站在使用價值的角度來說,確實實用**量少,重用性高,操作簡單啦等等.....可是站在學習的角度來看,用咱們專業的詞語「抽象」來描述也不為過。初學者在看**的時候在思想的層面上很難理解。我腳得吧,學習進步的乙個重要體現首先是思想上進步了,然後才能達到技術上的進步。有想法然後去實現,你說對不。
對於「c#教程之自己動手寫對映」這個分類,為什麼沒有叫自己動手寫orm,首先是基於對orm的理解:物件關係對映,在我自己寫的框架中只體現了object與table的一對一對映,至於物件與物件的關係[繼承、組合、聚合等],在我自己寫的框架裡並沒有體現出來,我寫這個小東西的目地就是為了解決底層重複開發的問題,如:對於簡單的增,刪除改查 ,分頁等,我們每個專案的每個表幾乎都會用到,對於這樣重複的工作,我們會盡量想辦法減少我們的工作量,這就是我寫這個小東西的初忠。這個系列的文章的意義並不在於應用,更多描述的是乙個開發的過程和一種思想的演變過程。
作為乙個的一員,「**改變世界」的苦逼程式設計師,我希望通過該系列文章能夠讓和我一樣的菜鳥童鞋們共同進步 ,少走彎路,把學習的曲線拉的更平,同時希望園子裡們的大牛啦,大大牛啦,老鳥啦,老老鳥啦,多多給予批評指正。
注:對於解決業務上的複雜關係我還沒想過往底層整,如果你覺得不完善的話可以在我的框架基礎上接著寫自己的東西出來,本框架在系列教程的最後開源。
正文撒:
同樣是寫乙個新增新員工和獲取新員工分頁列表的程式,我們大概可能經歷以下幾個階段的寫法。
有圖有真相:
頁面:
1處理程式:"-//w3c//dtd xhtml 1.0 transitional//en""
">2"
">
36747
48
1三、又經過了乙個段時間的學習後,我們接觸了大名頂頂的「三層架構」,知道了以前的寫法有些弊端,知道怎麼把錶using
system;
2using
system.collections.generic;
3using
system.linq;
4using
system.web;
5using
system.web.ui;
6using
system.web.ui.webcontrols;
7using
system.data;89
namespace
csharp.website.aboutoneyear
1021}22
23protected
void btnsubmit_click(object
sender, eventargs e)
2435
36///
37///
獲取列表
38///
39protected
void
getlist()
4046
4748
protected
void button1_click(object
sender, eventargs e)
4955
56#region 分頁
57///
58///
分頁59
///60
///61
///62
protected
void pager_pagechanged(object
sender, eventargs e)
6366
#endregion
6768
}69 }
示層(ui)-->業務邏輯層(bll)-->資料操作層(dal)分離開,這時我們可能還在用sqlhelper和aspnetpager控制項..
**如下[codebehind]:
1bll:using
system;
2using
system.collections.generic;
3using
system.linq;
4using
system.web;
5using
system.web.ui;
6using
system.web.ui.webcontrols;78
namespace
csharp.website.abouttwoyear919
}2021protected
void btnsubmit_click(object
sender, eventargs e)
2234
35///
36///
獲取列表
37///
38protected
void
getlist()
3945
4647
protected
void button1_click(object
sender, eventargs e)
4854
55#region 分頁
56///
57///
分頁58
///59
///60
///61
protected
void pager_pagechanged(object
sender, eventargs e)
6265
#endregion
6667
}68 }
1dal:using
system;
2using
system.collections.generic;
3using
system.linq;
4using
system.text;56
namespace
bll7
1415
public
static listgetlist(int pagesize, int currentpageindex, out
inttotalcount)
1619
}20 }
1四、又經過一段時間的學習,我們觸到了petshop教學例項,接觸了linq、nhibernate、企業庫,泥馬,這就是一條不歸路啊,搞設計模式,基於框架開發,研究框架的思想等....using
system;
2using
system.collections.generic;
3using
system.linq;
4using
system.text;
5using
system.data;67
8namespace
dal9
2223
public
static listgetlist(int pagesize, int currentpageindex, out
inttotalcount)
2439}40
return
listemployee;41}
4243
}44 }
**略...
五、在經過了一痛徹心菲的學習以後,我們總結經驗,準備動手寫一些自己的東西,把一些基本的功能封裝起來,對外提供一致的介面去呼叫...好吧,我們「搞個物件」關係對映,解決一些一直重複寫的 insert select update delete 等問題....
**如下:
dal:
1在上面的例子中,我們沒有看到乙個sql語句【當然sql肯定會用到的】,我們只要把employee:new 乙個,然後交給orm類就可以了,下面所有的工作都由:orm來處理啦。using
system;
2using
system.collections.generic;
3using
system.linq;
4using
system.text;
5using
hzyt.dbutility;67
namespace
dal8
1516
public
static listgetlist(int pagesize, int currentcount, out
inttotalcount)
1724
return
returnlist;25}
26}27 }
以下是orm的幾個常用的介面:
1通過上面的例子大家看到了吧,物件關係對映其實還是挺好用的,這也是為什麼園子裡的很多程式設計師都自己寫著用的原因。public
class
orm2
今天先到這裡吧,關於怎麼開發這樣乙個微型框架我們後面的教程接著搗鼓...
C 教程之自己動手寫對映第六節 封裝列表
一 動機 經過了前面幾節的闡述,我們已經可以通過 動態生成sql 與 反射機制 完成簡單的物件與資料表的對映。如 add object obj remove object obj 等。好的,我們看如下 1 public static listgetlist int pagesize,int curr...
C 教程之自己動手寫對映第四節 封裝刪除
一 動機 我們在借助於 sqlhelper刪除資料的時候,一般的 如下 1 2 3 建立人 李林峰4 5 時 間 2012 07 266 7 描 述 借助於sqlhelper刪除表的資料8 9 1011 using system.data 12using csharp.core 1314 names...
c ,第一節課
上課老師寫的,我瞎跟著一起抄的 include include void swap int a,int b 用了指標的方法 void swap1 int a,int b 引用的方法 宣告乙個變數,其中內容是自己定義的 struct person int main int argc,const cha...