获取数据的方法名称

时间:2010-01-26 18:57:39

标签: naming-conventions methods

警告:这是我发帖的一个不太严肃的问题/讨论......但我愿意打赌,大多数开发者都在思考这个“问题”......

一直想获得关于从某个地方获取数据并返回数据的方法的命名约定的其他意见......

大多数方法名称都有点简单明了...... SaveEmployee(),DeleteOrder(),UploadDocument()。当然,对于类,你最有可能使用短格式...分别保存(),删除(),上传()。

然而,我一直在努力采取初步行动......如何获取数据。似乎对于每个项目我最终都会在不同的命名约定之间跳跃,因为我对我使用的最后一个项目感到非常满意。据我所知,这些是可能性 - >

  • GetBooks()
  • FetchBooks()
  • RetrieveBooks()
  • FindBooks()
  • LoadBooks()

你的想法是什么?

5 个答案:

答案 0 :(得分:105)

关于一致的semantics;

  

在您的问题标题中,您使用获取数据。这非常   一般而言,您需要定义获取的含义   语义上明确无误的方式。我提供以下内容   希望能让你在思考时走上正轨的例子   命名事物。

  1. getBooks()就是你到了 与...相关的所有书籍 对象,它暗示了集合的标准 已定义的以及它们来自哪里是一个隐藏的细节。
  2. findBooks(criteria) 是什么时候试图找到一个子集 基于参数的书籍 方法调用,这通常会 被不同的搜索重载 标准
  3. loadBooks(source)就在你身边 从外部源加载, 像文件或数据库。
  4. 我不会用 获取/检索因为它们太模糊并且与 get 混淆,并且没有与术语相关联的明确语义。
  5. 示例: fetch意味着某些实体需要去获取远程内容并将其恢复。狗取一根棍子,而retrieve fetch 的同义词,加上你可能先拥有该东西的语义。 get也是obtain的同义词,这意味着您拥有某种东西而且没有其他人可以同时获得它。

    Semantics非常重要:

    与意义有关的语言学和逻辑学的分支

      

    这些评论证明了获取 fetch 等通用术语   没有特定的语义,并且被不同的解释不同   人。选择一个术语的语义,记录它的目的   意味着语义不明确并与其使用保持一致。

         具有模糊或含糊不清的含义的词语被不同的人赋予不同的语义,因为他们的偏见和偏见基于他们的个人观点而且永远不会结束。

答案 1 :(得分:9)

老实说,您应该与您的团队决定使用哪种命名约定。但为了好玩,让我们看看你的思路是什么来决定这些:

  • GetBooks()

此方法属于数据源,我们不关心如何获取它们,我们只想从数据源获取它们。

  • FetchBooks()

您将数据源视为猎犬,获取您的图书是他的工作。我想你应该自己决定一下他能在嘴里装多少。

  • FindBooks()

您的数据源是图书管理员,将使用Dewey Decimal系统查找您的图书。

  • LoadBooks()

这些书属于某种“电子书包”,必须装入其中。务必在加载后调用ZipClosed()以防止丢失它们。

  • RetrieveBooks()

我什么都没有。

答案 2 :(得分:8)

答案只是坚持你所熟悉的并且是一致的。

如果您有一个barnes and nobles网站并且您使用GetBooks(),那么如果您有另一个项目,如Movie实体,请使用GetMovies()。所以无论你和你的团队喜欢什么,都是一致的。

答案 3 :(得分:1)

您对“获取数据”的含义并不清楚。从数据库?一份文件?存储器?

我对方法命名的看法是,它的作用是消除任何歧义,理想情况下需要查找文档。我相信即使以更长的方法名称为代价也应该这样做。根据研究,大多数中级+开发人员能够阅读骆驼案例中的多个单词。使用IDE和自动完成,编写长方法名称也不是问题。

因此,当我看到“fetchBooks”时,除非上下文非常清楚(例如,名为BookFetcherFromDatabase的类),否则它是不明确的。从哪里取出? fetch和find有什么区别?您还冒着一些开发人员将语义与某些关键字相关联的问题。例如,获取数据库(或内存)与加载(从文件)或下载(从Web)。

我宁愿看到类似“fetchBooksFromDatabase”,“loadBookFromFile”,“findBooksInCollection”等的东西。它不那么明显,但是一旦你超越了长度,就很清楚了。阅读本文的每个人都会立即得到你想要做的事情。

答案 4 :(得分:1)

在OO(C ++ / Java)中,我倾向于使用getSomething和setSomething,因为我经常从表示该数据对象的类中获取私有属性或者设置它 - getter / setter对。作为一个优点,Eclipse会为您生成它们。

我倾向于仅在我指文件时使用Load - 如“加载到内存中”,这通常意味着加载到基元,结构(C)或对象中。我使用发送/接收网络。

如上所述,一致性就是一切,包括跨开发者。