【原創】探索Newlife X組件利器之:XCoder點滴[附下載]


        本博客所有文章分類的總目錄:http://www.cnblogs.com/asxinyu/p/4288836.html

Newlife XCode組件相關文章目錄:http://www.cnblogs.com/asxinyu/p/4329747.html

  XCode讓我一個外行業余者轉變為一個半專業的開發人員,心懷感激,讓我把更多的精力關注在業務,而不是數據庫,存儲過程,sql,以及編寫一遍一遍的垃圾代碼。在這里我不對Newlife XCode做過多介紹,XCode曾經是一個輕量級ORM組件,現在XCode加上XCoder,變成了一個非常強大的數據建模工具,支持實體對象數據到不同媒體的數據映射,提供面向對象的方式操作數據庫,解決90%以上的數據庫操作場景。X系列組件同樣功能強大,以前寫過很多篇關於XCode的文章,再打算寫幾篇總結,深入一點的,讓大家更多更好的了解XCode的強大功能以及開發效率。

1.X組件資源匯總與入門文章

我的博客有一篇文章匯總了X組件(主要是XCode)的相關資源和文章:http://www.cnblogs.com/asxinyu/archive/2013/04/16/3023386.html

另外,我特別推薦JangoJing的幾篇入門教程,是XCode學習入門的經典文章:

NewLife.XCode 上手指南(1)-基礎介紹入門 

NewLife.XCode 上手指南(2)-反向工程使用

NewLife.XCode 上手指南(3)-擴展屬性使用

NewLife.XCode 上手指南(4)-級聯操作

NewLife.XCode 上手指南(5)-復雜查詢 

2.初識XCoder:基本代碼生成功能

XCoder是X組件入門的第一個工具,它的初衷是為XCode提供一個代碼生成器,根據自定義的C#語法模版,來批量生成自定義的代碼,如模型,業務操作,表單等等。只有學會了XCoder的代碼生成才能順利的使用XCode進行數據庫操作。這只是一個工具,使用是非常簡單的,但現在XCoder的功能越來越豐富,已經不僅僅是一個代碼生成器了,而是一個越來越成熟的數據庫建模工具。例如,數據庫架構導入導出,新增數據庫架構,鏈接其他類型的數據庫,進行數據查詢。那今天就逐一了解下這些功能。看看最新版的XCoder界面:

 首先簡單的給大家介紹一下,主界面上的東西,和用途,這樣大家有一個初步的了解,使用就方便了。其實試一試很快就知道了,這里深入點講解,可能一部分細節對你以后開發有用的。本文最上面的推薦入門文章,其實也很詳細的介紹了用法。

1) 在初始啟動,沒有“連接”數據庫時,菜單只有3個:“文件”,“添加模型”,“幫助”。菜單里面的東西都很直觀,大家打開看就知道,都是一些細節,比如"Oracle客戶端運行時檢查","表名字段名命名規范"等等,最好是按照上面的細節要求來,這樣兼容性和處理問題就最好。這里的“添加模型”是我去年12月份左右空閑的時候為XCoder增加的一個建模功能,還很粗糙,對簡單的項目,可以直接用。目的是在沒有任何數據庫軟件的情況下,進行數據庫設計和開發。思想很簡單,通過添加模型,生成XCoder指定的XML模型格式,然后利用模型來生成實體,最后在項目中通過“反向工程”來生成數據庫;當然這里也可以通過直接導入XML模型來獲取架構(第一次要先連接數據庫,生成XML架構,以后才可以導入進行操作);

2) 關鍵的“連接”:這里的“連接”是指“數據庫連接字符串”,它是在配置文件進行指定的,所以這里是下列列表,如果需要改動或者新增“連接”,需要打開配置文件。項目開發的時候,也是的,XCode會在默認的項目配置文件中進行查找字符串,是根據“連接名”來匹配查找的,在“實體”模型里面,會把生成實體的“連接名”記住,默認采用此名稱;當然在開發的時候,是可以動態對 實體的 連接進行修改的,這個功能就是 “分庫分表”的基礎,因此在使用XCode的項目中,可以輕易的進行分庫分表操作,而實體都是同一個。看看配置中“連接字符串”的格式,以及支持的數據庫:

 1 <connectionStrings>
 2     <add name="mssql" connectionString="Data Source=.;Initial Catalog=master;Integrated Security=True;" providerName="System.Data.SqlClient"/>
 3     <add name="access" connectionString="Provider=Microsoft.Jet.OLEDB.4.0; Data Source=XCMS.mdb"/>
 4     <add name="Oracle" connectionString="Data Source=orc;User ID=admin;Password=admin;DllPath=C:\OracleClient" providerName="System.Data.OracleClient"/>
 5     <add name="Oracle2" connectionString="Data Source=(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.34)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = ORC)));User ID=admin;Password=admin;;DllPath=C:\OracleClient" providerName="System.Data.OracleClient"/>
 6     <add name="sqlite" connectionString="Data Source=test.db;" providerName="Sqlite"/>
 7     <add name="MySql" connectionString="Server=.;Port=3306;Database=master;Uid=root;Pwd=root;" providerName="MySql.Data.MySqlClient"/>
 8     <add name="SqlCe" connectionString="Data Source=test.sdf;" providerName="SqlCe"/>
 9     <add name="Firebird" connectionString="Server=.;Database=test.fdb;User=SYSDBA;Password=masterkey;" providerName="FirebirdSql.Data.FirebirdClient"/>
10     <add name="PostgreSQL" connectionString="Server=.;Database=master;Uid=root;Pwd=root;" providerName="PostgreSQL.Data.PostgreSQLClient"/>
11   </connectionStrings>

應該很簡單,目前XCode已經不用任何擴展就支持上述7種數據庫,當然通過接口,也可以支持你想要的數據庫。注意,XCoder界面中下拉列表的集合就是這里字符串的"Name"屬性集合。

3) 在配置文件中配置好“連接字符串”后,通過“連接”按鈕,就可以實時的獲取數據庫架構了(當然配置文件要正確哦),這時在"數據庫表"下來列表,可以看到指定的“連接字符串”所對應的數據庫的所有表了(如果沒有這里選擇不能用或者沒有表,可能是字符串配置有錯誤哦)。可以選擇單個表進行生成,也可以選擇所有表生成;當然之前要選擇下面的“模版”,XCoder內置了8種模版,也可以自己編寫模版,放在指定的目錄就可以讀取了,如下圖所示的8種模版,一般的項目實體主要用“實體數據”,和“實體業務”2個模版,其他的模版其實也挺有用,只不過適用的地方不是特別廣泛:

注意:如果想參考XCoder的模版語法和編寫,可以查看內置模版,點擊“釋放內置模版”,就可以在XCoder的目錄看到Template文件夾了,里面包含了所有的內置模版,自定義的模版也是放在這個文件夾里面的。

 4) 選擇好模版之后,下一步就是填寫生成代碼命名空間的相關信息,主要是:

    命名空間:填寫你計划中類庫項目的命名空間;

    連接名:這里一定要填寫你項目中使用的“數據庫連接字符串”的“Name”名稱屬性,可以和當前的XCoder中的名稱不一樣,當然最好是一樣的,免得自己也搞糊塗了。

    實體基類:一般就是Entity了,但有一個可選的“生成泛型實體類”,因為XCode里面大量的使用泛型基類,所以這里的泛型實體類在設計一些基礎模型時是很有用的,如果是初次使用,在沒有搞懂XCode的一些原理之前,還是不要勾選為好。

    輸出目錄:這個就是生成的文件的保存位置,相對與當前目錄,可以選擇中文文件名,中文文件名稱是根據表的備注來的;

    擴展屬性編輯器:這個功能是在我的提出下,大石頭團隊增加的功能,這個功能的目的是提供更多的可選參數,來豐富模版的開發。例如目前界面上的命名空間這些設置,如果有人自定義了很多信息,需要更多的設置項目,怎么辦?那就可以在這里面動態添加進行,模版生成的時候,會在這里面進行尋找參數值。

5) 其他的也沒什么了,主界面也就這點元素,只要連接字符串配置正確,都很好辦。右小角是動態獲取的論壇文章列表信息。有興趣的可以多去論壇看看,那里有很多資源,包括問題和答案,還有大家喜歡的源代碼。

3.活用XCoder:模型與架構管理

3.1 導出模型

  在主界面上,順利連接數據庫,獲取到架構信息后,可以通過“導出模型”按鈕,將數據庫的架構信息保存到XML文件中。這樣做的好處就是,以后每次修改數據庫就不需要使用原始的數據庫管理軟件了,直接使用XCoder提供的架構管理就可以進行代碼生成或者架構更新等操作。同樣,在上一節中,也提到了也可以直接通過“導入模型”來獲取架構信息,就是這個意思,下面看看導出XML的例子,就是保存了數據表的各種原始信息,如下XML代碼,是開源的DTCMS的數據庫中的一個表的導出信息格式,太多無法一一列出:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <Tables Version="8.9.4841.25349">
 3   <Table Name="dt_amount_log" Description="充值日志" DbType="SqlServer">
 4     <Columns>
 5       <Column Name="id" DataType="Int32" Identity="True" PrimaryKey="True" Description="自增ID" />
 6       <Column Name="user_id" DataType="Int32" Description="用戶ID" />
 7       <Column Name="user_name" DataType="String" Length="100" Description="用戶名" />
 8       <Column Name="type" DataType="String" Description="類型" />
 9       <Column Name="order_no" DataType="String" Length="100" Description="訂單號" />
10       <Column Name="payment_id" DataType="Int32" Default="0" Description="支付方式" />
11       <Column Name="value" DataType="Decimal" RawType="decimal" Length="9" NumOfByte="5" Precision="9" Scale="2" Default="0" Description="增減值" />
12       <Column Name="remark" DataType="String" Length="500" Description="備注說明" />
13       <Column Name="status" DataType="SByte" Length="3" Precision="3" Default="0" Description="狀態0" />
14       <Column Name="add_time" DataType="DateTime" Default="getdate()" Description="生成時間" />
15       <Column Name="complete_time" DataType="DateTime" Description="完成時間" />
16     </Columns>
17     <Indexes>
18       <Index Name="PK_DT_AMOUNT_LOG" Unique="True" PrimaryKey="True" Columns="id" />
19     </Indexes>
20   </Table> 
21 </Tables>

天天和數據庫打交到的朋友,應該很清楚的很容易理解,每個表的名稱,描述,以及原始的數據庫類型,列名的信息,長度等等,以及索引的信息,都包括了。這些信息是代碼生成器的基礎,同時也是XCode操作的基礎。

3.2 數據庫架構管理

在導入模型或者連接數據庫后,菜單會出現“模型”項,有幾個子項目,第一個子菜單就是“數據架構管理”,點擊進去之后,界面如下:

如上圖突出部分顯示,可以選擇查看“當前數據庫連接”下的數據庫中的各個“表”的架構信息,同時還可以進行編輯修改,當然也可以直接選擇其他“連接字符串”;同時,也可以獲取建表的Sql語句等功能;也可以動態添加好字段和索引功能;可以說,可以完全拋棄其他數據庫管理工具,直接使用XCoder來完成數據庫建模的任務。當然可能某些功能需要完善,當這個小巧的東東如此強大,也許可以大大減輕我們的工作量和關注的事情。而且修改的模型保存為XML后,對所支持的數據庫是通用的。

3.3 查詢分析器

這是XCoder強大的亮點之一,同樣是基於“連接字符串”,當XCoder連接上數據庫后,就可以通過使用查詢分析器,編寫sql語句進行查詢。為什么強大?也許你懂了,各種數據庫都可以在這里查詢,這意味這什么,意味着那些龐大的數據庫管理軟件貌似都不需要了。曾經我電腦上沒有查看access和sqlite的軟件,后來想到了XCoder的這個功能,馬上拿來用,非常好使。看看截圖:

也就是說通過配置文件,所有XCoder支持的數據庫都可以在這里通過sql語句進行查詢。這對開發帶來的影響也許很小,但對個人習慣來說,確實一大步,畢竟再好的電腦,性能也有限,軟件越少越好,越精簡越好。

4.XCoder模版的介紹

  XCoder核心其實就是XCode和XTemplate,上面介紹的以及實際開發用到的基本都是XCode,而模版引擎XTemplate這個強悍的工具,不得不在這里說一說。我的博客曾經有一篇文章里面詳細講到過模版引擎的語法:

1、模板是完全使用C#作為模版語言,把<##>標簽外的文本內容當作字符串原樣輸出,而把<##>標簽內作為C#代碼執行,因此很容易理解。
2、模板引擎中獲取的數據值,傳入的Data是一個字典集合,可以根據名稱訪問,任何獲取變量值都要用 <#=  #>,例如<#= Data["NameSpace"]#>,獲取字典中key為NameSpace的值,用來作為命名空間。<#= #>同樣可以用來獲取在模板中定義的的變量值。
3、模板中變量的定義是在<# #>里面定義的,不要=號,定義的時候可以使用<#=#>來替代部分值。如
< # string title = <#=Data["Title"]#>Name#>,這里組合一個字符串,可以在下面調用<#=Title#>
3.另外模板中需要的循環等都要在<# #>里面,其他所有在<# #>都會原樣輸出。
4.可以看到整個模板中就是這2個東西<##>和<#= #>,他們是關鍵,雖然沒什么難度,但出錯了,的確比較麻煩,很難改,當然模板引擎有調試功能,當然多寫多改,就經驗就好辦了。下面來分析一段簡單的模板,就是字段定義的,根據Data是一個鍵值對集合,來生成字段定義,鍵值對中Key是字段名稱,value是字段類型。Data集合中還有2個其他的字段,不能包括在里面,那就是NameSpace和ClassName,所以生成字段的時候要把這2個排除在外,所以下面的循環中有一個判斷。

還是看一個很簡單的XCoder內置的模版例子,這個例子是根據數據庫表來生成“實體的屬性”:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.ComponentModel;
 4 
 5 namespace <#=Config.NameSpace#>
 6 {
 7     /// <summary><#=Table.Description#></summary>
 8     [Serializable]
 9     [DataObject]
10     [Description("<#=(""+Table.Description).Replace("\\", "\\\\")#>")]
11     public partial class <#=Table.Name#>
12     {
13         #region 屬性<#
14         foreach(IDataColumn Field in Table.Columns)
15         {#>
16         private <#=Field.DataType.Name#> _<#=Field.Name#>;
17         /// <summary><#=Field.Description#></summary>
18         [DisplayName("<#=Field.DisplayName#>")]
19         [Description("<#=(""+Field.Description).Replace("\\", "\\\\")#>")]
20         [DataObjectField(<#=Field.PrimaryKey.ToString().ToLower()#>, <#=Field.Identity.ToString().ToLower()#>, <#=Field.Nullable.ToString().ToLower()#>, <#=Field.Length#>)]
21         public <#=Field.DataType.Name#> <#=Field.Name#> { get { return _<#=Field.Name#>; } set { _<#=Field.Name#> = value; } }
22     <# }#>
23     #endregion
24     }
25 }

對照上面的語法,和這段模版,好好講解一下:

1) 開頭的命名空間引用都是原樣輸出,因為它不在任何的<##>之間;寫什么就輸出什么

2) 這里的<#=Config.NameSpace#>其實就是獲取XCoder界面上的設置:命名空間,包括界面上講到的擴展屬性編輯器,其實就是把鍵值對放在Config.Items里面,這里就是從Config里面獲取界面上輸入的信息。<#=XXX#>其實就是獲取值進行填充了;

3) <#foreach(IDataColumn Field in Table.Columns){#> 這里的<#  #>是循環語句,也就是說對Table表所有的字段進行遍歷,循環進行的操作在括號里面;

4) 其實要點就這么幾條,其他的語法都是C#語法,所有模版引擎的編寫是非常簡單的,模版里面的Table類就是數據庫表的架構信息,需要注意的就是括號的匹配,如果不小心括號搞錯了,調試還是有些麻煩的。

5.資源下載

順便發一個最新版本的XCoder,有興趣的就研究下哦,用它打造一個自己的代碼生成器太簡單了。

 XCoder V5.1http://www.kuaipan.cn/file/id_4279479643944128.htm


免責聲明!

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



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