2013-03-16 59 views
0

我遵循Controller - > Service - > DAO模式。当我调用DAO实现时,我得到一个DTO/Data对象。然后将其传递给服务层,将它的各个业务对象和它的数据对象结合在一起。像这样:如何在Spring中自动装入业务对象

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()); 
    } 
} 

有没有一种模式可以让我做我想做的事?

回答

1

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

+0

删除是在业务类中。 – user1218776 2013-03-16 23:33:11

+0

那你为什么要从用户对象中调用它?只需在需要的地方调用userService.deleteUser(user) – 2013-03-16 23:35:20

+0

随着代码变得越来越复杂,我需要将功能复制到多个地方。我想重复使用相同的删除逻辑。我不能将所有的删除逻辑放在服务类中,因为那样它就不会太可重用。 – user1218776 2013-03-16 23:39:36

相关问题