方法调用的前置条件,应该在调用前判断还是在方法里判断

方法外部判断

if ($user->is_human) {
    ActionService::sleep($user);
}

or

内部判断

class ActionService {
    public static sleep($user) {
        if (!$user->is_human) {
            return;
        }
        // 执行……
    }
}

有规范吗,感觉写在外部更清晰,知道什么条件下会走这个方法。
感觉方法内部一定要做过滤,这样用起来没有心智负担,那如果外部也判断是不是就重复了;但是外部不判断代码简洁了。
求助大佬们,先谢谢啦

我未曾珍惜的,我不再拥有?‍?️
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
thebestxt
最佳答案

看这个判断条件属于哪个业务。举个例子,如果 sleep 这个方法要执行就一定要判断 $user->is_human,那就把判断写在方法里(后者)。如果 sleep 之前要判断的东西不一定, $user->is_human 只是要判断的可能条件其中之一,这样就写在外边(前者)。

感觉自己说了一堆废话。。

3年前 评论
haodudecao (楼主) 3年前
讨论数量: 17
thebestxt

看这个判断条件属于哪个业务。举个例子,如果 sleep 这个方法要执行就一定要判断 $user->is_human,那就把判断写在方法里(后者)。如果 sleep 之前要判断的东西不一定, $user->is_human 只是要判断的可能条件其中之一,这样就写在外边(前者)。

感觉自己说了一堆废话。。

3年前 评论
haodudecao (楼主) 3年前

外部判断的是流程,内部判断的是参数

3年前 评论
haodudecao (楼主) 2年前
风吹过有夏天的味道 (作者) 2年前
haodudecao (楼主) 2年前

其实都是让人看明白,使用第二种的话,可以起个sleepIfNotHuman

3年前 评论
haodudecao (楼主) 3年前

你这个场景更倾向于外部,因为在执行体的内部一般做的判断只有参数类判断和内部计算结果类判断

3年前 评论
haodudecao (楼主) 3年前
陈先生 (作者) 3年前
haodudecao (楼主) 2年前
陈先生 (作者) 2年前
haodudecao (楼主) 2年前
陈先生 (作者) 2年前
haodudecao (楼主) 2年前

这种应该是在中间件里面去判断,这个请求就不应该进到控制器

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!