V1.1到V1.2的更新,重構了不少類及方法,其中主要作了性能優化(取消全部反射,使用表達式樹+緩存)、解耦了SQL生成層(沒有實體、隊列的依賴,全部數據均經過表達式樹傳遞解析)web
先上內部更新歷史記錄:
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
接近20天的工做量,有45處變化。修復了已知的BUG、並新增了一些功能,詳細以下:數據庫
15處重構
- 重構:SQL日誌記錄功能
- 重構:ExpressionVisitor解析器,重命名爲AbsSqlVisitor(SQL解析專用基類),繼承自AbsExpressionVisitor(通用解析類)
- 重構:SelectVisitor字段篩選解析器,改成只爲字段篩選服務(舊的與排序共用)
- 重構:Select表達式樹,由原來的List<Expression> 合併爲一個Expression(合併了)
- 重構:Insert、Update的實體賦值傳遞到SQL生成類 改成轉成表達式樹傳遞
- 重構:重構AddAssign的實現,由原來的Dictionary<Expression, bool> Assign 改成 Expression(合併了)
- 重構:將SQL、DbParam、Name從Queue移到ISqlBuilder中,由SqlBuilder繼承併爲每一個方法返回
- 重構:部份屬性、方法、類的命名優化
- 重構:隊列管理由TableQueueManger、ProcQueueManger、ViewQueueManger合併爲:QueueManger
- 重構:數據庫上下文由TableContext、ProcContext、ViewContext合併爲:DbContext
- 重構:減小Queue代碼(表達式樹合併代碼,統一放到ExpressionBuilder類中管理
- 重構:減小Queue在全局的依賴,改成新增接口依賴
- 重構:非每次查詢新實例的對象移到DbContext中
- 重構:取消AbsSqlVisitor對Queue的依賴
- 重構:取消SqlBuilder對Queue的依賴(用戶須要實現本身SQL下更方便)
7處優化
- 優化:SQL日誌記錄工具
- 優化:TableSetCache緩存中Update、AddUp的處理,由反射改成委託執行
- 優化:表達式樹的SetValue方法 + 緩存(代替舊PropertyInfo.SetValue反射)
- 優化:表達式樹的GetValue方法 + 緩存(代替舊PropertyInfo.GetValue反射)
- 優化:表達式樹的CreateInstance方法 + 緩存(代替舊Activator.CreateInstance(type)反射)
- 優化:DataTable轉ToList操做
- 優化:AssignVisitor解析器,讓它支持全部賦值操做
11處新增
- 新增:TableSetCache方法,動態返回TableSetCache類型
- 新增:IEnumerable<>.ToList 的 總數量擴展方法
- 新增:IDbSet接口,全部Set類繼承此接口,以添加擴展支持
- 新增:運行異常日誌功能及相應的分析器工具(簡單代替log4net,僅未捕獲異常記錄)
- 新增:反序列化時,若是失敗,則添加移動錯誤格式的文件選項參數
- 新增:AbsExpressionVisitor通用的表達式樹解析器(可自由擴展加入所需的功能)
- 新增:OrderByVisitor字段排序解析器
- 新增:AssignVisitor賦值解析器,解析Update、AddUp的實體賦值狀況
- 新增:InsertVisitor賦值解析器,解析Insert的實體賦值狀況
- 新增:SortDelete邏輯刪除功能,支持(bool、int、DateTime標記類型),TableSet調用Delete時,轉爲邏輯刪除(Update),查詢時過濾標記數據。
- 新增:IContextProvider接口、ISqlParam接口。ExpressionBuilder表達式樹建立者(條件、排序、篩選、賦值)
7處修改
- 修改:變動分類擴展方法的參數類型
- 修改:web.config配置文件重命名爲:WebGeneral.config(與.net web的web.config編譯時衝突)
- 修改:變動SqlExceptionLog配置文件名稱
- 修改:異常的郵件通知配置變名(變成通用的郵件通知,包括SQL異常、運行異常及將來增長的須要提醒的郵件)
- 修改:SelectVisitor中Visit方法的返回值(無值時返回*)
- 修改:FieldMap重命名爲SetState
- 修改:去除DbWriteSet類
5處修復
- 修復:郵件發送的BUG
- 修復:TableSet,Update時,若是主鍵設置了值以後,要過濾該值的賦值
- 修復:TableSetCache,Update時沒有對緩存限制條件,致使所有緩存被修改
- 修復:修復類型枚舉轉換失敗的BUG
- 修復:字段映射BUG