0

我正在遵循控制器 -> 服务 -> DAO 模式。当我调用 DAO 实现时,我得到一个 DTO/Data 对象。然后将其传递给服务层,将其各自的业务对象和数据对象组合在一起。像这样:

public User getUserById(int id) {
    return new User(userDAO.getUserById(id));
}

class User {
    private UserDTO userDTO;

    public User(UserDTO userDTO) {
        this.userDTO = userDTO;
    }
}

我想做的是将所有业务逻辑包装在业务类中,但我需要额外的依赖项。例如,我希望能够做这样的事情:

//... some code

User user = userService.getByUserId(1);

user.delete(); // this should delete the user from the database

为了让我以这种方式删除用户,我需要将 UserService 自动装配到业务类中,但这不起作用,因为我在用户服务中手动实例化了 User 类。

class User {
    @Autowired
    private UserService userService; // this won't work since I call instantiate User myself, ie. new User()
    private UserDTO userDTO;

    public User(UserDTO userDTO) {
        this.userDTO = userDTO;
    }

    public boolean delete() {
        userService.deleteByUserId(userDTO.getId());
    }
}

有没有我可以遵循的模式来让我做我想做的事?

4

2 回答 2

1

我认为将业务类作为 DTO 对象的成员并不是一个好的设计。更合适的方法是在业务类中使用您的删除方法。这将有助于松散耦合。

于 2013-03-16T23:29:49.777 回答
0

我认为您可以使用@Configurable注释来做到这一点,尽管这确实不是 Spring 应该如何工作的。它会给您的应用程序增加大量开销,并使调试变得更加困难。

http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/aop.html#aop-atconfigurable

于 2013-03-16T23:31:29.643 回答