Procedimento armazenado Convenções de nomenclatura? [fechadas]


11

Um de nossos desenvolvedores sênior declarou que deveríamos usar uma convenção de nomenclatura para procedimentos armazenados com um estilo de "objectVerb", como ("MemberGetById") em vez de um tipo de nomeação "verbObject" ("GetMemberByID"). O raciocínio para esse padrão é que todos os procedimentos armazenados relacionados seriam agrupados por objeto e não pela ação.

Enquanto vejo a lógica dessa maneira de nomear coisas, é a primeira vez que vejo procedimentos armazenados nomeados dessa maneira. Minha opinião sobre a convenção de nomenclatura é que o nome não pode ser lido naturalmente e leva algum tempo para determinar o que as palavras estão dizendo e o que o procedimento pode fazer.

Quais são suas opiniões sobre isso? Qual é a maneira mais comum de nomear um processo armazenado e quais são os tipos de convenções de nomenclatura de proc que você já usou ou seguiu?


1
"o nome não pode ser lido naturalmente"? Por quem? Qual é a sua primeira linguagem natural? Inglês? Ou outra coisa?
precisa saber é o seguinte

9
@ S.Lott - para mim, parece algo que você ouviria em um pântano em Degobah.
TZHX

1
Ótima pergunta! Ter alguns padrões é melhor do que não ter padrões, mas algumas pessoas capazes levaram esse conceito ainda mais longe e criaram um bom padrão. Por exemplo, Dijkstra escreveu sobre por que faz muito mais sentido indexar matrizes com 0 como o primeiro elemento, em vez de 1. developeronline.blogspot.com/2008/04/… É um tópico aparentemente trivial, e aposto que ele precisou de alguns ajustes para chegar a isso. Da mesma forma, Spolsky tem um bom sistema: joelonsoftware.com/articles/Wrong.html Alguns adiantado pensamento evita dor

4
Eu diria que se livrar de procedimentos armazenados alltogether;)
Michael Brown

Respostas:


10

Olhe assim. Como seus métodos estão organizados em código? Por objeto, com os métodos pendurados.

MyObject.GetById(int)
MyObject.Save()

Ao fazer com que seus procs armazenados imitem essa nomeação, será muito mais fácil ver como eles se relacionam com seu código-fonte.

MyObjectGetById
MyObjectSave

Bom ponto, mas o SQL não é inerentemente OO. De fato, é MUITO diferente de Java / C # / etc. código que faz interface com ele. É natural deixar o SQL fazer o que quer e Java fazer o que faz. Se o código precisar ser gerado, poderá ser realizado com pouco esforço.
Job

4
Eu não acho que OO é uma consideração aqui. O exemplo acima é apenas um exemplo de como não é tão natural quanto pode parecer usar uma convenção de nomenclatura.
Mark Freedman

2
Se, por ter um método no código, seja "MyObject.GetById (int)", por que um processo armazenado também não pode ser chamado de "MyObject.GetById"? O agrupamento ainda ocorreria e um ponto daria separação entre o objeto / tabela e a ação desejada.
Chris

1
@ Chris, não sei se você pode usar um '.' no nome de um proc, mas certamente usando grupos objectVerb funcionam da mesma maneira que se pensa sobre eles. Não penso em chegar primeiro, penso no que quero e depois em como recuperá-lo.
CaffGeek

1
@ Mark Freedman, não que seja necessariamente OO, você agrupa as coisas em linguagens procedurais da mesma maneira, só que elas não estão em objetos reais. Mas geralmente prefixado com o que naturalmente se tornaria um objeto se o código fosse convertido. strCompare, strLen, etc, etc, objectAction
CaffGeek

6

Eu também posso ver a lógica; agrupa ações por entidade. No entanto, se suas ações são sempre GET, PUT e DELETE, a alteração na nomeação pode não ser muito importante. Vejo o melhor benefício do novo padrão de nomenclatura que ocorre quando você tem nomes de ação exclusivos, como "AccountTransferMoney", esse tipo de coisa.

O mais importante é que exista um único padrão e que seja seguido por todos.


1
Vindo de uma empresa que não tinha padrões oficiais de nomenclatura (exceto "prefixo com sp"), ter um padrão é a única coisa que importa.
Glen Solsberry

5

Você precisa decidir qual é o emissor maior, encontrar os procs que procura ou decifrar rapidamente o significado deles.

Se você ver:

memberGetID memberGetName memberGetThis memberListSomething memberDelete

Em algum momento, uma vez que você já encontrou 'member', simplesmente ignora isso e parte daí.

Procure em uma lista telefônica. Se você quer encontrar John Smith, é Smith, Dave Smith, John Smith, Robert

realmente difícil? Não chamo as pessoas pelo sobrenome e depois pelo nome, a menos que seja James Bond.


1
+1 Adoro esta pergunta e as respostas! Ele lida com a usabilidade, e isso pode ser bem complicado e interessante.
Job

0

Em vez de "objectVerb", você pode usar "namespace_verbObject", como Member_GetById.
Ele agrupará os procedimentos por namespace e ainda usará a nomeação tradicional "verbSomething".

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.