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方法。 这与您可能希望更新发票上的多个属性的更新不同。