Сделайте по сравнению с Выполненным по сравнению с, Выполняются по сравнению с, Выполняют [закрытые] глаголы

9
задан Michael Petrotta 21 May 2010 в 04:30
поделиться

7 ответов

Разве имена ваших методов обычно не должны быть глаголами для начала? Как в вашем примере, вы могли бы просто использовать глагол Pay вместо Perform + Payment.

Edit:

Что касается того, как вы можете использовать любой из перечисленных вами глаголов (Execute, Do, Run, Perform), я не думаю, что они вообще нужны. Они не передают никакой дополнительной информации. Тот факт, что вы вызываете (или выполняете, или делаете, или запускаете, или выполняете) метод, подразумевается вашим синтаксисом.

Если вы хотите указать вызывающей стороне, что ваш метод может вернуться до завершения действия, в .NET для этого существует соглашение: Begin* и End*.

Единственное исключение, о котором я могу подумать, это если у вас есть абстракция для какого-либо общего процесса. В этом случае вы будете вынуждены использовать такой глагол, как Execute или Run, поскольку что вы на самом деле делаете, еще не определено.

8
ответ дан 2 November 2019 в 23:59
поделиться
payPalWorkflow.execute()
payPalWorkflow.run()
payPalWorkflow.perform()

Похоже, что ваша система именования страдает от недостатка абстракции. Если что-то является "исполняемым", то его метод должен быть "execute()", и вы должны использовать имя класса, чтобы указать, что реализует "исполняемое" поведение.

Используете ли вы "execute", "run" или "perform", полностью зависит от контекста системы. Если вы рассматриваете их как задания, которые нужно выполнить, не используйте "perform". Если это задания, которые нужно выполнить, "run" также будет плохим выбором. Важно то, что все эти методы должны быть согласованными (что и будет обеспечиваться объявлением интерфейса).

2
ответ дан 2 November 2019 в 23:59
поделиться

Я считаю, что абстракция - лучшая форма понятного кода, чем длинные имена методов.

Может быть, вам лучше иметь что-то вроде этого:

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

Что это вообще за PayPalWorkflow ? На данный момент это для меня ничего не значит ... Может быть, вы хотите payPal.startPaymenetProcess (); с этим или

вы хотите инициировать и завершить его одним вызовом метода?

Вам нужно лучше описать и абстрагироваться от вашей системы, а затем последуют простые имена.


Давайте забудем ваш пример ...

и вот мои мысли относительно do / perform / run / execute

run - это непрерывный процесс. Что-то, что продлится. Можно настроить во время работы и т. Д.

do - я не буду использовать слово do , потому что в Java (мой рабочий язык) это команда, определенная языком

perform - ... задача. Что-то короткое и выполняется быстро и многократно

выполнить - последний шаг чего-то сложного, с большим количеством подготовительных действий, необходимых перед этим

1
ответ дан 2 November 2019 в 23:59
поделиться

Иногда язык, который вы использовали до c # / java, влияет на термин, который вы будете использовать. Например, есть много разработчиков Delphi там, кто предпочтет

PerformSomeTask ()

И наоборот, я видел много влияния VB (я полагаю?) с тенденцией к префиксу методов как

RunSomething ()

Я лично избегаю любое подобное соглашение, потому что ваш код станет похожим. В рекомендации, которую я получил от коллеги по работе в LinkedIn, он упомянул, что в одном проекте, который я поддерживал, было 2 000 000+ строк кода. Я не понимал, что проект был эта большая, но одна вещь, которую я узнал из этого проекта, заключалась в том, что вы не хотите, чтобы ваша компания de, чтобы выглядеть так :

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

Это просто делает все настолько защищенным от чтения. Условные обозначения следует воспринимать с большой долей соли реальности.

Я думаю, что название метода должно просто отражать то, что он делает. В один прекрасный день это может быть PerformSomeTask , в другой - DoImportantThing . Но наличие 20+ Perform [YourMethodNameHere] не очень интуитивно понятно.

1
ответ дан 2 November 2019 в 23:59
поделиться

Я не говорю ничего из вышеперечисленного. Использование разных префиксов вредит IntelliSense.

1
ответ дан 2 November 2019 в 23:59
поделиться

В сторону семантики, в Java public void run () почти всегда правильно. Это связано с интерфейсами Runnable , RunnableFuture и RunnableScheduledFuture , которые используются, когда вы хотите, чтобы что-то выполнялось в потоке или запланировать его для последующего выполнения на Executor .

0
ответ дан 2 November 2019 в 23:59
поделиться

Я просто. Прежде всего, имена функций должны быть в нижнем регистре. Тогда вместо чего-то вроде PeformReportGeneration вам понадобится generateReport . Он передает то же сообщение более лаконично.

В вашем случае это сложнее, поскольку Workflow на самом деле не глагол ... как насчет того, чтобы вместо PerformPayPalWorkflow вы просто выполняли run , например:

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

Если все, что у вас есть, это объект PayPal , который выполняет больше, чем просто рабочий процесс ... Я не уверен. Мне нужна дополнительная информация о том, как настроен код, каков рабочий процесс в данном случае и т. Д.

-1
ответ дан 2 November 2019 в 23:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: