前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >not null 和 default 的正确打开方式

not null 和 default 的正确打开方式

作者头像
只喝牛奶的杀手
发布2022-04-27 21:06:08
1.3K0
发布2022-04-27 21:06:08
举报

其实最近看代码,发现好多地方实体以及数据库DDL语句关于空值和默认值不是很统一,有时候排查问题会让你很日了狗,在最佳实践和标准的选择上,归根接地是一场小的生产力的革命,只有生产力的革命才能真正的达到降本增效。

POJO类时不要设定任何属性默认值

这也是阿里 Java 代码规范,VO,DTO,DO等传递的时候都不要默认值,默认值一时爽,如果你给下游返回一个空对象,如果有默认值你让下游怎么判断空?不要为了自己插入数据一时爽,可以借助于Mapstruct去定义一个converter方法,也可以自己去定义一个init方法去初始一些值。

POJO类不要使用基础类型,使用包装类型

至于基础类型和包装类型有什么区别这里不说了。如果使用基础类型,byte和boolean等,实例化的对象也是不为空的,这给下游判断增加很大负担。

Service里面不使用包装类型,使用基础类型

不建议使用包装类型,service里面局部变量一定是可以具体到基础类型的。可以省去一些包装类型比较的坑以及一些不必要的NPE。

ORM框架里面使用包装类型

这样的话,在Mapper.xml 里面,拼SQL语句的时候判断某个字段!=null 即可,不需要多余的判断。

数据库尽量也不要给default以及null

建表的时候约束条件主要有primary key、unique、not null、default等。not null是非空的约束,也就是不能向表里插入空值。default是在不给字段输入值时,比如空值,是不会触发default的。除String类型外字段外,金额(BigDecimal),RID(Int)等,都不应该设置为可为NULL,NULL的话不利于数据库查询优化。not null 和 default是两个独立的约束,可以用在一个字段上。

其实当你发现这些问题的时候,你也想改的。问题在于,当你关注这些细节多的时候,你就会忘记自己要干什么。什么增量迭代,绞杀者模式,都抛到了脑后。

前两个看到关于重构系统的十六字心法,非常形象和贴切。旧的不变,新的创建。一步切换,旧的再见。

“旧的不变”是指先不动旧方法;“新的创建”是指创建一个跟原来方法功能相同的新方法,你可以通过先复制再重构的方式,来得到这个新方法,也就是整个系统的一个增量;“一步切换”是指,在充分测试之后,新的方法可以完全替代旧方法了,就将开关切换到新方法上;“旧的再见”则意味着删除旧方法以及相应的开关,一个演进到此也就结束了。

而增量演进原则可以有效解决这个问题。它一方面鼓励我们持续交付改造的功能或新的实现,不断在生产环境验证;另一方面拥有细粒度的开关,也使得回退变得十分灵活,一旦发现问题,我们只需要关闭引起问题的那个开关即可。

重构的目的,也是为了业务赋能,脱离业务的技术改进都是耍流氓,这样的技术任务是很难验收的,而且上线之后,业务方无法很容易地感知它所带来的价值。比如说Bug数减少,工单数减少,这样的话业务才会支持我们下一步计划。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-04-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 只喝牛奶的杀手 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • POJO类时不要设定任何属性默认值
  • POJO类不要使用基础类型,使用包装类型
  • Service里面不使用包装类型,使用基础类型
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档