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 方法约定 - 重载或更改方法名称?的主要内容,如果未能解决你的问题,请参考以下文章