匈牙利符号(命名系统)会在给所有对象命名的时候在前面加上一个前缀,用来表示正在被命名的对象的类型。微软在某种程度上将匈牙利符号用在SQL服务器的很多对象上:系统存储过程都带有前缀“sp_”;扩展存储过程带有前缀“xp_”;而函数带有前缀“fn_”。根据微软的命名方式,很多开发人员也用类似的方式给他们的对象命名。我反对使用这种利用前缀来命名的方式,主要原因是,它们会掩盖掉它们是由微软编写的还是由我们团队编写的这一事实。
但是,就目前而言,我们先把前缀的问题放到一边;更重要得多的事情是名称的其他部分。在这里我发现了两种派系的命名方法:动作对象(Action-Object)和对象动作(Object-Action)。下面是一些例子:
动作对象
DeleteClient
GetClientInfo
InsertClient
UpdateClientInfo
对象动作
ClientDelete
ClientInsert
ClientSelect
ClientUpdate
动作对象命名法所存在的主要问题是排序。为了找到和任何给定表格相关的所有存储类型,你必须要用到至少字母表里的四个字母,然后才能找到包含有“Client”的对象。形成对比的是,对象动作命名法把所有和Clients表格相关的东西都集中到一起。这种命名方式带来了多种重要的优势,包括:
- 开发人员只用看看给定的存储过程要做什么,就立即能够知道需要怎么给它们命名。 对于更加复杂的过程,开发人员很容易就能够看到什么可以被重新用到新任务里。 维护人员会直观地知道要在哪里解决不易察觉的问题。 新雇佣的人员能够在很短的时间内就适应这种命名方式。
查看表稍稍有点不同,因为有些查看表是可以更新的,而有的则不行。这种不同也应该要体现在对象的名称里。
-
所有的可更新查看表都应该标上“vup”。 所有的只读查看表都应该标上“vro”。
函数也稍稍有点不同。由于SQL服务器同时提供标量和表格函数,所以我采用了下面的命名方式:
-
标量函数应该被标示为“fns”。 表格函数应该被标示为“fnt”。
现在让我们回到前缀的问题。在我看来,这种方式会影响信号增加噪声。我希望和表格X相关的所有对象都以X开头。我使用了匈牙利符号,但是我将其标记用作后缀而非前缀,因为它们有利于了直观的排序;所有和Clients表格相关的东西都被排在一起。想想下面这些名称,并猜猜它们会进行什么样的动作:
CustomerSelect_fnt——会返回表格的函数
CustomerBalance_fns——会返回标量值的函数
CustomerUpdate_ap——更新数据行的应用过程
OrdersSelectByCustomer_vro——通过Customer来选择Orders的只读查看表(命名)方式,就像语言一样,不是一成不变的。的。规则来来往往,被新的规则取代。我知道我的命名方案不是完美的,但是我正在对它进行研究。
我期望收到对我这种(命名)方式的激励,以及,如果可能的话,建设性的替换方案。请给编辑发送电子邮件,发表你对这种方法的看法。
本文作者:Arthur Fuller开发数据库应用程序已经有20年了。他的专业经验包括Access ADPs、微软SQL 2000、MySQL和.NET。
责任编辑:"mailto:li_ning@zdnet.com.cn?subject=http://www.zdnet.com.cn/developer/tech/story/0,2000081602,39201800,00.htm ">李宁
欢迎"http://forums.zdnet.com.cn/cgi-bin/leoboard.cgi" target=new>评论或"mailto:li_ning@zdnet.com.cn?subject=投稿:(稿件题目)">投稿 <script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script><script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
-
标量函数应该被标示为“fns”。 表格函数应该被标示为“fnt”。
-
所有的可更新查看表都应该标上“vup”。 所有的只读查看表都应该标上“vro”。