2011-12-04 8 views
3

내 시스템에서 사용자는 여러 번의 출장을 게시 할 수 있습니다. 미 사용자 클래스 (도메인 오브젝트는) 내가 ID를 가진 사용자의 모든 여행을 얻으려면 그렇다면이빈혈 도메인 개체?

public class User { 
    private String name; 
    private String id; 
    /* More private fields */ 

    /* getters and setters */ 
} 

처럼 = 1 :

/* Domain Layer */ 
public class UserManager { 
    ... 
    public Trip[] getAllTrips(int userId) { 
     dao.getAllTrips(userId); 
    } 
    ... 
} 

/* DAL Layer */ 
public class UserDaoImpl implements IUserDao { 
    public Trip[] getAllTrips(int userId) { 
     /* jdbc here */ 
    } 
} 

그것은 작동하지만, 내 사용자 클래스를 생각한다 '빈혈 영역 문제 (anemic domain problem)'(또는 빈약 한 POJO 문제인가?) : 개인 필드와 'getters'와 'setters'(그리고 모든 POJO는 동일 함) 만 있습니다. 사용자 클래스가 더 많은 기능을 가지고 있지만 여행이 데이터베이스에 저장되지 않은이 두 번째 방법으로

public class User { 
    /* More private fields */ 
    private Trip[] trips; 

    /* getters and setters */ 
    public Trip[] getTrips() { 
     return trips; 
    } 
    ... 
    public void addTrip(Trip trip) { 
     // add the trip 
    } 
} 

그리고

public class UserManager { 
    public Trip[] getAllTrips(int userId) { 
     User user = dao.getUser(userId); 
     return user.getTrips(); 
    } 
} 

:

가 나는 다른 방법을 생각했습니다.

내가 누락 되었습니까? 나는 DAO의 초보자이고 올바른 접근 방식을 취하고 있는지 알지 못합니다.

감사합니다 (예, 내 영어가 싫습니다).

답변

1

User 클래스에 getAllTrips 기능을 추가하지 않는 이유는 무엇입니까? 함수가 한 사용자 객체에서 작동하는 한, User 클래스에 함수를 추가하십시오.

UserManager 클래스는 여러 사용자에 대해 작업을 수행 한 경우 의미가 있습니다.

cancelTrip(int tripId) 
{ 
    // remove trip from all users 
} 
+0

예, 사용자 클래스 메이크업의 의미에서 getAllTrips 기능 (및 저장 그들을 예를 들어 대한 배열을 사용),하지만 주요 문제는 지속성 메커니즘에 관한 것입니다 : 내가이 여행을 저장하는 데이터베이스를 사용한다고 생각합니다 간단한 배열 (또는 유사)을 사용하지 마십시오. –

+0

나는 당신의 시스템을 어떻게 설계하고 있는가? 사용자 객체, 트립 객체 및 이들 사이의 많은 관계를 갖는 것이 당연합니다. –

+0

감사합니다. 이미 해당 객체가 있습니다. 그러나 예를 들어 getAllTrips 함수를 User 클래스에 추가하면 여행을 목록이나 배열에 저장해야합니다. 그런 다음 배열이나 목록을 데이터베이스에 복사해야합니다. 그렇다면 DAO를 사용하여 중간 배열없이 직접 데이터베이스에 여행을 저장하지 않으시겠습니까? 나는 데이터베이스로 일한 적이 없으며 약간 혼란 스럽다. –

관련 문제