2011-08-31 184 views
4

我想知道如果這是一個愚蠢的問題,但無論...實例化對象速記

考慮:

this.dataSourceFacade = new DataSourceFacade(); 

this.SomeGrid.DataSource = this.dataSourceFacade.GetData(); 

,並比較:

this.SomeGrid.DataSource = new DataSourceFacade().GetData(); 

什麼毛病第二方法假設這是唯一被使用的地方?

理查德

+0

沒有錯方法。 –

+0

看看構建項目時生成的MSIL ...看到兩種方式生成相同(或幾乎相同)的MSIL都不會感到驚訝。 – Tim

+0

這個開發者會喜歡有時間去做:) – Richard

回答

0

短期和簡單:沒有沒有什麼不對的第二種方法......在大多數情況下甚至是可取的,因爲清潔的(沒有不必要的局部變量),更好地+閱讀保持:-)

0

第二種方法,

this.SomeGrid.DataSource = (new DataSourceFacade()).GetData(); 

你將失去​​參考DataSourceFacade對象如果你需要它後,如設置其他內容,獲取其他內容或調用該對象的方法。

+0

是的,但對於很多情況下,像加載一堆下拉,這很好。 – Richard

0

從長遠來看,它確實使代碼更容易閱讀和維護。此外,它應該是「很好」做的。

但是,你只是創建一個對象的實例只是爲了調用它的一個方法,我會問,如果該方法可以被拉出到靜態方法。

像這樣:

this.SomeGrid.DataSource = DataSourceFacade.GetDate(); 

此外,在靜態實現我會嘗試不實例是不會被使用的對象的情況下,如果在所有可能的。

+0

這個例子只是一個簡單的例子,實際的真正外立面是在各種情況下使用的完全不同的野獸。 – Richard

0

好吧,我個人喜歡單元測試,兩種方法都會限制你的能力。

至少,我會創造一個廠做這樣的事情

this.SomeGrid.DataSource = DataSourceFacade.GetDataSource(); 

this.SomeGrid.DataSource = DataSourceFacade.Factory.GetDataSource() 

至少這樣你可以添加到在未來的某一天更新廠的能力供測試用。

+0

我們幾乎堅持集成測試,但與之前的情況相比,沒關係:) – Richard

+0

是的,我們之前都陷入了這種狀況。 – drstevens