哪个标识符变量更适合作为参数传递给方法?
Posted
技术标签:
【中文标题】哪个标识符变量更适合作为参数传递给方法?【英文标题】:Which identifier variable is better to pass as an argument to a method? 【发布时间】:2011-07-18 07:52:56 【问题描述】:假设如下方法:
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)
或者这有关系吗?
【问题讨论】:
【参考方案1】:从性能的角度来看,我认为这并不重要,但是,我会将 shareClassId 传递给第二种方法,而不是 shareClass.Id。
原因是当您使用 shareClass.Id 时,您现在依赖于代码的定位。 _shareClassService.GetShareClassById 必须在 _shareClassService.GetShareClassStat 之前调用。此外,您还引入了对 _shareClassService.GetShareClassById 实现的依赖,以正确填充 Id 属性。
【讨论】:
【参考方案2】:我认为这并不重要。
【讨论】:
【参考方案3】:应该没关系。如果由于某种原因您的 GetShareClassById() 方法停止返回空值而是开始返回一个空类,这只会在以后发生。现在你有一个带有无效 id 的类。并不是说它会发生,只是说它会引起问题。
如果您希望获得 0.0001 秒的速度,请传递该变量。
【讨论】:
【参考方案4】:虽然一个人可能会同时争辩,但传递shareClassId
的好处非常小:
shareClass.Id
是一个属性,因此是一个方法调用(可能会或可能不会通过优化内联)。 shareClassId
是一个简单的整数。
所以传递参数有一个很小的优势。
更新
人们可能更喜欢使用该参数还有另一个原因:它是一致的。您在第一次“按 ID 查找”时使用了该参数,因此第二次再次使用该参数。
这些理由都不是非常有说服力,但既然你问了,我假设你对任何可以想象的推理感兴趣。
【讨论】:
我认为可以安全地假设如果shareClass
本身被传递,则仍需要在被调用的方法中评估该属性。
@Jon:问题是:我应该传递我已经拥有并且知道与我使用该 ID 检索的对象的 Id 属性相同的值,还是应该转身使用物业?很明显,GetShareClassStat
方法只是另一种从 Id 返回对象的查找方法。虽然您的答案很有用,但它似乎不适用于这种情况。
我想我们需要知道更多才能确定。我想说,如果你是对的,我的回答 is 很有用,应该让 OP 只传递 ID - 因为这就是它在逻辑上应该依赖的全部。
@Jon:但是 OP 会留下同样的问题:我应该如何只传递 ID? localVariableWithTheId
或 someObject.TheIdFromTheProperty
?
@Martinho:啊。我很可能完全误解了这个问题。哎呀。我认为问题在于该方法是否应该只采用一个 ID,或者是对整个对象的引用。将删除我完全不正确的答案...以上是关于哪个标识符变量更适合作为参数传递给方法?的主要内容,如果未能解决你的问题,请参考以下文章
如何将变量作为 cURL 数组中的 url 参数传递给 CURLOPT_URL