贫血领域的对象?

时间:2011-12-04 13:14:53

标签: dao pojo anemic-domain-model

在我的系统中,用户可以发布任意数量的旅行。 Mi User类(域对象)就像这样

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

    /* getters and setters */
}

所以,如果我想获得id = 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 */
    }
}

它有效,但我认为我的用户类遭受'贫血域问题'(或贫血的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();
    }
 }

使用第二种方法,User类具有更多功能,但跳转不会存储在数据库中。

我错过了什么?我是DAO的新手,我不知道我是否采取了正确的方法。

谢谢(是的,我的英语很糟糕)。

1 个答案:

答案 0 :(得分:1)

为什么不将getAllTrips函数添加到User类?只要您的函数在一个用户对象上工作,就可以向User类添加函数。

如果您对多个用户执行了操作,那么

UserManager类就有意义了。

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