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

Posted

技术标签:

【中文标题】java - DAO 方法约定 - 重载或更改方法名称?【英文标题】:java - DAO methods convention - overloading or change the method name? 【发布时间】:2015-11-04 19:57:18 【问题描述】:

相关 Standard Naming Convention for DAO Methods 和 DAO class methods naming 问题。

为什么DAO类中的方法是这样的:

getUserById(int id)
getUserByUsernameAndPassword(String username, String password)

代替:

getUser(int id)
getUser(String username, String password)

在 IDE 中,如 Eclipse 自动建议将在您开始键入 getUser 时开始显示。并且根据参数,您可以选择使用哪种方法。

当然这是重载。 为什么人们避免重载并为不同的参数使用不同的方法名称?还是他们在逃避?

问候。

【问题讨论】:

如果你有两个方法接受 2 个字符串参数怎么办?糟糕,您的命名方案刚刚失败。更不用说,当方法被明确命名时,更容易看到发生了什么。 我认为当你有不同的方法名称而不是让我们说5个方法getUser时它更具可读性。 检查哪一个更容易理解。 @Kayaman 2 个方法 getUser() 都接受 2 个字符串作为参数?为什么?在为getUser 等相同操作设计方法之前,重载它们是非常好的做法。如果下一个方法将比前一个方法进行另一个或附加操作,则应使用不同的方法名称 @mastah 虽然通常情况下,如果方法除了参数之外没有本质上的不同,那么使用重载通常很有用,但在 DAO(尤其是非平凡的 DAO)中,这可能会导致所描述的坏事在我的回答中。 【参考方案1】:

您提出的命名方案在 2 个(明显的)方面失败了。

第一种方式,冲突的方法签名:

getUser(int id);
getUser(int age);
getUser(String username, String password);
getUser(String firstname, String lastname);

第二种方式,不清楚的代码需要你验证参数类型和名称:

// What's being used to search for users in this code?
User user = getUser(poorlyNamedVariable);  

当您的变量不是您认为的类型时,更不用说潜在的错误了。

【讨论】:

第三种方式,使用 Spring Data。 你能解释更多关于 Spring Data 的信息吗? @BranislavLazic @ismailyavuz 可以回答吗? 我认为这与问题没有直接关系,但可能是我错了吗?只有你知道你想说什么 :) 我使用 Spring 和休眠,但我仍然有这个 SO 问题。 Spring Data 能为我提供什么? 我不知道 Spring Data 与这个问题或我的答案有什么关系。

以上是关于java - DAO 方法约定 - 重载或更改方法名称?的主要内容,如果未能解决你的问题,请参考以下文章

DAO 方法的标准命名约定

java包名的约定,如Dao,vo,之类,谁能告诉我尽量多的这些约定啊?

Java中重载重写与重构的区别

JAVA方法重载

Java 中方法的重载

您可以使用泛型进行方法重载并且只更改方法签名的泛型类型吗?