2012-02-08 81 views
2

我有以下情況。 有些人使用方法1和一些使用方法2. 兩種方法都具有相同的功能鎖定或解鎖新聞表中的新聞ID。 你的建議,哪一個更好,爲什麼?最佳做法,1種方法和2種方法的相同功能

注:我使用void返回類型,而不是布爾爲簡單起見,請忽略此

方法1:

public void LockNews(long newId) 
{ 
...... 
} 

public void UnlockNews(long newId) 
{ 
... 
} 

方法2:

public void LockUnlockNews(long newId,bool Islock) 
{ 
...... 
} 
+0

這是什麼樣的鎖? – weston 2012-02-08 09:31:27

+0

鎖在數據庫中是fag的,你可以說這個消息被鎖定以供審查 – Ali 2012-02-08 09:36:12

+0

對於我來說,這取決於邏輯,如果有很多邏輯你不想在兩個函數中複製它。然後,您也可以實施方法2,將其設爲私有,然後從每個後續功能中調用它。 – ThePower 2012-02-08 09:36:35

回答

3

方法1,對我來說,因爲恕我直言,方法應該代表一個單一的操作。爲了編寫可測試代碼或任何形式的自動化測試,它將保持清晰的分離並使其更有意義。

方法2傾向於「盡一切」的操作,恕我直言,應該避免。

1

我更喜歡方法1.它清楚地說明發生了什麼。如果您使用方法2並致電

LockUnlockNews(42, true); 

現在不清楚這是鎖定還是解鎖。 只是爲了拋出一些燃料:如果你將bool更改爲枚舉或常量,那麼我的參數是無效的。

LockUnlockNews(42, LOCK); 

是一樣清楚

LockNews(42); 
1

第一種方法。

您的方法是命令並應儘可能明確。我甚至會問你爲什麼有人,但新聞本身知道如何鎖定/解鎖?對我來說新聞應該對它負責:

var news = GetNewsSomehow(newsId); 
news.Lock(); 
news.Unlock(); 

更有意義,不是嗎? :)你清楚地看到你的對象是什麼,他們有什麼行爲。這就是OOP中所謂的封裝

0

我結合這兩種方法一般在想:

公共方法提供界面清晰更容易測試

public void LockNews(long newId) 
{ 
    LockUnlockNews(newId, true); 
} 

public void UnlockNews(long newId) 
{ 
    LockUnlockNews(newId, false); 
} 

私有方法做實際業務增加模塊性 managin g東西從一個位置:

private void LockUnlockNews(long newId,bool Islock) 
{ 
    ...... 
}