Rafy 框架 - 實體支援只更新部分變更的欄位

BloodyAngel發表於2021-10-13

Rafy

Rafy 快一兩年沒有大的更新了。並不是這個框架沒人維護了。相反,主要是因為自己的專案、以及公司在使用的專案,都已經比較穩定了,也沒有新的功能新增。但是最近因為外面使用了 Rafy 的幾個公司,找到我,提出了一些明確的需求,期望我做一些相應的升級。所以可能最近幾個月,會陸續更新 Rafy 框架。

目前,Rafy 已經支援了 NetStandard 2.0。最近升級後,可能截止到明年,會陸續支援 NET5-6 上的一些功能。

今天這篇部落格,主要是記錄了一個客戶提出了多次的需求:實體更新時,只更新改動的欄位。

聽上去,這個需求是一個非常簡單的需求,但是我一直沒有升級。原因是認識使用 Rafy 的開發者,都會更多地關注領域模型。而不需要太多關注 Update 語句具體是更新了幾個欄位。Rafy 框架會管理好領域框架的狀態變更。事實上,這幾年確實沒有升級,而開發者也用得很好,很少有人關注。但是這次客戶提出意見,由於他們的實體類中的屬性實在太多了,檢視日誌中的更新語句時,較難定位具體已經修改的屬性。再加之,Rafy 接下來會新增一個只查詢部分實體屬性的功能。所以就一併完成了。

主要設計思路

下面,主要截了一些設計過程的圖就好了。實現不難,有興趣的看原始碼就行。主要就是先在腦圖中整理好需求、設計、場景、測試用例,然後 TDD 先編寫相應的單元測試,再實現框架的內部程式碼。

需求

設計

實現效果

實現完成後,所有單元測試執行通過。
單元測試通過

檢視日誌,Sql 的對比效果,升級前的更新語句:

UPDATE [Users] SET [AddedTime] = '2000/1/1 0:00:00',[Age] = 100,[LoginName] = '',[UserName] = 'nameChanged;',[TasksTime] = 0,[TestUserExt_UserCode] = 'DefaultUserCode' WHERE [Id] = 2967;

升級後的更新語句,也只更新變更後的屬性了:

UPDATE [Users] SET [UserName] = 'nameChanged;' WHERE [Id] = 2968;

相關文章