2013-03-16 3 views
0

Je suis le contrôleur -> Service -> modèle DAO. Lorsque j'appelle une implémentation DAO, je récupère un objet DTO/Data. Ce qui est ensuite transmis à la couche de service, regroupant son objet métier respectif et son objet de données. Comme si:Comment faire pour automatiser des objets métier au printemps

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

class User { 
    private UserDTO userDTO; 

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

Ce que je voudrais faire est envelopper toute ma logique métier dans la classe affaires, mais je nécessite des dépendances supplémentaires. Par exemple, je voudrais être en mesure de faire quelque chose comme ceci:

//... some code 

User user = userService.getByUserId(1); 

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

Pour me supprimer l'utilisateur de cette façon, il faudrait que j'autowire la UserService dans la classe affaires, mais ce ne sera pas fonctionne depuis que j'instancie manuellement la classe User dans le service utilisateur.

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

Y a-t-il un motif que je peux suivre pour me permettre de faire ce que je veux?

Répondre

1

Je ne pense pas que ce soit une bonne conception d'avoir une classe affaires en tant que membre de vos objets DTO. Une approche plus appropriée serait d'avoir votre méthode delete dans la classe business. Cela aiderait à un couplage lâche.

+0

La suppression est dans la classe d'affaires. – user1218776

+0

Alors, pourquoi voulez-vous l'appeler à partir de l'objet utilisateur? appelez userService.deleteUser (utilisateur) là où vous en avez besoin –

+0

À mesure que le code devient plus complexe, j'ai besoin que la fonctionnalité soit dupliquée à plusieurs endroits. Je voudrais réutiliser la même logique de suppression partout. Je ne peux pas placer toute la logique de suppression dans la classe de service car elle ne sera pas trop réutilisable. – user1218776

Questions connexes