C# 如何命名方法
我正在讨论如何命名这种方法 CloseCashTransaction(Cash.Id,-1,true) 或 CompleteCashTransaction(Cash.Id,-1,true) 或者两者都不好 在业务术语/流程中,通过发送这3个值,我实际上是在我们的工作流程中“关闭交易”或“完成交易” 然而在开发者方面,我不能推断wtf的“完成”或“关闭”的意思。它迫使我研究该方法的内部结构。我的困难在于我试图命名方法来推断它们在做什么。Complete太笼统了,每次我使用这样的词时,它都会迫使方法的使用者深入代码C# 如何命名方法,c#,C#,我正在讨论如何命名这种方法 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
,完全不知道这意味着什么。你应该有2个方法来代替布尔,或者使用枚举。我在我的博客()上写了关于这个问题的更详细的讨论true
- 这里使用-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);