我正在使用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命名,或者我可以使用任何命名,仍然被认为是最佳实践。
感谢
答案 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方法。这与您可能希望更新发票上的多个属性的更新不同。