执行与运行与执行与执行动词

时间:2010-05-19 16:19:29

标签: c# java naming-conventions

  • 您使用的方法名称的动词列表是什么?您的个人或团队标准是什么?
  • 我讨论是否使用Do vs. Run vs. Execute vs. Perform,我想知道是否不再推荐这些中的任何一个或者人们根本没有真正使用它们,我应该抓它们。基本上这些动词中的任何一个都意味着同样的事情......调用一些进程(方法调用)。这不在CRUD之内。例如:

ExecutePayPalWorkflow();

也可以是这些名称中的任何一个:

DoPayPalWorkflow();
RunPayPalWorkflow();
PerformPayPalWorkflow();

或者它真的不重要......因为这些动词中的任何一个都可以理解为“什么”通过其后的其他单词显示你的意图“PayPalWorkflow”

命名是我非常认真对待的事情,并且在编写时非常考虑很多:

  • 它使代码对其他开发者可读
  • 几周之后,当我不记得我编码的内容
  • 时,它让我的代码可读

此讨论适用于任何语言。我只是将这两个主要标签C#和Java放在这里,这对我来说足够好,可以得到一些可靠的答案或经验。

7 个答案:

答案 0 :(得分:8)

你的方法名称通常不应该是动词吗?与您的示例一样,您可以使用动词Pay代替Perform + Payment

修改

至于你如何使用你列出的任何动词(执行,执行,运行,执行),我认为根本不需要它们。他们不传达任何其他信息。您的语法暗示了您正在调用(或执行或执行或运行或执行)方法的事实。

如果你想向调用者表明你的方法可能在动作完成之前返回,那么在.NET中有一个约定:Begin *和End *。

我能想到的唯一例外是你是否有任何一般过程的抽象。在这种情况下,您将被迫使用诸如执行或运行之类的动词,因为您实际正在做的尚未定义。

答案 1 :(得分:2)

payPalWorkflow.execute()
payPalWorkflow.run()
payPalWorkflow.perform()

您的命名约定似乎缺乏抽象。如果某些东西是“可执行的”那么它的方法应该是“execute()”,你应该使用类名来指示实现“可执行”行为的内容。

您使用“执行”,“运行”还是“执行”完全取决于系统的上下文。如果将这些视为需要运行的作业,请不要使用“执行”。如果它们是需要执行的任务,“运行”同样是一个糟糕的选择。重要的是所有这些方法应该是一致的(这是接口声明将强制执行的)。

答案 2 :(得分:1)

我没有说上述内容。不同的前缀会损害IntelliSense。

答案 3 :(得分:1)

有时,您在c#/ java之前使用的语言会影响您将使用的术语。例如,有许多Delphi开发人员会更喜欢

PerformSomeTask()

相反,我已经看到很多VB(我猜?)影响,倾向于将方法作为前缀

RunSomething()

我个人避免任何类似的约定,因为你的代码看起来会类似。在我收到LinkedIn工作同事的建议中,他提到我维护的一个项目有2,000,000多行代码。我没有意识到项目那么大,但我从该项目中学到的一件事是你不希望你的代码看起来像这样

PerformTransaction()    
PerformSubtransaction()
PerformDatabaseConnection()
PerformValidation()
PerformAuthorization()
PeformReportGeneration()
PerformReportGenerationPostTasks()
PerformUserLogOutFinalizationTasks()
PerformDataExport()
PerformDataImport()
// .... and on and on and on...

它只是使一切都如此反可读。命名惯例应与大剂量的现实盐一起使用。

我认为该方法的名称应该只反映它的作用。有一天它可能是PerformSomeTask,另一天可能是DoImportantThing。但是,拥有20多个Perform[YourMethodNameHere]并不是非常直观。

答案 4 :(得分:1)

我认为抽象是一种更好的自解释代码形式,而不是长方法名称。

对你来说,这样的事情可能会更好:

PaymentMethod payPal = new PaymentMethod("paypal");
payPal.pay();

这是PayPalWorkflow到底是什么?这对我来说没什么意义...... 您可能希望payPal.startPaymenetProcess();使用此或

你想用1方法调用启动并完成它吗?

您必须更好地描述和抽象您的系统,然后将使用简单的名称。


让我们忘记你的榜样......

这是我对do/perform/run/execute

的看法

run - 这是关于持续的过程。会持续的东西。可以在运行等时配置...

do - 我不会使用do字,因为在Java(我的工作语言)中,它是由语言定义的命令

perform - ......一项任务。短暂的,快速重复执行的东西

execute - 在此之前需要进行大量准备的复杂事情的最后一步

答案 5 :(得分:0)

除了语义之外,在Java中,public void run()几乎总是正确的。这是因为RunnableRunnableFutureRunnableScheduledFuture接口,当您希望在Thread上运行某些内容或将其安排在{{1}}以后执行时使用{3}}

答案 6 :(得分:-1)

雅保持简单。首先,函数名称应该是小写的。然后,除了PeformReportGeneration之外,您需要generateReport。它更简洁地传达了同样的信息。

在你的情况下,由于Workflow并非真正的动词,因此更难...而不是PerformPayPalWorkflow你只需做run,例如:

PayPalWorkflow workflow = ...;
workflow.run()

如果你拥有的只是一个PayPal对象,它不仅仅是工作流程,而是......我不确定。我需要有关如何设置代码,在这种情况下实际工作流程等的更多信息,等等。