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

相关 Standard Naming Convention for DAO MethodsDAO 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)中,这可能会导致所描述的坏事在我的回答中。

标签: java naming-conventions dao overloading method-names


【解决方案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 与这个问题或我的答案有什么关系。
猜你喜欢
  • 2019-11-10
  • 2013-12-25
  • 1970-01-01
  • 2018-02-06
  • 2017-02-27
  • 2016-03-17
  • 1970-01-01
  • 2012-12-18
  • 1970-01-01
相关资源
最近更新 更多