【问题标题】:Where do you add new methods?你在哪里添加新方法?
【发布时间】:2009-06-18 14:27:55
【问题描述】:

当你向一个类添加一个新方法时,你把它放在哪里?在课程结束时......顶部?您是否将方法组织成特定的组?按字母顺序排序?

只是寻找保持类方法井井有条的一般做法。

更新 分组时,您在组中的哪个位置添加新方法?只是在结尾处添加,还是使用某种子分组、排序?

更新 2 嗯……我猜这个问题并不像我想象的那么清楚。我不是真的在寻找班级组织。我对向现有类添加新方法特别感兴趣。例如:

public class Attendant
{
    public void GetDrinks(){}
    public void WelcomeGuests(){}
    public void PickUpTrask(){}
    public void StrapIn(){}
}

现在我们要添加一个新方法PrepareForCrash()。它去哪儿了?在列表的顶部、底部、按字母顺序排列或靠近 StrapIn() 方法,因为它是相关的。

【问题讨论】:

  • 不要重新发明轮子,使用现有的方法!
  • @01:正在重新发明哪个轮子?

标签: coding-style


【解决方案1】:

靠近“StrapIn”,因为它是相关的。这样如果你以后重构,所有相关的代码都在附近。

大多数代码编辑器允许您在另一个窗格中按字母顺序浏览方法名称,因此在实际代码本身中按功能组织代码是有意义的。将函数方法组合在一起,让在类中导航时更轻松。

【讨论】:

  • 同意,+1 以平衡方程式(恕我直言,不加评论就否决投票比没用更糟糕)而且你说的确实有道理。
  • (仅供参考,之前我有更多的答案,例如“顶部的成员,然后是构造函数,然后是公共静态,然后是私有静态,然后是私有静态最终,然后是私有公共静态最终常量,等等。” ...但随后整个问题发生了变化。)
  • 像 razzed 一样,我使用“相关”标准对类的方法或属性进行分组,添加区域以使代码更易于访问。 Visual Studio 和许多其他 IDE 环境允许您在附加面板中查看按字母顺序排序的函数和方法,因此无需按字母顺序对类的代码进行排序,而将代码分组到相关区域可以让您更清楚地了解上课,在哪里可以找到你要找的东西。
【解决方案2】:

看在上帝的份上,不是按字母顺序!

我倾向于按照我希望在对象生命周期内调用它们的顺序对函数进行分组,以便从上到下读取头文件往往可以解释类的操作。

【讨论】:

  • 我同意这两种说法! +1
【解决方案3】:

我认为这是个人选择。 但是我喜欢这样组织我的课程。

public class classname  
{
    <member variables>

    <constructors>
    <destructor>

    <public methods>

    <protected methods>

    <private methods>
}

原因是这样的。

顶部的成员变量
查看存在哪些成员变量以及它们是否已初始化。

构造函数 查看成员变量是否已设置/初始化以及类的所有构造选项。

析构函数
查看类是如何清理的,并使用构造函数和成员变量对其进行验证。

公共方法
查看对象的调用者可以使用哪些可用的合约。

受保护的方法 查看将使用哪些继承类。

私有方法 因为它是关于类内部的信息,如果您需要了解内部信息,您可以直接快速滚动到最后。但是要知道类的接口,一切都在开始。

更新 - 基于 OP 的更新
从逻辑上讲,一个好方法是按照它们所做的类别来组织这些方法。 通过这种方式,您可以从 IDE 中获得对方法进行分类以及按字母顺序搜索的可读性(前提是在您的 IDE 中)。

但实际上,我认为将方法放在该部分的末尾是最好的方法。如果代码由多人共享,则很难持续监控每种方法的去向,因为它是主观的,因为它是每个方法的。

如果您要将此作为标准,则很难为每种方法的放置位置提供界限。

【讨论】:

    【解决方案4】:

    我喜欢 C# 和 VB.net 的地方在于能够使用#region 标签,所以我的类通常看起来像这样

    class MyClass
    {
    
    #region Constructors
    
    public MyClass()
    {
    }
    
    public MyClass(int x)
    {
    _x = x;
    }
    
    #endregion
    
    #region Members
    private int _x;
    #endregion
    
    #region methods
    public void DoSomething()
    {
    }
    #endregion
    
    #region Properties
    public int Y {get; private set;}
    #endregion
    
    }
    

    所以基本上你把相似的东西放在一起,这样你就可以把所有东西都折叠起来,然后更快地找到你的东西。

    【讨论】:

    • 这很有趣。我讨厌 C# 和 VB.net 的一件事是使用#region 标签的能力:)
    • 在我看来这是组织代码的最佳一致性方式
    【解决方案5】:

    一般情况下,取决于现有的分组;如果有一个新方法适合的现有分组,我会把它放在那里。例如,如果有一组运算符,如果是运算符,我会将新方法与运算符放在一起。

    当然,如果没有好的分组,添加一个方法可能会提示一个新的分组;我将其视为重构的机会,并尝试在合理的情况下重新组合现有的运算符。

    【讨论】:

      【解决方案6】:

      我将所有方法组织成区域,例如公共方法、私有方法或有时通过保存方法等功能。

      【讨论】:

        【解决方案7】:

        恕我直言: 如果您按字母顺序组织方法,则根据其名称放置一个新方法。否则放在相关组的底部。这有助于了解哪种方法较新。更大的问题是如何在组中组织方法,例如取决于什么属性,但这对每个人来说都更加个性化,并且取决于特定的类。

        【讨论】:

        • 你为什么需要知道哪种方法更新。你没有源代码控制吗?两年后,当有人在看代码时,哪个方法比另一个方法小两天有关系吗?
        猜你喜欢
        • 1970-01-01
        • 2017-02-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多