本文轉載自【何以解耦】:codedecoupled.com/exception.html
在實現業務邏輯之前,我們通常需要檢查一些前提條件,比如實現庫存管理系統中的庫存增加邏輯:
class ProductSku
{
public function addStock($number): void
{
}
}
在實現 addStock
時,我們需要確定 $number
的值為正。因為負數在這裡是沒有意義的,邏輯上無法處理,為了防止 Bug,我們需要對其進行檢測。
顯而易見的操作是寫一個返回布林值的檢測函式:
class ProductSku
{
public function addStock($number): void
{
if (!$this->isValid($number)) {
return;
}
$this->increment('stock', $number);
}
private function isValid($number): bool
{
return $number > 0;
}
}
類方法 isValid
充當了一個檢測函式,當 $number
為負時,addStock
直接返回。
讓我們再仔細分析一下以上程式碼。當 $number
為負時,實際上程式已經出現了此段程式碼無法處理的情況,只是 addStock
直接返回將這個情況隱藏了,理論上我們應該將這種情況暴露出來以便除錯(Debug)。
處理檢測前提條件更健康的做法是使用異常(Exception),使用異常重構以下程式碼:
class ProductSku
{
public function addStock($number): void
{
$this->guard($number);
$this->increment('stock', $number);
}
private function guard($number)
{
if ($number > 0) {
throw new \DomainException('Invalid number to add '.$number);
}
}
}
丟擲異常來處理程式碼中無法處理的情況,這樣子便於除錯,程式碼的質量也能得到相應的提高。
本文轉載自【何以解耦】:codedecoupled.com/exception.html ,如果你也對 TDD,DDD 以及簡潔程式碼感興趣,歡迎關注公眾號【何以解耦】,一起探索軟體開發之道。
本作品採用《CC 協議》,轉載必須註明作者和本文連結