问题描述
最近我被带到了一个新的代码库,在那里我看到了很多这样的代码,几乎无处不在
if(a && a.b && a.b.c && a.b.c.d) {
// do something with d
}
我注意到,由于产品产生了大量的$$$,我们确实需要避免运行时错误。所以这最终成为团队中的习惯用法,每次你想要对象中的某些东西时,请使用上面的语法。
但正如您所想,这并不是在所有地方都强制执行(尤其是在可能重要的地方),更糟糕的是,在我们已经验证了对象形状的区域中,它已成为一种习惯。
所以这是我的问题:你会推荐什么来帮助改变一个采用这种低效习惯(错误的安全感)来防御性检查每个加入的团队。
这里有一些想法,但我很高兴听到您的故事和您的经验反馈。
一些想法:
- 使用 ts 或 babel 并使用可选链 => 不会改变问题,但会(不是?)简化语法
- 强制使用唯一的帮助程序来安全访问 (custom / lodash.get / ramda.pathOr,...)
- 让团队了解 Lenses 概念并使用这些概念
- 在数据层和表示层之间添加一个强大的验证层
- 展平嵌套对象并使用展平形式 (
{ a: { b: 2 },c: [3,4]} ==> { 'a.b': 2,'c.0': 3,'c.1': 4 }
) - ...
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)