方法名称获取数据

警告:这是一个不是非常严重的问题/讨论,我张贴…但我敢打赌,大多数开发人员思考这个“问题”…

总是想得到关于命名约定的方法,并从某处获取数据,并返回其他意见…

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

但是,我一直都在为最初的行动奋斗,如何获取数据。 看起来,对于每一个项目,我最终都会在不同的命名规则之间跳跃,因为我对从前使用的最后一个命名规则并不满意。 据我所知这些是可能性 – >

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

你的想法是什么?

这完全是关于一致的语义

在你的问题标题你使用获取数据 。 这是非常一般的,因为你需要定义什么意思是语义上非常明确的方式。 我提供了下面的例子,希望在考虑命名事物时让你走上正确的轨道。

  1. getBooks()是当你得到与一个对象相关的所有书籍,这意味着该集合已经定义。
  2. findBooks(criteria)是当试图根据方法调用的参数来查找书籍的子集时,这通常会被不同的search条件重载
  3. loadBooks(source)是当你从外部来源加载,如文件或数据库。
  4. 我不会使用提取/检索,因为它们太模糊,与get合并,并没有明确的与术语相关的语义。

这些评论certificate了像getfetch这样的通用术语没有特定的语义,并且被不同的人解读为不同的东西。 select一个术语的语义,如果语义不清晰并与其使用保持一致,则logging意图暗示的意思。

答案只是坚持你所喜欢的,并保持一致。

如果你有一个Barnes和贵族的网站,并且你使用GetBooks(),那么如果你有另外一个像Movie实体的物品,使用GetMovies()。 所以无论你和你的团队喜欢和一致。

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

  • GetBooks()

这种方法属于数据源,我们不在乎它是如何获得它们的,我们只是想从数据源中获取它们。

  • FetchBooks()

你把你的数据源当作猎狗来对待,这是他的工作,拿起你的书。 我想你应该自己决定他可以一次装进他的嘴里。

  • FindBooks()

您的数据源是图书pipe理员,将使用杜威十进制系统来查找您的书籍。

  • LoadBooks()

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

  • RetrieveBooks()

我一无所有。

“获取数据”的含义并不清楚。 从数据库? 一份文件? 记忆?

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

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

我宁愿看到像“fetchBooksFromDatabase”,“loadBookFromFile”,“findBooksInCollection”等,这是不太可能的,但一旦你越过长度,这是明确的。 每个人都会马上知道你正在尝试做什么。

在OO(C ++ / Java)中,我倾向于使用getSomething和setSomething,因为很多情况下,如果不是总是从代表该数据对象的类中获取私有属性,或者将其设置为getter / setter对。 另外,Eclipse为您生成它们。

我倾向于使用加载只有当我的意思是文件 – 如“加载到内存”,这通常意味着加载到基元,结构(C)或对象。 我使用发送/接收的networking。

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