C# 如何命名方法

C# 如何命名方法,c#,C#,我正在讨论如何命名这种方法 CloseCashTransaction(Cash.Id,-1,true) 或 CompleteCashTransaction(Cash.Id,-1,true) 或者两者都不好 在业务术语/流程中,通过发送这3个值,我实际上是在我们的工作流程中“关闭交易”或“完成交易” 然而在开发者方面,我不能推断wtf的“完成”或“关闭”的意思。它迫使我研究该方法的内部结构。我的困难在于我试图命名方法来推断它们在做什么。Complete太笼统了,每次我使用这样的词时,它都会迫使方法

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

CloseCashTransaction(Cash.Id,-1,true)

CompleteCashTransaction(Cash.Id,-1,true)

或者两者都不好

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

然而在开发者方面,我不能推断wtf的“完成”或“关闭”的意思。它迫使我研究该方法的内部结构。我的困难在于我试图命名方法来推断它们在做什么。Complete太笼统了,每次我使用这样的词时,它都会迫使方法的使用者深入代码


当我在代码中看到这样的东西时,我不得不花很多时间去弄清楚他们到底在做什么。如果注释很糟糕,我最终不得不查看该方法中的所有逻辑,因为注释和方法名称都可以推断出发生了什么。

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

说真的,你最不担心的是如何命名一种方法。只需确保您有一个
///summary
位来描述它


别忘了你总是可以重构的。VS2008有一个内置的重构工具来重命名方法,因此,如果您以后不喜欢它,那么重命名它实际上需要10秒钟

这些方法所在的类是什么?参数的作用是什么?一些背景会很好

为什么没有一个
CashTransaction
类(或者一个
ITransaction
接口和一个
CashTransaction
实现),它有一个
Close
方法或
Complete
方法?

来自C#编码标准

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

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

例如:

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

  • 参数应按其属性分组 易变性(从最小到最大) 可变)如示例所示 上面

  • 如果可能,避免从中间退出方法。井 书面方法应仅从中退出 一点:在它的尽头

  • 避免使用大型方法。当一个方法的主体接近20到30时 代码行,查找 可以分为自己的方法 并且可能被其他方法共享

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

  • 将类中的类方法分组到一个区域中,并按使用频率对它们进行排序(即,更频繁调用的方法应接近其区域的顶部)

希望能有帮助


奖金

命名零件和配对

  • 常用形容词对

    • 旧的…/新的
    • 源…/目的地
    • 源…/目标
    • 第一个…/下一个…/当前…/上一个…/最后一个
    • 最小…/最大
  • 公共属性前缀

    • 允许…(允许…)
    • 可以
    • 包含
    • 使用…(使用…)
  • 常用动词对

    • 添加/删除
    • 插入…/删除
    • 增量/…减量
    • 锁定…/解锁
    • 开始…/结束
    • 获取…/存储
    • 到…/从…(转换隐含)
    • 打开/关闭
    • 创建/销毁
    • 获取/释放
    • 向上…/向下
    • 显示/隐藏
    • 开始…/停止
  • 常用限定词后缀

    • …平均值
    • …极限
    • …计数
    • …参考号
    • …入口
    • …总数
    • …索引
    • …总计

  • 注意:由于语义原因,避免使用Num;使用Index和Count。此外,避免使用Temp;花时间描述对象的真实情况(例如,使用SwapValue而不是TempValue)。

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

    // declares the enum
    public enum Action
    {
       Close,
       Complete,
       Open,
       ...
    }
    
    用法:-

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

    这是我的反馈

    • 一般来说,布尔参数是有害的。作为一个偶然的观察者,我看了你的方法see
      true
      ,完全不知道这意味着什么。你应该有2个方法来代替布尔,或者使用枚举。我在我的博客()上写了关于这个问题的更详细的讨论
    • 这里使用-1与使用布尔值类似,因为它不会向读取器添加任何值。相反,请使用命名常量或具有不同名称的方法,并完全删除参数

      • 如果不知道类的名称以及您希望进行的调用模式,就很难选择方法的名称

        如果该类被命名为“CashTransaction”并创建,然后“closed”,则:

        看起来很自然

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

        CashTransaction transaction = new CashTransaction();
        ...
        transaction.initiate(...);
        transaction.complete(...);
        
        这也是很自然的


        尝试使用您自己的代码,并根据您允许的类名和调用模式的上下文命名方法。即使这并不能使选择的最佳名称更加清晰,但至少您可以在注释中记录一个理想用法的示例。

        有人告诉我的可能会有所帮助:“命名对象(方法、类等)因此,如果企业主看了代码,对他们来说是有意义的。”

        有了Intellisense,就没有理由不恰当地描述事物的名称,以便BA或业务型人员能够理解它的功能


        如果其中发生了激动人心的事情,总有一些方法/类属性需要向开发人员进一步解释。

        我认为您应该使用CloseCashTransaction主要是因为在异步调用中使用动词Complete,而您的方法不是

        但最好的选择是创建CashTransaction类,因为您的代码看起来像是用C编写的,
        CashTransaction transaction = new CashTransaction();
        ...
        transaction.close(...);
        
        CashTransaction transaction = new CashTransaction();
        ...
        transaction.initiate(...);
        transaction.complete(...);
        
        SettlePayment(Cash.Id, -1, true);
        
        SettleCashPayment(Cash.Id, -1, true);