Procedimiento almacenado Convenciones de nomenclatura? [cerrado]

11

Uno de nuestros desarrolladores principales ha declarado que deberíamos usar una convención de nomenclatura para procedimientos almacenados con un estilo de nomenclatura "objectVerb" como ("MemberGetById") en lugar de un tipo de nomenclatura "verbObject" ("GetMemberByID"). El razonamiento para este estándar es que todos los procedimientos almacenados relacionados se agruparían por objeto en lugar de por la acción.

Si bien veo la lógica de esta forma de nombrar cosas, esta es la primera vez que veo procedimientos almacenados nombrados de esta manera. Mi opinión sobre la convención de nomenclatura es que el nombre no se puede leer de forma natural y toma un tiempo determinar qué dicen las palabras y qué podría hacer el procedimiento.

¿Cuáles son tus opiniones sobre esto? ¿Cuál es la forma más común de nombrar un proceso almacenado, y qué tipos de convenciones de nomenclatura de procesos almacenados has utilizado o has utilizado?

Chris
fuente
1
¿"el nombre no se puede leer naturalmente"? ¿Por quién? ¿Cuál es tu primer idioma natural? ¿Inglés? ¿O algo mas?
S.Lott
99
@ S.Lott: para mí, parece algo que escucharías en un pantano en Degobah.
TZHX
1
Gran pregunta! Tener algunos estándares es mejor que no tenerlos, pero algunas personas capaces llevaron este concepto aún más lejos y llegaron a un buen estándar. Por ejemplo, Dijkstra ha escrito sobre por qué tiene mucho más sentido indexar matrices con un 0 como primer elemento en lugar de 1. evolperonline.blogspot.com/2008/04/… Es un tema aparentemente trivial, y sin embargo, apuesto a que le costó un poco de tiempo encontrarlo. Del mismo modo, Spolsky tiene un buen sistema: joelonsoftware.com/articles/Wrong.html Algunos pensamientos por adelantado evitan el dolor
Job
44
Yo diría que elimine todos los procedimientos almacenados;)
Michael Brown

Respuestas:

10

Míralo así. ¿Cómo están organizados sus métodos en código? Por objeto, con los métodos colgando.

MyObject.GetById(int)
MyObject.Save()

Al hacer que sus procedimientos almacenados imiten ese nombre, será mucho más fácil ver cómo se relacionan con su código fuente.

MyObjectGetById
MyObjectSave
CaffGeek
fuente
Buen punto, pero SQL no es inherentemente OO. De hecho, es MUY diferente de Java / C # / etc. código que interactúa con él. Es natural dejar que SQL haga lo suyo y que Java haga lo suyo. Si se debe generar código, se puede lograr con poco esfuerzo.
Trabajo
44
No creo que OO sea una consideración aquí. Lo anterior es solo un ejemplo de cómo no es tan antinatural como parece utilizar una convención de nomenclatura.
Mark Freedman
2
Si al tener un método en el código sea "MyObject.GetById (int)", ¿por qué un proceso almacenado no se puede llamar también "MyObject.GetById"? La agrupación aún ocurriría, y un punto daría una separación entre el objeto / tabla y la acción que se desea.
Chris
1
@ Chris, no estoy seguro de que puedas usar un '.' en un nombre de proceso, pero ciertamente usando objectVerb agrupa las cosas de la misma manera que uno piensa en ellas. No pienso en obtener primero, pienso en lo que quiero, luego en cómo recuperarlo.
CaffGeek
1
@ Mark Freedman, no es necesariamente OO, agrupa las cosas en lenguajes de procedimiento de la misma manera, solo que no están en objetos reales. Pero generalmente tiene el prefijo de lo que naturalmente se convertiría en un objeto si el código se convirtiera. strCompare, strLen, etc, etc, objectAction
CaffGeek
6

Yo también puedo ver la lógica; Agrupa acciones por entidad. Sin embargo, si sus acciones son siempre OBTENER, PONER y ELIMINAR, el cambio en la asignación de nombres podría no importar mucho. Veo el mejor beneficio del nuevo estándar de nomenclatura que ocurre cuando tiene nombres de acción únicos, por ejemplo, "AccountTransferMoney", ese tipo de cosas.

Lo más importante es que hay un único estándar, y que todos lo siguen.

Robert Harvey
fuente
1
Al provenir de una compañía que no tenía estándares de nombres oficiales (aparte de "prefijo con sp"), tener un estándar es lo único que importa.
Glen Solsberry
5

Tienes que decidir cuál es el emisor más grande, encontrar los procs que estás buscando o descifrar rápidamente su significado.

Si tú ves:

memberGetID memberGetName memberGetThis memberListSomething memberDelete

En algún momento, una vez que haya encontrado 'miembro', simplemente ignore eso y vaya desde allí.

Mira en una guía telefónica. Si quieres encontrar a John Smith, es Smith, Dave Smith, John Smith, Robert

realmente tan duro? No llamo a las personas por su apellido y luego su nombre a menos que sea James Bond.

JeffO
fuente
1
+1 ¡Me encanta esta pregunta y las respuestas! Se trata de usabilidad, y eso puede ser bastante complicado e interesante.
Trabajo
0

En lugar de "objectVerb", puede usar "namespace_verbObject", como Member_GetById.
Agrupará los procedimientos por espacio de nombres y seguirá utilizando la denominación tradicional "verbSomething".

Abyx
fuente