2011-03-18 23 views
4

假設下面的方法:哪個標識符變量最好作爲參數傳遞給方法?

public void ShareClassStuff(int shareClassId) 
{ 
    var shareClass = _shareClassService.GetShareClassById(shareClassId); 

    (if shareClass != null) 
     var shareClassStat = _shareClassService.GetShareClassStat(shareClass.Id); 

    //go on to do stuff with shareClass & shareClassStat 
} 

在這裏,我通過傳遞shareClassId到返回我需要對象服務得到了shareClass。接下來,我必須傳遞一個Id到另一個方法來獲取一些不同的數據。

我的問題是,在第二次服務呼叫中,最好使用shareClassId變量,例如,

GetShareClassStat(shareClassId) 

或者shareClass對象的Id屬性,例如,

GetShareClassStat(shareClass.Id) 

還是它有問題?

回答

0

我認爲從性能的角度來看並不重要,但是,我會將shareClassId傳遞給第二種方法,而不是shareClass.Id。

原因是當您使用shareClass.Id時,您現在對代碼的位置有依賴性。必須在_shareClassService.GetShareClassStat之前首先調用_shareClassService.GetShareClassById。此外,您還引入了對_shareClassService.GetShareClassById實現的依賴關係,以正確填充Id屬性。

0

我認爲這不重要。

0

雖然人們可以爭辯可能兩種方式,有一個非常小的好處傳遞shareClassId

shareClass.Id是一個屬性,因此一個方法調用(這可能會或可能不會被優化內聯)。 shareClassId是一個簡單的整數。

所以傳遞參數有一個很小的優勢。

更新

還有另外一個原因,人們可能更願意使用參數:這是洽。您使用該參數進行第一次「通過ID查找」,因此第二次再次使用該參數。

這些原因都不是非常有說服力的,但是既然你問了,我假設你對任何想象的推理都很感興趣。

+0

我認爲可以安全地假設如果'shareClass'本身被傳遞,那麼該屬性仍然需要在被調用的方法中進行評估。 – 2011-03-18 16:48:30

+0

@Jon:現在的問題是:我是否應該傳遞我已經擁有的ID並且知道與使用ID進行檢索的對象的Id屬性相同的值,還是應該轉身使用該屬性?很明顯,'GetShareClassStat'方法只是另一種從Id返回對象的查找方法。雖然你的答案很有用,但它似乎並不適用於這種情況。 – Tergiver 2011-03-18 17:14:32

+0

我想我們需要知道更多以確定地說。我會說,如果你是對的,我的答案*是有用的,並且應該引導OP只傳入ID - 因爲這就是它在邏輯上應該依賴的一切。 – 2011-03-18 17:17:26

0

應該沒關係。如果由於某種原因您的GetShareClassById()方法停止返回空值,而是開始返回一個空類,它只會在稍後發生。現在你有一個帶有無效ID的班級。不是說它會發生,只是說它會導致問題。

如果你在意速度增加0.0001秒,那麼通過這個變量。

相關問題