Gespeicherte Prozedur Namenskonventionen? [geschlossen]


11

Einer unserer leitenden Entwickler hat erklärt, dass wir eine Namenskonvention für gespeicherte Prozeduren mit einem "objectVerb" -Namensstil wie ("MemberGetById") anstelle eines "verbObject" -Typs ("GetMemberByID") verwenden sollten. Der Grund für diesen Standard ist, dass alle zugehörigen gespeicherten Prozeduren nach Objekt und nicht nach Aktion gruppiert werden.

Während ich die Logik für diese Art der Benennung sehe, ist dies das erste Mal, dass ich gespeicherte Prozeduren sehe, die auf diese Weise benannt wurden. Meiner Meinung nach kann die Namenskonvention nicht auf natürliche Weise gelesen werden und es dauert einige Zeit, um festzustellen, was die Wörter sagen und was das Verfahren tun könnte.

Wie sehen Sie das? Welcher Weg ist die gebräuchlichste Art, einen gespeicherten Prozess zu benennen, und welche Arten von Namenskonventionen für gespeicherte Prozesse haben Sie verwendet oder angewendet?


1
"Der Name kann natürlich nicht gelesen werden"? Von wem? Was ist deine erste natürliche Sprache? Englisch? Oder etwas anderes?
S.Lott

9
@ S.Lott - für mich sieht es aus wie etwas, das man in einem Sumpf in Degobah hören würde.
TZHX

1
Gute Frage! Einige Standards zu haben ist besser als keine Standards zu haben, aber einige fähige Leute haben dieses Konzept noch weiter vorangetrieben und einen guten Standard entwickelt. Zum Beispiel hat Dijkstra darüber geschrieben, warum es so viel sinnvoller ist, Arrays mit einer 0 als erstem Element anstelle von 1 zu indizieren. Developeronline.blogspot.com/2008/04/… Es ist ein scheinbar triviales Thema, und dennoch wette ich Er musste etwas basteln, um es zu finden. Ebenso hat Spolsky ein schönes System: joelonsoftware.com/articles/Wrong.html Einige Überlegungen im Voraus vermeiden Schmerzen
Job

4
Ich würde sagen, gespeicherte Prozeduren insgesamt loszuwerden;)
Michael Brown

Antworten:


10

Schau es dir so an. Wie sind Ihre Methoden im Code organisiert? Nach Objekt hängen die Methoden ab.

MyObject.GetById(int)
MyObject.Save()

Wenn Ihre gespeicherten Prozesse diese Benennung nachahmen, ist es viel einfacher zu erkennen, wie sie sich auf Ihren Quellcode beziehen.

MyObjectGetById
MyObjectSave

Guter Punkt, aber SQL ist nicht von Natur aus OO. Tatsächlich unterscheidet es sich SEHR von Java / C # / etc. Code, der damit verbunden ist. Es ist nur natürlich, SQL seine Sache machen zu lassen und Java seine Sache machen zu lassen. Wenn Code generiert werden muss, kann dies mit geringem Aufwand durchgeführt werden.
Job

4
Ich denke nicht, dass OO hier eine Überlegung ist. Das Obige ist nur ein Beispiel dafür, dass es nicht so unnatürlich ist, wie es zunächst scheint, eine solche Namenskonvention zu verwenden.
Mark Freedman

2
Wenn eine Methode im Code "MyObject.GetById (int)" lautet, warum kann ein gespeicherter Prozess nicht auch "MyObject.GetById" genannt werden? Die Gruppierung würde immer noch auftreten und ein Punkt würde eine Trennung zwischen dem Objekt / der Tabelle und der gewünschten Aktion ergeben.
Chris

1
@ Chris, ich bin nicht sicher, ob Sie ein '.' in einem proc-Namen, aber sicherlich mit objectVerb gruppiert etwas auf die gleiche Weise, wie man über sie denkt. Ich denke nicht daran, zuerst zu kommen, ich denke an das, was ich will, und dann, wie ich es abrufen kann.
CaffGeek

1
@ Mark Freedman, nicht dass es unbedingt OO ist, Sie gruppieren Dinge in prozeduralen Sprachen auf die gleiche Weise, nur dass sie nicht in tatsächlichen Objekten enthalten sind. Aber normalerweise mit dem Präfix, was natürlich ein Objekt werden würde, wenn der Code konvertiert würde. strCompare, strLen, etc, etc, objectAction
CaffGeek

6

Ich kann auch die Logik sehen; Es gruppiert Aktionen nach Entitäten. Wenn Ihre Aktionen jedoch immer GET, PUT und DELETE sind, ist die Änderung der Benennung möglicherweise nicht so wichtig. Ich sehe den besten Nutzen aus dem neuen Namensstandard, der auftritt, wenn Sie eindeutige Aktionsnamen haben, z. B. "AccountTransferMoney".

Das Wichtigste ist, dass es einen einzigen Standard gibt und dass jeder ihn befolgt.


1
Wenn Sie von einem Unternehmen kommen, das keine offiziellen Namensstandards (außer "Präfix mit sp") hat, ist es nur wichtig, einen Standard zu haben.
Glen Solsberry

5

Sie müssen entscheiden, was der größere Emittent ist, welche Procs Sie suchen oder deren Bedeutung schnell entschlüsseln?

Wenn du siehst:

memberGetID memberGetName memberGetThis memberListSomething memberDelete

Irgendwann, wenn Sie bereits 'Mitglied' gefunden haben, ignorieren Sie das einfach und gehen von dort aus.

Schauen Sie in ein Telefonbuch. Wenn Sie John Smith finden möchten, ist Smith, Dave Smith, John Smith, Robert

wirklich so schwer? Ich nenne Leute nicht beim Nachnamen und dann beim Vornamen, es sei denn, es ist James Bond.


1
+1 Ich liebe diese Frage und die Antworten! Es geht um Benutzerfreundlichkeit, und das kann ziemlich knifflig und interessant werden.
Job

0

Anstelle von "objectVerb" können Sie auch "namespace_verbObject" verwenden Member_GetById.
Es gruppiert Prozeduren nach Namespace und verwendet weiterhin die traditionelle Benennung "verbSomething".

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.