Хранимая процедура Соглашения об именах? [закрыто]

11

Один из наших старших разработчиков заявил, что мы должны использовать соглашение об именовании для хранимых процедур со стилем именования "objectVerb", таким как ("MemberGetById") вместо типа именования "verbObject" ("GetMemberByID"). Основанием для этого стандарта является то, что все связанные хранимые процедуры будут сгруппированы по объекту, а не по действию.

Хотя я вижу логику для этого способа именования вещей, я впервые вижу хранимые процедуры, названные таким образом. Мое мнение о соглашении об именах состоит в том, что имя не может быть прочитано естественным образом, и требуется некоторое время, чтобы определить, что говорят слова и что может сделать процедура.

Что вы думаете об этом? Какой способ является более распространенным способом присвоения имен хранимым процессам, и какие типы имен сохраненных процедур вы использовали или выполняете?

Крис
источник
1
"имя не может быть прочитано естественно"? Кем? Какой ваш первый естественный язык? Английский? Или что-то другое?
С.Лотт
9
@ S.Lott - для меня это похоже на то, что ты бы услышал на болоте в Дегобах.
TZHX
1
Отличный вопрос! Наличие некоторых стандартов лучше, чем отсутствие стандартов, но некоторые способные люди взяли эту концепцию еще дальше и придумали хороший стандарт. Например, Дейкстра написал о том, почему гораздо важнее индексировать массивы с 0 в качестве первого элемента, а не 1. developeronline.blogspot.com/2008/04/… Это, казалось бы, тривиальная тема, и я держу пари ему понадобилось немного поработать, чтобы придумать это. Точно так же у Spolsky есть хорошая система: joelonsoftware.com/articles/Wrong.html Некоторые мысли об искренности избегают боли
Job
4
Я бы сказал, избавиться от хранимых процедур в целом;)
Майкл Браун

Ответы:

10

Посмотри на это так. Как ваши методы организованы в коде? По объекту, с методами свисающими.

MyObject.GetById(int)
MyObject.Save()

Если ваши хранимые процессы имитируют эти имена, вам будет гораздо легче увидеть, как они связаны с вашим исходным кодом.

MyObjectGetById
MyObjectSave
CaffGeek
источник
Хороший вопрос, но SQL по сути не является ОО. На самом деле, он ОЧЕНЬ отличается от Java / C # / etc. код, который взаимодействует с ним. Вполне естественно, что SQL делает свое дело, а Java делает свое дело. Если код должен быть сгенерирован, он может быть выполнен без особых усилий.
Работа
4
Я не думаю, что ОО является соображением здесь. Выше приведен лишь пример того, как это не так неестественно, как может показаться вначале при использовании такого соглашения об именах.
Марк Фридман
2
Если из-за наличия в коде метода «MyObject.GetById (int)», почему хранимый процесс также нельзя назвать «MyObject.GetById»? Группировка все равно будет происходить, и точка будет давать разделение между объектом / таблицей и требуемым действием.
Крис
1
@ Крис, я не уверен, что ты можешь использовать '.' в имени процесса, но, конечно, используя objectVerb, группирует вещи так же, как думают о них. Я не думаю о том, чтобы получить первым, я думаю о том, что я хочу, а затем, как получить это.
CaffGeek
1
@ Марк Фридман, не обязательно, что это ОО, вы группируете вещи в процедурных языках одинаково, только они не в реальных объектах. Но обычно с префиксом того, что естественно стало бы объектом, если бы код был преобразован. strCompare, strLen и т. д. и т. д. objectAction
CaffGeek
6

Я тоже могу видеть логику; он группирует действия вместе по сущности. Однако, если ваши действия всегда GET, PUT и DELETE, изменение именования может не иметь большого значения. Я вижу наибольшую выгоду от нового стандарта именования, возникающего, когда у вас есть уникальные имена действий, например «AccountTransferMoney», и тому подобное.

Самое главное, что существует единый стандарт и что его придерживаются все.

Роберт Харви
источник
1
Исходя из компании, которая не имела официальных стандартов именования (кроме «префикса с sp»), наличие стандарта - единственное, что имеет значение.
Глен Солсберри
5

Вы должны решить, кто из них больше, найти нужные вам проки или быстро расшифровать их значение?

Если ты видишь:

memberGetID memberGetName memberGetThis memberListSomething memberDelete

В какой-то момент, когда вы уже нашли «член», вы просто игнорируете это и идете оттуда.

Посмотри в телефонной книге. Если вы хотите найти Джона Смита, это Смит, Дейв Смит, Джон Смит, Роберт

действительно так сложно? Я не называю людей их фамилией и именем, если только это не Джеймс Бонд.

JeffO
источник
1
+1 Мне нравится этот вопрос и ответы! Он имеет дело с юзабилити, и это может быть довольно сложно и интересно.
Работа
0

Вместо «objectVerb» вы можете использовать «namespace_verbObject», например Member_GetById.
Он будет группировать процедуры по пространству имен и по-прежнему использовать традиционное именование "verbSomething".

Abyx
источник