我正在关注控制器 - >服务 - > 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());
}
}
我可以遵循哪种模式让我做我想做的事吗?
答案 0 :(得分:1)
我认为将业务类作为DTO对象的成员并不是一个好的设计。 更合适的方法是在业务类中使用delete方法。这将有助于松耦合。
答案 1 :(得分:0)
我认为你可以使用@Configurable
注释来做到这一点,尽管这不是Spring应该如何工作的。它会给你的应用程序增加很多开销,使调试更加困难。