Notre projet a ~ 40 tables avec des relations complexes.Un collègue croit en l'utilisation de requêtes de jointure longues qui m'oblige à connaître les tables en dehors de mon module mais je ne pense pas aux tables directement liées à mon module. fonctions (écrites par les responsables d'autres modules) lorsque j'ai besoin de données provenant d'eux. Permettez-moi de clarifier:Est-ce que les JOIN complexes impliquent des problèmes de couplage et de maintenance?
Je suis responsable du module ContactVendor qui permet aux clients de contacter le fournisseur et de démarrer une conversation sur un produit spécifique. Le module Produits possède ses propres tables complexes et des relations avec des fonctions qui encapsulent les détails (par exemple, i18n, activation, disponibilité des produits, etc ...). Maintenant, je dois montrer le titre du produit de certains produits liés à une conversation entre le vendeur et les clients. Je peux soit écrire une longue requête qui récupère l'information du produit avec des trucs de conversation en un coup (ce qui m'oblige à en apprendre davantage sur les tables de produits) OU je peux passer le product_id pertinent à la fonction get_product_info (int).
Première approche est évidemment exigeante et introduit de nombreuses mauvaises pratiques et des choses que je considère normalement comme un défaut dans la programmation. Le problème avec la seconde approche semble être les innombrables mini requêtes que ces fonctions d'accès provoquent et la perte de performance est une préoccupation lorsqu'une boucle essaie d'extraire des titres de produits pour 100 produits en utilisant des fonctions qui effectuent chacune une requête séparée. Je suis donc coincé entre "ne codez pas l'implémentation, le code à l'interface" et la performance. Quelle est la bonne façon de faire les choses?
MISE À JOUR: Je suis particulièrement préoccupé par les futures modifications possibles de ces tables en dehors de mon module. Et si le module Produits décidait de changer sa façon de faire? ou pour une raison quelconque, modifier le schéma? Cela signifie que d'autres modules se casseraient ou fonctionneraient mal jusqu'à ce que le changement leur soit intégré. Le problème habituel de l'effet d'entraînement.
Je vois, mais que se passe-t-il si le module Produit a décidé de modifier son schéma? l'effet d'entraînement qui en résulterait ne détruirait-il pas beaucoup de modules? Si, d'autre part, tous les autres modules accèdent aux produits en utilisant l'interface fournie par le module Product, alors rien ne se passera mal (j'espère! ;-)) –
@ ashkan.kh: Ma réponse était trop longue, donc je l'ai ajouté ci-dessus dans la réponse. – MJB