DAO类方法命名

时间:2013-07-10 21:00:30

标签: java spring-mvc

我正在使用Spring MVC,Hibernate构建一个小型Java Web应用程序,我对DAO类方法命名感到困惑。

例如,我有一个InvoiceDAO.java类,我认为它应该包含以下方法:

Save(Invoice newInvoice);
Void(Invoice oldInvoice);
getInvoiceByID(Long invoideID);

但我的老板说最佳实践说我应该在DAO类中有方法名称,如下所示:

add(Invoice newInvoice);
update(Invoice oldInvoice);

这对我没有意义,因为我不确定如何将发票命名为更新?!!

所以有人可以指导我,并告诉我,我的方法命名是否错误?换句话说,我应该只使用add,update命名,或者我可以使用任何命名,仍然被认为是最佳实践。

感谢

4 个答案:

答案 0 :(得分:8)

取消发票是一项业务操作。我会说这种逻辑存在于你的服务层。您对发票进行更新以将其标记为无效,然后将其传递到数据层进行保存。

数据层应包含纯CRUD类型方法,即添加/保存/查找。

使用许多现代数据框架,您甚至不需要编写数据层......例如见http://blog.springsource.org/2011/02/10/getting-started-with-spring-data-jpa/

答案 1 :(得分:7)

前段时间我发现了这个关于DAO命名的讽刺......

根据功能命名

getData*数据解析DAO内部使用的方法,不要使用此命名空间进行数据访问。

get*(例如getUsersByID)SELECT查询 - 鼓励您尝试根据单行或多行返回使用Singular或Plural中的名词。

set*(例如setActive)更新查询

add*(例如addUser)INSERT查询 - 鼓励您尝试根据单行或多行插入使用Singular或Plural中的名词。

delete*(例如deleteUser)DELETE查询

is*(例如isActive)IF检查返回布尔值,即if($ user_dao-> isUserActive($ id))或if($ post_dao-> isPostInStorage($ id))

count*(例如countUsers)返回带有项目计数的整数。

保留功能

insert - 将一个对象作为参数,并将其插入表中。

save - 将一个对象作为参数,并将其中的数据存储回数据后端

poke - 将一个ID作为参数,“戳”记录(设置“上次看到”或现在的任何内容),返回更新计数(通常为1)

要记住的其他事项

由于存储后端可能是也可能不是“数据库”,因此建议不要创建名称暗示后端使用数据库的方法。

答案 2 :(得分:3)

首先,至少在Java中,你用每个内部单词大写的第一个字母命名你的方法,驼峰式。您可以在方法部分看到:Java Naming Conventions

关于dao中方法的具体命名: 我将创建可以对您的模型类执行的基本crud操作 例如:

add(Invoice invoice)
update(Invoice invoice)
// or instead 
save(Invoice invoice) // which will perform either add or update
delete(Invoice invoice) // or delete(int invoiceId)
findById(int invoiceId)
// and so forth

我不会在dao中使用术语“void”,因为这与业务有关。尽可能简单地使用dao,然后在您将使用dao的服务中,您可以命名与所需业务相关的方法(即语音(发票发票))

还可以使用基本的CRUD操作创建泛型dao,然后您可以根据需要开始命名方法:

public class InvoiceDAO inherits GenericDao<Invoice> {
    // all the above methods would be inherited
    // add specific methods to your dao
}

同样,如果我是你,我会在服务中移动特定内容的命名。 现在取决于你如何从我展示的方式接近你。我们的想法是让dao尽可能简单。

您可以去命名 void 方法(因为您可以将其命名为 void ,因为在Java中是一个关键字 - 感谢@Marco Forberg注意到那个删除(Void - 意味着它被删除。)或 performVoid 。或者,如果您在取消发票后没有从数据库中删除发票,请使用 update 进行简单操作。 更新可应用于您为发票条目所做的任何更改。

答案 3 :(得分:0)

保存并添加有2种不同的含义。和Void一样更新。使用准确描述方法正在执行的操作的术语。我不知道这里有任何具体的最佳做法。

另外,如果足以执行操作,我倾向于只将ID传递给void方法。这与您可能希望更新发票上的多个属性的更新不同。