P/PromptTools
Instruction asset / review-instructions

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 returnList<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)」。

版本紀錄

1 個不可變版本
v1
從 Google Drive 初次匯入
2026/07/28 02:59:50