XCode之第一次親密接觸


XCode之第一次親密接觸

首先得說明,本教程僅用於讓第一次接觸XCode的朋友了解XCode,不具有任何別的實際意義,真正的項目也不會采取這種開發方式,而采用更先進、快速而強大的開發方式

NewLife.XCode是一個數據映射框架,包括但大於ORM的范圍XCode意為未知的代碼的意思,是整個X系列組件很重要的一員。實際項目開發,會根據項目類型不同,應用場合不同,由多個不同的組件配合發力,這就導致了幾乎無法發現XCode在其中的用處,而XCode的學習,也就無從做起。按某朋友的說法:“想看看這個頁面怎么工作,結果頁面后面一行代碼也沒有,深入一點發現全是接口!”

所以,本教程從最最最通俗的做法談起,先使用純XCode實現,然后一步步的引入其它組件,讓大伙明明白白最終項目是如何工作的!

這次我們做一個最簡單的CMS,只有管理員、欄目、文章三張表,字段也是最精簡的。后面會針對這個例子,一步步展開,介紹XCode的各個主要功能。

關於XCode的層次介紹參看ORM組件XCode(簡介)

作為入門的更有深度的姐妹篇ORM組件XCode(動手)

一、數據庫

最原始的做法,我們先到MSSQL里面建立好數據表,我這里是MSSQL2008,你用別的版本或者別的數據庫也沒有關系。

管理員表,只要用戶名和密碼,我們弄一個自增ID的字段作為主鍵。用別的比如GUID作為主鍵也行,最好有一個單一主鍵,那樣會方便一些,后面會講到。

wps_clip_image-26243

欄目表,我們先不考慮多級,只要一級,那樣子只需要一個名稱字段就足夠了。注意設置ID字段為主鍵和標識。

wps_clip_image-3422

文章表,需要跟欄目表建立管理關系,然后有標題和內容。注意設置ID字段為主鍵和標識。

wps_clip_image-16747

這樣子就建好了最簡單的三張表。

二、生成實體類

很多ORM都有配套的代碼生成器,下面我們請出我們的代碼生成器XCoder,注意,這里是XCoder,意為未知編碼者,而前面是XCode。這個剛解壓后的樣子,一個主程序,三個類庫,一個配置文件。

wps_clip_image-8407

啟動主程序。這里也許它會自動升級,不用擔心,升級會自動完成。

wps_clip_image-28552

很土的界面,不過沒關系啦,這個XCoder就是一個很簡單的空殼子(開放源碼),真正的使用者會用自己的修改版,或者使用更先進的魔方開發平台。

我們看看“連接”右邊的下來菜單,看看都有哪些連接:

wps_clip_image-23945

這是配置文件里面內置的一些連接,每一種數據庫的都有,其實是連接字符串的樣板,省得用到時找不到。XCoder在這里有自動探測功能,能夠探測本機的MSSQL,本目錄的AccessSQLite

可以看到mssql_CMS那個就是我們剛才建立的庫,為了加深理解,我們手工去配置一下。

關閉XCoder,打開配置文件“XCoder.exe.config”:

wps_clip_image-25206

這里是最常用的一些設置,我們重點看連接字符串部分,增加一個名為CMS的連接:

wps_clip_image-3922

這個name就是在連接名,將會在前面代碼生成器界面的“連接”下拉里面列出。重新打開代碼生成器看看:

wps_clip_image-7305

我們剛添加的CMS在第一位,后面也多了好些,我們不用去管它。

點擊“連接”按鈕吧,下面的數據表選擇就激活了:

wps_clip_image-9588

這里可以見到我們剛才添加的三張表。右邊的兩個生成按鈕也亮了,也就是說可以生成了。不過先別着急,我們看看下面的各個設置框,重點是右邊的模版:

wps_clip_image-29999

先看右邊的模版,有六個帶星號開頭的模版,星號表示內置模版,如果感興趣,可以點右邊的“釋放內置模版”按鈕,把它們釋放出來到文件中,學習一下怎么寫模版也行,這里就不多說了。

這次我們主要是想生成實體類代碼,要用到實體數據和實體業務兩個模版,因為一個實體類由兩個文件采用分部類的方式組成,如果修改了數據庫表結構,下次只需要生成實體數據那個文件即可,而開發者自己寫的代碼都寫在實體業務那個文件里面。

我們修改一下左邊的設置:

wps_clip_image-4600

命名空間就是要生成的實體類的命名空間,連接名也是實體類里面的一個模版變量,輸出目錄自然就是實體類文件要存放的目錄啦,相對於代碼生成器根目錄。

一切准備就緒,選擇實體數據模版,點擊“生成所有表”按鈕,然后換成實體業務模版,再生成所有一次。

wps_clip_image-30042

下面我們去看看MyCMS目錄,我們生成的東西在那:

wps_clip_image-17645

都在這!每個表兩個文件,帶Biz的是業務文件,供手寫代碼的,另一個就是數據文件,方便數據表結構變更時重新生成覆蓋。

先看看實體數據文件:

wps_clip_image-13370

上面這個命名空間,就是剛才代碼生成器那里填寫的;下面這個ConnName就是代碼生成器那里填寫的連接名。

再看看實體業務文件:

wps_clip_image-10933

命名空間和類型,跟數據實體是一樣的,注意那個partial關鍵字,表示分部類的意思,一個類分成兩個文件存放。絕大部分ORM的實體類都這么干。

這個類繼承自Entity<Admin>,其中Entity<>是泛型基類,也就是XCode實體層的核心,實體類的絕大部分功能都由它提供。這個對應於代碼生成器上的“實體基類”,有些時候可能需要使用自己的實體基類。

下面有很多代碼段,里面幾乎都是一些注釋,告訴用戶最常用的一些功能怎么用怎么寫。

三、建立站點

實體類都生成好了,我們開始建立項目吧。一個CMS解決方案,包括一個CMS類庫和一個Web站點(Website)。

wps_clip_image-7889

把那個Class1.cs刪了,把上面生成的實體類文件放進去,設置站點Web引用類庫CMS

wps_clip_image-3530

開始編譯一下看看。

wps_clip_image-10536

真是壯觀呀!原來是我們忘記引用XCode了。把我們准備好的DLL放進來,跟WebCMS目錄並排。(XCode.dll依賴於核心庫NewLife.Core.dll

wps_clip_image-32671

類庫CMS引用這兩個DLL,網站就不需要引用了,因為網站引用了類庫,XCode那些會跟着過來的。再編譯!

wps_clip_image-7729

這回編譯通過了!

web.config設置一些常用設置,當然最重要的就是數據庫連接字符串;

wps_clip_image-18823

打開全局調試開關和XCode調試開關,主要是為了看到完整的XCode工作日志。

我們先在默認頁Default.aspx寫一段測試代碼看看,同時也是給系統增加一個管理員帳號:

wps_clip_image-11153

這段代碼很簡單,調用實體類的靜態方法Find去查找UserNameadmin的對象,如果沒找到,就實例化一個,然后分別給兩個屬性賦值,再保存Save回去,這樣子就往數據庫插入了一條記錄。

不要忘了引用實體類的命名空間“NewLife.CMS”,這樣才能使用實體類Admin

這算是第一段使用XCode的代碼,趕緊的預覽頁面看看效果:

wps_clip_image-11715

執行成功!到這里,一個只有實體類的空白站點就建立了。

四、后台登錄

建立一個后台目錄Admin,包括后台首頁Default.aspx和登錄頁Login.aspx

wps_clip_image-28905

設計登錄頁,登錄成功后跳轉到后台首頁。后台首頁如果發現沒有登錄就跳轉到登錄頁。

wps_clip_image-16944

這里也不要忘了引用實體類命名空間“NewLife.CMS”。預覽頁面看看效果!

wps_clip_image-22115

關於XCode里面添刪改查等完整代碼操作參看ORM組件XCode(速覽)

五、建立后台

我們在后台目錄Admin中增加一個用來管理管理員的頁面Admin.aspx,然后調整一下后台首頁Default.aspx,讓它作為后台導航頁,通過菜單鏈接到其它管理頁面Admin.aspxAdminForm.aspx

wps_clip_image-14629wps_clip_image-19583

下面開始設計Admin.aspx,這個作為一個列表頁,把該表所有數據列出來。我們采用經典的GridView+ObjectDataSource來實現。

wps_clip_image-21121

如果你是第一次使用ObjectDataSource,這里可要看好了。ObjectDataSource的右邊有個智能標記,一個小箭頭,可以點開。我們選擇“配置數據源”,看看神奇的一幕。

wps_clip_image-26489

wps_clip_image-15874

wps_clip_image-6855

wps_clip_image-16717

ObjectDataSource的設計界面列出來我們的所有實體類,Select那里列出來一個Search方法(XCodeEntity<>基類內置),還有UpdateInsertDelete也有(也是內置)。我們先默認,一路下去。(在這里,各個DLL的版本一定要對應,重點是XCode.dllNewLife.Core.dll,否則ObjectDataSource將可能無法列出實體類)

選擇GridView,打開智能標記,選擇數據源為下面這個ObjectDataSource

wps_clip_image-15728

預覽看看效果:

wps_clip_image-18264

出來了!沒有寫一行代碼,數據就列出來了。

我們修改一下根目錄的Default.aspx,往數據庫里面添加50個管理員數據。

Admin.Meta.Count是返回Admin實體對應的數據表的總記錄數)

wps_clip_image-1624

現在再來看看前面的管理員列表

wps_clip_image-27676

全都列出來了,但是沒有分頁呀。

現在開始設置一下ObjectDataSource

wps_clip_image-26550wps_clip_image-28329

EnablePaging設為true,表示支持分頁,SelectCountMethod設為SearchCount,這個也是實體基類內置方法,它跟前面的Search方法是一對,具有完全相同的參數列表,startRowIndexmaximumRows就是其中的兩個。SortParameterName設為orderClause,表示排序的那一個參數,也是Search的參數之一。

再來設置一下GridView,點開智能標記,選擇分頁、排序、編輯、刪除

wps_clip_image-11072

wps_clip_image-1304

把屬性DataKeyNames設置為ID,也就是實體類的主鍵。趕緊看看效果!

wps_clip_image-31971

分頁有了,每一行多了編輯和刪除,列頭也變成藍色可選。

下面試試基本操作,同時附上日志文件(網站根目錄下的Log目錄)中的SQL語句。先看分頁

wps_clip_image-10491

wps_clip_image-16375

准確跳到第三頁!后面有第一頁和第三頁的查詢語句,XCode能夠根據當前使用的數據庫和版本自動生成性能最優的分頁語句。

再試試編輯ID=30的數據,並更新回去

wps_clip_image-26666

wps_clip_image-11085

wps_clip_image-25891

刪除ID=31這一行

wps_clip_image-19090

wps_clip_image-19296

點擊列頭的UserName,讓數據按鈕UserName排序,跳到第三頁

wps_clip_image-14294

wps_clip_image-24387

再點擊一次,讓其反向排序,然后跳到第三頁

wps_clip_image-13881

wps_clip_image-20114

我們來做個查詢,增加一個文本框和查詢按鈕,查詢按鈕不需要寫代碼,僅僅是為了讓頁面回發。

wps_clip_image-24329

然后改一下ObjectDataSource的參數,可以通過打開智能標記,一路到最后一步,也可以從屬性窗口的SelectParameters打開,設置key參數綁定控件txtKey,也就是上面的文本框。

wps_clip_image-19858

“確定”后保存頁面,有時候設計器的修改無法更新到頁面源碼上面,可以通過把設計器切換為源碼試試,也可以點擊源碼右邊的滾動條。

wps_clip_image-23771

圖中可以看出源碼的改變。上圖中可以看出Search方法和SearchCount有四個參數,除了key外,另外三個前面都有提到。這個方法實際上就是對這個實體類的所有字符串字段進行模糊查詢。

預覽看一下效果,輸入關鍵字“修改”進行查詢,看看能不能找到我們剛才修改的那一行。

wps_clip_image-11845

wps_clip_image-19558

試試查詢“admin3

wps_clip_image-19035

wps_clip_image-22816

日志里面的SQL與時俱進!

上面展示了分頁、排序、編輯、刪除、查詢,實際上還可以查詢加分頁加排序,混合進行。

ObjectDataSource高級查詢可以參考《在XCode中如何使用高級查詢

ObjectDataSource的更多精彩《與ObjectDataSource共舞

我們增加一個添加管理員用的表單頁面AdminForm.aspx

wps_clip_image-7631

wps_clip_image-7161

試試添加一個管理員test/test

wps_clip_image-8009wps_clip_image-13472

wps_clip_image-3260

添加成功!

六、總結

到此為止,我們完成了一個最簡單的后台管理模塊,欄目和文章的管理,也可采用類似的做法來實現。

看到這里,如果沒看明白,建議結合例子代碼回頭再看幾次。

如果你要鄙視這種做法,那么恭喜你,終於邁開了通向XCode的第一步!

我們開頭就說過,真正用XCode開發項目,肯定不會是這么做的,因為這種做法,實在是——效率太低、可維護性太差!

如果你開始對XCode感興趣,可以先看看這幾篇文章:

數據映射組件NewLife.XCode優勢

ORM組件XCode(撬動千萬級數據)

充血模型的ORM能做什么?——ORM組件XCode(十八般武藝)

更多精彩敬請等待!

 

XCode入門例子項目下載

 

代碼生成器XCoder下載

 

大石頭

新生命開發團隊

2012-02-27 00:17


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM