存储过程命名约定?[关闭]


11

我们的一位资深开发人员表示,对于存储过程,应使用命名约定,并使用“ objectVerb”样式的命名方式,例如(“ MemberGetById”),而不是“ verbObject”类型的命名方式(“ GetMemberByID”)。该标准的理由是,所有相关的存储过程都将按对象而不是按操作分组在一起。

虽然我看到了这种命名方式的逻辑,但是这是我第一次看到以这种方式命名的存储过程。我对命名约定的看法是,该名称不能自然地读取,并且需要花费一些时间来确定单词在说什么以及该过程可以做什么。

您对此有何看法?命名存储过程的最常用方法是哪种?您使用或遵循的存储过程命名约定是哪种类型?


1
“这个名字自然不能读”?通过谁?您的第一自然语言是什么?英语?或者是其他东西?
S.Lott

9
@ S.Lott-对我来说,确实像是您在Degobah的沼泽中听到的声音。
TZHX 2011年

1
好问题!有一些标准要比没有标准要好,但是一些有能力的人甚至更进一步地提出了这个概念,并提出了一个好的标准。例如,Dijkstra算法已经撰写了有关它为什么让这么多有意义的数组索引以0作为第一要素,而不是1 developeronline.blogspot.com/2008/04/...这是一个看似琐碎的话题,但我打赌他花了些时间来解决这个问题。同样,Spolsky也有一个不错的系统:joelonsoftware.com/articles/Wrong.html预先考虑可以避免痛苦
Job

4
我会说一起摆脱存储过程;)
Michael Brown

Answers:


10

这样看。您的方法如何用代码组织?按对象,方法挂起。

MyObject.GetById(int)
MyObject.Save()

通过使存储的proc模仿该命名,可以更轻松地查看它们与源代码的关系。

MyObjectGetById
MyObjectSave

很好,但是SQL不是天生的OO。实际上,它与Java / C#/ etc完全不同。与之交互的代码。让SQL完成其任务并让Java完成其任务是很自然的。如果必须生成代码,则可以轻松完成。
工作

4
我认为OO不是这里考虑的问题。上面只是一个例子,说明它并不像最初看起来使用这种命名约定那样不自然。
Mark Freedman

2
如果通过在代码中使用方法“ MyObject.GetById(int)”,为什么不能将存储的过程也称为“ MyObject.GetById”呢?分组仍然会发生,而点将使对象/表与所需的动作分开。
克里斯,

1
@Chris,我不确定您可以使用'。以proc名称命名,但一定要使用objectVerb分组事物,其方式与思考它们相同。我没有想到先得到,我想得到想要的东西,然后再找到它。
CaffGeek

1
@Mark Freedman,不一定是OO,而是以过程语言将事物以相同的方式分组,只是它们不在实际对象中。但是通常在转换代码后会加上自然会成为对象的前缀。strCompare,strLen等,等等,objectAction
CaffGeek 2011年

6

我也可以看到逻辑;它按实体将动作分组在一起。但是,如果您的操作始终是GET,PUT和DELETE,则命名更改可能没有太大关系。当您使用唯一的动作名称(例如“ AccountTransferMoney”)时,我发现新的命名标准将带来最大的好处。

最重要的是,只有一个标准,每个人都必须遵循。


1
来自一家没有正式命名标准(“带有前缀sp”的公司)的公司,拥有标准是唯一重要的事情。
Glen Solsberry 2011年

5

您必须确定最大的发行方是什么,找到要查找的proc或快速理解它们的含义?

如果你看到:

memberGetID memberGetName memberGetThis memberListSomething memberDelete

在某个时候,一旦您找到了“成员”,您就可以忽略它并从那里开始。

查看电话簿。如果要查找约翰·史密斯,则是史密斯,戴夫·史密斯,约翰·史密斯,罗伯特

真的那么难吗?除非是詹姆斯·邦德(James Bond),否则我不会用姓氏和名字来称呼别人。


1
+1我喜欢这个问题和回应!它涉及可用性,这可能会变得非常棘手和有趣。
Job

0

可以使用“ namespace_verbObject”代替“ objectVerb” Member_GetById
它将按名称空间对过程进行分组,并且仍然使用传统的“ verbSomething”命名。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.