2013-03-16 55 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

相關問題