实践中, 函数/方法的参数的有效性、合法性校验应该由函数本身负责还是函数的调用者负责? 对应的异常处理呢?

2019-11-25 17:26:45 +08:00
 dioxide

在有严格接口格式声明的情况下.

A 方法调用 B 方法,A 有责任对调用 B 时的传参和相应的异常做处理么? 还是说都应该有 B 负责. 这样更内聚,对 A 来说也符合最少知识原则.

有什么说法、理论论述么? 或者实践经验.

1591 次点击
所在节点    程序员
6 条回复
zhiguang
2019-11-25 17:57:52 +08:00
理论上讲应该是 B 负责,实际上从头到尾就你一个人写,写哪都行
passerbytiny
2019-11-25 18:16:48 +08:00
永远是被调用端。

但是。

在你的例子中,是 外部 调用 A,A 调用 B,此时对于外部来说,A 和 B 合成一体作为被调用方,A 和 B 至少要有一个做校验。至于是 A 做还是 B 做还是两个都做,取决于开发规范。

如果不好理解的话,你这样看:假如 A 是最初的调用方,那么 A 就没有参数,压根没法做参数校验。
eason1874
2019-11-25 18:28:38 +08:00
要看是内部还是外部吧,AB 都是自己组那就 A 负责,A 是别组 B 是自己那就 B 负责。
zjp
2019-11-25 18:31:52 +08:00
dioxide
2019-11-25 18:42:38 +08:00
有这么个事实可以确定: 若每个 B 的调用者,都预先做参数校验,那代码中无疑会存在冗余(违反 DRY 原则).
GM
2019-11-25 18:47:11 +08:00
一般来说是函数本身负责。
特殊情况是,该函数调用频率非常频繁,对性能要求非常高,这时候可以把职责外推给调用者(文档里写清楚)。

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

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

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

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

© 2021 V2EX