ExecutePayPalWorkflow();
也可以是这些名称中的任何一个:
DoPayPalWorkflow();
RunPayPalWorkflow();
PerformPayPalWorkflow();
或者它真的不重要......因为这些动词中的任何一个都可以理解为“什么”通过其后的其他单词显示你的意图“PayPalWorkflow”
命名是我非常认真对待的事情,并且在编写时非常考虑很多:
此讨论适用于任何语言。我只是将这两个主要标签C#和Java放在这里,这对我来说足够好,可以得到一些可靠的答案或经验。
答案 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()
几乎总是正确的。这是因为Runnable
,RunnableFuture
和RunnableScheduledFuture
接口,当您希望在Thread
上运行某些内容或将其安排在{{1}}以后执行时使用{3}}
答案 6 :(得分:-1)
雅保持简单。首先,函数名称应该是小写的。然后,除了PeformReportGeneration
之外,您需要generateReport
。它更简洁地传达了同样的信息。
在你的情况下,由于Workflow
并非真正的动词,因此更难...而不是PerformPayPalWorkflow
你只需做run
,例如:
PayPalWorkflow workflow = ...;
workflow.run()
如果你拥有的只是一个PayPal
对象,它不仅仅是工作流程,而是......我不确定。我需要有关如何设置代码,在这种情况下实际工作流程等的更多信息,等等。