Citation:
En ce qui concerne le lazy loading, aujourd'hui je me demande vraiment si le côté pratique du chargement automatique d'une référence par un framework de mapping O/R comme hibernate vaut la chandelle. En effet, c'est une grosse source de problème de performance. Le lazy loading en lui même, c'est bien. Mais, le fait que le chargement soit "silencieux" (point de vue du développeur) et peut potentiellement provoquer une requête en BDD peut vite plomber les performances.
Je te rejoins à 100%, si tu balances entre tes couches des objets mappés qui ont besoin de charger eux-mêmes des relations, cela signifie que tu n'es pas certain de la façon dont ils seront utilisés et c'est aussi là que se situe le paradoxe. D'un côté on veut un max d'abstraction, des objets auto-suffisants et de l'autre on aurait besoin de contrôler finement ce genre de chose.
Citation:
Après, ce genre d'erreur peut également être fait dans les services. Le problème est juste déporté. On a l'illusion que c'est mieux contrôlé mais tu n'es pas à l'abri qu'un collègue ajoute une boucle pour appeler la méthode updateCommande(), par exemple, avec un getXxx malheureux ce qui va lancer 100 000 requêtes alors qu'on aurait pu en avoir une seule ;)
On est toujours obligé de savoir ce qu'on fait, comme tu l'as bien indiqué dans ton premier post. :ccool: Mais les choses sont plus prévisibles si on évite la surabstraction.
Citation:
Je me demande vraiment si, justement, le rôle du service n'est pas, en premier lieu, de charger le graphe complet (pas plus, pas moins) nécessaire à la bonne réalisation du service. Et, si un objet manque... bah on explose (c'est radical mais, au moins, on s'en rend compte tout de suite). Un peu comme un main qui va instancier les objets et démarrer l'application. Bon, là... je ne donne pas de solutions :p peut être qu'une couche persistance un peu plus intelligente. Ou alors du lazy loading moins, transparent. Comme ça, le développeur sait que cet appel peut potentiellement provoquer une discussion avec la BDD. Je pense que, comme d'habitude, il n'y a pas de réponse universelle.
Non en effet, ma réponse a été de dire que la partie service et la partie BDD devait être plus intimes et qu'un graphe chargé devait être traité le plus localement possible et en aucun cas être balancé à gauche à droite jusqu'à ce qu'on se mange une exception parce qu'on a voulu utiliser une éventuelle relation non chargée.