Convenzioni sulla denominazione memorizzate? [chiuso]


11

Uno dei nostri sviluppatori senior ha affermato che dovremmo utilizzare una convenzione di denominazione per le procedure memorizzate con uno stile di denominazione "objectVerb" come ("MemberGetById") anziché un tipo di denominazione "verbObject" ("GetMemberByID"). Il ragionamento per questo standard è che tutte le relative procedure memorizzate sarebbero raggruppate per oggetto anziché per azione.

Mentre vedo la logica di questo modo di nominare le cose, questa è la prima volta che vedo procedure memorizzate denominate in questo modo. La mia opinione sulla convenzione di denominazione è che il nome non può essere letto naturalmente e richiede del tempo per determinare cosa dicono le parole e cosa potrebbe fare la procedura.

Cosa ne pensi di questo? In che modo è il modo più comune di nominare un proc memorizzato e quale tipo di convenzioni di denominazione del proc memorizzato hai utilizzato o utilizzato?


1
"il nome non può essere letto naturalmente"? Da chi? Qual è il tuo primo linguaggio naturale? Inglese? O qualcos'altro?
S.Lott

9
@ S.Lott - a me sembra qualcosa che sentiresti in una palude a Degobah.
TZHX,

1
Ottima domanda! Avere alcuni standard è meglio che non avere standard, ma alcune persone abili hanno approfondito ulteriormente questo concetto e ne hanno escogitato un buon livello. Ad esempio, Dijkstra ha scritto sul perché ha molto più senso indicizzare le matrici con uno 0 come primo elemento anziché 1. developeronline.blogspot.com/2008/04/… È un argomento apparentemente banale, eppure scommetto gli ci è voluto un po 'di armeggiamento per inventarlo. Allo stesso modo, Spolsky ha un bel sistema: joelonsoftware.com/articles/Wrong.html Alcuni pensieri iniziali evitano il dolore
Giobbe

4
Direi di eliminare del tutto le procedure memorizzate;)
Michael Brown,

Risposte:


10

Vedila in questo modo. Come sono organizzati i tuoi metodi in codice? Per oggetto, con i metodi sospesi.

MyObject.GetById(int)
MyObject.Save()

Avendo i tuoi proc memorizzati che imitano quel nome, sarà molto più facile vedere come si collegano al tuo codice sorgente.

MyObjectGetById
MyObjectSave

Buon punto, ma SQL non è intrinsecamente OO. In realtà, è MOLTO diverso da Java / C # / ecc. codice che si interfaccia con esso. È naturale lasciare che SQL faccia le sue cose e che Java faccia le sue cose. Se il codice deve essere generato, può essere realizzato con un piccolo sforzo.
Giobbe

4
Non penso che OO sia una considerazione qui. Quanto sopra è solo un esempio di come non sia così innaturale come potrebbe sembrare per prima cosa usare una simile convenzione di denominazione.
Mark Freedman,

2
Se un metodo nel codice è "MyObject.GetById (int)" perché un proc memorizzato non può essere chiamato anche "MyObject.GetById"? Il raggruppamento si verificherebbe comunque e un punto darebbe la separazione tra l'oggetto / tabella e l'azione desiderata.
Chris,

1
@ Chris, non sono sicuro che puoi usare un '.' in un nome proc, ma certamente usando objectVerb si raggruppa la cosa nello stesso modo in cui si pensa a loro. Non penso prima di tutto, penso a quello che voglio, poi a come recuperarlo.
CaffGeek,

1
@Mark Freedman, non che sia necessariamente OO, raggruppa le cose in linguaggi procedurali allo stesso modo, solo che non sono in oggetti reali. Ma di solito è preceduto da ciò che sarebbe naturalmente diventato un oggetto se il codice fosse convertito. strCompare, strLen, etc, etc, objectAction
CaffGeek

6

Anch'io posso vedere la logica; raggruppa le azioni per entità. Tuttavia, se le tue azioni sono sempre GET, PUT e DELETE, la modifica della denominazione potrebbe non essere così importante. Vedo il massimo vantaggio dal nuovo standard di denominazione che si verifica quando si hanno nomi di azioni univoci, ad esempio "AccountTransferMoney", quel tipo di cose.

La cosa più importante è che esiste un unico standard e che è seguito da tutti.


1
Proveniente da un'azienda che non aveva standard di denominazione ufficiali (tranne "prefisso con sp"), avere uno standard è l'unica cosa che conta.
Glen Solsberry,

5

Devi decidere qual è l'emittente più grande, trovare i proc che stai cercando o decifrare rapidamente il loro significato?

Se vedi:

memberGetID memberGetName memberGetThis memberListSomething memberDelete

Ad un certo punto, una volta che hai già trovato "membro", lo ignori e vai da lì.

Guarda in una rubrica. Se vuoi trovare John Smith, è Smith, Dave Smith, John Smith, Robert

davvero così difficile? Non chiamo le persone con il loro cognome e poi nome a meno che non sia James Bond.


1
+1 Adoro questa domanda e le risposte! Si occupa dell'usabilità e può diventare piuttosto complicato e interessante.
Giobbe

0

Invece di "objectVerb", potresti usare "namespace_verbObject", come Member_GetById.
Raggrupperà le procedure in base allo spazio dei nomi e continuerà a utilizzare la tradizionale denominazione "verbSomething".

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.