1. 程式人生 > >【原創】探索Newlife X元件利器之:XCoder點滴[附下載]

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

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

1.X元件資源彙總與入門文章

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

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,有興趣的就研究下哦,用它打造一個自己的程式碼生成器太簡單了。

相關推薦

原創探索Newlife X元件利器XCoder點滴[下載]

  XCode讓我一個外行業餘者轉變為一個半專業的開發人員,心懷感激,讓我把更多的精力關注在業務,而不是資料庫,儲存過程,sql,以及編寫一遍一遍的垃圾程式碼。在這裡我不對Newlife XCode做過多介紹,XCode曾經是一個輕量級ORM元件,現在XCode加上XCoder,變成了一個非常強大的資

原創探索雲端計算容器底層Namespace

一、先談談程序 在正式介紹Namespace之前,先介紹下程序,因為容器本質上是程序,但是在介紹程序之前,先理清下“程式”和“程序”的關係,這是IT從業人員在日常工作中經常碰到的兩個詞彙,舉個通俗點的例子幫助大家理解,“程式”可以看成是一張機械圖,圖上的內容都是手工畫上去的,相當於是計算機的輸入,在機械圖未正

總結探索Newlife元件服務代理利器XAgent的前世今生

XAgent是新生命開發團隊X元件的其中一個專案,石頭今天在群裡揭開了其神祕的面紗,很多的不懂和不解,總結成此文,以備後用。 1.XAgent的基本介紹 1.1 XAgent的來源 XAgent是一個服務代理程式,它出現的初衷,是為了解決寫Windows服務不方便的問題。因為用Visual St

原創探索容器底層知識Namespace

一、先談談程序 在正式介紹Namespace之前,先介紹下程序,因為容器本質上是程序,但是在介紹程序之前,先理清下“程式”和“程序”的關係,這是IT從業人員在日常工作中經常碰到的兩個詞彙,舉個通俗點的例子幫助大家理解,“程式”可以看成是一張機械圖,圖上的內容都是手工畫上去的,相當於是計算機的輸入,在機械圖未正

原創東方耀react native學習-37AsyncStorage

AsyncStorage是一個簡單的、具有非同步特性的鍵值對的儲存系統,全域性的!替代LocalStorage AsyncStorage裡面都有一個回撥函式,而回調的第一個引數都是錯誤物件,如果發生錯誤,該物件就會展示錯誤資訊,否則為null;每個方法都會返回

原創Matlab.NET混合程式設計技巧直接呼叫Matlab內建函式

  在我的上一篇文章【原創】Matlab.NET混編技巧之——找出Matlab內建函式中,已經大概的介紹了matlab內建函式在混合程式設計中的優點,並通過程式找出了matlab中的大部分內建函式,當然更多人關心是如何像我所說得那樣,不用直接編譯,就直接在C#中呼叫這些內建函式。本文就帶你揭開這些謎團

原創Matlab.NET混合程式設計技巧找出Matlab內建函式

  Matlab與.NET的混合程式設計,掌握了基本過程,加上一定的開發經驗和演算法基礎,肯定不難。反之,有時候一個小錯誤,可能抓破腦袋,加班幾個晚上,除錯才能解決。同樣,由於Matlab.NET混編的特殊性,加上MathWorks的原因,英文文件和沒有披露一些詳細的細節(甚至不允許反編譯MWArra

原創轉管理了(1)突如其來的“上位”

這是一篇遲來的系列文章(下圖是2018年在部落格園寫的草稿),原本已打算不寫了,畢竟自己沒讀過什麼書,怕大家笑話:) ![](https://img2020.cnblogs.com/blog/42979/202010/42979-20201027222909922-163269804.png) 從2017年

更新UI庫Kendo UI for jQuery釋出R3 2018|下載

Kendo UI for jQuery提供了在短時間內構建現在Web應用程式所需要的一切。從70多個UI中選擇,並輕鬆地將它們組合起來,創建出酷炫響應式的應用程式,同時將開發時間加快了50%。 更多資源請檢視【Kendo UI視訊教程集合】【Kendo UI TreeView功能詳解】【Kend

更新TOP Server OPC Server v6.6.348.0釋出|下載

TOP Server是Software Toolbox的OPC產品,以及本地HMI裝置連線工具應用程式。除了提供TOP Server以外,Software Toolbox還提供獨特的附加混合工具,技術支援等。Software Toolbox已經為世界各國成千上萬的使用者提供了資訊科技解決方案。 TO

更新FastReport.Net v2019.3釋出,新增數字簽名|下載

FastReport.Net是適用於Windows Forms,ASP.NET,MVC和.NET Core的全功能報表解決方案。

原創TCP超時重傳機制探索

sender mic borde 做了 5.5 多次 字節 應用程序 實現 TCP超時重傳機制探索作者:tll (360電商技術)1)通信模型TCP(Transmission Control Protocol)是一種可靠傳輸協議。在傳輸過程中當發送方(sender)向接

Activiti 6.x12剩下的一些元件

剩下的一些元件 主要講解Gateway,Connection,Artifacts以及Container部分的用法 Gateway 關於閘道器前面多多少少都有涉及。分為四種閘道器。下面將逐一描述。前三種閘道器主要以流程變數的方式做判斷。

原創開源.NET排列組合元件KwCombinatorics使用(二)——排列生成

前言   本文今天介紹的.NET開源元件是KwCombinatorics,它是.NET平臺一個高效的生成排列組合序列的開源類庫,它提供了4種生成排列與組合序列的方式。雖然原理和功能都很簡單,但是這個類庫在軟體測試、組合數學以及密碼學等方面都有很大的用處。很早就接觸了這個類庫,以前在一些小程式

原創開源.NET排列組合元件KwCombinatorics使用(三)——笛卡爾積組合

前言   本文今天介紹的.NET開源元件是KwCombinatorics,它是.NET平臺一個高效的生成排列組合序列的開源類庫,它提供了4種生成排列與組合序列的方式。雖然原理和功能都很簡單,但是這個類庫在軟體測試、組合數學以及密碼學等方面都有很大的用處。很早就接觸了這個類庫,以前在一些小

原創Aspose.Words元件介紹及使用—基本介紹與DOM概述

  我之前部落格有一篇開源的Word讀寫元件的介紹:http://www.cnblogs.com/asxinyu/archive/2013/02/22/2921861.html ,引起了不少人的關注,機緣巧合,也使得我結識了一些朋友,由於DocX的一些原因(不穩定,更新很慢),我瞭解到了Aspose.

原創開源.NET排列組合元件KwCombinatorics使用(一)—組合生成

1.Combination類基本介紹   Combination類是根據指定的物件列表,依次升序選擇非重複數字的組合序列,重複是什麼意思呢?就是指定序列中的元素不重複選擇2次。舉個例子:從 0,1,2,3這4個數中,取出3個元素組成序列,那麼共有這麼幾種組合方式:{0,1,2},{0,1,3},{0,2

原創.NET平臺機器學習元件-Infer.NET連載(一)介紹

關於本文件的說明   本文件基於Infer.NET 2.6對Infer.NET User Guide進行中文翻譯,但進行了若干簡化和提煉,按照原網站的思路進行,但不侷限與其順序。   歡迎傳播分享,必須保持原作者的資訊,但禁止將該文件直接用於商業盈利。   本人正在研究基於Infer.NET元件,並

原創.NET平臺機器學習元件-Infer.NET連載(二)貝葉斯分類器

關於本文件的說明   本文件基於Infer.NET 2.6對Infer.NET User Guide進行中文翻譯,但進行了若干簡化和提煉,按照原網站的思路進行,但不侷限與其順序。   歡迎傳播分享,必須保持原作者的資訊,但禁止將該文件直接用於商業盈利。   本人正在研究基於Infer.NET元件,並

原創Newlife.XCode的常見功能使用(一)查詢與資料初始化

1.前言 宣告:此Newlife.XCode非Mac的XCode,避免誤會。 1.QQ群:1600800 2.部落格論壇 : NewlifeX論壇 (同時也是.Net Micro Framework/ApolloOS的交流論壇,幫助軟體開發者使用C#快速進入嵌入式開發領域)   使用XCode