Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

关于服务端代码质量 #33

Closed
mogody opened this issue Jan 27, 2022 · 2 comments
Closed

关于服务端代码质量 #33

mogody opened this issue Jan 27, 2022 · 2 comments

Comments

@mogody
Copy link

mogody commented Jan 27, 2022

简单看了下,服务端代码质量感觉不大行,提几个建议哈:

  1. 使用 $request->session 代替 $_SESSION 来操作 session
  2. 使用 paginate 来处理列表分页
  3. 参数校验先判断 required 再判断类型
  4. 使用 Config::get() 来读取配置,而非使用 env 读取环境变量
  5. Model 使用关联关系,而非自己组装外键
  6. 非标准单词,建议使用下划线或者驼峰式,比如 pushkey 改为 push_key
  7. 通过 Policy 组件来处理用户与数据的权限,而非自己代码中校验
  8. 尽量不要自定义全局辅助函数,因为他们是不可被替换,耦合严重
  9. 提前判断减少 if 嵌套层级,例如:
foreach ($devices as $device) {
    if ($device) {
        $func_name = $device['type'].'_send';
        if (function_exists($func_name)) {
            $result[] = $func_name($device->is_clip, $device->device_id, $validated['text'], '', env('APP_DEBUG'));
        }
    }
}

可以改写为:

foreach ($devices as $device) {
    if (!$device) {
        confinue;
    }
    $func_name = $device['type'].'_send';
    if (function_exists($func_name)) {
        $result[] = $func_name($device->is_clip, $device->device_id, $validated['text'], '', env('APP_DEBUG'));
    }
}
@easychen
Copy link
Owner

easychen commented Jan 27, 2022

首先欢迎贡献修正代码。然后api实现的确在编码规范性上有问题,除以下几个外表示赞同。

  1. paginate 使用页数作为分页,在增量很快的情况下,会导致数据偏移。采用since_id 没有这个问题。
  2. pushkey 是专有名词,特指 pushdeer 的 key。
  3. 9 我没看出来怎么就减少嵌套层级了,$device 为假时不是根本就没进入下一层吗?

@mogody
Copy link
Author

mogody commented Jan 27, 2022

  1. 学到了新东西,感谢~
  2. 专有名词的话这么写就没毛病
  3. 9 的话并不绝对,可以理解为是 “优先返回原则”,$device 为假的时候直接 continue,整个代码段就只有两个层级:foreach 和
    if;如果 $device 为真再处理逻辑,整个代码段就是三个层级:foreach、if、if;两三个层级的话其实没啥大的差别,但是层级多了就会很痛苦,算是最佳实践。但是 2 种写法都没有什么大的毛病,个人是更推荐优先 continue

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants