Анемичный доменный объект? - PullRequest
3 голосов
/ 04 декабря 2011

В моей системе пользователь может публиковать любое количество поездок. Mi Класс пользователя (объект домена) выглядит так

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

Это работает, но я думаю, что мой класс User страдает «проблемой анемичной области» (или анемичной проблемой POJO, существует ли она?): Имеет только закрытые поля и «получатели» и «сеттеры» (и все мои 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 Ответ

1 голос
/ 08 декабря 2011

Почему бы не добавить функцию getAllTrips в класс User?Пока ваша функция работает с одним пользовательским объектом, добавьте функции в класс User.

Класс UserManager будет иметь смысл, если вы выполняете действие для нескольких пользователей, например

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