3

我正在使用 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

4 回答 4

9

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

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

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

于 2013-07-10T21:08:04.047 回答
8

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

按功能命名

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

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

set*(例如 setActive) 更新查询

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

delete*(例如 deleteUser)删除查询

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

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

保留功能

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

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

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

其他要记住的事情

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

于 2013-07-10T21:09:00.007 回答
3

首先,至少在 Java 中,你用每个内部单词的首字母大写,驼峰式命名你的方法。您可以在方法部分看到: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 操作创建通用 dao,然后您可以根据需要开始命名方法:

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

同样,如果我是你,我会在服务中移动特定内容的命名。现在由你决定如何从我展示的内容中进行处理。这个想法是让道尽可能简单。

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

于 2013-07-10T21:19:01.417 回答
0

保存和添加有 2 个不同的含义。作废并更新。使用准确描述该方法正在做什么的术语。我不知道这里有任何具体的最佳实践。

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

于 2013-07-10T21:08:47.550 回答