DAO类方法命名

我正在使用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命名,或者我可以使用任何命名,仍然被认为是最佳实践。

谢谢

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

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

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

前段时间我发现这个关于DAO命名的请求……

根据function命名

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

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

set* (例如setActive)UPDATE查询

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

delete* (例如deleteUser)DELETE查询

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

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

保留function

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

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

poke – 将ID作为参数,“ poke ”记录(设置“最后看到”或现在的任何内容),返回更新计数(通常为1)

其他要记住的事情

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

首先,至少在Java中,你用每个内部单词大写的第一个字母命名你的方法,camel-case。 您可以在方法 : Java命名约定一节中看到

关于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操作创建genericsdao,然后您可以根据需要开始命名方法:

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

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

你可以去命名你的void方法(因为你可以把它命名为void ,因为在Java中是一个关键字 – 感谢@Marco Forberg注意到这一点) 删除 (Void – 意味着它被删除。)或performVoid 。 如果您在取消发票后没有从数据库中删除发票,请简单地使用更新更新可应用于您为发票输入所做的任何更改。

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

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