方法名称获取数据
警告:这是一个不是非常严重的问题/讨论,我张贴…但我敢打赌,大多数开发人员思考这个“问题”…
总是想得到关于命名约定的方法,并从某处获取数据,并返回其他意见…
大多数方法名称都有点简单明了… SaveEmployee(),DeleteOrder(),UploadDocument()。 当然,对于类,您最有可能使用简写forms…分别保存(),删除(),上传()。
但是,我一直都在为最初的行动奋斗,如何获取数据。 看起来,对于每一个项目,我最终都会在不同的命名规则之间跳跃,因为我对从前使用的最后一个命名规则并不满意。 据我所知这些是可能性 – >
- GetBooks()
- FetchBooks()
- RetrieveBooks()
- FindBooks()
- LoadBooks()
你的想法是什么?
这完全是关于一致的语义
在你的问题标题你使用获取数据 。 这是非常一般的,因为你需要定义什么意思是语义上非常明确的方式。 我提供了下面的例子,希望在考虑命名事物时让你走上正确的轨道。
-
getBooks()
是当你得到与一个对象相关的所有书籍,这意味着该集合已经定义。 -
findBooks(criteria)
是当试图根据方法调用的参数来查找书籍的子集时,这通常会被不同的search条件重载 -
loadBooks(source)
是当你从外部来源加载,如文件或数据库。 - 我不会使用提取/检索,因为它们太模糊,与get合并,并没有明确的与术语相关的语义。
这些评论certificate了像get和fetch这样的通用术语没有特定的语义,并且被不同的人解读为不同的东西。 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。
如上所述,一致性是一切,包括跨开发人员。