NewLife.XCode是一個有10多年歷史的開源數據中間件,支持nfx/netcore,由新生命團隊(2002~2019)開發完成並維護至今,以下簡稱XCode。
整個系列教程會大量結合示例代碼和運行日志來進行深入分析,蘊含多年開發經驗於其中,代表作有百億級大數據實時計算項目。
開源地址:https://github.com/NewLifeX/X (求star, 795+)
如果說前面16篇講的都是XCode的ORM功能,從這一篇開始,將超越ORM之外,從另一個角度講解一個數據中間件!
實體接口
有心的同學可以發現,每一個實體類都有實現一個IEntity接口,這就是實體接口。
實體接口IEntity,抽象實體對象的添刪改存操作,支持訪問臟數據和擴展屬性!
日復一日的寫添刪改查,上進的同學會想,能不能把許多類似的操作給封裝為通用函數?
這是對IEntity接口的擴展方法,新增時設置CreateTime,每次設置UpdateTime,然后Save保存。
IEntity支持通過名稱讀寫字段屬性(《臟數據》中有提到實體屬性賦值的三種方法),支持臟數據和添刪改,可以無需反射而實現各種封裝。
IEntity主要構成:
- 添刪改存。Insert/Update/Delete/Save/SaveAsync
- 取值賦值。this[name]/SetItem/CloneEntity/CopyFrom
- 臟數據。Dirtys/HasDirty/IsDirty(name)
- 擴展屬性。Extends
實體工廠
實體工廠接口IEntityOperate,抽象提供實體類的元數據、查詢、事務、設置!
實體類的各種元數據一般可以通過內嵌靜態類Meta訪問,也可以通過實體工廠接口IEntityOperate訪問,以便於設計各種靈活功能。
實體工廠接口IEntityOperate主要構成:
- 字段屬性信息 Fields/AllFields/FieldNames。最常用,訪問到所有數據屬性的信息
- 數據表 Table。提供實體類和數據表相關信息
- 唯一主鍵 Unique。XCode強烈推薦使用唯一主鍵,因為許多特色功能要求有唯一主鍵才能支持
- 實體會話 Session。提供數據庫查詢與執行的直接操作
- 分表分庫 TableName/ConnName。接口訪問跟Meta.TableName/Meta.ConnName一樣,可通過對其賦值改變當前線程下使用的表名和連接名,從而實現分表分庫功能
- 緩存 Cache/SingleCache/Count。實體緩存、對象緩存、總記錄數
- 查詢數據 Find/FindByKey/FindAll/FindCount
- 事務 BeginTransaction/Commit/Rollback
場景一:從Http請求中讀取數據並填充到實體屬性
場景二:多個實體類要做修改日志,重載Insert/Update/Delete后調用以下方法,把實體對象中被修改(IsDirty有臟數據)的字段和數值拼成字符串寫入日志表
總結
XCode是一個開放性的數據中間件,為各公司團隊打造自己的開發平台提供鼎力支持!
在這十多年的發展中,幾乎所有使用XCode的公司團隊,都根據團隊情況和業務需要封裝了自己的快速開發平台!
系列教程
NewLife.XCode教程系列[2019版]
- 增刪改查入門。快速展現用法,代碼配置連接字符串
- 數據模型文件。建立表格字段和索引,名字以及數據類型規范,推薦字段(時間,用戶,IP)
- 實體類詳解。數據類業務類,泛型基類,接口
- 功能設置。連接字符串,調試開關,SQL日志,慢日志,參數化,執行超時。代碼與配置文件設置,連接字符串局部設置
- 反向工程。自動建立數據庫數據表
- 數據初始化。InitData寫入初始化數據
- 高級增刪改。重載攔截,自增字段,Valid驗證,實體模型(時間,用戶,IP)
- 臟數據。如何產生,怎么利用
- 增量累加。高並發統計
- 事務處理。單表和多表,不同連接,多種寫法
- 擴展屬性。多表關聯,Map映射
- 高級查詢。復雜條件,分頁,自定義擴展FieldItem,查總記錄數,查匯總統計
- 數據層緩存。Sql緩存,更新機制
- 實體緩存。全表整理緩存,更新機制
- 對象緩存。字典緩存,適用用戶等數據較多場景。
- 百億級性能。字段精煉,索引完備,合理查詢,充分利用緩存
- 實體工廠。元數據,通用處理程序
- 角色權限。Membership
- 導入導出。Xml,Json,二進制,網絡或文件
- 分表分庫。常見拆分邏輯
- 高級統計。聚合統計,分組統計
- 批量寫入。批量插入,批量Upsert,異步保存
- 實體隊列。寫入級緩存,提升性能。
- 備份同步。備份數據,恢復數據,同步數據
- 數據服務。提供RPC接口服務,遠程執行查詢,例如SQLite網絡版
- 大數據分析。ETL抽取,調度計算處理,結果持久化