用什么命名方法

时间:2010-03-31 21:07:35

标签: c#

我正在讨论如何命名这种方法。

CloseCashTransaction(Cash.Id,-1,true);

CompleteCashTransaction(Cash.Id,-1,true);

或两者都不好?

在商业术语/流程中,通过发送这3个值,我实际上是在工作流程中“关闭交易”或“完成交易”。

然而在开发者方面,我无法推断wtf“完成”或“关闭”的意思。它迫使我调查方法的内部。我的斗争是,我试图命名方法来推断他们在做什么。完全是太过笼统,并且每次我使用这样的单词时都会强迫方法的使用者深入到代码中。

当我在整个代码中看到这样的东西时,我需要花很多时间来弄清楚它们实际上在做什么。如果评论很糟糕,我最终必须查看该方法中的所有逻辑,因为注释和方法名称确实可以推断出正在发生的事情。

9 个答案:

答案 0 :(得分:7)

来自C#编码标准......

6.8方法 方法应使用以下格式命名:

动词+形容词+名词+限定符

示例:

private Ball FindRedCansByPrice( 
     float price, 
  ref int canListToPopulate,
     out int numberOfCansFound )

准则:

  • 参数应按其分组 可变性(从最少到最多 可变的)如示例中所示 上方。

  • 如果可能,请避免从中间退出方法。一口井 书面方法应该只退出 一点:最后。

  • 避免使用大型方法。方法的身体接近20到30 代码行,寻找那些块 可以分成他们自己的方法 并且可能由其他方法共享。

  • 如果您发现自己多次使用相同的代码块, 这是一个单独的好人选 方法

  • 将类中的方法组合成一个区域并按使用频率对它们进行排序(即,更常用的方法应该在其区域的顶部附近。

希望有所帮助


<强>奖金

命名零件&amp;对

  1. 普通形容词对

    • 老...... /新......
    • 来源...... /目的地......
    • 来源...... /目标......
    • 首先...... /下一个...... /当前...... /上一个...... /最后......
    • 闵... /最大...
  2. 公共属性前缀

    • 允许...(允许...)
    • 可以...
    • 包含...
    • 有...
    • 是...
    • 使用......(使用......)
  3. 普通动词对

    • 添加... /删除......
    • 插入... /删除...
    • 递增/递减... ...
    • ...锁定/解锁...
    • ...开始/结束...
    • 取... /商店......
    • To ... / From ...(隐含转换)
    • 打开... /关闭...
    • 创建... /销毁...
    • 获取... /推出...
    • ...向上/向下...
    • ...显示/隐藏...
    • 开始... /停止...
  4. 常见限定词后缀

    • ...平均
    • ...限制
    • ...计数
    • ...价
    • ...词条
    • ...萨姆
    • ...索引
    • ...共
  5. 注意:由于语义原因,避免使用Num;请改用Index和Count。另外,避免使用Temp;花时间描述对象的真实情况(例如使用SwapValue而不是TempValue)。

答案 1 :(得分:7)

这是我的反馈

  • 布尔参数通常说是邪恶的。作为一个随意的观察者,我看看你的方法,见true,并完全不知道这意味着什么。您应该使用2个方法或使用枚举来代替布尔值。我在我的博客(link
  • 上写了一篇关于这个问题的更详细的讨论
  • 这里使用-1类似于使用布尔值,因为它没有给读者增加任何价值。而是使用命名常量或具有不同名称的方法并完全删除参数。

答案 2 :(得分:1)

这些方法的课程是什么?参数是做什么的?有些背景会很好......

为什么没有具有CashTransaction方法或ITransaction方法的CashTransaction类(或Close接口和Complete实现)?< / p>

答案 3 :(得分:1)

如果不知道班级的名称和预期的电话模式,就无法轻易选择方法的名称。

如果Class被命名为“CashTransaction”并创建然后“关闭”,那么:

CashTransaction transaction = new CashTransaction();
...
transaction.close(...);

看起来很自然。

如果该类名为“CashTransaction”并且已创建,启动和完成,则:

CashTransaction transaction = new CashTransaction();
...
transaction.initiate(...);
transaction.complete(...);

也很自然。

尝试使用您自己的代码,并根据您允许的类名和调用模式的上下文命名方法。即使这不能让最好的名字更清晰,但至少你可以在评论中记录理想用法的例子。

答案 4 :(得分:0)

如何将枚举类型作为参数传递给方法: -

// declares the enum
public enum Action
{
   Close,
   Complete,
   Open,
   ...
}

用法: -

ExecuteTransaction(Cash.Id, -1, true, Action.Close);

ExecuteTransaction(Cash.Id, -1, true, Action.Complete);

答案 5 :(得分:0)

有人告诉我的事情可能有所帮助:“命名事物(方法,类等),这样如果企业主看了代码,就会对他们有所帮助。”

使用Intellisense,没有理由不能正确描述足够的名称,以便BA或商业类型的人能够理解它的作用。

并且总是有方法/类属性来进一步解释开发人员应该发生令人兴奋的事情。

答案 6 :(得分:0)

我认为你应该使用 CloseCashTransaction ,因为在异步调用中使用了动词Complete而你的方法不是一个。

但最好的选择是创建CashTransaction类,因为您的代码看起来像是用C语言编写的,而不是C#。为了更好地指导Edwin Buck的帖子。

答案 7 :(得分:0)

也许我已经走出了左边的领域,但是如何(抛开别人评论过的方法论点):

SettlePayment(Cash.Id, -1, true);

SettleCashPayment(Cash.Id, -1, true);

我倾向于避免在名称中使用Transaction,因为这可能是一个可能导致混淆的重载术语。我同意Close和Complete非常模糊。

答案 8 :(得分:-2)

就个人而言,我会选择较短的名字因为我很懒。

说真的,用什么来命名方法是你最不担心的。请确保您有///summary位来描述它。

不要忘记你总是可以重构。 VS2008有一个内置的重构工具来重命名方法,所以如果你以后不喜欢它,它需要花费10秒钟来重命名它。