3 回答

TA貢獻1865條經驗 獲得超7個贊
我認為在任何這些情況下都不應該拋出異常 - 原因如下:
異常應該用于特殊的事情 - 主要是你無法在代碼中控制的事情 - 例如網絡連接錯誤和類似的事情。
嘗試從數據庫接收客戶,但未找到具有給定 ID 的客戶。
嗯,這是理所當然的 - 您在數據庫中沒有找到客戶 - 返回 null。沒有理由拋出異常,因為在這種情況下沒有什么異常。
嘗試通過id刪除客戶,但在數據庫中找不到該id。
如果在數據庫中找到該客戶,則此操作將導致刪除該客戶。
如果在數據庫中沒有找到它 - 最終結果仍然與找到它一樣 - 那么你為什么要關心它一開始就不存在呢?同樣,沒有理由拋出異常。
嘗試通過 ID更新客戶,但在數據庫中找不到該 ID。
這是最難解釋的,但基本上有兩種合法的方法來處理這種情況:
一種方法是,當更新語句具有不適合表中任何行的 where 子句時,執行任何數據庫執行的操作 - 這只是什么也不執行。
至于讓客戶端知道是否有實際更新或無操作,您可以檢查受影響的行數并向客戶端返回 true/false 或 customer/null。
另一種方法是將更新轉換為“更新插入” - 因此,如果在數據庫中找不到該客戶,只需創建一個新客戶即可。
這也可以使用簡單的真/假返回值向客戶端指示。在這種情況下,您應該正確命名該方法 -AddOrUpdateCustomer
例如。

TA貢獻1995條經驗 獲得超2個贊
您不應使用異常作為向調用者發出預期執行流程信號的方式。當函數返回時,應該返回一個有意義的值。如果你的函數返回比較復雜,無法用簡單的true
/ false
returns 來表達,你可以聲明 anenum
作為返回值,甚至Tuple
在更復雜的場景中也可以聲明 a 。
嘗試從數據庫接收客戶,但未找到具有給定 ID 的客戶。
嘗試通過id刪除客戶,但在數據庫中找不到該id。
嘗試通過 ID 更新客戶,但在數據庫中找不到該 ID。
所有這 3 種可能的情況都應該由數據庫很好地處理,當這樣的路徑發生時,只需向調用者返回一個包含足夠信息的值,以便它可以處理結果并正確執行操作。

TA貢獻1798條經驗 獲得超7個贊
當出現意外錯誤時,您必須拋出異常。以你的例子=>
getById 調用返回項 | 如果沒有找到則為 null => 如果不存在則沒有錯誤
repo.Delete 函數必須有一個有效的 id => db 函數拋出異常(如果 ArgumentException 更好)...但是控制器/管理器需要 catch(ArgumentException) 然后有 2 個選項:
2a. '刪除不存在的項目' => 成功 -> 方法調用后,項目不存在
2b. es:控制器向客戶端發送錯誤消息“您要刪除的項目不存在”
repo.Update 函數必須具有有效的 id => 像上面那樣沒有 2a 選項
如果函數需要這個參數=>拋出
if 函數管理 'not found=null' case => 不拋出
- 3 回答
- 0 關注
- 144 瀏覽
添加回答
舉報