Procedura składowana Konwencje nazewnictwa? [Zamknięte]


11

Jeden z naszych starszych programistów stwierdził, że powinniśmy stosować konwencję nazewnictwa dla procedur przechowywanych ze stylem nazewnictwa „objectVerb”, takim jak („MemberGetById”) zamiast typu nazewnictwa „verbObject” („GetMemberByID”). Powodem tego standardu jest to, że wszystkie powiązane procedury składowane byłyby pogrupowane według obiektu, a nie według akcji.

Chociaż widzę logikę tego sposobu nazywania rzeczy, po raz pierwszy widziałem procedury składowane o tej nazwie. Moim zdaniem konwencja nazewnictwa jest taka, że ​​nazwy nie można odczytać w sposób naturalny i zajmuje trochę czasu, aby ustalić, co mówią słowa i co może zrobić procedura.

Co sądzisz o tym? Który sposób jest najczęstszym sposobem nazewnictwa przechowywanego proc i czy jakiego rodzaju konwencji zapisanych nazewnictwa proc używasz lub przechodzisz?


1
„imienia nie można odczytać naturalnie”? Przez kogo? Jaki jest twój pierwszy język naturalny? Język angielski? Albo coś innego?
S.Lott,

9
@ S.Lott - dla mnie to wygląda jak coś, co można usłyszeć na bagnach w Degobah.
TZHX

1
Świetne pytanie! Posiadanie niektórych standardów jest lepsze niż brak standardów, ale niektórzy zdolni ludzie posunęli tę koncepcję jeszcze dalej i opracowali dobry standard. Na przykład Dijkstra napisał o tym, dlaczego indeksowanie tablic z 0 jako pierwszym elementem jest bardziej sensowne niż 1. developeronline.blogspot.com/2008/04/… To pozornie trywialny temat, a jednak założę się Wymyślenie go zajęło mu trochę majsterkowania. Podobnie Spolsky ma fajny system: joelonsoftware.com/articles/Wrong.html Pewne myślenie z góry pozwala uniknąć bólu
Job

4
Powiedziałbym, że razem pozbywajcie się procedur przechowywanych;)
Michael Brown

Odpowiedzi:


10

Spójrz na to w ten sposób. Jak twoje metody są uporządkowane w kodzie? Ze względu na obiekt, z zawieszonymi metodami.

MyObject.GetById(int)
MyObject.Save()

Dzięki przechowywanemu procesowi naśladującemu nazywanie, o wiele łatwiej będzie zobaczyć, jak odnoszą się one do kodu źródłowego.

MyObjectGetById
MyObjectSave

Dobra uwaga, ale SQL nie jest z natury OO. W rzeczywistości BARDZO różni się od Java / C # / etc. kod, który się z nim łączy. Naturalne jest, że pozwala SQL robić swoje, a Java robi swoje. Jeśli kod musi zostać wygenerowany, można to zrobić przy niewielkim wysiłku.
Job

4
Nie sądzę, żeby OO było tutaj rozważaniem. Powyższe jest tylko przykładem tego, że nie jest tak nienaturalny, jak może się wydawać, że używa takiej konwencji nazewnictwa.
Mark Freedman

2
Jeśli posiadając metodę w kodzie to „MyObject.GetById (int)”, dlaczego przechowywany proces nie może być również nazywany „MyObject.GetById”? Grupowanie nadal występowałoby, a kropka dawałaby separację między obiektem / tabelą a pożądaną akcją.
Chris

1
@Chris, nie jestem pewien, czy możesz użyć „.” w nazwie proc, ale z pewnością użycie objectVerb grupuje rzeczy w taki sam sposób, jak się o nich myśli. Nie myślę o tym, żeby najpierw dostać, myślę o tym, czego chcę, a potem o tym, jak je odzyskać.
CaffGeek

1
@Mark Freedman, niekoniecznie OO, grupujesz rzeczy w językach proceduralnych w ten sam sposób, tyle że nie ma ich w rzeczywistych obiektach. Ale zwykle poprzedzone tym, co naturalnie stałoby się przedmiotem, gdyby kod został przekonwertowany. strCompare, strLen itp., objectAction
CaffGeek

6

Ja też widzę logikę; grupuje działania według podmiotów. Jeśli jednak twoje działania są zawsze GET, PUT i DELETE, zmiana nazewnictwa może nie mieć większego znaczenia. Widzę najlepszą korzyść z nowego standardu nazewnictwa występującego, gdy masz unikalne nazwy akcji, np. „AccountTransferMoney”.

Najważniejsze jest to, że istnieje jeden standard i że wszyscy go przestrzegają.


1
Pochodzący z firmy, która nie miała oficjalnych standardów nazewnictwa (innych niż „przedrostek z sp”), posiadanie standardu jest jedyną rzeczą, która ma znaczenie.
Glen Solsberry

5

Musisz zdecydować, kto jest większym emitentem, znaleźć procedury, których szukasz, lub szybko rozszyfrować ich znaczenie?

Jeśli zobaczysz:

memberGetID memberGetName memberGetThis memberListSomething memberDelete

W pewnym momencie, gdy już znajdziesz „członka”, po prostu zignoruj ​​to i idź stamtąd.

Zajrzyj do książki telefonicznej. Jeśli chcesz znaleźć Johna Smitha, to Smith, Dave Smith, John Smith, Robert

naprawdę to trudne? Nie nazywam ludzi po nazwisku, a potem po imieniu, chyba że to James Bond.


1
+1 Uwielbiam to pytanie i odpowiedzi! Zajmuje się użytecznością, a to może być dość trudne i interesujące.
Job

0

Zamiast „objectVerb” można użyć „namespace_verbObject”, na przykład Member_GetById.
Będzie grupować procedury według przestrzeni nazw i nadal używać tradycyjnego nazewnictwa „czasownikSomething”.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.