crud 中这类场景如何优雅

2023-04-02 13:00:20 +08:00
 pkm
问题:crud 的时候,前端可能会传递有几十个字段的对象过来,后端需要与数据库对比看哪些字段发生了变化,以及关联属性变化是不是允许的;
背景:项目中以 DDD 驱动开发,存量代码以事务性脚本写逻辑

想请教下前辈们面对这样的问题有没有优雅的方案
1605 次点击
所在节点    程序员
9 条回复
thinkershare
2023-04-02 13:34:16 +08:00
典型的没事找事干,如果系统没法大改,干脆全部用事务脚本算了,反正想都能想的到,你们的系统这种场景肯定都没考虑过事务一致性。使用 DDD 纯粹是浪费脑力,要不进行大改(前端如果不想不改,就添加中间层屏蔽差异). 看你说这种场景,一看系统就不是什么特别重要的,就这样吧。不要尝试去重构已经堆起来的大泥球,如果有什么额外升职加薪另说。
xuanbg
2023-04-02 20:12:04 +08:00
为什么要对比变化?为了写更新日志么?
dingyaguang117
2023-04-02 23:27:05 +08:00
哈哈 类似的场景,我们现在的做法是先 toMap ,然后 diff
至于校验,我们做了一套基于 jsonschema 的配置化校验平台,还支持自定义校验函数。
数据上来新老分别过校验平台,再对比校验结果看是否引入新错误(因为老数据也不一定对,哈哈)。

总之很麻烦哈哈
lyusantu
2023-04-03 09:09:27 +08:00
返璞归真 if else
yidinghe
2023-04-03 11:05:08 +08:00
应对表单过于庞大的方法有两种:
1 、拆分表单,每个部分单独提交;
2 、用户每修改一个字段,实时提交该字段。
rm0gang0rf
2023-04-03 11:59:04 +08:00
屎山初始化了。。。
japeth
2023-04-03 14:29:32 +08:00
这类场景应该新增一个接口,让前端传过来更新日志的字段前后值
Ashore
2023-04-03 15:07:31 +08:00
@rm0gang0rf 哈哈哈 确实 这就是屎山的开始
yule111222
2023-04-03 15:37:43 +08:00
走远了。。。虽然不明白你们的场景,但是并不是所有的行为都需要把所有的字段都传递到领域层的。
正确的做法是定义瞬态领域对象,比如针对某个领域服务的行为定义一个 XXXXDomainRequest 对象,这个对象是这个行为的输入,跟实体是不一样的。然后查询当前实体处于什么状态,能否针对这个输入完成当前行为做校验即可

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/929151

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX