Soumission d’un petit problème d’archi : un projet Maven multi modules :
- Parent (pom.xml, gestion des versions)
- Core (Spring, Hibernate, etc…)
- IHM (Spring MVC, Thymeleaf, Bootstrap, etc…)
- Rules (Implémentation du pattern Specification)
- Batch (Spring Batch)
Jusque là, rien de neuf
Le souci se situe au niveau des dépendances entre ces différents modules :
- IHM doit voir Core : IHM a besoin des méthodes de services du Core et de ses DTO (paramètres d’entrées/sorties des services)
- Core doit voir Rules : Core doit pouvoir appliquer des règles métiers sur tout ou partie de ses DTO/Entités
- Rules doit voir Core : il est possible que pour exécuter certaines règles, le moteur de règle doive avoir accès à la base de données (ça commence à piquer… )
- IHM doit voir Rules : les règles étant centralisées dans le moteur de règles et qu’on ne veut pas les dupliquer, certaines règles IHM métier seront présentent dans le moteur de règle
- Batch doit voir Core : les batchs vont faire appel à la base de données
- Core doit voir Batch : pour l’administration des batchs (là, çà repique… )
Donc comme on peut le voir, on se retrouve avec des références circulaires, Maven n’aime pas
Pour la partie Batch, l’utilisation de ItemReaderAdapter/ItemWriterAdapter serait une solution mais cela voudrait dire de copier, à la compile via Maven, tout le contexte Spring du Core (Config Spring, persitence.xml, les classes, etc…) Un peu lourd… mais faisable...
On pourrait penser la même chose pour Core/Rules, mais cela risque de ne pas fonctionner car on change de contexte (genre IllegalArgumentException au runtime)
Je lance la discussion. Si vous avez des idées
Partager