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

时间:2011-09-21 17:33:12

标签: java coding-style dao convention

我试图用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

 }

我的问题是 - 编写变量名称的最佳方法是什么,哪一个是好的,创建日期或日期处理,删除或删除等等。

这种方法还可以,还是有更好的方法? 以及如何实现数据版本控制?

4 个答案:

答案 0 :(得分: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)因为您定义了一个接口,所以任何测试框架都可以轻松模拟DAO 2)行为与实现无关 - 您的DAOImpl可以使用jdbc,hibernate,无论

你的Persistance类实际上是所有实体的基类 - 即所有类实例都被保存,你想在一个地方代表一些公共字段。这是一个很好的做法 - 我不打电话给班级Persistance,像BaseEntity更好(恕我直言)。请务必使用javadoc来解释课程的目的。

关于变量名称,只要它们有意义并描述它们的用途,它就是好的。

所以dateCreatedcreatedDate都很好;他们都得到了这个想法。

答案 1 :(得分: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 :(得分:2)

一个好的方法是使用JPA及其所有功能,这tutorial非常有用。 它解释了如何使用@PrePersist和@PreUpdate注释来设置创建和更新时间戳。 @Version注释支持乐观锁定。

答案 3 :(得分:0)

  

我的问题是 - 编写变量名称的最佳方法是什么   一个是好的,createdDate或dateCreated,删除或isDeleted等。

createdDate或dateCreated非常主观。在数据库中,我主要看过createdDate。在删除和isDeleted之间,我更喜欢(再次主观)删除。我认为getter方法可以命名为isDeleted()。