函数对传入参数的检查应该做到什么程度呢?
想像这样一个业务场景:前端提交了一些数据,比如新建一篇文章,后台route
模块收到请求和数据,传给post
模块中的create()
函数,create()
函数对数据进行一些处理,整理成最终要入库的数据,然后调用db
模块的insertOne()
函数写入数据。
流程大概是这样(伪代码):
前端:
POST /post/
formData
route 模块:
app.post('/', (req, res) => {
post.create(req.body);
})
post 模块:
create(post) {
// do something
db.insertOne('posts', post);
}
db 模块:
insertOne(name, doc) {
db.collection(name).insertOne(doc);
}
我的问题是,对每一个函数来说,对传入数据的检查应该做到什么程度呢?
比如,route
作为后台第一个收到前端数据的模块,肯定会检查一遍所有数据,包括必要字段的完整性和所有字段的合法性。那么post
在被route
调用时,是否还要对传入的数据再做一遍检查呢?因为理论上它收到的数据已经是前置函数检查过的了,再做检查似乎是没必要的?
又比如,route
和post
模块都是专用的,db
模块是共用的。在db
模块中,是否还需要对数据做通用的合法性检查呢(比如检查数据类型)?是否需要判断数据内容做针对性检查呢(比如判断是插入posts
表,再检查一遍数据是否符合表的要求)?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
理论上续上对每一个函数的参数执行类型及合法值的校验~
同时你要看你的函数的潜在调用方是否可预知,
如果你确定你的调用方可预知可控制的,那么在调用方检查下类型及合法值就可以
如果你对潜在的调用方式不可预知的,考虑到扩展性,那么最好每一个函数要对自己负责,你不能信任调用者的传递给你的参数~