#代碼規范(從code review總結)
1. 沒有使用filterStartLimit過濾limit字段值.filterStartLimit作用是防止sql注入.? orderby, page(分頁), groupby等參數都有類似風險。
2. 代碼里不應出現magic number, 應該定義常量增加可讀性
3. 路由URL中的"/"應該用來體現層級而不是用來劃分單詞。
/offline/course/{id}/picture? ? #應該使用? /offline_course/{id}/picture
4. 異常需要分類 不能都簡單拋出serviceException
Topxia\Common\Exception 中已經有部分Exception類型,根據業務選擇
5. 檢查代碼的無用邏輯
如在controller層調用search時,如果searchUserCount為0,可以避免searchUsers
6. dao層sql 查詢 orderby 需要限制可排序字段(防注入)。
7. search方法使用的場景是當查詢條件不確定
conditions ?= array( 'parentId' => 0 ); 應該使用 findXXXbyparentId(findParentXXX)
8. 變量命名冗余,enrollmentPlan => plan,增加可讀性
就像在CourseController下 不是courseManageAciton 應是manageAciton,在這個語境下manage自然被理解為是管理Course。
9. ‘if-else’循環內容復雜,應當簡潔,考慮使用‘key => value’。
多重循環嵌套時,可以考慮是否可以用鍵值對形式來實現,或者用拼接的方法實現。
$status = array(
'new' => 'admin_enrollment_declare',
'declareing' => 'admin_enrollment_audit',
'assigned' => 'admin_enrollment_update_classroom',
);
if (!empty($plan) && $plan['status'] != 'published') {
return $this->redirect($this->generateUrl($status[$plan['status']] ,array('id' => $plan['id'])));
}
10. 在Controller中,不可暴露數據庫信息如”depth=> 2”
11. 字段”created_time”和”updated_time”,不應寫在service(新框架不用賦值,原先框架應寫在dao)
12. 數據庫字段命名駝峰和下劃線皆可 ?userId user_id
13. 方法的命名不能太籠統,要盡量有具體的含義。
validateAuthority()? 修改為=> tryManageClassroomThread()