2011-09-21 8 views
4

Java로 사용자 인증 시스템을 작성하려고했습니다. 그래서 나는 DAO 클래스를 썼다. 먼저 이라는 클래스를 작성했습니다. 지속성은 추상적입니다. 그것은 공통적 인 속성을 유지할 책임이 있습니다. 그리고 사용자 이름 확장 클래스 을 작성했습니다. 지속성 클래스입니다.데이터 액세스 개체 (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 (값 개체) (데이터 전송 개체)를 혼합합니다.

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. 
}

I DAO 동작에 대한 인터페이스를 사용하여

예 (blammy 및 kpow는 웹 서비스, 오라클 데이터베이스, MySQL 데이터베이스, 최대 절전 모드, 또는 아무것도 의미가있을 수 있음) VO 오브젝트 대신 ID를 사용하여 h 제 대상을 식별하는 것을 선호합니다. 또한, 업데이트가 사용자 ID "smackup"을 갖도록 사용자 ID "smackdown"에 의해 식별 된 대상을 변경하므로 일반적으로 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이 더 좋습니다 (IMHO). 클래스의 목적을 설명하는 javadoc이 있어야합니다.

변수 이름과 관련하여 이해할 수 있고 무엇을 위해서야 좋은지 설명하는 한.

이렇게 dateCreated 또는 createdDate 모두 괜찮습니다. 그들은 둘 다 아이디어를 가로 질렀습니다.

0

내 질문 하나, createdDate 또는 dateCreated, 삭제 또는으로 isDeleted 등

createdDate 또는 dateCreated은 매우 주관적이다 좋은 변수 이름을 쓸 수있는 가장 좋은 방법은, 무엇을 입었네. 데이터베이스에서는 주로 createdDate를 보았습니다. 삭제와 isDeleted 사이에서 나는 (다시 주관적인) 삭제를 선호한다. getter 메서드는 isDeleted()라는 이름을 붙일 수 있습니다.

2

JPA를 모든 기능과 함께 사용하는 것이 좋은 방법인데,이 tutorial은 정말 도움이되었습니다. @PrePersist 및 @PreUpdate 주석을 사용하여 생성 및 업데이트 타임 스탬프를 설정하는 방법에 대해 설명합니다. 낙관적 인 잠금은 @Version 어노테이션에 의해 지원된다.