同事代码写的很糟糕,该怎么给建议
今天看了同事写的一个周签到的代码,看了之后,心态爆炸了。该怎么给同事建议呢?
/**
* 签到列表
*/
public function getSignStatus(array $params)
{
if (!is_array($params)) return $this->failed();
$this->setRedis($params['gameCode']);
$this->setHashKey($params);
$week = [];
$weekCount = [];
$rewardConfigs = $this->_redis->get($this->_key) ? json_decode($this->_redis->get($this->_key), true) : [];
foreach ($rewardConfigs as $item) {
if ($item['sign_type'] == SignConfig::TYPE_WEEK) {
$dayName = $item['day'] - 1;
$ymd = date('ymd', strtotime("+$dayName day", strtotime(Carbon::now()->startOfWeek())));
if ($this->_week_redis->exists($this->_sign_key)) {
$res = $this->_week_redis->getbit($this->_sign_key, $ymd);
if ($res == 1) {
$sts = SignConfig::SIGN_STATUS_ACQUIRE;
} else {
if (date('ymd') > $ymd) {
$sts = SignConfig::SIGN_STATUS_OVERDUE;
} else if (date('ymd') == $ymd) {
$sts = SignConfig::SIGN_STATUS_RECEIVE;
} else {
$sts = SignConfig::SIGN_STATUS_UNCLAIMED;
}
}
} else {
$sts = (date('ymd') == $ymd) ? SignConfig::SIGN_STATUS_RECEIVE : SignConfig::SIGN_STATUS_UNCLAIMED;
}
$week[] = [
'day' => $item['day'],
'status' => $sts,
];
} else if ($item['sign_type'] == SignConfig::TYPE_WEEKCOUT) {
if ($this->_week_redis->exists($this->_week_sign_key)) {
$sts = $this->_week_redis->getbit($this->_week_sign_key, $item['day']);
} else {
$sts = SignConfig::SIGN_STATUS_UNCLAIMED;
}
$weekCount[] = [
'day' => $item['day'],
'status' => $sts,
];
}
}
$returnData = [];
if ($this->_week_redis->exists($this->_week_sign_key)) {
$returnData['week_count_days'] = $this->_week_redis->bitcount($this->_week_sign_key);
} else {
$returnData['week_count_days'] = 0;
}
if ($this->_week_redis->exists($this->_sign_key)) {
$returnData['week_days'] = ($this->_week_redis->bitcount($this->_sign_key) != 7) ? $this->_week_redis->bitcount($this->_sign_key) : 0;
} else {
$returnData['week_days'] = 0;
}
$returnData['week'] = $week;
$returnData['weekCount'] = $weekCount;
$this->checkSigned();
return $this->success($returnData);
}
仅对这个方法说下我的看法:
- 很多无用的代码
//这段代码没什么用的吧,参数不是已经限制是数组了吗?
if (!is_array($params)) return $this->failed();
//这行代码是不是应该被开除
$rewardConfigs = $this->_redis->get($this->_key) ? json_decode($this->_redis->get($this->_key), true) : [];
//这个if判断是不是没用
if ($this->_week_redis->exists($this->_week_sign_key)) {
$returnData['week_count_days'] = $this->_week_redis->bitcount($this->_week_sign_key);
} else {
$returnData['week_count_days'] = 0;
}
//写成这样就可以了
$weekCount = $this->_week_redis->bitcount($this->_week_sign_key);
- 嵌套是不是太深了? 就不展开说了。我觉得一个好的设计,逻辑是比较简单,代码让人看了很舒服的。
这是一个新项目的,还没上线的,之前同事开发的,因为疫情原因,领导让我暂时接手。
推荐文章: