Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java DAO类方法命名_Java_Spring Mvc - Fatal编程技术网

Java DAO类方法命名

Java DAO类方法命名,java,spring-mvc,Java,Spring Mvc,我正在使用SpringMVC和Hibernate构建一个小型JavaWeb应用程序,我对DAO类的命名方法感到困惑 例如,我有一个InvoiceDAO.java类,我认为它应该包含以下方法: Save(Invoice newInvoice); Void(Invoice oldInvoice); getInvoiceByID(Long invoideID); 但我的老板说,最佳做法是在DAO类中应该有如下方法名称: add(Invoice newInvoice); update(Invoice

我正在使用SpringMVC和Hibernate构建一个小型JavaWeb应用程序,我对DAO类的命名方法感到困惑

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

Save(Invoice newInvoice);
Void(Invoice oldInvoice);
getInvoiceByID(Long invoideID);
但我的老板说,最佳做法是在DAO类中应该有如下方法名称:

add(Invoice newInvoice);
update(Invoice oldInvoice);
这对我来说毫无意义,因为我不知道如何将作废发票命名为更新

所以,有人能在这方面指导我,并告诉我我的命名方法是否错误吗?换句话说,我应该只使用add、update进行命名,或者我可以使用任何命名,并且仍然被视为最佳实践,这是正确的吗


谢谢

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

数据层应该包含纯CRUD类型的方法,即add/save/find


使用许多现代数据框架,您甚至不需要编写数据层。。。e、 g.参见

保存和添加有两种不同的含义。作废和更新也是如此。使用准确描述方法所做工作的术语。我不知道这里有什么具体的最佳实践


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

我不久前发现了有关DAO命名的参考资料

根据功能命名

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

get*
(例如getUsersByID)选择查询–建议您根据单行或多行返回使用单数或复数名词

set*
(例如setActive)更新查询

add*
(例如addUser)INSERT查询–建议您根据单行或多行INSERT使用单数或复数名词

delete*
(例如deleteUser)删除查询

是*
(例如isActive)如果check返回布尔值,即IF($user\u dao->isUserActive($id))或IF($post\u dao->isPostInStorage($id))

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

保留功能

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

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

poke
–将ID作为参数,“poke”记录(将“上次看到”或其他设置为现在),返回更新计数(通常为1)

其他需要记住的事情


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

首先,在Java中,至少要使用每个内部单词的首字母大写(驼峰大小写)来命名方法。您可以在“方法”部分看到:

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

我不会在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
}
公共类InvoiceDAO继承GenericDao{
//上述所有方法都将被继承
//向dao添加特定方法
}
同样,如果我是你,我会移动服务中特定内容的命名。 现在取决于你如何从我展示的内容中接近。这样做的目的是使刀尽可能简单


您不妨将您的void方法命名为delete(void-表示它已被删除)或performVoid(因为您可以将其命名为void,因为在Java中是一个关键字——感谢@Marco Forberg注意到这一点)。或者,如果在作废发票后未从数据库中删除发票,则只需执行更新即可。更新可应用于您对发票条目所做的任何更改

更新=更改现有实体的数据。即使没有数据。请遵守Java命名约定:请参阅这篇关于命名约定的文章:DAO不应该包含业务逻辑。它应该只插入、更新、删除、读取和查询数据库。作废发票(不管这意味着什么)不是这样的操作。您可以使用spring数据,而不需要编写自己的DAO。其中提到的通常称为CRUD:创建、读取、更新、删除在您的情况下,
setVoid
将是您所需要的。我不认为发票作废应由DAO负责
insert
save
功能之间的区别是什么?+1刷新数据JPA。这非常有帮助,您可以避开关于CRUD操作最佳名称的整个争论。@dan那么您的意思是,在DAO层中,我将只维护CRUD方法(保存、更新、删除、搜索),而在服务层中,我将添加所有业务逻辑,例如(作废发票、将新项目添加到库存…等等)然后从服务层内调用DAO方法来完成业务逻辑任务……正确吗?@MChan完全正确。关注点分离。将所有数据库接口代码排除在业务逻辑之外,使业务逻辑更易于遵循和维护。
public class InvoiceDAO inherits GenericDao<Invoice> {
    // all the above methods would be inherited
    // add specific methods to your dao
}