21 votes

Quelle est la meilleure façon de partager du code commun (comme des classes de domaine) entre deux ou plusieurs projets ?

Nous développons une application Web composée de deux projets Eclipse. L'un des projets est une application Web basée sur le protocole HTTP. RESTful L'autre projet est un site web. Tous deux seront déployés en tant que WAR. Au départ, ils seront déployés sous la même instance de serveur d'application, mais par la suite, ils seront sur des boîtes séparées.

L'application du site web consomme le RESTful WS app. Il est évident qu'il y aura du code - en particulier des classes de domaine - qui sera commun aux deux projets. Par exemple, il peut y avoir une ressource située dans <app>/users qui expose des opérations CRUD sur des objets User ; pour mettre à jour un utilisateur, l'application du site web POST un objet User à la forme XML dans <app>/users. Une requête GET vers <app>/users/1 renverrait un objet User avec une image XML.

Il est évident qu'avoir une classe Utilisateur dans les deux projets serait assez stupide pour diverses raisons. Je me demande donc quelle est la meilleure façon de procéder ? Mettre le code commun dans un JAR qui est partagé entre les deux projets est ce que j'ai fait dans le passé, mais y a-t-il une meilleure façon ou une façon plus facile ?

Edit : Suppression des références à RESTful. Sémantique mise à part, quelle est la bonne façon de partager du code commun entre deux projets Eclipse ?

14voto

Chris Points 2536

Séparation des préoccupations

En fait, la création d'un troisième projet et l'ajout des dépendances du projet est la meilleure façon de procéder, car Séparation des préoccupations n'est pas seulement un principe pour les classes, mais aussi pour les modules logiciels. Il présente certains avantages :

  • Moins de code à lire pour apprendre les ficelles d'un projet.
  • Un meilleur contrôle des dépendances, car il est possible de supprimer certaines dépendances inter-projets, de sorte qu'il n'est pas possible d'utiliser les classes du mauvais module.
  • La duplication du code est terrible.

Structure du projet

Assurez-vous que vous ne créez pas une grande " service public "mais plutôt des projets spécifiques à un domaine, comme le projet gestion des utilisateurs o carnet d'adresses .

Dans votre cas, il pourrait s'agir

  • user-api contient un objet de transfert d'utilisateur
  • service aux utilisateurs fournit des opérations CRUD
  • application web (o utilisateur-client ) appelle le service aux utilisateurs.

Autres systèmes de construction

Pour passer à l'intégration continue, vous devrez utiliser un meilleur système de construction qu'Eclipse, mais les principes sont les mêmes. Vous créerez de petits modules avec un minimum de dépendances.

Les systèmes de construction les plus populaires pour les projets Java sont Maven , Fourmi y Gradle . Chacun d'entre eux a sa propre façon de définir les dépendances des modules.

Références de projets dans Eclipse

Pour indiquer à Eclipse les dépendances du projet, cliquez avec le bouton droit de la souris sur le projet, ouvrez les propriétés et passez aux références du projet. Ici, vous pouvez marquer les dépendances, de sorte que les changements de code prennent effet immédiatement sans copier manuellement un fichier JAR.

Project references menu

7voto

Stefan K. Points 1264

À mon avis, cela dépend de votre système de construction et non votre IDE.

Ainsi, si vous

  • J'utilise Eclipse pour construire et j'aime garder les choses simples, il suffit d'ajouter un troisième projet et d'ajouter une dépendance.
  • utiliser osgi, vous avez déjà créé un nouveau projet osgi.
  • utiliser un outil de construction, comme maven ou gradle, puis mettre en place une construction multi-projets.

6voto

atamanroman Points 4566

En général, vous créez un troisième projet (par ex. noyau o partagé ) qui contient le code partagé. Il suffit de dépendre de ce code dans les deux projets.

1voto

brbrbr Points 157

Vous devez créer un autre projet (c'est-à-dire partagé). Toutes mes applications SERVER-CLIENT sont réalisées de cette manière.

Here is a sample of an EJB app

Fondamentalement, partagé contient les interfaces EJB utilisées par le module client et mis en œuvre par ejbModule

1voto

sgpalit Points 483

Comment utilisez-vous les pots de tiers ? Considérez votre code commun comme un jar tiers et appliquez la même règle à vos projets. Vous pouvez utiliser un outil de gestion des dépendances tel que maven afin de maintenir l'ordre des versions.

Si vous voulez passer à un serveur d'application où vous pouvez déployer des EAR, vous pouvez mettre le code commun dans un jar qui est une dépendance de votre EAR... de sorte que d'autres projets WAR dans vos EAR peuvent utiliser le code commun.

Vous pouvez également essayer OSGI.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X