Збережена процедура Іменування конвенцій? [зачинено]


11

Один з наших старших розробників заявив, що нам слід використовувати умову іменування для збережених процедур зі стилем "objectVerb" іменування типу ("MemberGetById") замість типу "verbObject" іменування ("GetMemberByID"). Обґрунтування цього стандарту полягає в тому, що всі пов'язані з цим збережені процедури групуються б об'єктом, а не дією.

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

Які ваші заходи щодо цього? Який спосіб є найпоширенішим способом іменування збереженого протоколу, і чи використовуєте ви або використовуєте які типи збережених конвенцій про іменування?


1
"ім'я не можна читати природним шляхом"? Ким? Яка ваша перша природна мова? Англійською? Або щось інше?
С.Лотт

9
@ S.Lott - для мене це схоже на те, що ти почув би на болоті в Дегобах.
TZHX

1
Чудове запитання! Наявність деяких стандартів краще, ніж відсутність стандартів, але деякі спроможні люди взяли цю концепцію ще більше і придумали хороший стандарт. Наприклад, Dijkstra писав про те, чому має значення набагато більше сенсу індексувати масиви з 0 як перший елемент, а не 1. developeronline.blogspot.com/2008/04/… Це, здавалося б, тривіальна тема, і все ж я ставлю на облік знадобилося йому кілька роздумів, щоб придумати це. Так само у Спольського є чудова система: joelonsoftware.com/articles/Wrong.html Деякі думки вперед уникають болю
робота

4
Я б сказав, позбудьтесь збережених процедур взагалі;)
Майкл Браун

Відповіді:


10

Подивіться на це так. Як ваші методи організовані в коді? За об'єктом, з відключеними методами.

MyObject.GetById(int)
MyObject.Save()

Якщо ваші збережені програми імітують таке іменування, буде набагато простіше побачити, як вони співвідносяться з вашим вихідним кодом.

MyObjectGetById
MyObjectSave

Добре, але SQL по суті не є OO. Насправді вона ДУЖЕ відрізняється від Java / C # / тощо. код, який взаємодіє з ним. Цілком природно дозволити SQL робити свою справу і дозволити Java робити свою справу. Якщо код повинен бути сформований, це може бути здійснено з невеликими зусиллями.
робота

4
Я не думаю, що OO тут не враховує. Наведене вище - лише приклад того, як це не так неприродно, як може спочатку здатися, що використовується така конвенція про іменування.
Марк Фрідман

2
Якщо метод у коді має бути "MyObject.GetById (int)", чому збережений прок також не може бути названий "MyObject.GetById"? Групування все-таки відбудеться, і крапка дасть розділення між об'єктом / таблицею та дією, яка потрібна.
Кріс

1
@Chris, я не впевнений, що ти можеш використовувати "." в назві проц, але, звичайно, використовуючи objectVerb групи річ так само, як думає про них. Я не думаю про перше, я думаю про те, що хочу, а потім як це отримати.
CaffGeek

1
@Mark Freedman, не те, що це обов'язково OO, ви групуєте речі на процедурних мовах однаково, тільки вони не є фактичними об'єктами. Але зазвичай префікс того, що природно стане об'єктом, якби код був перетворений. strCompare, strLen, тощо, тощо, objectAction
CaffGeek

6

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

Найголовніше - це є єдиний стандарт, і його дотримуються всі.


1
Походить від компанії, яка не мала офіційних стандартів іменування (крім "префікса з sp"), мати стандарт - це єдине, що має значення.
Глен Солсберрі

5

Ви повинні вирішити, який найбільший емітент, знайти потрібні програми або швидко розшифрувати їх значення?

Якщо ви бачите:

memberGetID memberGetName memberGetThis memberListSomething memberDelete

У якийсь момент, коли ви вже знайшли "члена", ви просто проігноруєте це і підете звідти.

Подивіться в телефонну книгу. Якщо ви хочете знайти Джона Сміта, це Сміт, Дейв Сміт, Джон Сміт, Роберт

дійсно так важко? Я не називаю людей своїм прізвищем, а потім прізвищем, якщо це не Джеймс Бонд.


1
+1 Мені подобається це питання та відповіді! Він стосується юзабіліті, і це може вийти досить складним і цікавим.
робота

0

Замість "objectVerb" ви могли б використовувати "namespace_verbObject", наприклад Member_GetById.
Він буде групувати процедури за простором імен і все ще використовувати традиційні імена "verbSomething".

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.