2011-09-21 62 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註釋支持。

相關問題