2012-04-02 35 views
1

在代码审查过程中,我向团队中迅速提出了一个方法,我已经做出了静态的决定,一个人同意没有理由不是静态的,并且有人不同意他说他不会让它变成静态的,必要的,只是为了将来的修改和测试安全。你会使这个方法是否为静态的?

所以我做了相当多的研究,显然这是一个专门的案例,但我想知道你会在这种情况下做什么,为什么?

(它基本上是一个辅助方法,我从几个不同的方法,以极低的流量页面中调用。更多的我的知识和学习静态)

private IEnumerable<Category> GetCategoryByID(int id, Context context) 
{ 
    var categoryQuery = from selectAllProc in context.SelectAll_sp() 
         where selectAllProc.CategoryID == id 
         select selectAllProc; 
    return categoryQuery; 
} 
+2

对context类型的扩展方法怎么样? – mellamokb 2012-04-02 22:50:59

+2

该方法是'private';我不明白如何使它变为静态会使事情变得更加困难。 – 2012-04-02 22:52:17

+0

这是有点主观和有争议的。但根据一些准则,如果您发现自己将相同的值/对象引用传递给多个实例方法,请改为使用私有字段。 我不明白为什么你想要它是静态的,如果它是私人的。 – 2012-04-02 22:54:50

回答

5

使私有方法静态是微观的一种形式-优化;该方法调用是稍快。但差距太小而无意义。

一般来说,你应该标记的方法静态时:

  1. 不与实例成员任何方式进行交互,并
  2. 你想有叫它没有实例的能力类,如Class.Method()

通常情况下,像你的实例方法将进入自己的static辅助类,如果他们在多个地方使用。

1

如果我是你,我会问我自己以下问题。

Is it something which is related to type or instance of type? 

如果答案是肯定的,我会稍微倾向于使其成为静态的其他东西,使其非静态。

如果您可以提供更多信息,社区可以提出一些不错的选择。

0

我想到的第一个说法是,通过声明此方法是静态的,并且可能在代码中的多个位置使用它,您将引入一个服务定位器种类的依赖关系。

据我所知,它的主要问题是引入了隐式依赖关系,即无法通过查看方法签名来推断它们。

因此,评估修改静态方法对系统其余部分的影响要困难得多。

相关问题