Envoyé par
igor_
Si un médecin libéral travaillant avec une secrétaire vous fait la commande d'un logiciel permettant de modéliser et tracer les interactions entre lui, sa secrétaire et le patient lors de la prise de RV, on peut imaginer 2 cas de figure :
- vous faites ce qu'il vous a demandé et vous serez payé.
- vous estimez que, dans le besoin exprimé, seul compte vraiment le point de vue du patient et qu'il faut abstraire le reste. Vous créer donc une interface abstraite offrant au patient tous les services nécessaires à sa prise de rendez-vous, et vous implémentez ces services de manière interne. Vous êtes plutôt fier de votre conception, car vous avez su aller au-delà du besoin exprimé. Lorsque vous montrez votre prototype au médecin, vous commencez par lui vanter les capacités d'adaptation de votre architecture : le patient ne dialoguant qu'avec une interface abstraite (un "cabinet médical"), le logiciel pourra fonctionner avec un ou plusieurs médecins, zéro ou un ou plusieurs secrétaires, et même en l'absence de tout personnel, en prévoyant des comportement par défaut. Tout ce qu'il y aura à faire, c'est d'implémenter de nouveaux comportements. l'interface principale, elle, restera inchangée. Alors le médecin vous répond : "Mais je vous avais pourtant bien dit que ce que nous avions besoin, c'était de modéliser les interactions directes entre moi, ma secrétaire, et le patient. C'est tout-à-fait impossible avec votre application. Vous avez créé un mur qui empêche cela.
mister3957, comme beaucoup d'intervenants, vous vous précipitez pour imaginer des besoins. Et si et si et si. Je ne dis pas que vos généralisations et vos abstractions ne sont pas bonnes. Elles sont excellentes et plutôt naturelles. Mais, simplement, elles sont hors sujet ici. Dans mon article, l'exemple du médecin explicite des entités claires, et il exprime clairement la problématique de la prise de RV en termes d'interactions entre ces entités. Vous pouvez proposer toute autre modélisation, abstraite à souhait, aucun souci. Mais c'est alors un autre cas d'étude. Vous pouvez dire que ma modélisation ne peut correspond à aucun problème en pratique et qu'elle ne sert donc à rien, mais c'est une position difficile à tenir : il est plus facile d'affirmer qu'une modélisation peut correspondre à des cas réels que l'inverse. J'ai tenté de précisé un cas réel plus haut.
Enfin, cet exemple du médecin et avant tout une image. Dans mon article, je ne le détaille pas plus que l'exemple du chien qui est une image également. On ne donne pas le contre-pied d'une image par une modélisation complexe, mais par une autre image. C'est donc normal que l'exemple du médecin paraisse si simple. Mais il serait hors-sujet de dire qu'elle est simpliste, comme ont pu le dire des intervenants. On ne dit pas d'une image qu'elle est simpliste car c'est le but d'une image que de saisir l'essence d'un concept ou d'une problématique. Je n'ai pas dit de l'image du chien qu'elle était simpliste, et je trouve qu'elle illustre bien le cas général (le plus fréquent à mon avis) où Déméter convient. Et je n'ai donc pas tenté d'élaborer ma propre modélisation du chien, plus complexe, pour aller dans mon sens : cela aurait été hors-sujet.
Vous trouverez facilement sur stack-overflow des contre-images visant à montrer intuitivement qu'on peut trouver de nombreux exemples où Déméter est contre-productif.
Encore une fois, mon article repose sur l'existence de tels cas. C'est une position facile à tenir à mon humble avis. Quant aux cas où Déméter fonctionne bien, je les traite explicitement dans la dernière section "Déméter et encapsulation". Les nombreux intervenants qui ont tenté d'invalider mon article illustrant leurs propos par des cas où on expose des types internes, qui n'ont vocation qu'à être utilisés par l'implémentation, n'ont soit pas compris le point, soit pas lu mon article jusqu'au bout.
-------------
Je trouve dommage que, sur un forum de programmation qui se veut professionnel, lorsqu'un nouveau point de vue est apporté sur un sujet où l'essentiel des publications se contente de vulgariser ce que le lecteur peut lui-même trouver facilement sur le net, on puisse assister à un tel tir de barrage. Avec autant de défauts de lecture évidents, de propos hors-sujet ou déplacés, de jugements sur la personne plutôt que sur les idées pour certains je pense en réalité qu'il s'agit plus d'un effet d'extrémisme idéologique : certains semblent vouer une passion pour certains principes de conception, et il est facile d'être piqué quand on est passionné. Mais la passion est rarement une bonne chose en matière de programmation comme ailleurs. Ne soyez pas esclaves de vos principes. Chaque situation a ses caractéristiques propres, et beaucoup ne peuvent satisfaire simultanément tous ces principes. Connaître et apprendre ce principes est très bien, mais les appliquer a priori, automatiquement, sans réfléchir en premier lieu aux caractéristiques concrètes de chaque situation risque de conduire à des conceptions inadaptées, et souvent excessivement abstraites.
Je clos ici ma participation à cette discussion, et laisse place au ballet fascinant des +1 -1.