2011-12-04 10 views
3

私のシステムでは、ユーザーは任意の回数のトリップを公開できます。貧血ドメインオブジェクト?

/* 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 */ 
    } 
} 

それは動作しますが、私は自分のUserクラスを考える:ミUserクラス(ドメインオブジェクト)が、私はID = 1のユーザーのすべての旅行を取得したいのであれば、この

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

    /* getters and setters */ 
} 

です'貧血ドメインの問題'(または貧血POJOの問題はありますか?):プライベートフィールドとgettersとsetters(そして私のPOJOはすべて同じです)しかありません。 Userクラスは、多くの機能を持っていますが、旅行がデータベースに格納されていない。この第二のアプローチでは

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

また、getAllTrips関数をUserクラスに追加しないのはなぜですか?関数が1つのユーザーオブジェクトで機能する限り、Userクラスに関数を追加します。

UserManagerクラスは、複数のユーザーに対してアクションを実行した場合などに意味があります。

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

はい、UserクラスでgetAllTrips機能が意味をなす(例えば店舗、それらをのための配列を使用)が、主な問題は、永続化メカニズムについてです:私は、私は旅行を格納するデータベースを使用すべきだと思います単純な配列(または同様のもの)を使用しないでください。 –

+0

私はあなたのシステムをどのように設計しているのでしょうかと疑問に思っています。ユーザーオブジェクト、トリップオブジェクト、それらの間の多対多の関係を持つことは理にかなっています。 –

+0

ありがとう、私はすでにそれらのオブジェクトを持っています。しかし、たとえば、UserクラスにgetAllTrips関数を追加すると、旅行はリストまたは配列に格納する必要があります。そして配列やリストをデータベースにコピーする必要がありますか? DAOを使用してデータベースに直接トリップを格納しないでください(中間配列なし)。私はデータベースで作業したことがないし、少し混乱している。 –

関連する問題