获取数据的方法名称

警告: 这是一个不太严肃的问题/讨论,我张贴... 但我愿意打赌,大多数开发人员已经思考这个“问题”..。

总是希望得到关于方法命名约定的其他意见,这些方法从某个地方获取数据并返回数据..。

大多数方法名称都比较简单明了... ... SaveEmployee()DeleteOrder()UploadDocument()。当然,对于类,您最有可能使用短形式... ... 分别是 Save()Delete()Upload()

然而,我一直在为最初的行动而挣扎... 如何获得数据。似乎对于每个项目,我最终都会在不同的命名约定之间跳来跳去,因为我从来没有对我使用的最后一个项目感到满意。据我所知,这些都是可能的—— >

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

你有什么想法?

46544 次浏览

答案就是坚持做你觉得舒服的事情,并且保持一致。

如果您有一个 barnes and noble 网站,并且使用了 GetBooks () ,那么如果您有另一个项目(如 Movie 实体) ,则使用 GetMovies ()。所以无论你和你的团队喜欢什么,要始终如一。

这完全是关于一致的 语义学;

在你的问题标题中,你使用了 获取数据 从某种意义上说,你需要定义 得到的含义 我提供以下的方法 希望这些例子能让你在思考 命名事物。

  1. getBooks()是当你得到 所有与... 有关的书籍 对象,它暗示集合的条件是 已经定义和它们来自是一个隐藏的细节。
  2. 就是试图找到一个子集 书籍的参数 方法调用,这通常会 由于不同的搜索而超载 准则
  3. loadBooks(source)是当你 从外部来源加载, 比如文件或数据库。
  4. 我不会用 获取/检索,因为它们太模糊,并且与 走开混为一谈,而且没有与术语相关的明确的语义。

示例: 拿来意味着某个实体需要去获取远程的内容并将其返回。狗叼着一根棍子,而 检索捡回来的同义词,它添加了这样的语义: 你可能已经拥有了之前拥有的东西。快点也是 获取的同义词,这意味着你拥有某样东西的唯一所有权,而且没有其他人可以同时获得它。

语义是非常重要的:

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

这些注释证明了像 走开捡回来这样的通用术语 没有特定的语义,解释不同 为一个术语选择一个语义,记录它的意图 暗示语义不清晰,与其用法一致。

含义模糊或歧义的词,由于其个人观点的偏见和成见,不同的人给予不同的语义,这些偏见和成见永远不会有好的结果。

你说的“获取数据”是什么意思还不清楚。从数据库? 文件? 内存?

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

因此,当我看到“ fetchBooks”时,除非上下文非常清楚(例如,一个名为 BookFetcherFromDatabase 的类) ,否则它是模棱两可的。从哪里拿?提取和查找之间的区别是什么?您还可能面临一些开发人员将语义与某些关键字相关联的问题。例如,获取数据库(或内存)与加载(从文件)或下载(从网络)。

我更愿意看到“ fetchBooksFromDatabase”、“ loadBookFromFile”、“ findBooksInCollection”等。它不那么显眼,但是一旦你越过了长度,它就清晰了。每个读到这篇文章的人都会立刻明白你想要做什么。

在面向对象(C + +/Java)中,我倾向于使用 getSomething 和 setSomething,因为通常情况下,如果不总是这样,我要么从表示该数据对象的类中获取私有属性,要么设置它—— getter/setter 对。另外,Eclipse 会为您生成它们。

我倾向于只在指文件时才使用 Load ——比如“加载到内存中”,这通常意味着加载到原语、结构(structs,C)或对象中。我使用发送/接收网站。

如上所述,一致性就是一切,包括交叉开发人员。

老实说,你应该和你的团队一起决定使用哪种变数命名原则。但是为了好玩,让我们看看你的思路是怎么决定的:

  • GetBooks ()

这个方法属于一个数据源,我们不关心它是如何获取它们的,我们只想从数据源获取它们。

  • FetchBooks ()

您对待数据源就像对待猎犬一样,而他的工作就是取回您的书籍。我想你应该自己决定他一次能吃多少。

  • FindBooks ()

你的数据来源是一个图书管理员,他会利用杜威十进制图书分类法找到你的书。

  • LoadBooks ()

这些书属于某种“电子书包”,必须装进去。加载后一定要调用 ZipClose () ,以防丢失它们。

  • RetrieveBooks ()

我一无所有。