DAO方法的标准命名约定

14

是否有类似于JavaBeans的DAO方法的标准命名约定?

例如,我见过的一种命名约定是使用get()来返回单个实体,使用find()来返回实体列表。

如果没有标准命名约定,那么你的团队使用的是什么,为什么?

2个回答

23

我知道以下约定:

  • find开头的方法执行select操作,而方法名包含搜索条件,例如findByIdfindByUsernamefindByFirstNameAndLastName等。

  • createupdatedelete开头的方法执行修改操作。

查看Spring Data JPA使用的约定。这是Spring框架的一部分,根据方法名称的命名约定之一进行检查,然后自动编写DAO。

get()对于单个实体来说似乎不是一个好的选择,因为Java开发人员将get与Java-bean getter关联在一起。


2
非常同意:find比get更好(它总让我想到一个getter)。在方法名中添加搜索条件也是绝妙的。 - Jean-Philippe Caruana
如果你返回了一个 F.Promise<SomeObject>,那么 findByUsername 应该改成 findByUsernameAsync 吗?谢谢。 - Mule

12

通常我会以一种方式对方法进行命名,使名称暗示该方法将应用的CRUD操作的类型,例如add*save*find*

  • add*可用于INSERT操作,例如addPhoneNumber(Long userId)

  • get*可用于SELECT操作,例如getEmailAddress(Long userId)

  • set*可用于执行UPDATE操作的方法。

  • delete*可用于DELETE操作,例如deleteUser(Long userId)。尽管我不太确定物理删除有多有用。个人而言,我会设置一个标志,表明该行不会被使用,而不是执行物理删除。

  • is*可用于检查某些内容的方法,例如isUsernameAvailable(String username)


我个人在方法名称上也使用描述性名称,比如findAll*,以添加更多的意图信息。 - Jean-Philippe Caruana
6
当进入DAO层时,我们不应该使用与Model相同的命名方式。应该使用'find'代替'get',使用'update'代替'set'和'add'。尽可能地遵循面向对象编程思想,在更新方法中特别是传递Model对象。 - Jordan Silva

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接