Are*_*sby 39 java getter many-to-many naming-conventions
为什么Java方法名称如此广泛地使用"get"前缀?至少在我的Java程序也有很多与以单词"获取"名称的方法.get方法的百分比非常高.由于通货膨胀,我开始觉得"获得"这个词正在失去意义.这是我的代码中的噪音.
我注意到,有功能性/声明性编程和PL/SQL中使用不同的命名约定.方法名称只是说明方法返回的内容.而不是account.getAmount()或Time.getIsoFormattedDateString(Date date)他们将使用account.amount()和Time.isoFormattedDateString(Date date).这让我感觉良好,因为该函数的名称描述评估方法(假设有没有副作用,这不应该是这样)的结果."get"前缀似乎是多余的.
我刚刚开始阅读"清洁代码"一书.它说方法应该只做一件事,那件事通常应该是以下之一:
我的问题是关于第三类.对于这种方法,是否存在除"get"之外的命名约定?选择方法名称/前缀时使用什么标准?
这是一个例子:
我有两个方法的类getDates()和getSpecialDates().getDates()只返回私有变量的值(对日期集合的引用).据我所知,这是一个标准的吸气剂.getSpecialDates()是不同的; 它调用getDates(),从另一个类中获取过滤器,应用过滤器并返回实际上是其子集的过滤器getDates().
该方法getSpecialDates()可以被命名为computeSpecialDates(),findSpecialDates(),selectSpecialDates()或elicitSpecialDates()或什么的.或者我可以简单地命名它specialDates().然后,为了保持一致性,我可以重新命名getDates()成dates().
为什么要分开应该以"get"为前缀的方法和不应该使用的方法,以及为什么要为"get"找到替换词呢?
Jea*_*ana 27
我个人不会在任何可能的情况下使用 getter和setter(意思是:我不使用任何需要它的框架,例如Struts).
我更喜欢在可能的情况下编写不可变对象(公共最终字段),否则我只使用公共字段:更少的锅炉板代码,更高的生产率,更少的副作用.get/set的最初理由是封装(尽可能让你的对象变得害羞),但事实上,我并不经常需要它.
在Effective Java中,Joshua Bloch提出了这个引人注目的建议:
类应该是不可变的,除非有一个很好的理由使它们变得可变......如果一个类不能变成不可变的,尽可能地限制它的可变性.
在同一本书中,他也说(但我不想在这里复制整本书):
JavaBeans模式有严重的缺点.
我完全赞同这一点,因为JavaBeans最初是针对一个非常狭窄的问题领域:在IDE中操纵图形组件.使用一种旨在解决另一个问题的解决方案是一种不好的做法.
有这么多get*方法的部分原因是Java不支持"属性"la .net/COM,Java bean等使用函数getX和setX来复制名为X的属性的功能.一些IDE用于Java利用这一点来允许设置和检索属性.
由于在名称中使用动词(动作),因此对我来说的方法名称是getSpecialDates(),computeSpecialDates()和findSpecialDates(),selectSpecialDates()和elicitSpecialDates()命令.每次调用它们时,命令都会产生副作用.而像方法名date(),dates(),specialDates()[名词]是与没有副作用返回一个有用的值的方法.多次调用该方法每次都返回相同的值,除非调用其副作用是更改状态的命令.
就我个人而言,我对get. 这只是人类的语言。当你想要某样东西时,你就会想要get某样东西。前缀没有任何问题get。关于命名约定,我可以想到Select数据库查询的前缀 -SelectUsers例如。
| 归档时间: |
|
| 查看次数: |
14065 次 |
| 最近记录: |