4

考虑以下示例。

我需要检查 CouponModel 是否具有唯一的序列号。

我有两个选择:

CouponModel model = GetFromSomewhere();

if (!CouponHasUniqueKey(model))
{
}

//or

if (!CouponHasUniqueKey(model.SerialKey))
{
}

当然,在我传入整个对象的方法中,我必须访问字符串属性,而不是直接使用字符串。

哪个选项更好,为什么?

4

3 回答 3

5

我相信性能会是一样的。

我也更愿意将责任交给对象本身:

CouponModel coupon = GetFromSomewhere();
if (!coupon.HasUniqueKey()) {
  // ...
}
于 2012-04-08T03:10:41.833 回答
3

1.答案已经贴出来了,虽然作者心中隐藏着“问题”:

“我应该通过整个对象吗”?当他这样说时,他认为需要将一些巨大的地球传递给方法。

大多数面向对象的编程语言(C#、java、c++ ..)并非如此

当您将对象的实例传递给方法时,您只传递了一个引用而不是其他任何东西。

2.请注意,对象本身的属性可以是整个对象,并且可能是该属性的大小大于对象的大小。

因此,回答您的问题是为了性能优势,您通过什么并不重要。

于 2012-04-08T03:45:51.333 回答
2

第二种选择更好。正如得墨忒耳法则所说。在这种情况下,不是从优化的角度来看,而是从设计的角度来看。

http://en.wikipedia.org/wiki/Law_of_Demeter

于 2012-04-08T05:33:25.067 回答