2011-08-31 120 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