2011-09-21 58 views
4

我试图用Java编写用户认证系统。所以我写了一些DAO类。首先,我确实写了一个名为持久性这是抽象的。它负责保存一些共同的属性。并写了一个名为User的类延伸持久性类。这些类 -什么是编写数据访问对象(DAO)的最佳方法?

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会,删除或等请将isDeleted

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

回答

2

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

实施例使用用于DAO行为的接口(blammy和kpow可能是web服务,Oracle数据库,MySQL数据库,休眠或任何有意义):

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。

+0

谢谢,我不知道这些术语。 – rokonoid

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,休眠,不管是什么

您的Persistance类实际上是所有实体的基类 - 即所有类的实例都得到保存,您希望在一个地方代表某些常用字段。这是一个很好的做法 - 我不会打电话给类Persistance,类似BaseEntity更好(恕我直言)。一定要有解释课程目的的javadocs。

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

so dateCreated or createdDate are both fine;他们都明白这一点。

0

我的问题是 - 什么是写变量名的最好方式,这 一个是好的,createdDate或dateCreated会,删除或等请将isDeleted

createdDate或dateCreated会是非常主观的。在数据库中,我主要看到了createdDate。在删除和isDeleted之间,我更喜欢(也是主观的)删除。我认为getter方法可以被命名为isDeleted()。

2

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

相关问题