V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
dioxide
V2EX  ›  程序员

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

  •  
  •   dioxide · 2019-11-25 17:26:45 +08:00 · 1579 次点击
    这是一个创建于 1825 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    6 条回复    2019-11-25 18:47:11 +08:00
    zhiguang
        1
    zhiguang  
       2019-11-25 17:57:52 +08:00   ❤️ 1
    理论上讲应该是 B 负责,实际上从头到尾就你一个人写,写哪都行
    passerbytiny
        2
    passerbytiny  
       2019-11-25 18:16:48 +08:00   ❤️ 1
    永远是被调用端。

    但是。

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

    如果不好理解的话,你这样看:假如 A 是最初的调用方,那么 A 就没有参数,压根没法做参数校验。
    eason1874
        3
    eason1874  
       2019-11-25 18:28:38 +08:00   ❤️ 1
    要看是内部还是外部吧,AB 都是自己组那就 A 负责,A 是别组 B 是自己那就 B 负责。
    zjp
        4
    zjp  
       2019-11-25 18:31:52 +08:00 via Android   ❤️ 1
    dioxide
        5
    dioxide  
    OP
       2019-11-25 18:42:38 +08:00
    有这么个事实可以确定: 若每个 B 的调用者,都预先做参数校验,那代码中无疑会存在冗余(违反 DRY 原则).
    GM
        6
    GM  
       2019-11-25 18:47:11 +08:00   ❤️ 1
    一般来说是函数本身负责。
    特殊情况是,该函数调用频率非常频繁,对性能要求非常高,这时候可以把职责外推给调用者(文档里写清楚)。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1225 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 18:15 · PVG 02:15 · LAX 10:15 · JFK 13:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.