IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Maven Java Discussion :

Core, IHM, Rules, Batch : archi globale sur un multimodule Maven


Sujet :

Maven Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 24
    Points : 14
    Points
    14
    Par défaut Core, IHM, Rules, Batch : archi globale sur un multimodule Maven
    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

  2. #2
    Membre éprouvé
    Avatar de Cafeinoman
    Homme Profil pro
    Couteau suisse d'une PME
    Inscrit en
    Octobre 2012
    Messages
    628
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Couteau suisse d'une PME

    Informations forums :
    Inscription : Octobre 2012
    Messages : 628
    Points : 1 256
    Points
    1 256
    Par défaut
    Pourquoi ne pas "simplement" sortir la partie accès bdd de core? Un module supplémentaire vu par Rules, Batch et Core. Ca supprime toute référence circulaire, même si j'admet que ca peut faire un gros refactoring si le projet est avancé...
    «Dieu ne joue pas aux dés.» - Albert Einstein. Et pan! 30 ans de retard dans la théorie quantique!
    «Tout n'est pas politique, mais la politique s'intéresse à tout.» - Nicolas Machiavel. Et surtout à ceux qui ne s'y intéressent pas.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 24
    Points : 14
    Points
    14
    Par défaut
    Merci de ta réponse Cafeinoman

    J'y ai déjà pensé. Le projet suit les principes MDA : les parties Core de IHM sont générées. Notamment, les services et les DAOs sont dans le même artefact : Core.
    Pour l'instant, il me parait compliqué de tordre l'outil pour splitter ces 2 parties. Mais c'est une de mes pistes

    D'autres pistes ?

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 24
    Points : 14
    Points
    14
    Par défaut
    Pour infos, pour le Core, l'outil produit 2 artefactes :
    • un (client) avec les interfaces de services, les DTOs, les entités, les exceptions, les énumérations
    • un autre avec les implementations de services et la partie DAO

  5. #5
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    je ne suis pas sur d'avoir tous saisi

    pour moi "core" n'a souvent pas beaucoup de sens.

    je serais aussi d'avis que la persistance (DAO) ne doit par faire partie de "core"
    je verrais bien un triptyque services rules persistance.
    persistance ne dépend de rien
    rules et services utilisent persistance.
    services utilise rules.

    ensuite batch et IHM utilisent services

    A+JYT

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 24
    Points : 14
    Points
    14
    Par défaut
    Ok, je vois. Si je résume :

    IHM----\+++++++++++/->Rules--\
    +++++++\+++++++++/+++++++++\
    ++++++++->Services --------------> Persistence
    +++++++/
    Batch---/

    Je suis en train de voir pour un split du core en services+dao... Souffrance en vue...

    Mais le lien direct entre Services et Persistence court-circuite Rules. Quelle est sa plus-value ? Les perfs? la facilité? On pourrait effectivement avoir des services n'ayant pas recourt à des règles métiers, on devrait alors avoir la possibilité d'accéder à la base directement... Je suppose.

    Dans le cas où le refactoring serait compliqué, une sorte d'IOC via Maven serait-il envisageable ? Je veux dire qu'injecter le Core (services + DAOs) dans Rules (donc à la construction du projet, dans un répertoire source generated par exemple), est-ce que cela ne règlerait pas le problème ? Alors j'entends la critique du "copier/coller" ! Mais finalement, la source est unique, et l'artefact est généré par la même unité de travail à la compilation !

    Cdt,

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 24
    Points : 14
    Points
    14
    Par défaut
    Bon, j'ai regardé, à priori, la modélisation semble assez souple pour un split sans trop de dégâts pour le refactoring...
    2 modules Maven (services et persistence), services voyant persistence.

    J'ai toujours mon interrogation sur ce lien direct sans passer par Rules (mais petite interrogation)...

    Au fur et à mesure que j'avance dans l'archi, me vient une autre interrogation : Les devs IHM devraient pouvoir effectuer certaines validations métiers sans pour autant sortir de ce module. Ces règles métiers devraient logiquement se situer dans le module Rules afin d'éviter la duplication de code (ces validations devant se faire également coté services). Un lien devrait donc exister entre IHM et Rules !! On pourrait donc se retrouver avec des problèmes de sécurité car on a là un lien direct à la base données sans passer par Services (IHM-Rules-Persistence)...

    Ce que je verrais, c'est donc une API Rules-client dans le module Rules (classifier au sens Maven) qui n'aurait pas d'accès base de données, ou tout au plus un accès très contrôlé.

    Les batchs pourront être soit pilotés par fichiers de config (ou java config) soit par IHM. C'est pour çà que je prévois un lien entre IHM et Batch

    IHM----\--------------->[(Rules-Client)-->/--Rules]--\
    +|+++++\++++++++++++++++++++++++/+++++++++\
    +|++++++>-------------------->Services ------------> Persistence
    +v+++++/
    Batch---/

    Quand penser vous ?

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 24
    Points : 14
    Points
    14
    Par défaut
    Quelque chose comme çà :
    Nom : archi.png
Affichages : 207
Taille : 18,6 Ko

  9. #9
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    ça semble plutôt pas mal

Discussions similaires

  1. Recherche globale sur une table
    Par webrider dans le forum Requêtes
    Réponses: 5
    Dernier message: 08/09/2006, 11h41
  2. [Directives] Hébergeur mutualisé avec register globals sur OFF
    Par max.onyx dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 25/04/2006, 17h22
  3. [VB.NET] Var globales sur plusieurs projets d'une même solut
    Par boulete dans le forum Windows Forms
    Réponses: 8
    Dernier message: 16/02/2006, 14h04
  4. Réponses: 6
    Dernier message: 28/09/2005, 10h24
  5. batch+recuperer fichier sur un server internet
    Par NoobX dans le forum Windows
    Réponses: 3
    Dernier message: 24/04/2005, 00h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo