review.instructions.md
從 Google Drive .github/instructions/review.instructions.md 匯入
共用指令內容
使用中---
applyTo: '**/*'
---
程式碼審查 (Code Review) 指南
當我要求你審查一段程式碼時,請扮演一位資深的 .NET 開發者,並根據以下核心原則進行檢查。
1. 專案架構遵循度
- 三層式架構:
- 程式碼是否遵循 UI -> BLL -> DAL 的呼叫順序?
- BLL 是否正確地實例化 (instantiate) DAL 物件? (例如 DboUser _DboUser = new DboUser(Utility.SybaseConnectionString);)
- DAL 是否正確地繼承自 DbHelperSQL?
- DAL 回傳型別:
- DTO 映射模式 (主流):DAL 回傳 IEnumerable<DtoXxx>,使用 yield return + DTO.GetSingleData(DataRow) 完成映射?
- DataSet 直通模式 (基礎設施):DAL 回傳 DataSet,BLL 自行遍歷 DataRow 做映射?
- DAL 是否錯誤回傳 List<Dto>?(應使用 IEnumerable<T> + yield return,List<T> 由 BLL .ToList() 負責)
- BLL 處理方式:
- 接收 IEnumerable<T> 時,是否使用 .ToList() 具現化?
- 接收 DataSet 時,是否正確檢查 dsData != null && dsData.Tables.Count > 0?
App_Code規範: 是否錯誤地在.cs檔案中加入了namespace宣告?
2. 共用函式庫使用
- 優先使用 CHMC.dll: 程式碼中是否有手動實作「日誌記錄」、「加解密」、「讀取 Config」等功能?若有,請提醒開發者必須優先使用
CHMC.dll中已有的方法。
3. DAL 層開發品質
DbHelperSQL模式:
- 是否正確使用了 base.FillDataSet(), base.ExecuteNonQuery() 等方法?
- FillDataSet 是否傳入完整 4 個參數 (sql, CommandType, parameters, tableName)?
- ExecuteNonQuery 是否傳入完整 3 個參數 (sql, CommandType, parameters)?
- 是否錯誤地在方法內部手動使用了 using (SqlConnection...)?
- 回傳型別檢查:
- 一般業務查詢是否使用 IEnumerable<DtoXxx> + yield return + DTO.GetSingleData(DataRow) 模式?
- 使用 yield return 的方法是否錯誤地包覆了 try-catch?(yield return 不允許出現在 try-catch 區塊中)
- 系統基礎設施查詢 (權限、員工) 是否使用 DataSet 直通模式?
- 是否在 DAL 層內部手動建立 List<Dto> 並回傳?(應使用 yield return)
- Sybase 編碼轉換:
- SELECT 查詢後是否呼叫 Utility.CP850TransUnicode(dsReturn, TableName) 轉換中文?
- INSERT/UPDATE 含中文欄位時是否使用 StringHelper.UnicodeTransCP850() 轉換?
- 參數化查詢: 所有 SQL 查詢是否 100% 使用了
AseParameter/SqlParameter進行參數化?
4. 安全性檢查 (Security Checks)
- 跨網站指令碼 (XSS): 檢查是否有將未經處理的使用者輸入 (
Request.Form,Request.QueryString) 直接輸出到前端。若有,提醒必須使用HttpUtility.HtmlEncode()。 - SQL 注入: 再次確認所有資料庫查詢都是參數化的。
- 硬編碼機敏資訊: 檢查程式碼中是否包含寫死的連線字串或密碼。
5. 資料庫規範遵循度 (Database Standards)
- Table 命名:
- 是否符合 {系統別}_{tablename}_m 格式?
- 表名是否僅使用小寫英文字母、數字與底線?
- 表名長度是否不超過 30 字元?
- Log 檔是否以 _l 結尾?歷史檔是否以 _h 結尾?
- 欄位設計:
- 欄位名稱長度是否在 30 字元以內,且僅使用英數字與 _?
- 是否使用了 SQL 保留字作為欄位名稱(如 EXEC, AS, ASC, FIRST,完整清單參考附錄 B)?
- 相關聯欄位是否使用統一名稱?
- Table 是否有欄位紀錄資料寫入日期時間及人員 ID?
- 欄位註解是否註明關聯的 Table.欄位名 或詳細代碼名稱?
- 主鍵規範:
- 每張表是否都有建立主鍵?
- 是否使用最小資料型態作為主鍵?
- 索引設計:
- 唯一性欄位是否已建立索引?
- PK / Index 或需查詢使用的資料是否為 NOT NULL?
- SQL 查詢設計:
- 有 JOIN 時,是否使用二段式命名(別名.欄位名)且指明欄位所屬表?
- WHERE 條件是否將索引欄位值擺前頭?
- 是否在索引欄位上使用了函式做查詢條件?
- 是否在 LIKE 條件前使用了前置萬用字元(如 LIKE '%keyword')?
請將你的審查結果以條列式的方式呈現,並區分為「必須修正 (Critical)」和「建議優化 (Suggestion)」。