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

Java EE Discussion :

Envoyer un Entity à une application Client


Sujet :

Java EE

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 26
    Points : 31
    Points
    31
    Par défaut Envoyer un Entity à une application Client
    Bonjour,

    Je crée un application type client/serveur avec un serveur java EE et un client lourd java, j'utilise JPA pour la persistance. Je serai probablement amené à développer d'autre type de client pour cette application.

    Je me pose plusieurs questions sur la meilleur manière façon d'échanger des données avec l'application client. J'ai lu pas mal de choses sur le sujet mais beaucoup qui se contredisent.


    On parle souvent d'utiliser des DTO pour faire circuler les données mais dans mon cas, la plus part du temps, les DTO ont exactement la même structure que mes Entity (les annotations en moins). Je trouve donc dommage de faire le boulot deux fois et surtout de devoir modifier à deux endroit différent dès que quelque chose change. (Ou peut-être ai je une mauvaise conception de ce que doit être un DTO).

    Je me demande donc quelle pourrait être les problèmes si j'utilise directement les Entity pour transférer les données. ( Ce qui implique donc d'inclure mon projet JPA dans mon projet "client").

    Pour clarifier un peu, voici un exemple de ce que je voudrais faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    @Entity
    public class Person{
    	@Id
    	@GeneratedValue(strategy=GenerationType.AUTO)
    	private int id;
    	private String firstName;
    	private String lastName;
    }
     
    @Remote
    public interface PersonRemote {
    	public Person getPersonByName(String name);
    }
    Est-ce que cela peut être considéré comme une mauvaise pratique? Est ce que ça peut engendrer des problèmes d'évolutivité pour l'application?

    Pour le moment, le projet est assez simple mais il devrait beaucoup se développer dans les années à venir.

    N'étant pas un professionnel du développement, j'aimerais avoir l'avis de développeurs expérimentés.

    Merci d'avance pour vos réponses.

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Août 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Août 2016
    Messages : 4
    Points : 7
    Points
    7
    Par défaut
    Dans ton cas l'entité est simple (que des champs "primitifs", j'inclus le String dedans), cependant imaginons que dans ton entité Person tu ais une Enterprise, qui contient elle plusieurs entités Business Unit, qui elles possèdent plusieurs Activity.

    Ton Entité devient un monstre, et transmettre ça prendra beaucoup plus de temps que si tu étais passé par le pattern DTO.

    Au lieu d'avoir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    @Entity
    public class Person{
    	@Id
    	@GeneratedValue(strategy=GenerationType.AUTO)
    	private int id;
    	private String firstName;
    	private String lastName;
            private Enterprise enterprise;
    }
    avec la lourdeur que l'entité enterprise sous-tend, on aurait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    @Entity
    public class Person{
    	@Id
    	@GeneratedValue(strategy=GenerationType.AUTO)
    	private int id;
    	private String firstName;
    	private String lastName;
            private Long enterpriseId;
    }
    Ici on respecte le pattern DTO, seul le pointeur vers notre entité est transmis, et ça pèse moins lourd dans la communication, on laisse le back-end se charger de la reconstruction.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 26
    Points : 31
    Points
    31
    Par défaut
    Merci pour cette réponse, je comprend mieux l'utilité des DTO.

    Pour ma culture personnel, qu'est-ce qu'une entité Business Unit ?

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Août 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Août 2016
    Messages : 4
    Points : 7
    Points
    7
    Par défaut
    Je sais pas trop j'ai juste essayé d'inventer une entité "complexe"

    J'ajouterais par ailleurs que si tu es amené à utiliser le pattern DTO dans ton application, par soucis d'homogénéité dans ton application utilise le partout dans tes communications front/back, même pour des entités simples.

    Tu auras une meilleure scalabilitée, exemple :

    Imaginons que tu ais ton DTO simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public class PersonDto{
    	private int id;
    	private String firstName;
    	private String lastName;
    }
    Mais que pour des raisons X ou Y, lorsque tu envoies une nouvelle personne à ton back, tu ais besoin de connaître la valeur d'un champ "Pays" que tu connais afin de faire du traitement. (On pourrait imaginer que si "Pays" vaut Hollande, alors on met la valeur de firstName en minuscules).

    Dans ce cas tu pourrais avoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public class PersonDto{
    	private int id;
    	private String firstName;
    	private String lastName;
            private String pays;
    }
    Sans impacter ta modélisation d'Entité, tu as pu ajouter un traitement lors de la communication back/front.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 10/09/2006, 13h02
  2. Développer une application Clients-Serveur
    Par Sou06 dans le forum Langage
    Réponses: 1
    Dernier message: 26/07/2006, 21h36
  3. Réponses: 3
    Dernier message: 14/03/2006, 16h08
  4. Réponses: 5
    Dernier message: 24/09/2005, 20h31
  5. conception et réalisation d'une application client/serveur
    Par masvivi dans le forum Développement
    Réponses: 1
    Dernier message: 24/08/2005, 12h32

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