函数对传入参数的检查应该做到什么程度呢?

发布于 2022-09-02 00:04:35 字数 1014 浏览 16 评论 0

想像这样一个业务场景:前端提交了一些数据,比如新建一篇文章,后台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调用时,是否还要对传入的数据再做一遍检查呢?因为理论上它收到的数据已经是前置函数检查过的了,再做检查似乎是没必要的?

又比如,routepost模块都是专用的,db模块是共用的。在db模块中,是否还需要对数据做通用的合法性检查呢(比如检查数据类型)?是否需要判断数据内容做针对性检查呢(比如判断是插入posts表,再检查一遍数据是否符合表的要求)?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦在夏天 2022-09-09 00:04:35

理论上续上对每一个函数的参数执行类型及合法值的校验~
同时你要看你的函数的潜在调用方是否可预知,
如果你确定你的调用方可预知可控制的,那么在调用方检查下类型及合法值就可以
如果你对潜在的调用方式不可预知的,考虑到扩展性,那么最好每一个函数要对自己负责,你不能信任调用者的传递给你的参数~

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文