2010-06-01 67 views
1

我用FxCop来分析我写的一些代码。我曾经通过二传手曝光了一个系列。我明白为什么这不好。当我不期望这样做时,更改后备存储是一个非常糟糕的主意。虽然这是我的问题。我从数据访问对象中检索业务对象列表。然后,我需要将该集合添加到另一个业务类,并使用setter方法执行此操作。我这样做的原因是,做一个任务要比通过另一个addElement方法一次一次地将数十万个对象插入集合要快。违反集合属性应该只读取性能的原则是否可行?

可以在某些情况下为集合设置吸气器吗? 我虽然宁愿有一个构造函数,需要一个集合? 我想也许我可以将对象传递给Dao,并让Dao直接填充它? 还有其他更好的点子吗?

+0

与标准集合中一样,您可能会使用addRange方法,因此您不需要多次调用addelement。 – Arseny 2010-06-01 13:10:25

+0

@Arseny。但是这不会在引擎盖下做更多或更少的相同事情,因此性能会差不多呢? – uriDium 2010-06-01 13:13:54

+0

(关于Arseny):如果更改底层集合,则只需重写具有内部集合的类(即addrange方法),而不是调用addRange方法的类。 – Brian 2010-06-01 13:18:31

回答

0

我仍然会让属性为只读,并提供一个替代方法,它需要一个集合并执行可能的构造函数—。当然,这是一个属性制定者本应该考虑的内容,但是这对于一个阶级用户来说很清楚,你不希望这个属性从你的下面移出来,并且只能在特殊情况下进行分配。

+0

这就是为什么我建议构造函数的可能性作为替代。它还传达了我的期望,即应该有一个集合,并且不会破坏单元测试。但它是一个黑客?我能做些更聪明的事情吗?还是这样好吗? – uriDium 2010-06-01 13:29:02

1

如果这些属性不是您的公共API的一部分,请自行解决;否则不。但是,你真的确定这是一个性能瓶颈吗?我敢打赌,你现在正在过早地进行优化。

+0

它接近100万个元素。我没有真正衡量性能的差异。将Dao中的所有对象放入列表中,将列表传递给列表,然后迭代列表并将其添加到另一个对象,感觉真的是错误的。这是工作的两倍。 – uriDium 2010-06-01 13:27:29

+0

@uri你可能有什么东西。但是,您可以将对列表的引用传递给另一个对象的构造函数,并显示相同的列表。或者提供一个类似收藏的门面,它实际上暴露了一个到多个内部藏品集合...有很多不同的方法可以完成此操作,而无需全部复制它们。这取决于你的要求和你的设计。 – Will 2010-06-01 13:34:06