Donc, j'ai remarqué que j'ai certainement une tendance à répéter mon Spring/Hibernate empiler des objets, comme ceci:
- Foo contrôleur effectue un appel à "FooService"
- FooService appels FooRepository.getById() méthode pour obtenir certains Foos.
- FooRepository fait quelques appels à Hibernate pour charger Foo objets.
- FooService n'certaines interactions avec les Foos. Il peut utiliser une relative TransactionalFooService à gérer les choses qui doivent être faites ensemble dans une transaction.
- FooService demande FooRepository pour enregistrer les Foos.
Le problème ici est que les Foos n'ont pas de réelle logique. Par exemple, si un courriel doit être envoyé à chaque fois qu'un Toto arrive à expiration, il n'y a pas un appel à la Foo.expirer(). Il y a un appel à FooService.expireFoo(fooId). C'est pour une variété de raisons:
- C'est gênant pour l'obtenir à d'autres services et d'objets à partir d'un Foo. Ce n'est pas un Printemps bean, et il a été chargé par Hibernate.
- C'est ennuyeux pour obtenir un truc pour faire plusieurs choses de manière transactionnelle.
- Il est difficile de décider si Foo devrait être responsable du choix quand à sauver lui-même. Si vous appeler foo.setName(), devrait foo persister le changement? Faut-il attendre jusqu'à ce que vous appeler foo.save()? Devrait foo.save (), il suffit d'invoquer FooRepository.enregistrer(ce)?
Donc, pour ces raisons, mon Printemps des objets du domaine ont tendance à être essentiellement glorifié les structures avec une certaine logique de validation. Peut-être que ce n'est pas grave. Peut-être que les services web sont d'accord que le code de procédure. Peut-être que de nouvelles fonctionnalités sont écrites, il est possible de créer de nouveaux services qui traitent de la même vieux objets dans de nouveaux moyens.
Mais j'aimerais sortir de ce genre de design, et je me demandais ce que les autres Printemps utilise faire à ce sujet? Avez-vous combattre avec fantaisie comme les temps de charge de tissage (dont je ne suis pas très à l'aise)? Avez-vous une autre astuce? Pensez-vous procédurale est bien?