我正在讨论如何命名这种方法。
CloseCashTransaction(Cash.Id,-1,true);
或
CompleteCashTransaction(Cash.Id,-1,true);
或两者都不好?
在商业术语/流程中,通过发送这3个值,我实际上是在工作流程中“关闭交易”或“完成交易”。
然而在开发者方面,我无法推断wtf“完成”或“关闭”的意思。它迫使我调查方法的内部。我的斗争是,我试图命名方法来推断他们在做什么。完全是太过笼统,并且每次我使用这样的单词时都会强迫方法的使用者深入到代码中。
当我在整个代码中看到这样的东西时,我需要花很多时间来弄清楚它们实际上在做什么。如果评论很糟糕,我最终必须查看该方法中的所有逻辑,因为注释和方法名称确实可以推断出正在发生的事情。
答案 0 :(得分:7)
来自C#编码标准......
6.8方法 方法应使用以下格式命名:
动词+形容词+名词+限定符
示例:
private Ball FindRedCansByPrice(
float price,
ref int canListToPopulate,
out int numberOfCansFound )
准则:
参数应按其分组 可变性(从最少到最多 可变的)如示例中所示 上方。
如果可能,请避免从中间退出方法。一口井 书面方法应该只退出 一点:最后。
避免使用大型方法。方法的身体接近20到30 代码行,寻找那些块 可以分成他们自己的方法 并且可能由其他方法共享。
如果您发现自己多次使用相同的代码块, 这是一个单独的好人选 方法
将类中的方法组合成一个区域并按使用频率对它们进行排序(即,更常用的方法应该在其区域的顶部附近。
希望有所帮助
<强>奖金强>
命名零件&amp;对强>
普通形容词对
公共属性前缀
普通动词对
常见限定词后缀
注意:由于语义原因,避免使用Num;请改用Index和Count。另外,避免使用Temp;花时间描述对象的真实情况(例如使用SwapValue而不是TempValue)。
答案 1 :(得分:7)
这是我的反馈
true
,并完全不知道这意味着什么。您应该使用2个方法或使用枚举来代替布尔值。我在我的博客(link)答案 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秒钟来重命名它。