DAO 方法的标准命名约定

Posted

技术标签:

【中文标题】DAO 方法的标准命名约定【英文标题】:Standard Naming Convention for DAO Methods 【发布时间】:2013-12-25 04:51:16 【问题描述】:

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

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

如果没有,您的团队正在使用什么?为什么?

【问题讨论】:

【参考方案1】:

我知道以下约定:

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

修改方法以createupdatedelete开头。

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

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

【讨论】:

非常同意:find 比 get 好得多(它总是让我想到一个 getter)。在方法名称中添加搜索条件也非常好。 返回 F.Promise 的情况如何?你的 findByUsername 会变成 findByUsernameAsync 吗?谢谢。【参考方案2】:

通常我以这样的方式命名方法,以便名称暗示该方法将应用的 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* 等方法上使用描述性名称来添加更多意图信息 在进入DAO层时,我们不应该使用与Model中相同的命名。使用“查找”代替“获取”,使用“更新”代替“设置”和“添加”。在可能的情况下,还要尝试更多地面向对象传递模型对象,特别是更新方法。

以上是关于DAO 方法的标准命名约定的主要内容,如果未能解决你的问题,请参考以下文章

要遵循的 url 参数命名约定或标准是啥

度量标准的 StatsD/Graphite 命名约定

C# 中具有表达式主体的私有成员的标准命名约定是啥[关闭]

java - DAO 方法约定 - 重载或更改方法名称?

SQL Server 索引命名约定 [关闭]

如何验证XML架构中的命名约定