写数据访问对象(DAO)的最佳方法是什么?

4

我试图在Java中编写一个用户认证系统。因此,我编写了一些DAO类。首先,我编写了一个名为Persistence的抽象类。它负责保存一些常见属性。然后,我编写了一个名为User的类,继承自Persistence类。这些类如下所示 -

  public abstract class Persistance {

     private Date createdDate;
     private Date lastUpdatedDate;
     private long version;
     private boolean  isDeleted;


    //getter and setters
 }

用户类

 public class User extends  Persistance{
   private String username;
   private String password;
   private String passwordConfired;

  // getters and setters

 }

我的问题是:写变量名的最佳方式是什么?哪一个更好,createdDate还是dateCreated,deleted还是isDeleted等等。

这种方法是否可行,或者有更好的方法?如何实现数据版本控制?

4个回答

3

要编写DAO,通常需要创建一个定义DAO行为的接口。

interface MyObjDao {

    public int save(MyObj myObj);

    public void delete (MyObj myObj);

    // as many methods as you need for data acess

}

接着你需要创建实际的实现

class MyObjDaoImpl implements MyObjDao {
    // implement methods here

}

这样做的好处如下:
1) 由于你定义了接口,任何测试框架都能轻松地模拟 DAOs。 2) 行为不与实现相挂钩 -- 你的 DAOImpl 可以使用 jdbc、hibernate 或其他技术。
你的 Persistence 类实际上是所有实体类的基类 -- 即所有想要保存其实例的类,在其中你希望在一个地方表示一些公共字段。这是一个好习惯 -- 我不会称它为 Persistence 类,类似 BaseEntity 更好(在我看来)。请确保有 javadocs 来解释该类的目的。
关于变量名,只要它们有意义并描述了它们的用途,就很好。
所以 dateCreated 或 createdDate 都可以;它们都能传达相同的思想。

2

您把DAO(数据访问对象)和VO(值对象),也称为DTO(数据传输对象)混在同一个类中。

以下是使用接口实现DAO行为的示例(blammy和kpow可能是webservice、oracle数据库、mysql数据库、hibernate或其他有意义的内容):

public interface UserDTO
{
    boolean deleteUser(String userId);
    UserVO readUser(String userId);
    void updateUser(String userId, UserVO newValues);
}

package blah.blammy;
public class UserDTOImpl implements UserDTO
{
  ... implement it based on blammy.
}

package blah.kpow;
public class UserDTOImpl implements UserDTO
{
  ... implement it based on kpow.
}

样例VO:


public class UserVO
{
    String firstName;
    String lastName;
    String middleInitial;

    ... getters and setters.
}

我更喜欢使用ID来识别删除对象,而不是使用VO对象。此外,更新可能会将由用户ID“smackdown”标识的目标更改为具有用户ID“smackup”,因此通常传递ID和VO。


2
一个好的方法是使用JPA和它的所有特性,这篇教程非常有帮助。 它解释了如何使用@PrePersist和@PreUpdate注释来设置创建和更新时间戳。@Version注释支持乐观锁定。

0
我的问题是-写变量名的最佳方式是什么,哪一个好,createdDate还是dateCreated,deleted还是isDeleted等等。
createdDate或dateCreated非常主观。在数据库中,我大多数情况下看到的是createdDate。在deleted和isDeleted之间,我更喜欢(再次主观)deleted。我认为getter方法可以命名为isDeleted()。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接