传递整个对象和传递该对象的属性哪个更高效?

4
考虑以下例子。
我需要检查CouponModel是否有唯一的序列号。
我的选择有两个:
CouponModel model = GetFromSomewhere();

if (!CouponHasUniqueKey(model))
{
}

//or

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

当然,在我传入整个对象的方法中,我必须访问字符串属性而不是直接使用字符串。
哪种选项更好,为什么?

2
这与性能无关(这只是微优化而已)。你只需满足方法完成其合约所需的最低要求。参考@Jordao的回答:对象承担这个责任可能更好。 - Mitch Wheat
3个回答

5
我相信性能会是一样的。 我更喜欢将责任交给对象本身:
CouponModel coupon = GetFromSomewhere();
if (!coupon.HasUniqueKey()) {
  // ...
}

考虑到这一点,这是针对MVC3应用程序的,其中模型被优先选择为轻量级。从模型中通过存储库访问数据库是否是一个好的实践?我需要这样做来在对象内运行HasUniqueKey方法。 - Only Bolivian Here
只要视图和控制器从未看到那些数据库访问方法,那么我猜那应该没问题。在进行基本操作之前不要尝试优化,记住KISS-保持简短、简单。 - benjgorman
存储库是模型的一部分,因此您的模型可以使用它。但是,它应该是模型内的一个接口,这样可以更好地进行测试。在此处查看一些常规信息:http://stackoverflow.com/questions/5582982/in-a-mvc-tiered-architecture-a-repository-class-is-part-of-the-business-layer-or。 - Jordão

3

1.虽然答案已经发布,但作者心中仍有一个隐藏的“问题”:

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

但是对于大多数面向对象编程语言(C#,Java,C ++等),情况并非如此。

当您将对象实例传递给方法时,您只传递引用而已。

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

因此,对于性能的好处来说,无论您传递什么都没有关系。


2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接