实体支持只更新部分变更的字段

实体支持只更新部分变更的字段

Rafy 框架 - 实体支持只更新部分变更的字段-LMLPHP

Rafy 快一两年没有大的更新了。并不是这个框架没人维护了。相反,主要是因为自己的项目、以及公司在使用的项目,都已经比较稳定了,也没有新的功能添加。但是最近因为外面使用了 Rafy 的几个公司,找到我,提出了一些明确的需求,期望我做一些相应的升级。所以可能最近几个月,会陆续更新 Rafy 框架。

目前,Rafy 已经支持了 NetStandard 2.0。最近升级后,可能截止到明年,会陆续支持 NET5-6 上的一些功能。

今天这篇博客,主要是记录了一个客户提出了多次的需求:实体更新时,只更新改动的字段。

听上去,这个需求是一个非常简单的需求,但是我一直没有升级。原因是认识使用 Rafy 的开发者,都会更多地关注领域模型。而不需要太多关注 Update 语句具体是更新了几个字段。Rafy 框架会管理好领域框架的状态变更。事实上,这几年确实没有升级,而开发者也用得很好,很少有人关注。但是这次客户提出意见,由于他们的实体类中的属性实在太多了,查看日志中的更新语句时,较难定位具体已经修改的属性。再加之,Rafy 接下来会添加一个只查询部分实体属性的功能。所以就一并完成了。

主要设计思路

下面,主要截了一些设计过程的图就好了。实现不难,有兴趣的看源码就行。主要就是先在脑图中整理好需求、设计、场景、测试用例,然后 TDD 先编写相应的单元测试,再实现框架的内部代码。

Rafy 框架 - 实体支持只更新部分变更的字段-LMLPHP

Rafy 框架 - 实体支持只更新部分变更的字段-LMLPHP

实现效果

实现完成后,所有单元测试运行通过。
Rafy 框架 - 实体支持只更新部分变更的字段-LMLPHP

查看日志,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;

10-13 22:03