簡單來說, 是指在軟體開發過程中, 描述不良的程式設計或實作所擁有的常見特徵. 這些特徵會導致程式碼難以了解、維護或擴展.
Code smell從早期有很多偉大的軟體工程專家、學者, 在論文與書籍提到, 而這網站Code Smells Catalog已經整理常見的code smell. 所以有提到重構的章節, 會引述網站上的分類.
針對code smell的解決, 也就是開發者改進現有的程式碼, 使它更好維護、好理解
讓程式碼好維護、好理解, 可造福後面的開發者(甚至是自己), 是一種積陰德!
千萬別省時間不做重構, 否則只會讓Big ball of mud快速成形.
當有函數代入一個boolean值, 用來決定函數的功能, 但開發者會不太知道true/false到底有哪些含意.
假設有個外送平台, 提供使用者訂餐時要做外送還是自取. 此時函數這樣設計:
internal void MakeOrder(string foodName, bool delivery)
{
if (delivery)
{
// process delivery logic
}
else
{
// process pick up logic
}
}
因為bool delivery
只能讓呼叫者知道有delivery選項,但不知false要做什麼.
為了使參數有意義, 因此建立一個enum OrderType:
internal enum OrderType
{
Delivery,
PickUp
}
再將MakeOrder的參數修改:
internal void MakeOrder(string foodName, enum orderType)
{
if (orderType == OrderType.Delivery)
{
// process delivery logic
}
else
{
// process pick up logic
}
}
所以後面的呼叫者, 可以清楚的知道要代入外送或自取的選項.