[{"data":1,"prerenderedAt":59805},["ShallowReactive",2],{"search-api":-1,"listing-page-3":3},[4,715,6488,8264,11161,13015,16749,19402,24079,29260,30627,32162,34940,41065,44420,47220,51200,55309,57394],{"_path":5,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":9,"description":10,"id":11,"date":12,"listed":13,"nocomments":7,"hidden":7,"categories":14,"tags":16,"--cover":20,"readingTime":21,"body":26,"_type":709,"_id":710,"_source":711,"_file":712,"_stem":713,"_extension":714},"/fr/dette-technique/loi-norvig-maitrise-theorie-pratique","dette-technique",false,"","Loi de Norvig, Maîtriser le Développement à travers la Pratique et la Théorie","Découvrez comment équilibrer théorie et pratique avec la Loi de Norvig, et améliorez vos compétences en tant que développeur. Comparez avec le software craftsmanship...",51,"2024-08-28",true,[15],"Principes du software craftsmanship",[17,18,19],"principe","qualité","loi","covers/articles/loi-de-norvig.jpg",{"text":22,"minutes":23,"time":24,"words":25},"11 min read",10.24,614400,2048,{"type":27,"children":28,"toc":674},"root",[29,42,48,60,83,87,96,115,125,130,139,153,162,187,207,210,223,232,237,248,253,263,274,279,288,299,304,313,324,338,355,366,371,380,383,392,397,407,412,421,431,436,445,455,460,469,479,484,493,503,508,517,520,529,544,557,581,594,607,620,633,636,648,651,659,664],{"type":30,"tag":31,"props":32,"children":34},"element","h2",{"id":33},"loi-de-norvig-maîtriser-le-développement-à-travers-la-pratique-et-la-théorie",[35],{"type":30,"tag":36,"props":37,"children":38},"strong",{},[39],{"type":40,"value":41},"text","Loi de Norvig : Maîtriser le Développement à travers la Pratique et la Théorie",{"type":30,"tag":43,"props":44,"children":45},"p",{},[46],{"type":40,"value":47},"Vous pratiquez le développement depuis un certain temps, mais vous avez parfois l’impression de stagner. Vous maîtrisez plusieurs langages, vous résolvez des bugs avec efficacité, mais un doute persiste : \"Est-ce que je progresse vraiment comme je le devrais ?\". Ce sentiment d’insatisfaction est partagé par de nombreux développeurs. Bien souvent, il résulte d’un déséquilibre entre la théorie et la pratique.",{"type":30,"tag":43,"props":49,"children":50},{},[51,53,58],{"type":40,"value":52},"La ",{"type":30,"tag":36,"props":54,"children":55},{},[56],{"type":40,"value":57},"Loi de Norvig",{"type":40,"value":59}," met en lumière une vérité fondamentale : pour maîtriser pleinement une compétence technique, la pratique doit être accompagnée d'une compréhension théorique solide. Seule la répétition ne suffit pas à franchir les paliers de la maîtrise. Anders Ericsson, dont les travaux sur la pratique délibérée ont inspiré Peter Norvig, montre que c'est la qualité de l'effort, et non la quantité brute d'heures, qui fait la différence.",{"type":30,"tag":43,"props":61,"children":62},{},[63,65,69,71,81],{"type":40,"value":64},"Ce que vous trouverez ici : comment équilibrer théorie et pratique pour accélérer votre progression, comment la ",{"type":30,"tag":36,"props":66,"children":67},{},[68],{"type":40,"value":57},{"type":40,"value":70}," se compare au ",{"type":30,"tag":36,"props":72,"children":73},{},[74],{"type":30,"tag":75,"props":76,"children":78},"a",{"href":77},"/fr/dette-technique/software-craftsmanship-principes-exemples-java",[79],{"type":40,"value":80},"software craftsmanship",{"type":40,"value":82},", et un plan d'action clair pour affiner vos compétences. J'ai vu ce déséquilibre freiner des équipes entières dans des DSI que j'accompagne : des développeurs compétents qui stagnent faute d'un apprentissage structuré, ce qui se traduit concrètement par des délais de livraison qui s'allongent et une dette technique qui s'accumule.",{"type":30,"tag":84,"props":85,"children":86},"hr",{},[],{"type":30,"tag":31,"props":88,"children":90},{"id":89},"comparaison-entre-la-loi-de-norvig-et-le-software-craftsmanship",[91],{"type":30,"tag":36,"props":92,"children":93},{},[94],{"type":40,"value":95},"Comparaison entre la Loi de Norvig et le Software Craftsmanship",{"type":30,"tag":43,"props":97,"children":98},{},[99,100,104,106,113],{"type":40,"value":52},{"type":30,"tag":36,"props":101,"children":102},{},[103],{"type":40,"value":57},{"type":40,"value":105}," et le ",{"type":30,"tag":36,"props":107,"children":108},{},[109],{"type":30,"tag":75,"props":110,"children":111},{"href":77},[112],{"type":40,"value":80},{"type":40,"value":114}," partagent un objectif commun : atteindre l'excellence dans la création de logiciels. Pourtant, ces deux concepts abordent la question de manière différente.",{"type":30,"tag":116,"props":117,"children":119},"h3",{"id":118},"loi-de-norvig-équilibre-entre-théorie-et-pratique",[120],{"type":30,"tag":36,"props":121,"children":122},{},[123],{"type":40,"value":124},"Loi de Norvig : Équilibre entre théorie et pratique",{"type":30,"tag":43,"props":126,"children":127},{},[128],{"type":40,"value":129},"Selon Peter Norvig, il faut environ dix ans pour maîtriser un domaine technique. Cette durée n'est pas seulement une question de pratique répétée. La Loi de Norvig stipule que pour progresser, il faut non seulement pratiquer régulièrement, mais aussi approfondir les concepts théoriques sous-jacents. La pratique seule, sans compréhension de la théorie, peut entraîner des habitudes inefficaces. À l’inverse, trop se concentrer sur la théorie, sans application concrète, peut limiter la capacité à résoudre des problèmes réels.",{"type":30,"tag":116,"props":131,"children":133},{"id":132},"software-craftsmanship-lart-du-développement-logiciel",[134],{"type":30,"tag":36,"props":135,"children":136},{},[137],{"type":40,"value":138},"Software Craftsmanship : L’art du développement logiciel",{"type":30,"tag":43,"props":140,"children":141},{},[142,144,151],{"type":40,"value":143},"Le ",{"type":30,"tag":36,"props":145,"children":146},{},[147],{"type":30,"tag":75,"props":148,"children":149},{"href":77},[150],{"type":40,"value":80},{"type":40,"value":152}," est une philosophie qui prône l'idée que le développement logiciel est un artisanat. Il met l'accent sur la qualité du code, la collaboration, et l’amélioration continue à travers la pratique. Les développeurs sont encouragés à considérer leur travail comme un art, en perfectionnant constamment leurs compétences par l'expérience, la révision de code, et le mentorat.",{"type":30,"tag":116,"props":154,"children":156},{"id":155},"comparaison-clé",[157],{"type":30,"tag":36,"props":158,"children":159},{},[160],{"type":40,"value":161},"Comparaison clé",{"type":30,"tag":163,"props":164,"children":165},"ul",{},[166,177],{"type":30,"tag":167,"props":168,"children":169},"li",{},[170,171,175],{"type":40,"value":52},{"type":30,"tag":36,"props":172,"children":173},{},[174],{"type":40,"value":57},{"type":40,"value":176}," insiste sur l’importance d’un apprentissage équilibré : pratiquer, mais aussi comprendre pourquoi vous faites ce que vous faites.",{"type":30,"tag":167,"props":178,"children":179},{},[180,181,185],{"type":40,"value":143},{"type":30,"tag":36,"props":182,"children":183},{},[184],{"type":40,"value":80},{"type":40,"value":186}," se concentre plus sur l'amélioration continue à travers la pratique consciente et la qualité du travail. L'aspect théorique y est moins présent, bien qu'il soit implicite dans la quête de perfectionnement.",{"type":30,"tag":43,"props":188,"children":189},{},[190,192,196,198,205],{"type":40,"value":191},"Les deux approches reconnaissent la nécessité de persévérance et de discipline, mais là où la ",{"type":30,"tag":36,"props":193,"children":194},{},[195],{"type":40,"value":57},{"type":40,"value":197}," vous pousse à constamment réfléchir aux principes théoriques, le ",{"type":30,"tag":36,"props":199,"children":200},{},[201],{"type":30,"tag":75,"props":202,"children":203},{"href":77},[204],{"type":40,"value":80},{"type":40,"value":206}," vous invite à adopter une mentalité d'artisan, où la qualité du produit fini et la transmission des connaissances sont prioritaires.",{"type":30,"tag":84,"props":208,"children":209},{},[],{"type":30,"tag":211,"props":212,"children":217},"cta",{"cta":213,"href":214,"title":215,"type":216},"Réserver mon diagnostic gratuit →","https://app.kamanga.fr/forms/discovery-call","Votre équipe consomme des formations mais reste bloquée au même niveau de maîtrise ?","call",[218],{"type":30,"tag":43,"props":219,"children":220},{},[221],{"type":40,"value":222},"Il y a un fossé entre savoir les principes et les appliquer vraiment en production. La montée en compétences est lente, les mêmes erreurs se répètent, et la pratique délibérée n'est jamais prioritaire face aux deadlines. Réservons 30 minutes pour concevoir un plan de montée en compétences adapté à votre contexte.",{"type":30,"tag":31,"props":224,"children":226},{"id":225},"plan-daction-pour-maîtriser-léquilibre-théoriepratique",[227],{"type":30,"tag":36,"props":228,"children":229},{},[230],{"type":40,"value":231},"Plan d'action pour maîtriser l'équilibre théorie/pratique",{"type":30,"tag":43,"props":233,"children":234},{},[235],{"type":40,"value":236},"Maîtriser une compétence en développement ne se résume pas à accumuler les heures de pratique ou à lire des livres théoriques. Je vous recommande un équilibre réfléchi entre ces deux éléments. Voici un plan d'action concret pour intégrer cette approche à votre routine.",{"type":30,"tag":116,"props":238,"children":240},{"id":239},"_1-pratique-délibérée-coder-avec-un-but-précis",[241,243],{"type":40,"value":242},"1. ",{"type":30,"tag":36,"props":244,"children":245},{},[246],{"type":40,"value":247},"Pratique délibérée : coder avec un but précis",{"type":30,"tag":43,"props":249,"children":250},{},[251],{"type":40,"value":252},"La pratique n’est vraiment efficace que lorsqu’elle est intentionnelle. Cela signifie que, plutôt que de simplement écrire du code sans réfléchir, vous devez cibler des compétences spécifiques. Par exemple, si vous avez du mal avec la gestion des exceptions, consacrez une session entière à ce sujet en créant des scénarios qui vous poussent à réfléchir à la meilleure façon de les gérer. Posez-vous des questions comme : \"Pourquoi cette solution fonctionne-t-elle ici ?\", ou \"Quelles sont les limites de cette approche ?\".",{"type":30,"tag":43,"props":254,"children":255},{},[256,261],{"type":30,"tag":36,"props":257,"children":258},{},[259],{"type":40,"value":260},"Conseil",{"type":40,"value":262}," : Prenez une tâche que vous réalisez souvent (comme l'intégration d'une API ou la gestion d'une base de données) et explorez plusieurs manières de la réaliser, tout en comprenant les avantages et inconvénients de chaque approche.",{"type":30,"tag":116,"props":264,"children":266},{"id":265},"_2-étudier-la-théorie-comprendre-les-fondations",[267,269],{"type":40,"value":268},"2. ",{"type":30,"tag":36,"props":270,"children":271},{},[272],{"type":40,"value":273},"Étudier la théorie : comprendre les fondations",{"type":30,"tag":43,"props":275,"children":276},{},[277],{"type":40,"value":278},"Pour chaque session de pratique, assurez-vous de comprendre les concepts théoriques sous-jacents. Par exemple, si vous travaillez sur des algorithmes de tri, prenez le temps de lire ou revoir leurs principes. Pourquoi le tri rapide est-il souvent plus efficace que le tri par insertion ? Comprendre les nuances théoriques permet de mieux adapter les solutions dans des contextes variés.",{"type":30,"tag":43,"props":280,"children":281},{},[282,286],{"type":30,"tag":36,"props":283,"children":284},{},[285],{"type":40,"value":260},{"type":40,"value":287}," : Utilisez des ressources comme des livres, des tutoriels en ligne ou des conférences techniques pour renforcer vos connaissances théoriques. Fixez-vous comme objectif d’approfondir au moins un concept théorique chaque semaine.",{"type":30,"tag":116,"props":289,"children":291},{"id":290},"_3-appliquer-immédiatement-la-théorie",[292,294],{"type":40,"value":293},"3. ",{"type":30,"tag":36,"props":295,"children":296},{},[297],{"type":40,"value":298},"Appliquer immédiatement la théorie",{"type":30,"tag":43,"props":300,"children":301},{},[302],{"type":40,"value":303},"Dès que vous découvrez un nouveau concept, appliquez-le rapidement à un projet pratique. C’est une excellente manière de vous assurer que vous comprenez vraiment ce que vous avez appris. Si vous étudiez les structures de données, essayez de les implémenter dans un projet concret. L'application renforce non seulement votre pratique, mais ancre aussi la théorie dans des situations réelles.",{"type":30,"tag":43,"props":305,"children":306},{},[307,311],{"type":30,"tag":36,"props":308,"children":309},{},[310],{"type":40,"value":260},{"type":40,"value":312}," : Adoptez la méthode du \"projet par apprentissage\". Par exemple, créez une petite application où chaque fonctionnalité est dédiée à l'implémentation d'un concept théorique que vous avez appris.",{"type":30,"tag":116,"props":314,"children":316},{"id":315},"_4-revoir-et-améliorer",[317,319],{"type":40,"value":318},"4. ",{"type":30,"tag":36,"props":320,"children":321},{},[322],{"type":40,"value":323},"Revoir et améliorer",{"type":30,"tag":43,"props":325,"children":326},{},[327,329,336],{"type":40,"value":328},"Le perfectionnement passe par la révision. Relisez votre code, identifiez les erreurs, les inefficacités et trouvez comment l’améliorer. C’est aussi le moment idéal pour demander l’avis d’autres développeurs ou mentors. C’est là que le ",{"type":30,"tag":36,"props":330,"children":331},{},[332],{"type":30,"tag":75,"props":333,"children":334},{"href":77},[335],{"type":40,"value":80},{"type":40,"value":337}," intervient fortement, car l’artisanat implique une amélioration continue et le partage des connaissances.",{"type":30,"tag":43,"props":339,"children":340},{},[341,345,347,353],{"type":30,"tag":36,"props":342,"children":343},{},[344],{"type":40,"value":260},{"type":40,"value":346}," : Pratiquez régulièrement la ",{"type":30,"tag":75,"props":348,"children":350},{"href":349},"/fr/intelligence-artificielle/ia-code-review-retour-experience",[351],{"type":40,"value":352},"revue de code",{"type":40,"value":354}," avec des pairs, ou soumettez votre code à des communautés en ligne pour obtenir des retours constructifs.",{"type":30,"tag":116,"props":356,"children":358},{"id":357},"_5-suivre-les-progrès-et-ajuster",[359,361],{"type":40,"value":360},"5. ",{"type":30,"tag":36,"props":362,"children":363},{},[364],{"type":40,"value":365},"Suivre les progrès et ajuster",{"type":30,"tag":43,"props":367,"children":368},{},[369],{"type":40,"value":370},"Fixez-vous des objectifs à court et long terme. Avez-vous amélioré vos compétences en gestion d’erreurs ? Comprenez-vous mieux certains concepts théoriques comme les algorithmes ou les architectures de systèmes ? Ajustez vos méthodes en fonction de vos progrès. L’important est de rester flexible et d’adapter votre approche en fonction des compétences que vous souhaitez développer.",{"type":30,"tag":43,"props":372,"children":373},{},[374,378],{"type":30,"tag":36,"props":375,"children":376},{},[377],{"type":40,"value":260},{"type":40,"value":379}," : Tenez un journal d'apprentissage. Notez les concepts théoriques étudiés et les projets sur lesquels vous avez travaillé. Réfléchissez régulièrement à ce que vous avez appris et à la manière dont vous pouvez encore vous améliorer.",{"type":30,"tag":84,"props":381,"children":382},{},[],{"type":30,"tag":31,"props":384,"children":386},{"id":385},"conseils-pour-une-progression-constante",[387],{"type":30,"tag":36,"props":388,"children":389},{},[390],{"type":40,"value":391},"Conseils pour une progression constante",{"type":30,"tag":43,"props":393,"children":394},{},[395],{"type":40,"value":396},"Atteindre la maîtrise d'une compétence demande du temps et de la discipline, mais avec les bonnes stratégies, vous pouvez maintenir un rythme d'apprentissage régulier et efficace. Voici quelques conseils pour progresser de manière continue, sans tomber dans les pièges de la stagnation.",{"type":30,"tag":116,"props":398,"children":400},{"id":399},"_1-alterner-théorie-et-pratique",[401,402],{"type":40,"value":242},{"type":30,"tag":36,"props":403,"children":404},{},[405],{"type":40,"value":406},"Alterner théorie et pratique",{"type":30,"tag":43,"props":408,"children":409},{},[410],{"type":40,"value":411},"Vous pouvez facilement vous perdre dans la théorie ou vous enliser dans la pratique sans réfléchir. Pour éviter cela, imposez-vous un rythme régulier où vous alternez entre les deux. Par exemple, après avoir passé une semaine sur un projet pratique, consacrez quelques jours à l'étude de concepts théoriques. Cette alternance permet d’éviter la lassitude et d’ancrer les nouvelles compétences dans un contexte concret.",{"type":30,"tag":43,"props":413,"children":414},{},[415,419],{"type":30,"tag":36,"props":416,"children":417},{},[418],{"type":40,"value":260},{"type":40,"value":420}," : Planifiez vos sessions de travail de manière équilibrée. Un bon ratio pourrait être 70 % de pratique et 30 % de théorie, à adapter en fonction de vos besoins.",{"type":30,"tag":116,"props":422,"children":424},{"id":423},"_2-fixer-des-objectifs-clairs",[425,426],{"type":40,"value":268},{"type":30,"tag":36,"props":427,"children":428},{},[429],{"type":40,"value":430},"Fixer des objectifs clairs",{"type":30,"tag":43,"props":432,"children":433},{},[434],{"type":40,"value":435},"Le développement continu ne peut se faire sans une vision claire de ce que vous souhaitez accomplir. Je vous recommande de vous fixer des objectifs à court et long terme. Ces objectifs peuvent concerner une compétence spécifique à acquérir (comme la gestion des systèmes distribués) ou l’amélioration d’un domaine particulier (comme optimiser la performance de votre code).",{"type":30,"tag":43,"props":437,"children":438},{},[439,443],{"type":30,"tag":36,"props":440,"children":441},{},[442],{"type":40,"value":260},{"type":40,"value":444}," : Utilisez la méthode SMART (Spécifique, Mesurable, Atteignable, Réaliste, Temporellement défini) pour définir vos objectifs. Par exemple : \"Comprendre et implémenter trois algorithmes de tri dans les deux prochaines semaines.\"",{"type":30,"tag":116,"props":446,"children":448},{"id":447},"_3-rechercher-un-mentor-ou-une-communauté",[449,450],{"type":40,"value":293},{"type":30,"tag":36,"props":451,"children":452},{},[453],{"type":40,"value":454},"Rechercher un mentor ou une communauté",{"type":30,"tag":43,"props":456,"children":457},{},[458],{"type":40,"value":459},"L’apprentissage en solitaire a ses limites. Trouver un mentor ou intégrer une communauté de développeurs permet d'accélérer votre progression. Un mentor peut vous guider, corriger vos erreurs, et vous proposer des perspectives que vous n’auriez pas envisagées. De plus, échanger avec des pairs dans une communauté vous expose à de nouvelles idées et pratiques.",{"type":30,"tag":43,"props":461,"children":462},{},[463,467],{"type":30,"tag":36,"props":464,"children":465},{},[466],{"type":40,"value":260},{"type":40,"value":468}," : Participez à des meetups, rejoignez des forums en ligne, ou sollicitez un développeur plus expérimenté pour des retours réguliers sur votre code.",{"type":30,"tag":116,"props":470,"children":472},{"id":471},"_4-adopter-une-mentalité-de-croissance",[473,474],{"type":40,"value":318},{"type":30,"tag":36,"props":475,"children":476},{},[477],{"type":40,"value":478},"Adopter une mentalité de croissance",{"type":30,"tag":43,"props":480,"children":481},{},[482],{"type":40,"value":483},"Les erreurs ne sont pas des échecs, mais des opportunités d'apprentissage. Pour progresser continuellement, vous devez adopter une mentalité de croissance, où chaque obstacle ou difficulté est perçu comme un moyen de s’améliorer. C'est en apprenant de vos erreurs que vous affinerez vos compétences.",{"type":30,"tag":43,"props":485,"children":486},{},[487,491],{"type":30,"tag":36,"props":488,"children":489},{},[490],{"type":40,"value":260},{"type":40,"value":492}," : Lorsque vous rencontrez une difficulté, prenez le temps de réfléchir à ce qui a posé problème et comment vous pouvez éviter cette situation à l'avenir. Prenez l’habitude de célébrer vos petites victoires aussi !",{"type":30,"tag":116,"props":494,"children":496},{"id":495},"_5-sauto-évaluer-régulièrement",[497,498],{"type":40,"value":360},{"type":30,"tag":36,"props":499,"children":500},{},[501],{"type":40,"value":502},"S’auto-évaluer régulièrement",{"type":30,"tag":43,"props":504,"children":505},{},[506],{"type":40,"value":507},"Prenez du recul pour évaluer vos progrès régulièrement. Il peut être difficile de voir vos améliorations au quotidien, mais en prenant le temps de faire un bilan hebdomadaire ou mensuel, vous pouvez mieux identifier les domaines où vous avez avancé et ceux où vous avez besoin de plus de travail. Cela vous permet également d’ajuster votre méthode d’apprentissage si nécessaire.",{"type":30,"tag":43,"props":509,"children":510},{},[511,515],{"type":30,"tag":36,"props":512,"children":513},{},[514],{"type":40,"value":260},{"type":40,"value":516}," : À la fin de chaque mois, faites une liste des concepts que vous avez appris et des projets sur lesquels vous avez travaillé. Identifiez ce qui a bien fonctionné et ce qui peut être amélioré.",{"type":30,"tag":84,"props":518,"children":519},{},[],{"type":30,"tag":31,"props":521,"children":523},{"id":522},"faq-sur-la-loi-de-norvig-et-le-software-craftsmanship",[524],{"type":30,"tag":36,"props":525,"children":526},{},[527],{"type":40,"value":528},"FAQ sur la Loi de Norvig et le Software Craftsmanship",{"type":30,"tag":530,"props":531,"children":532},"details",{},[533,539],{"type":30,"tag":534,"props":535,"children":536},"summary",{},[537],{"type":40,"value":538},"1. Qu’est-ce que la Loi de Norvig sur la pratique et la théorie ?",{"type":30,"tag":43,"props":540,"children":541},{},[542],{"type":40,"value":543},"La Loi de Norvig, formulée par Peter Norvig, stipule qu’il faut environ dix ans pour maîtriser une compétence complexe comme la programmation. Cette maîtrise ne repose pas uniquement sur la pratique répétée, mais aussi sur une compréhension profonde des concepts théoriques. En d’autres termes, la pratique doit être soutenue par une étude continue des principes sous-jacents.",{"type":30,"tag":530,"props":545,"children":546},{},[547,552],{"type":30,"tag":534,"props":548,"children":549},{},[550],{"type":40,"value":551},"2. Pourquoi la théorie est-elle aussi importante que la pratique ?",{"type":30,"tag":43,"props":553,"children":554},{},[555],{"type":40,"value":556},"La théorie fournit le cadre nécessaire pour comprendre ce que vous faites en pratique. Sans une bonne compréhension théorique, vous pourriez simplement appliquer des solutions sans savoir pourquoi elles fonctionnent, ce qui limite votre capacité à innover ou à résoudre des problèmes plus complexes. C’est en comprenant les principes théoriques que vous pouvez adapter et améliorer vos pratiques.",{"type":30,"tag":530,"props":558,"children":559},{},[560,565],{"type":30,"tag":534,"props":561,"children":562},{},[563],{"type":40,"value":564},"3. En quoi la Loi de Norvig se distingue-t-elle du software craftsmanship ?",{"type":30,"tag":43,"props":566,"children":567},{},[568,569,573,575,579],{"type":40,"value":52},{"type":30,"tag":36,"props":570,"children":571},{},[572],{"type":40,"value":57},{"type":40,"value":574}," met l’accent sur l’équilibre entre la théorie et la pratique pour atteindre la maîtrise, tandis que le ",{"type":30,"tag":36,"props":576,"children":577},{},[578],{"type":40,"value":80},{"type":40,"value":580}," se concentre davantage sur l’amélioration continue du code et la qualité du travail via la pratique, la collaboration et le mentorat. Les deux approches sont complémentaires : la Loi de Norvig vous aide à structurer votre apprentissage, tandis que le software craftsmanship vous pousse à adopter une mentalité de développeur-artisan, soucieux de la qualité du code.",{"type":30,"tag":530,"props":582,"children":583},{},[584,589],{"type":30,"tag":534,"props":585,"children":586},{},[587],{"type":40,"value":588},"4. Comment puis-je appliquer la Loi de Norvig dans mon travail quotidien ?",{"type":30,"tag":43,"props":590,"children":591},{},[592],{"type":40,"value":593},"Vous pouvez appliquer cette loi en structurant votre apprentissage de manière à alterner entre des périodes de pratique (où vous résolvez des problèmes concrets) et des périodes d’étude (où vous approfondissez les concepts théoriques liés à votre pratique). Assurez-vous que chaque session de pratique est intentionnelle et liée à un concept théorique que vous souhaitez maîtriser.",{"type":30,"tag":530,"props":595,"children":596},{},[597,602],{"type":30,"tag":534,"props":598,"children":599},{},[600],{"type":40,"value":601},"5. Est-ce que pratiquer sans cesse suffit pour devenir un meilleur développeur ?",{"type":30,"tag":43,"props":603,"children":604},{},[605],{"type":40,"value":606},"Non, la pratique seule ne suffit pas. Sans la théorie, vous risquez de développer de mauvaises habitudes ou de vous limiter à des solutions que vous comprenez mal. C’est en combinant la pratique régulière avec l’étude des fondements théoriques que vous allez réellement progresser.",{"type":30,"tag":530,"props":608,"children":609},{},[610,615],{"type":30,"tag":534,"props":611,"children":612},{},[613],{"type":40,"value":614},"6. Comment éviter de me perdre dans la théorie sans fin ?",{"type":30,"tag":43,"props":616,"children":617},{},[618],{"type":40,"value":619},"Le secret est d’appliquer immédiatement ce que vous apprenez. Dès que vous étudiez un concept théorique, trouvez un moyen de l’appliquer dans un projet pratique. Cela vous permet de renforcer vos connaissances et d’éviter de rester bloqué dans l’abstraction. Le tout est de toujours équilibrer théorie et pratique.",{"type":30,"tag":530,"props":621,"children":622},{},[623,628],{"type":30,"tag":534,"props":624,"children":625},{},[626],{"type":40,"value":627},"7. Quels outils ou ressources puis-je utiliser pour suivre ce plan d’action ?",{"type":30,"tag":43,"props":629,"children":630},{},[631],{"type":40,"value":632},"Vous pouvez utiliser des livres techniques, des tutoriels en ligne, des cours sur des plateformes comme Coursera ou Udemy pour étudier la théorie. Côté pratique, travaillez sur des projets personnels, participez à des challenges de code (comme ceux proposés par LeetCode ou HackerRank), et rejoignez des communautés de développeurs pour des revues de code et des échanges.",{"type":30,"tag":84,"props":634,"children":635},{},[],{"type":30,"tag":211,"props":637,"children":642},{"cta":638,"href":639,"title":640,"type":641},"Télécharger la checklist gratuite →","/mes-ressources","Ressource gratuite : Votre équipe est-elle vraiment prête pour l'IA ?","resource",[643],{"type":30,"tag":43,"props":644,"children":645},{},[646],{"type":40,"value":647},"25 questions, 5 dimensions, score de maturité IA sur 25. La maîtrise technique est la fondation de l'adoption de l'IA — identifiez vos 3 gaps critiques avant de scaler vos outils.",{"type":30,"tag":84,"props":649,"children":650},{},[],{"type":30,"tag":43,"props":652,"children":653},{},[654],{"type":30,"tag":36,"props":655,"children":656},{},[657],{"type":40,"value":658},"Vous voulez savoir où en est vraiment votre équipe ?",{"type":30,"tag":43,"props":660,"children":661},{},[662],{"type":40,"value":663},"Téléchargez le template d'audit Engineering Health Report, un outil structuré pour diagnostiquer la qualité de votre code, votre couverture de tests et votre niveau de dette technique en moins d'une heure.",{"type":30,"tag":43,"props":665,"children":666},{},[667,669],{"type":40,"value":668},"→ ",{"type":30,"tag":36,"props":670,"children":671},{},[672],{"type":40,"value":673},"Téléchargez le template d'audit",{"title":8,"searchDepth":675,"depth":675,"links":676},2,[677,678,684,696,708],{"id":33,"depth":675,"text":41},{"id":89,"depth":675,"text":95,"children":679},[680,682,683],{"id":118,"depth":681,"text":124},3,{"id":132,"depth":681,"text":138},{"id":155,"depth":681,"text":161},{"id":225,"depth":675,"text":231,"children":685},[686,688,690,692,694],{"id":239,"depth":681,"text":687},"1. Pratique délibérée : coder avec un but précis",{"id":265,"depth":681,"text":689},"2. Étudier la théorie : comprendre les fondations",{"id":290,"depth":681,"text":691},"3. Appliquer immédiatement la théorie",{"id":315,"depth":681,"text":693},"4. Revoir et améliorer",{"id":357,"depth":681,"text":695},"5. Suivre les progrès et ajuster",{"id":385,"depth":675,"text":391,"children":697},[698,700,702,704,706],{"id":399,"depth":681,"text":699},"1. Alterner théorie et pratique",{"id":423,"depth":681,"text":701},"2. Fixer des objectifs clairs",{"id":447,"depth":681,"text":703},"3. Rechercher un mentor ou une communauté",{"id":471,"depth":681,"text":705},"4. Adopter une mentalité de croissance",{"id":495,"depth":681,"text":707},"5. S’auto-évaluer régulièrement",{"id":522,"depth":675,"text":528},"markdown","content:fr:dette-technique:loi-norvig-maitrise-theorie-pratique.md","content","fr/dette-technique/loi-norvig-maitrise-theorie-pratique.md","fr/dette-technique/loi-norvig-maitrise-theorie-pratique","md",{"_path":716,"_dir":717,"_draft":7,"_partial":7,"_locale":8,"title":718,"description":719,"id":720,"date":721,"listed":13,"nocomments":7,"hidden":7,"categories":722,"tags":724,"--cover":727,"readingTime":728,"body":733,"_type":709,"_id":6485,"_source":711,"_file":6486,"_stem":6487,"_extension":714},"/fr/architecture-craft/decomposer-monolithe-microservices-ddd-api-hexagonal-java","architecture-craft","Décomposer un Monolithe en Microservices avec DDD, API First et Architecture Hexagonale","Découvrez comment transformer votre monolithe en microservices grâce au Domain-Driven Design (DDD), à l’approche API First et à l’architecture hexagonale...",57,"2024-08-23",[723],"architecture-logicielle-et-software-craftsmanship",[725,726],"Architecture logicielle","Software craftsmanship","covers/articles/monolithe-to-microservice.jpg",{"text":729,"minutes":730,"time":731,"words":732},"14 min read",13.935,836100,2787,{"type":27,"children":734,"toc":6461},[735,744,749,761,787,792,836,848,851,860,894,903,914,919,952,963,1008,1017,1029,1034,1424,1429,1445,1448,1463,1472,1496,1505,1517,1551,1614,1623,1635,2173,2178,2206,2217,2233,2238,2249,2252,2261,2280,2292,2301,2306,2338,2348,2353,2386,2395,2406,2418,2715,2727,3115,3127,3454,3484,3487,3496,3508,3517,3528,3546,3556,3979,3988,3999,4825,4834,5269,5281,5290,6176,6199,6202,6211,6216,6239,6247,6286,6297,6330,6333,6342,6366,6393,6413,6432,6445,6455],{"type":30,"tag":31,"props":736,"children":738},{"id":737},"introduction-pourquoi-décomposer-un-monolithe",[739],{"type":30,"tag":36,"props":740,"children":741},{},[742],{"type":40,"value":743},"Introduction : Pourquoi décomposer un monolithe ?",{"type":30,"tag":43,"props":745,"children":746},{},[747],{"type":40,"value":748},"Mise en situation : vous travaillez sur une énorme application monolithique, chaque nouvelle fonctionnalité vous donne des sueurs froides, et chaque déploiement ressemble à une roulette russe. Vous corrigez un bug ici, et hop, trois autres apparaissent là-bas. Le pire, c’est que tout est tellement entremêlé que même changer une ligne de code peut entraîner la chute de l’application entière. C’est exactement ce que j’ai observé dans plusieurs grandes équipes que j’accompagnais, notamment dans le secteur bancaire et dans les médias.",{"type":30,"tag":43,"props":750,"children":751},{},[752,754,759],{"type":40,"value":753},"Le problème ? Votre application est devenue un monstre indomptable, et il est peut-être temps de lui donner une bonne cure de ",{"type":30,"tag":36,"props":755,"children":756},{},[757],{"type":40,"value":758},"microservices",{"type":40,"value":760},". Mais casser un monolithe en petits services indépendants peut sembler risqué, non ? Après tout, personne ne veut transformer un monstre en une centaine de petits monstres incontrôlables.",{"type":30,"tag":43,"props":762,"children":763},{},[764,766,771,773,778,780,785],{"type":40,"value":765},"Ce n’est pas la peine de tout casser à l’aveugle. Avec les bonnes méthodes, vous pouvez diviser intelligemment votre monolithe en microservices. C’est là qu’interviennent des concepts comme le ",{"type":30,"tag":36,"props":767,"children":768},{},[769],{"type":40,"value":770},"Domain-Driven Design (DDD)",{"type":40,"value":772},", l’approche ",{"type":30,"tag":36,"props":774,"children":775},{},[776],{"type":40,"value":777},"API First",{"type":40,"value":779}," et l’",{"type":30,"tag":36,"props":781,"children":782},{},[783],{"type":40,"value":784},"architecture hexagonale",{"type":40,"value":786},". Ces outils vous permettront de ne pas simplement découper au hasard, mais de structurer vos microservices autour des vrais besoins métiers, de les exposer proprement et de les organiser pour qu’ils restent faciles à maintenir.",{"type":30,"tag":43,"props":788,"children":789},{},[790],{"type":40,"value":791},"Dans cet article, vous allez apprendre à :",{"type":30,"tag":163,"props":793,"children":794},{},[795,814,825],{"type":30,"tag":167,"props":796,"children":797},{},[798,800,805,807,812],{"type":40,"value":799},"Utiliser le ",{"type":30,"tag":36,"props":801,"children":802},{},[803],{"type":40,"value":804},"DDD",{"type":40,"value":806}," pour identifier les ",{"type":30,"tag":36,"props":808,"children":809},{},[810],{"type":40,"value":811},"Bounded Contexts",{"type":40,"value":813}," et structurer vos services autour des besoins réels.",{"type":30,"tag":167,"props":815,"children":816},{},[817,819,823],{"type":40,"value":818},"Concevoir des APIs propres avec l’approche ",{"type":30,"tag":36,"props":820,"children":821},{},[822],{"type":40,"value":777},{"type":40,"value":824},", pour exposer et consommer des services bien pensés dès le départ.",{"type":30,"tag":167,"props":826,"children":827},{},[828,830,834],{"type":40,"value":829},"Structurer votre projet avec l’",{"type":30,"tag":36,"props":831,"children":832},{},[833],{"type":40,"value":784},{"type":40,"value":835}," pour bien séparer les responsabilités entre application, domaine et infrastructure.",{"type":30,"tag":43,"props":837,"children":838},{},[839,841,846],{"type":40,"value":840},"Je vais vous montrer comment tout ça fonctionne avec des exemples concrets en ",{"type":30,"tag":36,"props":842,"children":843},{},[844],{"type":40,"value":845},"Java",{"type":40,"value":847},", et vous expliquer comment éviter les pièges que j’ai vus se répéter dans des dizaines d’équipes lors de ces migrations.",{"type":30,"tag":84,"props":849,"children":850},{},[],{"type":30,"tag":31,"props":852,"children":854},{"id":853},"domain-driven-design-ddd-concentrons-nous-sur-les-besoins-métier",[855],{"type":30,"tag":36,"props":856,"children":857},{},[858],{"type":40,"value":859},"Domain-Driven Design (DDD) : Concentrons-nous sur les besoins métier",{"type":30,"tag":43,"props":861,"children":862},{},[863,864,869,871,877,879,884,886,892],{"type":40,"value":143},{"type":30,"tag":36,"props":865,"children":866},{},[867],{"type":40,"value":868},"Domain-Driven Design",{"type":40,"value":870}," (ou DDD pour les intimes, formalisé par Eric Evans dans son ouvrage \"Domain-Driven Design\") est souvent vu comme une approche compliquée, pleine de jargon. Sam Newman, dans ",{"type":30,"tag":872,"props":873,"children":874},"em",{},[875],{"type":40,"value":876},"Building Microservices",{"type":40,"value":878},", complète ce cadre en expliquant comment les Bounded Contexts DDD deviennent les frontières naturelles de vos services. Mais en réalité, c’est un excellent moyen de structurer vos microservices autour des ",{"type":30,"tag":36,"props":880,"children":881},{},[882],{"type":40,"value":883},"vrais",{"type":40,"value":885}," besoins métier de votre application. Pour modéliser ces domaines avec les équipes, l’",{"type":30,"tag":75,"props":887,"children":889},{"href":888},"/fr/architecture-craft/event-storming-atelier-modelisation",[890],{"type":40,"value":891},"atelier Event Storming",{"type":40,"value":893}," est l’outil le plus efficace que j’aie utilisé en mission. C’est bien mieux que de découper un monolithe au hasard.",{"type":30,"tag":116,"props":895,"children":897},{"id":896},"le-principe-des-bounded-contexts-où-commencer",[898],{"type":30,"tag":36,"props":899,"children":900},{},[901],{"type":40,"value":902},"Le principe des Bounded Contexts : où commencer ?",{"type":30,"tag":43,"props":904,"children":905},{},[906,908,912],{"type":40,"value":907},"Le DDD repose sur une idée simple : votre application représente plusieurs domaines fonctionnels, et chacun de ces domaines peut avoir des règles, des comportements et des modèles de données spécifiques. Pour bien découper votre monolithe, il faut donc commencer par identifier ces ",{"type":30,"tag":36,"props":909,"children":910},{},[911],{"type":40,"value":811},{"type":40,"value":913}," (c'est-à-dire les frontières logiques où chaque microservice va évoluer).",{"type":30,"tag":43,"props":915,"children":916},{},[917],{"type":40,"value":918},"Par exemple, dans une application de gestion commerciale, vous pourriez avoir plusieurs domaines comme :",{"type":30,"tag":163,"props":920,"children":921},{},[922,932,942],{"type":30,"tag":167,"props":923,"children":924},{},[925,930],{"type":30,"tag":36,"props":926,"children":927},{},[928],{"type":40,"value":929},"Catalogue produit",{"type":40,"value":931}," : gérer les produits, les catégories, les descriptions.",{"type":30,"tag":167,"props":933,"children":934},{},[935,940],{"type":30,"tag":36,"props":936,"children":937},{},[938],{"type":40,"value":939},"Panier et commande",{"type":40,"value":941}," : gérer les paniers d’achats, les commandes, les paiements.",{"type":30,"tag":167,"props":943,"children":944},{},[945,950],{"type":30,"tag":36,"props":946,"children":947},{},[948],{"type":40,"value":949},"Gestion des utilisateurs",{"type":40,"value":951}," : gérer les comptes, les profils, les adresses.",{"type":30,"tag":43,"props":953,"children":954},{},[955,957,961],{"type":40,"value":956},"Chaque domaine est indépendant (ou presque) et correspondra à un microservice. Ces ",{"type":30,"tag":36,"props":958,"children":959},{},[960],{"type":40,"value":811},{"type":40,"value":962}," définissent les limites de chaque service et empêchent les données de s’entremêler.",{"type":30,"tag":964,"props":965,"children":966},"blockquote",{},[967,975],{"type":30,"tag":43,"props":968,"children":969},{},[970],{"type":30,"tag":36,"props":971,"children":972},{},[973],{"type":40,"value":974},"Tip : Comment bien choisir vos Bounded Contexts ?",{"type":30,"tag":163,"props":976,"children":977},{},[978,988,998],{"type":30,"tag":167,"props":979,"children":980},{},[981,986],{"type":30,"tag":36,"props":982,"children":983},{},[984],{"type":40,"value":985},"Pensez métier",{"type":40,"value":987}," : Les développeurs aiment souvent découper en fonction du code, mais pensez avant tout en termes de besoins métier. Quels sont les domaines fonctionnels qui ne se mélangent pas ?",{"type":30,"tag":167,"props":989,"children":990},{},[991,996],{"type":30,"tag":36,"props":992,"children":993},{},[994],{"type":40,"value":995},"Évitez la sur-segmentation",{"type":40,"value":997}," : Si vous découpez trop finement, vous risquez d’avoir des microservices qui font très peu de choses mais dépendent énormément des autres, ce qui est un cauchemar à gérer.",{"type":30,"tag":167,"props":999,"children":1000},{},[1001,1006],{"type":30,"tag":36,"props":1002,"children":1003},{},[1004],{"type":40,"value":1005},"Testez vos hypothèses",{"type":40,"value":1007}," : Je vous recommande de discuter avec les équipes produit ou métier pour valider vos choix. Si une partie du code concerne des règles spécifiques à un domaine fonctionnel, vous êtes probablement sur la bonne voie.",{"type":30,"tag":116,"props":1009,"children":1011},{"id":1010},"exemple-en-java-structurer-un-service-autour-dun-bounded-context",[1012],{"type":30,"tag":36,"props":1013,"children":1014},{},[1015],{"type":40,"value":1016},"Exemple en Java : Structurer un service autour d'un Bounded Context",{"type":30,"tag":43,"props":1018,"children":1019},{},[1020,1022,1027],{"type":40,"value":1021},"Prenons l'exemple d'un service de gestion de ",{"type":30,"tag":36,"props":1023,"children":1024},{},[1025],{"type":40,"value":1026},"panier",{"type":40,"value":1028}," dans une application de commande.",{"type":30,"tag":43,"props":1030,"children":1031},{},[1032],{"type":40,"value":1033},"Vous pouvez structurer votre projet Java autour de ce Bounded Context de cette manière :",{"type":30,"tag":1035,"props":1036,"children":1040},"pre",{"code":1037,"language":1038,"meta":8,"className":1039,"style":8},"public class Cart {\n    private List\u003CItem> items;\n\n    public void addItem(Item item) {\n        items.add(item);\n    }\n\n    public void removeItem(Item item) {\n        items.remove(item);\n    }\n\n    public double calculateTotal() {\n        return items.stream()\n            .mapToDouble(Item::getPrice)\n            .sum();\n    }\n}\n","java","language-java shiki shiki-themes catppuccin-frappe github-dark",[1041],{"type":30,"tag":1042,"props":1043,"children":1044},"code",{"__ignoreMap":8},[1045,1074,1114,1122,1166,1199,1208,1216,1253,1282,1290,1298,1325,1352,1389,1407,1415],{"type":30,"tag":1046,"props":1047,"children":1050},"span",{"class":1048,"line":1049},"line",1,[1051,1057,1062,1068],{"type":30,"tag":1046,"props":1052,"children":1054},{"style":1053},"--shiki-default:#CA9EE6;--shiki-dark:#F97583",[1055],{"type":40,"value":1056},"public",{"type":30,"tag":1046,"props":1058,"children":1059},{"style":1053},[1060],{"type":40,"value":1061}," class",{"type":30,"tag":1046,"props":1063,"children":1065},{"style":1064},"--shiki-default:#E5C890;--shiki-default-font-style:italic;--shiki-dark:#B392F0;--shiki-dark-font-style:inherit",[1066],{"type":40,"value":1067}," Cart",{"type":30,"tag":1046,"props":1069,"children":1071},{"style":1070},"--shiki-default:#949CBB;--shiki-dark:#E1E4E8",[1072],{"type":40,"value":1073}," {\n",{"type":30,"tag":1046,"props":1075,"children":1076},{"class":1048,"line":675},[1077,1082,1088,1093,1098,1103,1109],{"type":30,"tag":1046,"props":1078,"children":1079},{"style":1053},[1080],{"type":40,"value":1081},"    private",{"type":30,"tag":1046,"props":1083,"children":1085},{"style":1084},"--shiki-default:#CA9EE6;--shiki-dark:#E1E4E8",[1086],{"type":40,"value":1087}," List",{"type":30,"tag":1046,"props":1089,"children":1090},{"style":1070},[1091],{"type":40,"value":1092},"\u003C",{"type":30,"tag":1046,"props":1094,"children":1095},{"style":1053},[1096],{"type":40,"value":1097},"Item",{"type":30,"tag":1046,"props":1099,"children":1100},{"style":1070},[1101],{"type":40,"value":1102},">",{"type":30,"tag":1046,"props":1104,"children":1106},{"style":1105},"--shiki-default:#C6D0F5;--shiki-dark:#E1E4E8",[1107],{"type":40,"value":1108}," items",{"type":30,"tag":1046,"props":1110,"children":1111},{"style":1070},[1112],{"type":40,"value":1113},";\n",{"type":30,"tag":1046,"props":1115,"children":1116},{"class":1048,"line":681},[1117],{"type":30,"tag":1046,"props":1118,"children":1119},{"emptyLinePlaceholder":13},[1120],{"type":40,"value":1121},"\n",{"type":30,"tag":1046,"props":1123,"children":1125},{"class":1048,"line":1124},4,[1126,1131,1136,1142,1147,1151,1157,1162],{"type":30,"tag":1046,"props":1127,"children":1128},{"style":1053},[1129],{"type":40,"value":1130},"    public",{"type":30,"tag":1046,"props":1132,"children":1133},{"style":1053},[1134],{"type":40,"value":1135}," void",{"type":30,"tag":1046,"props":1137,"children":1139},{"style":1138},"--shiki-default:#8CAAEE;--shiki-default-font-style:italic;--shiki-dark:#B392F0;--shiki-dark-font-style:inherit",[1140],{"type":40,"value":1141}," addItem",{"type":30,"tag":1046,"props":1143,"children":1144},{"style":1070},[1145],{"type":40,"value":1146},"(",{"type":30,"tag":1046,"props":1148,"children":1149},{"style":1084},[1150],{"type":40,"value":1097},{"type":30,"tag":1046,"props":1152,"children":1154},{"style":1153},"--shiki-default:#EA999C;--shiki-default-font-style:italic;--shiki-dark:#FFAB70;--shiki-dark-font-style:inherit",[1155],{"type":40,"value":1156}," item",{"type":30,"tag":1046,"props":1158,"children":1159},{"style":1070},[1160],{"type":40,"value":1161},")",{"type":30,"tag":1046,"props":1163,"children":1164},{"style":1070},[1165],{"type":40,"value":1073},{"type":30,"tag":1046,"props":1167,"children":1169},{"class":1048,"line":1168},5,[1170,1175,1180,1185,1189,1194],{"type":30,"tag":1046,"props":1171,"children":1172},{"style":1105},[1173],{"type":40,"value":1174},"        items",{"type":30,"tag":1046,"props":1176,"children":1177},{"style":1070},[1178],{"type":40,"value":1179},".",{"type":30,"tag":1046,"props":1181,"children":1182},{"style":1138},[1183],{"type":40,"value":1184},"add",{"type":30,"tag":1046,"props":1186,"children":1187},{"style":1070},[1188],{"type":40,"value":1146},{"type":30,"tag":1046,"props":1190,"children":1191},{"style":1105},[1192],{"type":40,"value":1193},"item",{"type":30,"tag":1046,"props":1195,"children":1196},{"style":1070},[1197],{"type":40,"value":1198},");\n",{"type":30,"tag":1046,"props":1200,"children":1202},{"class":1048,"line":1201},6,[1203],{"type":30,"tag":1046,"props":1204,"children":1205},{"style":1070},[1206],{"type":40,"value":1207},"    }\n",{"type":30,"tag":1046,"props":1209,"children":1211},{"class":1048,"line":1210},7,[1212],{"type":30,"tag":1046,"props":1213,"children":1214},{"emptyLinePlaceholder":13},[1215],{"type":40,"value":1121},{"type":30,"tag":1046,"props":1217,"children":1219},{"class":1048,"line":1218},8,[1220,1224,1228,1233,1237,1241,1245,1249],{"type":30,"tag":1046,"props":1221,"children":1222},{"style":1053},[1223],{"type":40,"value":1130},{"type":30,"tag":1046,"props":1225,"children":1226},{"style":1053},[1227],{"type":40,"value":1135},{"type":30,"tag":1046,"props":1229,"children":1230},{"style":1138},[1231],{"type":40,"value":1232}," removeItem",{"type":30,"tag":1046,"props":1234,"children":1235},{"style":1070},[1236],{"type":40,"value":1146},{"type":30,"tag":1046,"props":1238,"children":1239},{"style":1084},[1240],{"type":40,"value":1097},{"type":30,"tag":1046,"props":1242,"children":1243},{"style":1153},[1244],{"type":40,"value":1156},{"type":30,"tag":1046,"props":1246,"children":1247},{"style":1070},[1248],{"type":40,"value":1161},{"type":30,"tag":1046,"props":1250,"children":1251},{"style":1070},[1252],{"type":40,"value":1073},{"type":30,"tag":1046,"props":1254,"children":1256},{"class":1048,"line":1255},9,[1257,1261,1265,1270,1274,1278],{"type":30,"tag":1046,"props":1258,"children":1259},{"style":1105},[1260],{"type":40,"value":1174},{"type":30,"tag":1046,"props":1262,"children":1263},{"style":1070},[1264],{"type":40,"value":1179},{"type":30,"tag":1046,"props":1266,"children":1267},{"style":1138},[1268],{"type":40,"value":1269},"remove",{"type":30,"tag":1046,"props":1271,"children":1272},{"style":1070},[1273],{"type":40,"value":1146},{"type":30,"tag":1046,"props":1275,"children":1276},{"style":1105},[1277],{"type":40,"value":1193},{"type":30,"tag":1046,"props":1279,"children":1280},{"style":1070},[1281],{"type":40,"value":1198},{"type":30,"tag":1046,"props":1283,"children":1285},{"class":1048,"line":1284},10,[1286],{"type":30,"tag":1046,"props":1287,"children":1288},{"style":1070},[1289],{"type":40,"value":1207},{"type":30,"tag":1046,"props":1291,"children":1293},{"class":1048,"line":1292},11,[1294],{"type":30,"tag":1046,"props":1295,"children":1296},{"emptyLinePlaceholder":13},[1297],{"type":40,"value":1121},{"type":30,"tag":1046,"props":1299,"children":1301},{"class":1048,"line":1300},12,[1302,1306,1311,1316,1321],{"type":30,"tag":1046,"props":1303,"children":1304},{"style":1053},[1305],{"type":40,"value":1130},{"type":30,"tag":1046,"props":1307,"children":1308},{"style":1053},[1309],{"type":40,"value":1310}," double",{"type":30,"tag":1046,"props":1312,"children":1313},{"style":1138},[1314],{"type":40,"value":1315}," calculateTotal",{"type":30,"tag":1046,"props":1317,"children":1318},{"style":1070},[1319],{"type":40,"value":1320},"()",{"type":30,"tag":1046,"props":1322,"children":1323},{"style":1070},[1324],{"type":40,"value":1073},{"type":30,"tag":1046,"props":1326,"children":1328},{"class":1048,"line":1327},13,[1329,1334,1338,1342,1347],{"type":30,"tag":1046,"props":1330,"children":1331},{"style":1053},[1332],{"type":40,"value":1333},"        return",{"type":30,"tag":1046,"props":1335,"children":1336},{"style":1105},[1337],{"type":40,"value":1108},{"type":30,"tag":1046,"props":1339,"children":1340},{"style":1070},[1341],{"type":40,"value":1179},{"type":30,"tag":1046,"props":1343,"children":1344},{"style":1138},[1345],{"type":40,"value":1346},"stream",{"type":30,"tag":1046,"props":1348,"children":1349},{"style":1070},[1350],{"type":40,"value":1351},"()\n",{"type":30,"tag":1046,"props":1353,"children":1355},{"class":1048,"line":1354},14,[1356,1361,1366,1370,1374,1379,1384],{"type":30,"tag":1046,"props":1357,"children":1358},{"style":1070},[1359],{"type":40,"value":1360},"            .",{"type":30,"tag":1046,"props":1362,"children":1363},{"style":1138},[1364],{"type":40,"value":1365},"mapToDouble",{"type":30,"tag":1046,"props":1367,"children":1368},{"style":1070},[1369],{"type":40,"value":1146},{"type":30,"tag":1046,"props":1371,"children":1372},{"style":1105},[1373],{"type":40,"value":1097},{"type":30,"tag":1046,"props":1375,"children":1376},{"style":1053},[1377],{"type":40,"value":1378},"::",{"type":30,"tag":1046,"props":1380,"children":1381},{"style":1105},[1382],{"type":40,"value":1383},"getPrice",{"type":30,"tag":1046,"props":1385,"children":1386},{"style":1070},[1387],{"type":40,"value":1388},")\n",{"type":30,"tag":1046,"props":1390,"children":1392},{"class":1048,"line":1391},15,[1393,1397,1402],{"type":30,"tag":1046,"props":1394,"children":1395},{"style":1070},[1396],{"type":40,"value":1360},{"type":30,"tag":1046,"props":1398,"children":1399},{"style":1138},[1400],{"type":40,"value":1401},"sum",{"type":30,"tag":1046,"props":1403,"children":1404},{"style":1070},[1405],{"type":40,"value":1406},"();\n",{"type":30,"tag":1046,"props":1408,"children":1410},{"class":1048,"line":1409},16,[1411],{"type":30,"tag":1046,"props":1412,"children":1413},{"style":1070},[1414],{"type":40,"value":1207},{"type":30,"tag":1046,"props":1416,"children":1418},{"class":1048,"line":1417},17,[1419],{"type":30,"tag":1046,"props":1420,"children":1421},{"style":1070},[1422],{"type":40,"value":1423},"}\n",{"type":30,"tag":43,"props":1425,"children":1426},{},[1427],{"type":40,"value":1428},"Ce service s'occupe exclusivement de la gestion du panier, et ne doit pas se préoccuper des autres parties de l’application comme la gestion des produits ou des utilisateurs. En appliquant ce découpage DDD, on s'assure que chaque service est bien isolé autour d'un besoin métier spécifique.",{"type":30,"tag":964,"props":1430,"children":1431},{},[1432,1440],{"type":30,"tag":43,"props":1433,"children":1434},{},[1435],{"type":30,"tag":36,"props":1436,"children":1437},{},[1438],{"type":40,"value":1439},"Alerte : Ne vous éparpillez pas !",{"type":30,"tag":43,"props":1441,"children":1442},{},[1443],{"type":40,"value":1444},"Assurez-vous de ne pas découper trop finement, au risque de créer des services trop petits qui multiplient les dépendances entre eux. Restez concentré sur des domaines bien définis.",{"type":30,"tag":84,"props":1446,"children":1447},{},[],{"type":30,"tag":211,"props":1449,"children":1452},{"cta":1450,"href":214,"title":1451,"type":216},"Réserver mon appel stratégique gratuit →","Votre monolithe bloque vos déploiements et étouffe votre vélocité ?",[1453,1458],{"type":30,"tag":43,"props":1454,"children":1455},{},[1456],{"type":40,"value":1457},"Chaque release est un moment de stress, votre time-to-market décroche face à la concurrence, et les développeurs passent plus de temps à gérer les risques de régression qu'à créer de la valeur ? La migration vers les microservices est urgente, mais la peur de tout casser paralyse l'équipe.",{"type":30,"tag":43,"props":1459,"children":1460},{},[1461],{"type":40,"value":1462},"Réservons 30 minutes pour évaluer votre situation et construire une stratégie de migration progressive qui ne met pas en danger la production.",{"type":30,"tag":31,"props":1464,"children":1466},{"id":1465},"api-first-limportance-dexposer-et-de-consommer-correctement-vos-apis",[1467],{"type":30,"tag":36,"props":1468,"children":1469},{},[1470],{"type":40,"value":1471},"API First : L'importance d'exposer et de consommer correctement vos APIs",{"type":30,"tag":43,"props":1473,"children":1474},{},[1475,1477,1481,1483,1487,1489,1494],{"type":40,"value":1476},"Maintenant que vous avez identifié vos ",{"type":30,"tag":36,"props":1478,"children":1479},{},[1480],{"type":40,"value":811},{"type":40,"value":1482}," grâce au DDD, la prochaine étape consiste à bien penser la communication entre vos microservices. C’est là qu’intervient l’approche ",{"type":30,"tag":36,"props":1484,"children":1485},{},[1486],{"type":40,"value":777},{"type":40,"value":1488},". En gros, l'idée est simple : avant d’écrire la moindre ligne de code, vous concevez et documentez vos API. Cela vous force à réfléchir à ",{"type":30,"tag":36,"props":1490,"children":1491},{},[1492],{"type":40,"value":1493},"comment",{"type":40,"value":1495}," vos services vont échanger des données et interagir entre eux dès le début, et ça vous évite de vous retrouver avec des API mal conçues qui deviennent vite un casse-tête.",{"type":30,"tag":116,"props":1497,"children":1499},{"id":1498},"pourquoi-lapproche-api-first-est-cruciale",[1500],{"type":30,"tag":36,"props":1501,"children":1502},{},[1503],{"type":40,"value":1504},"Pourquoi l’approche API First est cruciale ?",{"type":30,"tag":43,"props":1506,"children":1507},{},[1508,1510,1515],{"type":40,"value":1509},"Dans une architecture microservices, chaque service doit pouvoir communiquer avec les autres de manière claire, évolutive, et surtout, ",{"type":30,"tag":36,"props":1511,"children":1512},{},[1513],{"type":40,"value":1514},"prévisible",{"type":40,"value":1516},". Si vos APIs sont mal définies, vous allez créer de la dette technique dès le départ. Voici pourquoi une approche API First est essentielle :",{"type":30,"tag":1518,"props":1519,"children":1520},"ol",{},[1521,1531,1541],{"type":30,"tag":167,"props":1522,"children":1523},{},[1524,1529],{"type":30,"tag":36,"props":1525,"children":1526},{},[1527],{"type":40,"value":1528},"Prévisibilité",{"type":40,"value":1530}," : Quand une API est bien documentée, les équipes qui la consomment savent à quoi s'attendre. Plus de mauvaises surprises en découvrant un champ manquant ou une réponse différente de ce qui était anticipé.",{"type":30,"tag":167,"props":1532,"children":1533},{},[1534,1539],{"type":30,"tag":36,"props":1535,"children":1536},{},[1537],{"type":40,"value":1538},"Évolutivité",{"type":40,"value":1540}," : Une API bien pensée est facile à faire évoluer sans casser les implémentations existantes. Cela vous permet d'ajouter de nouvelles fonctionnalités sans perturber les services qui consomment cette API.",{"type":30,"tag":167,"props":1542,"children":1543},{},[1544,1549],{"type":30,"tag":36,"props":1545,"children":1546},{},[1547],{"type":40,"value":1548},"Dépendances réduites",{"type":40,"value":1550}," : Si chaque service expose une API claire et indépendante, il devient beaucoup plus facile de gérer les dépendances entre les équipes et les services.",{"type":30,"tag":964,"props":1552,"children":1553},{},[1554,1562,1581],{"type":30,"tag":43,"props":1555,"children":1556},{},[1557],{"type":30,"tag":36,"props":1558,"children":1559},{},[1560],{"type":40,"value":1561},"Tip : La documentation avant l’implémentation",{"type":30,"tag":43,"props":1563,"children":1564},{},[1565,1567,1572,1574,1579],{"type":40,"value":1566},"Utilisez des outils comme ",{"type":30,"tag":36,"props":1568,"children":1569},{},[1570],{"type":40,"value":1571},"Swagger",{"type":40,"value":1573}," ou ",{"type":30,"tag":36,"props":1575,"children":1576},{},[1577],{"type":40,"value":1578},"OpenAPI",{"type":40,"value":1580}," pour documenter vos APIs avant même de commencer à écrire du code. Cela vous permet de :",{"type":30,"tag":163,"props":1582,"children":1583},{},[1584,1594,1604],{"type":30,"tag":167,"props":1585,"children":1586},{},[1587,1592],{"type":30,"tag":36,"props":1588,"children":1589},{},[1590],{"type":40,"value":1591},"Valider",{"type":40,"value":1593}," l’API avec les autres équipes (back-end, front-end, mobile) pour vous assurer que tout le monde est sur la même longueur d’onde.",{"type":30,"tag":167,"props":1595,"children":1596},{},[1597,1602],{"type":30,"tag":36,"props":1598,"children":1599},{},[1600],{"type":40,"value":1601},"Prototyper",{"type":40,"value":1603}," rapidement les interactions entre services sans attendre l’implémentation complète.",{"type":30,"tag":167,"props":1605,"children":1606},{},[1607,1612],{"type":30,"tag":36,"props":1608,"children":1609},{},[1610],{"type":40,"value":1611},"Tester",{"type":40,"value":1613}," facilement les API avec des outils comme Postman avant d’entrer dans la logique métier plus complexe.",{"type":30,"tag":116,"props":1615,"children":1617},{"id":1616},"exemple-en-java-avec-spring-boot-définir-une-api-pour-le-service-panier",[1618],{"type":30,"tag":36,"props":1619,"children":1620},{},[1621],{"type":40,"value":1622},"Exemple en Java avec Spring Boot : Définir une API pour le service Panier",{"type":30,"tag":43,"props":1624,"children":1625},{},[1626,1628,1633],{"type":40,"value":1627},"Imaginons que vous ayez un microservice ",{"type":30,"tag":36,"props":1629,"children":1630},{},[1631],{"type":40,"value":1632},"Panier",{"type":40,"value":1634},", qui gère les actions liées au panier d’achats de vos utilisateurs. Voici comment vous pourriez exposer une API pour ajouter des articles au panier.",{"type":30,"tag":1035,"props":1636,"children":1638},{"code":1637,"language":1038,"meta":8,"className":1039,"style":8},"@RestController\n@RequestMapping(\"/api/cart\")\npublic class CartController {\n\n    private final CartService cartService;\n\n    public CartController(CartService cartService) {\n        this.cartService = cartService;\n    }\n\n    @PostMapping(\"/add\")\n    public ResponseEntity\u003CCart> addItemToCart(@RequestBody Item item) {\n        Cart updatedCart = cartService.addItem(item);\n        return ResponseEntity.ok(updatedCart);\n    }\n\n    @GetMapping(\"/{cartId}\")\n    public ResponseEntity\u003CCart> getCart(@PathVariable String cartId) {\n        Cart cart = cartService.getCart(cartId);\n        return ResponseEntity.ok(cart);\n    }\n}\n",[1639],{"type":30,"tag":1042,"props":1640,"children":1641},{"__ignoreMap":8},[1642,1657,1683,1703,1710,1736,1743,1775,1807,1814,1821,1847,1907,1949,1982,1989,1996,2021,2081,2124,2157,2165],{"type":30,"tag":1046,"props":1643,"children":1644},{"class":1048,"line":1049},[1645,1651],{"type":30,"tag":1046,"props":1646,"children":1648},{"style":1647},"--shiki-default:#EF9F76;--shiki-dark:#E1E4E8",[1649],{"type":40,"value":1650},"@",{"type":30,"tag":1046,"props":1652,"children":1654},{"style":1653},"--shiki-default:#EF9F76;--shiki-dark:#F97583",[1655],{"type":40,"value":1656},"RestController\n",{"type":30,"tag":1046,"props":1658,"children":1659},{"class":1048,"line":675},[1660,1664,1669,1673,1679],{"type":30,"tag":1046,"props":1661,"children":1662},{"style":1647},[1663],{"type":40,"value":1650},{"type":30,"tag":1046,"props":1665,"children":1666},{"style":1653},[1667],{"type":40,"value":1668},"RequestMapping",{"type":30,"tag":1046,"props":1670,"children":1671},{"style":1070},[1672],{"type":40,"value":1146},{"type":30,"tag":1046,"props":1674,"children":1676},{"style":1675},"--shiki-default:#A6D189;--shiki-dark:#9ECBFF",[1677],{"type":40,"value":1678},"\"/api/cart\"",{"type":30,"tag":1046,"props":1680,"children":1681},{"style":1070},[1682],{"type":40,"value":1388},{"type":30,"tag":1046,"props":1684,"children":1685},{"class":1048,"line":681},[1686,1690,1694,1699],{"type":30,"tag":1046,"props":1687,"children":1688},{"style":1053},[1689],{"type":40,"value":1056},{"type":30,"tag":1046,"props":1691,"children":1692},{"style":1053},[1693],{"type":40,"value":1061},{"type":30,"tag":1046,"props":1695,"children":1696},{"style":1064},[1697],{"type":40,"value":1698}," CartController",{"type":30,"tag":1046,"props":1700,"children":1701},{"style":1070},[1702],{"type":40,"value":1073},{"type":30,"tag":1046,"props":1704,"children":1705},{"class":1048,"line":1124},[1706],{"type":30,"tag":1046,"props":1707,"children":1708},{"emptyLinePlaceholder":13},[1709],{"type":40,"value":1121},{"type":30,"tag":1046,"props":1711,"children":1712},{"class":1048,"line":1168},[1713,1717,1722,1727,1732],{"type":30,"tag":1046,"props":1714,"children":1715},{"style":1053},[1716],{"type":40,"value":1081},{"type":30,"tag":1046,"props":1718,"children":1719},{"style":1053},[1720],{"type":40,"value":1721}," final",{"type":30,"tag":1046,"props":1723,"children":1724},{"style":1084},[1725],{"type":40,"value":1726}," CartService",{"type":30,"tag":1046,"props":1728,"children":1729},{"style":1105},[1730],{"type":40,"value":1731}," cartService",{"type":30,"tag":1046,"props":1733,"children":1734},{"style":1070},[1735],{"type":40,"value":1113},{"type":30,"tag":1046,"props":1737,"children":1738},{"class":1048,"line":1201},[1739],{"type":30,"tag":1046,"props":1740,"children":1741},{"emptyLinePlaceholder":13},[1742],{"type":40,"value":1121},{"type":30,"tag":1046,"props":1744,"children":1745},{"class":1048,"line":1210},[1746,1750,1754,1758,1763,1767,1771],{"type":30,"tag":1046,"props":1747,"children":1748},{"style":1053},[1749],{"type":40,"value":1130},{"type":30,"tag":1046,"props":1751,"children":1752},{"style":1138},[1753],{"type":40,"value":1698},{"type":30,"tag":1046,"props":1755,"children":1756},{"style":1070},[1757],{"type":40,"value":1146},{"type":30,"tag":1046,"props":1759,"children":1760},{"style":1084},[1761],{"type":40,"value":1762},"CartService",{"type":30,"tag":1046,"props":1764,"children":1765},{"style":1153},[1766],{"type":40,"value":1731},{"type":30,"tag":1046,"props":1768,"children":1769},{"style":1070},[1770],{"type":40,"value":1161},{"type":30,"tag":1046,"props":1772,"children":1773},{"style":1070},[1774],{"type":40,"value":1073},{"type":30,"tag":1046,"props":1776,"children":1777},{"class":1048,"line":1218},[1778,1784,1788,1793,1799,1803],{"type":30,"tag":1046,"props":1779,"children":1781},{"style":1780},"--shiki-default:#E78284;--shiki-dark:#79B8FF",[1782],{"type":40,"value":1783},"        this",{"type":30,"tag":1046,"props":1785,"children":1786},{"style":1070},[1787],{"type":40,"value":1179},{"type":30,"tag":1046,"props":1789,"children":1790},{"style":1105},[1791],{"type":40,"value":1792},"cartService ",{"type":30,"tag":1046,"props":1794,"children":1796},{"style":1795},"--shiki-default:#81C8BE;--shiki-dark:#F97583",[1797],{"type":40,"value":1798},"=",{"type":30,"tag":1046,"props":1800,"children":1801},{"style":1105},[1802],{"type":40,"value":1731},{"type":30,"tag":1046,"props":1804,"children":1805},{"style":1070},[1806],{"type":40,"value":1113},{"type":30,"tag":1046,"props":1808,"children":1809},{"class":1048,"line":1255},[1810],{"type":30,"tag":1046,"props":1811,"children":1812},{"style":1070},[1813],{"type":40,"value":1207},{"type":30,"tag":1046,"props":1815,"children":1816},{"class":1048,"line":1284},[1817],{"type":30,"tag":1046,"props":1818,"children":1819},{"emptyLinePlaceholder":13},[1820],{"type":40,"value":1121},{"type":30,"tag":1046,"props":1822,"children":1823},{"class":1048,"line":1292},[1824,1829,1834,1838,1843],{"type":30,"tag":1046,"props":1825,"children":1826},{"style":1647},[1827],{"type":40,"value":1828},"    @",{"type":30,"tag":1046,"props":1830,"children":1831},{"style":1653},[1832],{"type":40,"value":1833},"PostMapping",{"type":30,"tag":1046,"props":1835,"children":1836},{"style":1070},[1837],{"type":40,"value":1146},{"type":30,"tag":1046,"props":1839,"children":1840},{"style":1675},[1841],{"type":40,"value":1842},"\"/add\"",{"type":30,"tag":1046,"props":1844,"children":1845},{"style":1070},[1846],{"type":40,"value":1388},{"type":30,"tag":1046,"props":1848,"children":1849},{"class":1048,"line":1300},[1850,1854,1859,1863,1868,1872,1877,1881,1885,1890,1895,1899,1903],{"type":30,"tag":1046,"props":1851,"children":1852},{"style":1053},[1853],{"type":40,"value":1130},{"type":30,"tag":1046,"props":1855,"children":1856},{"style":1084},[1857],{"type":40,"value":1858}," ResponseEntity",{"type":30,"tag":1046,"props":1860,"children":1861},{"style":1070},[1862],{"type":40,"value":1092},{"type":30,"tag":1046,"props":1864,"children":1865},{"style":1053},[1866],{"type":40,"value":1867},"Cart",{"type":30,"tag":1046,"props":1869,"children":1870},{"style":1070},[1871],{"type":40,"value":1102},{"type":30,"tag":1046,"props":1873,"children":1874},{"style":1138},[1875],{"type":40,"value":1876}," addItemToCart",{"type":30,"tag":1046,"props":1878,"children":1879},{"style":1070},[1880],{"type":40,"value":1146},{"type":30,"tag":1046,"props":1882,"children":1883},{"style":1647},[1884],{"type":40,"value":1650},{"type":30,"tag":1046,"props":1886,"children":1887},{"style":1653},[1888],{"type":40,"value":1889},"RequestBody",{"type":30,"tag":1046,"props":1891,"children":1892},{"style":1084},[1893],{"type":40,"value":1894}," Item",{"type":30,"tag":1046,"props":1896,"children":1897},{"style":1153},[1898],{"type":40,"value":1156},{"type":30,"tag":1046,"props":1900,"children":1901},{"style":1070},[1902],{"type":40,"value":1161},{"type":30,"tag":1046,"props":1904,"children":1905},{"style":1070},[1906],{"type":40,"value":1073},{"type":30,"tag":1046,"props":1908,"children":1909},{"class":1048,"line":1327},[1910,1915,1920,1924,1928,1932,1937,1941,1945],{"type":30,"tag":1046,"props":1911,"children":1912},{"style":1084},[1913],{"type":40,"value":1914},"        Cart",{"type":30,"tag":1046,"props":1916,"children":1917},{"style":1105},[1918],{"type":40,"value":1919}," updatedCart ",{"type":30,"tag":1046,"props":1921,"children":1922},{"style":1795},[1923],{"type":40,"value":1798},{"type":30,"tag":1046,"props":1925,"children":1926},{"style":1105},[1927],{"type":40,"value":1731},{"type":30,"tag":1046,"props":1929,"children":1930},{"style":1070},[1931],{"type":40,"value":1179},{"type":30,"tag":1046,"props":1933,"children":1934},{"style":1138},[1935],{"type":40,"value":1936},"addItem",{"type":30,"tag":1046,"props":1938,"children":1939},{"style":1070},[1940],{"type":40,"value":1146},{"type":30,"tag":1046,"props":1942,"children":1943},{"style":1105},[1944],{"type":40,"value":1193},{"type":30,"tag":1046,"props":1946,"children":1947},{"style":1070},[1948],{"type":40,"value":1198},{"type":30,"tag":1046,"props":1950,"children":1951},{"class":1048,"line":1354},[1952,1956,1960,1964,1969,1973,1978],{"type":30,"tag":1046,"props":1953,"children":1954},{"style":1053},[1955],{"type":40,"value":1333},{"type":30,"tag":1046,"props":1957,"children":1958},{"style":1105},[1959],{"type":40,"value":1858},{"type":30,"tag":1046,"props":1961,"children":1962},{"style":1070},[1963],{"type":40,"value":1179},{"type":30,"tag":1046,"props":1965,"children":1966},{"style":1138},[1967],{"type":40,"value":1968},"ok",{"type":30,"tag":1046,"props":1970,"children":1971},{"style":1070},[1972],{"type":40,"value":1146},{"type":30,"tag":1046,"props":1974,"children":1975},{"style":1105},[1976],{"type":40,"value":1977},"updatedCart",{"type":30,"tag":1046,"props":1979,"children":1980},{"style":1070},[1981],{"type":40,"value":1198},{"type":30,"tag":1046,"props":1983,"children":1984},{"class":1048,"line":1391},[1985],{"type":30,"tag":1046,"props":1986,"children":1987},{"style":1070},[1988],{"type":40,"value":1207},{"type":30,"tag":1046,"props":1990,"children":1991},{"class":1048,"line":1409},[1992],{"type":30,"tag":1046,"props":1993,"children":1994},{"emptyLinePlaceholder":13},[1995],{"type":40,"value":1121},{"type":30,"tag":1046,"props":1997,"children":1998},{"class":1048,"line":1417},[1999,2003,2008,2012,2017],{"type":30,"tag":1046,"props":2000,"children":2001},{"style":1647},[2002],{"type":40,"value":1828},{"type":30,"tag":1046,"props":2004,"children":2005},{"style":1653},[2006],{"type":40,"value":2007},"GetMapping",{"type":30,"tag":1046,"props":2009,"children":2010},{"style":1070},[2011],{"type":40,"value":1146},{"type":30,"tag":1046,"props":2013,"children":2014},{"style":1675},[2015],{"type":40,"value":2016},"\"/{cartId}\"",{"type":30,"tag":1046,"props":2018,"children":2019},{"style":1070},[2020],{"type":40,"value":1388},{"type":30,"tag":1046,"props":2022,"children":2024},{"class":1048,"line":2023},18,[2025,2029,2033,2037,2041,2045,2050,2054,2058,2063,2068,2073,2077],{"type":30,"tag":1046,"props":2026,"children":2027},{"style":1053},[2028],{"type":40,"value":1130},{"type":30,"tag":1046,"props":2030,"children":2031},{"style":1084},[2032],{"type":40,"value":1858},{"type":30,"tag":1046,"props":2034,"children":2035},{"style":1070},[2036],{"type":40,"value":1092},{"type":30,"tag":1046,"props":2038,"children":2039},{"style":1053},[2040],{"type":40,"value":1867},{"type":30,"tag":1046,"props":2042,"children":2043},{"style":1070},[2044],{"type":40,"value":1102},{"type":30,"tag":1046,"props":2046,"children":2047},{"style":1138},[2048],{"type":40,"value":2049}," getCart",{"type":30,"tag":1046,"props":2051,"children":2052},{"style":1070},[2053],{"type":40,"value":1146},{"type":30,"tag":1046,"props":2055,"children":2056},{"style":1647},[2057],{"type":40,"value":1650},{"type":30,"tag":1046,"props":2059,"children":2060},{"style":1653},[2061],{"type":40,"value":2062},"PathVariable",{"type":30,"tag":1046,"props":2064,"children":2065},{"style":1084},[2066],{"type":40,"value":2067}," String",{"type":30,"tag":1046,"props":2069,"children":2070},{"style":1153},[2071],{"type":40,"value":2072}," cartId",{"type":30,"tag":1046,"props":2074,"children":2075},{"style":1070},[2076],{"type":40,"value":1161},{"type":30,"tag":1046,"props":2078,"children":2079},{"style":1070},[2080],{"type":40,"value":1073},{"type":30,"tag":1046,"props":2082,"children":2084},{"class":1048,"line":2083},19,[2085,2089,2094,2098,2102,2106,2111,2115,2120],{"type":30,"tag":1046,"props":2086,"children":2087},{"style":1084},[2088],{"type":40,"value":1914},{"type":30,"tag":1046,"props":2090,"children":2091},{"style":1105},[2092],{"type":40,"value":2093}," cart ",{"type":30,"tag":1046,"props":2095,"children":2096},{"style":1795},[2097],{"type":40,"value":1798},{"type":30,"tag":1046,"props":2099,"children":2100},{"style":1105},[2101],{"type":40,"value":1731},{"type":30,"tag":1046,"props":2103,"children":2104},{"style":1070},[2105],{"type":40,"value":1179},{"type":30,"tag":1046,"props":2107,"children":2108},{"style":1138},[2109],{"type":40,"value":2110},"getCart",{"type":30,"tag":1046,"props":2112,"children":2113},{"style":1070},[2114],{"type":40,"value":1146},{"type":30,"tag":1046,"props":2116,"children":2117},{"style":1105},[2118],{"type":40,"value":2119},"cartId",{"type":30,"tag":1046,"props":2121,"children":2122},{"style":1070},[2123],{"type":40,"value":1198},{"type":30,"tag":1046,"props":2125,"children":2127},{"class":1048,"line":2126},20,[2128,2132,2136,2140,2144,2148,2153],{"type":30,"tag":1046,"props":2129,"children":2130},{"style":1053},[2131],{"type":40,"value":1333},{"type":30,"tag":1046,"props":2133,"children":2134},{"style":1105},[2135],{"type":40,"value":1858},{"type":30,"tag":1046,"props":2137,"children":2138},{"style":1070},[2139],{"type":40,"value":1179},{"type":30,"tag":1046,"props":2141,"children":2142},{"style":1138},[2143],{"type":40,"value":1968},{"type":30,"tag":1046,"props":2145,"children":2146},{"style":1070},[2147],{"type":40,"value":1146},{"type":30,"tag":1046,"props":2149,"children":2150},{"style":1105},[2151],{"type":40,"value":2152},"cart",{"type":30,"tag":1046,"props":2154,"children":2155},{"style":1070},[2156],{"type":40,"value":1198},{"type":30,"tag":1046,"props":2158,"children":2160},{"class":1048,"line":2159},21,[2161],{"type":30,"tag":1046,"props":2162,"children":2163},{"style":1070},[2164],{"type":40,"value":1207},{"type":30,"tag":1046,"props":2166,"children":2168},{"class":1048,"line":2167},22,[2169],{"type":30,"tag":1046,"props":2170,"children":2171},{"style":1070},[2172],{"type":40,"value":1423},{"type":30,"tag":43,"props":2174,"children":2175},{},[2176],{"type":40,"value":2177},"Ici, on expose deux endpoints simples :",{"type":30,"tag":163,"props":2179,"children":2180},{},[2181,2194],{"type":30,"tag":167,"props":2182,"children":2183},{},[2184,2186,2192],{"type":40,"value":2185},"Un endpoint ",{"type":30,"tag":1042,"props":2187,"children":2189},{"className":2188},[],[2190],{"type":40,"value":2191},"POST /api/cart/add",{"type":40,"value":2193}," pour ajouter un item au panier.",{"type":30,"tag":167,"props":2195,"children":2196},{},[2197,2198,2204],{"type":40,"value":2185},{"type":30,"tag":1042,"props":2199,"children":2201},{"className":2200},[],[2202],{"type":40,"value":2203},"GET /api/cart/{cartId}",{"type":40,"value":2205}," pour récupérer l’état du panier.",{"type":30,"tag":43,"props":2207,"children":2208},{},[2209,2211,2215],{"type":40,"value":2210},"Avant même de coder cela, vous pourriez déjà définir ces endpoints avec ",{"type":30,"tag":36,"props":2212,"children":2213},{},[2214],{"type":40,"value":1571},{"type":40,"value":2216}," afin que les équipes consommatrices puissent tester et donner leur feedback.",{"type":30,"tag":964,"props":2218,"children":2219},{},[2220,2228],{"type":30,"tag":43,"props":2221,"children":2222},{},[2223],{"type":30,"tag":36,"props":2224,"children":2225},{},[2226],{"type":40,"value":2227},"Alerte : Ne sous-estimez pas le versionnage d'API",{"type":30,"tag":43,"props":2229,"children":2230},{},[2231],{"type":40,"value":2232},"Pensez à versionner vos APIs dès le départ.",{"type":30,"tag":43,"props":2234,"children":2235},{},[2236],{"type":40,"value":2237},"Cela vous permet de déployer de nouvelles fonctionnalités sans casser les anciennes. Un exemple de structure d'URL :",{"type":30,"tag":964,"props":2239,"children":2240},{},[2241],{"type":30,"tag":1035,"props":2242,"children":2244},{"code":2243},"/api/v1/cart/add\n",[2245],{"type":30,"tag":1042,"props":2246,"children":2247},{"__ignoreMap":8},[2248],{"type":40,"value":2243},{"type":30,"tag":84,"props":2250,"children":2251},{},[],{"type":30,"tag":31,"props":2253,"children":2255},{"id":2254},"architecture-hexagonale-structurer-le-projet-avec-application-domaine-et-infrastructure",[2256],{"type":30,"tag":36,"props":2257,"children":2258},{},[2259],{"type":40,"value":2260},"Architecture Hexagonale : Structurer le projet avec Application, Domaine et Infrastructure",{"type":30,"tag":43,"props":2262,"children":2263},{},[2264,2266,2270,2272,2278],{"type":40,"value":2265},"L'",{"type":30,"tag":36,"props":2267,"children":2268},{},[2269],{"type":40,"value":784},{"type":40,"value":2271}," (ou architecture en ports et adaptateurs) est un modèle qui vise à séparer clairement les différentes couches de votre application pour la rendre plus modulaire et maintenable. Elle partage avec la ",{"type":30,"tag":75,"props":2273,"children":2275},{"href":2274},"/fr/architecture-craft/clean-architecture-3-regles",[2276],{"type":40,"value":2277},"Clean Architecture",{"type":40,"value":2279}," le même principe fondamental : les dépendances pointent vers l'intérieur, vers le domaine métier. Dans le cadre d'une transition vers des microservices, elle permet de structurer vos services de manière à ce que le domaine métier reste au cœur de l'implémentation, tandis que les détails techniques (comme les bases de données, les APIs externes, etc.) soient placés en périphérie.",{"type":30,"tag":43,"props":2281,"children":2282},{},[2283,2285,2290],{"type":40,"value":2284},"Le concept est simple : votre application est comme un hexagone, où chaque côté représente une interface qui connecte le cœur de l’application (la ",{"type":30,"tag":36,"props":2286,"children":2287},{},[2288],{"type":40,"value":2289},"logique métier",{"type":40,"value":2291},") à ses dépendances extérieures (base de données, APIs, interface utilisateur). Alistair Cockburn, qui a formalisé ce pattern sous le nom \"Ports and Adapters\", en décrit l’essence dans ses écrits : protéger le domaine de tout changement technologique périphérique.",{"type":30,"tag":116,"props":2293,"children":2295},{"id":2294},"pourquoi-adopter-larchitecture-hexagonale-pour-vos-microservices",[2296],{"type":30,"tag":36,"props":2297,"children":2298},{},[2299],{"type":40,"value":2300},"Pourquoi adopter l’architecture hexagonale pour vos microservices ?",{"type":30,"tag":43,"props":2302,"children":2303},{},[2304],{"type":40,"value":2305},"Voici trois avantages principaux de l'architecture hexagonale :",{"type":30,"tag":1518,"props":2307,"children":2308},{},[2309,2319,2329],{"type":30,"tag":167,"props":2310,"children":2311},{},[2312,2317],{"type":30,"tag":36,"props":2313,"children":2314},{},[2315],{"type":40,"value":2316},"Séparation claire des préoccupations",{"type":40,"value":2318}," : En plaçant la logique métier au centre, vous assurez que vos règles de gestion ne sont pas affectées par la manière dont les données sont stockées ou envoyées. Cela rend votre code plus facile à maintenir et à tester.",{"type":30,"tag":167,"props":2320,"children":2321},{},[2322,2327],{"type":30,"tag":36,"props":2323,"children":2324},{},[2325],{"type":40,"value":2326},"Facilité de test",{"type":40,"value":2328}," : En isolant les dépendances extérieures (comme la base de données ou les appels d’API), il devient plus facile de tester vos services avec des tests unitaires et d’intégration.",{"type":30,"tag":167,"props":2330,"children":2331},{},[2332,2336],{"type":30,"tag":36,"props":2333,"children":2334},{},[2335],{"type":40,"value":1538},{"type":40,"value":2337}," : Vous pouvez changer les technologies sous-jacentes (par exemple, passer d'une base SQL à NoSQL) sans impacter le cœur de votre application, car tout est isolé par des ports (interfaces).",{"type":30,"tag":2339,"props":2340,"children":2342},"h4",{"id":2341},"les-trois-couches-principales",[2343],{"type":30,"tag":36,"props":2344,"children":2345},{},[2346],{"type":40,"value":2347},"Les trois couches principales",{"type":30,"tag":43,"props":2349,"children":2350},{},[2351],{"type":40,"value":2352},"L'architecture hexagonale se décompose en trois grandes couches :",{"type":30,"tag":163,"props":2354,"children":2355},{},[2356,2366,2376],{"type":30,"tag":167,"props":2357,"children":2358},{},[2359,2364],{"type":30,"tag":36,"props":2360,"children":2361},{},[2362],{"type":40,"value":2363},"Domaine",{"type":40,"value":2365}," : C’est ici que se trouve toute la logique métier. Cette couche est totalement indépendante de la technologie utilisée.",{"type":30,"tag":167,"props":2367,"children":2368},{},[2369,2374],{"type":30,"tag":36,"props":2370,"children":2371},{},[2372],{"type":40,"value":2373},"Application",{"type":40,"value":2375}," : Elle orchestre les actions à réaliser et gère les cas d’utilisation. Elle appelle les services du domaine.",{"type":30,"tag":167,"props":2377,"children":2378},{},[2379,2384],{"type":30,"tag":36,"props":2380,"children":2381},{},[2382],{"type":40,"value":2383},"Infrastructure",{"type":40,"value":2385}," : Cette couche gère tout ce qui est technique, comme les interactions avec les bases de données, les APIs externes, etc. Elle s’adapte aux besoins du domaine via des interfaces.",{"type":30,"tag":116,"props":2387,"children":2389},{"id":2388},"exemple-dimplémentation-en-java",[2390],{"type":30,"tag":36,"props":2391,"children":2392},{},[2393],{"type":40,"value":2394},"Exemple d'implémentation en Java",{"type":30,"tag":43,"props":2396,"children":2397},{},[2398,2400,2404],{"type":40,"value":2399},"Prenons l'exemple de notre service ",{"type":30,"tag":36,"props":2401,"children":2402},{},[2403],{"type":40,"value":1632},{"type":40,"value":2405}," (Cart). Nous allons structurer le code en suivant les principes de l'architecture hexagonale.",{"type":30,"tag":1518,"props":2407,"children":2408},{},[2409],{"type":30,"tag":167,"props":2410,"children":2411},{},[2412,2416],{"type":30,"tag":36,"props":2413,"children":2414},{},[2415],{"type":40,"value":2363},{"type":40,"value":2417}," : La couche qui gère les règles métiers. Elle est totalement indépendante de la base de données ou de toute autre technologie.",{"type":30,"tag":1035,"props":2419,"children":2421},{"code":2420,"language":1038,"meta":8,"className":1039,"style":8},"public class Cart {\n    private List\u003CItem> items = new ArrayList\u003C>();\n\n    public void addItem(Item item) {\n        items.add(item);\n    }\n\n    public void removeItem(Item item) {\n        items.remove(item);\n    }\n\n    public List\u003CItem> getItems() {\n        return items;\n    }\n}\n",[2422],{"type":30,"tag":1042,"props":2423,"children":2424},{"__ignoreMap":8},[2425,2444,2491,2498,2533,2560,2567,2574,2609,2636,2643,2650,2686,2701,2708],{"type":30,"tag":1046,"props":2426,"children":2427},{"class":1048,"line":1049},[2428,2432,2436,2440],{"type":30,"tag":1046,"props":2429,"children":2430},{"style":1053},[2431],{"type":40,"value":1056},{"type":30,"tag":1046,"props":2433,"children":2434},{"style":1053},[2435],{"type":40,"value":1061},{"type":30,"tag":1046,"props":2437,"children":2438},{"style":1064},[2439],{"type":40,"value":1067},{"type":30,"tag":1046,"props":2441,"children":2442},{"style":1070},[2443],{"type":40,"value":1073},{"type":30,"tag":1046,"props":2445,"children":2446},{"class":1048,"line":675},[2447,2451,2455,2459,2463,2467,2472,2476,2481,2486],{"type":30,"tag":1046,"props":2448,"children":2449},{"style":1053},[2450],{"type":40,"value":1081},{"type":30,"tag":1046,"props":2452,"children":2453},{"style":1084},[2454],{"type":40,"value":1087},{"type":30,"tag":1046,"props":2456,"children":2457},{"style":1070},[2458],{"type":40,"value":1092},{"type":30,"tag":1046,"props":2460,"children":2461},{"style":1053},[2462],{"type":40,"value":1097},{"type":30,"tag":1046,"props":2464,"children":2465},{"style":1070},[2466],{"type":40,"value":1102},{"type":30,"tag":1046,"props":2468,"children":2469},{"style":1105},[2470],{"type":40,"value":2471}," items ",{"type":30,"tag":1046,"props":2473,"children":2474},{"style":1795},[2475],{"type":40,"value":1798},{"type":30,"tag":1046,"props":2477,"children":2478},{"style":1053},[2479],{"type":40,"value":2480}," new",{"type":30,"tag":1046,"props":2482,"children":2483},{"style":1084},[2484],{"type":40,"value":2485}," ArrayList",{"type":30,"tag":1046,"props":2487,"children":2488},{"style":1070},[2489],{"type":40,"value":2490},"\u003C>();\n",{"type":30,"tag":1046,"props":2492,"children":2493},{"class":1048,"line":681},[2494],{"type":30,"tag":1046,"props":2495,"children":2496},{"emptyLinePlaceholder":13},[2497],{"type":40,"value":1121},{"type":30,"tag":1046,"props":2499,"children":2500},{"class":1048,"line":1124},[2501,2505,2509,2513,2517,2521,2525,2529],{"type":30,"tag":1046,"props":2502,"children":2503},{"style":1053},[2504],{"type":40,"value":1130},{"type":30,"tag":1046,"props":2506,"children":2507},{"style":1053},[2508],{"type":40,"value":1135},{"type":30,"tag":1046,"props":2510,"children":2511},{"style":1138},[2512],{"type":40,"value":1141},{"type":30,"tag":1046,"props":2514,"children":2515},{"style":1070},[2516],{"type":40,"value":1146},{"type":30,"tag":1046,"props":2518,"children":2519},{"style":1084},[2520],{"type":40,"value":1097},{"type":30,"tag":1046,"props":2522,"children":2523},{"style":1153},[2524],{"type":40,"value":1156},{"type":30,"tag":1046,"props":2526,"children":2527},{"style":1070},[2528],{"type":40,"value":1161},{"type":30,"tag":1046,"props":2530,"children":2531},{"style":1070},[2532],{"type":40,"value":1073},{"type":30,"tag":1046,"props":2534,"children":2535},{"class":1048,"line":1168},[2536,2540,2544,2548,2552,2556],{"type":30,"tag":1046,"props":2537,"children":2538},{"style":1105},[2539],{"type":40,"value":1174},{"type":30,"tag":1046,"props":2541,"children":2542},{"style":1070},[2543],{"type":40,"value":1179},{"type":30,"tag":1046,"props":2545,"children":2546},{"style":1138},[2547],{"type":40,"value":1184},{"type":30,"tag":1046,"props":2549,"children":2550},{"style":1070},[2551],{"type":40,"value":1146},{"type":30,"tag":1046,"props":2553,"children":2554},{"style":1105},[2555],{"type":40,"value":1193},{"type":30,"tag":1046,"props":2557,"children":2558},{"style":1070},[2559],{"type":40,"value":1198},{"type":30,"tag":1046,"props":2561,"children":2562},{"class":1048,"line":1201},[2563],{"type":30,"tag":1046,"props":2564,"children":2565},{"style":1070},[2566],{"type":40,"value":1207},{"type":30,"tag":1046,"props":2568,"children":2569},{"class":1048,"line":1210},[2570],{"type":30,"tag":1046,"props":2571,"children":2572},{"emptyLinePlaceholder":13},[2573],{"type":40,"value":1121},{"type":30,"tag":1046,"props":2575,"children":2576},{"class":1048,"line":1218},[2577,2581,2585,2589,2593,2597,2601,2605],{"type":30,"tag":1046,"props":2578,"children":2579},{"style":1053},[2580],{"type":40,"value":1130},{"type":30,"tag":1046,"props":2582,"children":2583},{"style":1053},[2584],{"type":40,"value":1135},{"type":30,"tag":1046,"props":2586,"children":2587},{"style":1138},[2588],{"type":40,"value":1232},{"type":30,"tag":1046,"props":2590,"children":2591},{"style":1070},[2592],{"type":40,"value":1146},{"type":30,"tag":1046,"props":2594,"children":2595},{"style":1084},[2596],{"type":40,"value":1097},{"type":30,"tag":1046,"props":2598,"children":2599},{"style":1153},[2600],{"type":40,"value":1156},{"type":30,"tag":1046,"props":2602,"children":2603},{"style":1070},[2604],{"type":40,"value":1161},{"type":30,"tag":1046,"props":2606,"children":2607},{"style":1070},[2608],{"type":40,"value":1073},{"type":30,"tag":1046,"props":2610,"children":2611},{"class":1048,"line":1255},[2612,2616,2620,2624,2628,2632],{"type":30,"tag":1046,"props":2613,"children":2614},{"style":1105},[2615],{"type":40,"value":1174},{"type":30,"tag":1046,"props":2617,"children":2618},{"style":1070},[2619],{"type":40,"value":1179},{"type":30,"tag":1046,"props":2621,"children":2622},{"style":1138},[2623],{"type":40,"value":1269},{"type":30,"tag":1046,"props":2625,"children":2626},{"style":1070},[2627],{"type":40,"value":1146},{"type":30,"tag":1046,"props":2629,"children":2630},{"style":1105},[2631],{"type":40,"value":1193},{"type":30,"tag":1046,"props":2633,"children":2634},{"style":1070},[2635],{"type":40,"value":1198},{"type":30,"tag":1046,"props":2637,"children":2638},{"class":1048,"line":1284},[2639],{"type":30,"tag":1046,"props":2640,"children":2641},{"style":1070},[2642],{"type":40,"value":1207},{"type":30,"tag":1046,"props":2644,"children":2645},{"class":1048,"line":1292},[2646],{"type":30,"tag":1046,"props":2647,"children":2648},{"emptyLinePlaceholder":13},[2649],{"type":40,"value":1121},{"type":30,"tag":1046,"props":2651,"children":2652},{"class":1048,"line":1300},[2653,2657,2661,2665,2669,2673,2678,2682],{"type":30,"tag":1046,"props":2654,"children":2655},{"style":1053},[2656],{"type":40,"value":1130},{"type":30,"tag":1046,"props":2658,"children":2659},{"style":1084},[2660],{"type":40,"value":1087},{"type":30,"tag":1046,"props":2662,"children":2663},{"style":1070},[2664],{"type":40,"value":1092},{"type":30,"tag":1046,"props":2666,"children":2667},{"style":1053},[2668],{"type":40,"value":1097},{"type":30,"tag":1046,"props":2670,"children":2671},{"style":1070},[2672],{"type":40,"value":1102},{"type":30,"tag":1046,"props":2674,"children":2675},{"style":1138},[2676],{"type":40,"value":2677}," getItems",{"type":30,"tag":1046,"props":2679,"children":2680},{"style":1070},[2681],{"type":40,"value":1320},{"type":30,"tag":1046,"props":2683,"children":2684},{"style":1070},[2685],{"type":40,"value":1073},{"type":30,"tag":1046,"props":2687,"children":2688},{"class":1048,"line":1327},[2689,2693,2697],{"type":30,"tag":1046,"props":2690,"children":2691},{"style":1053},[2692],{"type":40,"value":1333},{"type":30,"tag":1046,"props":2694,"children":2695},{"style":1105},[2696],{"type":40,"value":1108},{"type":30,"tag":1046,"props":2698,"children":2699},{"style":1070},[2700],{"type":40,"value":1113},{"type":30,"tag":1046,"props":2702,"children":2703},{"class":1048,"line":1354},[2704],{"type":30,"tag":1046,"props":2705,"children":2706},{"style":1070},[2707],{"type":40,"value":1207},{"type":30,"tag":1046,"props":2709,"children":2710},{"class":1048,"line":1391},[2711],{"type":30,"tag":1046,"props":2712,"children":2713},{"style":1070},[2714],{"type":40,"value":1423},{"type":30,"tag":1518,"props":2716,"children":2717},{"start":675},[2718],{"type":30,"tag":167,"props":2719,"children":2720},{},[2721,2725],{"type":30,"tag":36,"props":2722,"children":2723},{},[2724],{"type":40,"value":2373},{"type":40,"value":2726}," : La couche qui orchestre les actions, comme ajouter un produit au panier.",{"type":30,"tag":1035,"props":2728,"children":2730},{"code":2729,"language":1038,"meta":8,"className":1039,"style":8},"public class CartService {\n    private final CartRepository cartRepository;\n\n    public CartService(CartRepository cartRepository) {\n        this.cartRepository = cartRepository;\n    }\n\n    public Cart addItemToCart(String cartId, Item item) {\n        Cart cart = cartRepository.findById(cartId);\n        cart.addItem(item);\n        cartRepository.save(cart);\n        return cart;\n    }\n\n    public Cart getCart(String cartId) {\n        return cartRepository.findById(cartId);\n    }\n}\n",[2731],{"type":30,"tag":1042,"props":2732,"children":2733},{"__ignoreMap":8},[2734,2753,2778,2785,2817,2845,2852,2859,2908,2948,2976,3005,3021,3028,3035,3070,3101,3108],{"type":30,"tag":1046,"props":2735,"children":2736},{"class":1048,"line":1049},[2737,2741,2745,2749],{"type":30,"tag":1046,"props":2738,"children":2739},{"style":1053},[2740],{"type":40,"value":1056},{"type":30,"tag":1046,"props":2742,"children":2743},{"style":1053},[2744],{"type":40,"value":1061},{"type":30,"tag":1046,"props":2746,"children":2747},{"style":1064},[2748],{"type":40,"value":1726},{"type":30,"tag":1046,"props":2750,"children":2751},{"style":1070},[2752],{"type":40,"value":1073},{"type":30,"tag":1046,"props":2754,"children":2755},{"class":1048,"line":675},[2756,2760,2764,2769,2774],{"type":30,"tag":1046,"props":2757,"children":2758},{"style":1053},[2759],{"type":40,"value":1081},{"type":30,"tag":1046,"props":2761,"children":2762},{"style":1053},[2763],{"type":40,"value":1721},{"type":30,"tag":1046,"props":2765,"children":2766},{"style":1084},[2767],{"type":40,"value":2768}," CartRepository",{"type":30,"tag":1046,"props":2770,"children":2771},{"style":1105},[2772],{"type":40,"value":2773}," cartRepository",{"type":30,"tag":1046,"props":2775,"children":2776},{"style":1070},[2777],{"type":40,"value":1113},{"type":30,"tag":1046,"props":2779,"children":2780},{"class":1048,"line":681},[2781],{"type":30,"tag":1046,"props":2782,"children":2783},{"emptyLinePlaceholder":13},[2784],{"type":40,"value":1121},{"type":30,"tag":1046,"props":2786,"children":2787},{"class":1048,"line":1124},[2788,2792,2796,2800,2805,2809,2813],{"type":30,"tag":1046,"props":2789,"children":2790},{"style":1053},[2791],{"type":40,"value":1130},{"type":30,"tag":1046,"props":2793,"children":2794},{"style":1138},[2795],{"type":40,"value":1726},{"type":30,"tag":1046,"props":2797,"children":2798},{"style":1070},[2799],{"type":40,"value":1146},{"type":30,"tag":1046,"props":2801,"children":2802},{"style":1084},[2803],{"type":40,"value":2804},"CartRepository",{"type":30,"tag":1046,"props":2806,"children":2807},{"style":1153},[2808],{"type":40,"value":2773},{"type":30,"tag":1046,"props":2810,"children":2811},{"style":1070},[2812],{"type":40,"value":1161},{"type":30,"tag":1046,"props":2814,"children":2815},{"style":1070},[2816],{"type":40,"value":1073},{"type":30,"tag":1046,"props":2818,"children":2819},{"class":1048,"line":1168},[2820,2824,2828,2833,2837,2841],{"type":30,"tag":1046,"props":2821,"children":2822},{"style":1780},[2823],{"type":40,"value":1783},{"type":30,"tag":1046,"props":2825,"children":2826},{"style":1070},[2827],{"type":40,"value":1179},{"type":30,"tag":1046,"props":2829,"children":2830},{"style":1105},[2831],{"type":40,"value":2832},"cartRepository ",{"type":30,"tag":1046,"props":2834,"children":2835},{"style":1795},[2836],{"type":40,"value":1798},{"type":30,"tag":1046,"props":2838,"children":2839},{"style":1105},[2840],{"type":40,"value":2773},{"type":30,"tag":1046,"props":2842,"children":2843},{"style":1070},[2844],{"type":40,"value":1113},{"type":30,"tag":1046,"props":2846,"children":2847},{"class":1048,"line":1201},[2848],{"type":30,"tag":1046,"props":2849,"children":2850},{"style":1070},[2851],{"type":40,"value":1207},{"type":30,"tag":1046,"props":2853,"children":2854},{"class":1048,"line":1210},[2855],{"type":30,"tag":1046,"props":2856,"children":2857},{"emptyLinePlaceholder":13},[2858],{"type":40,"value":1121},{"type":30,"tag":1046,"props":2860,"children":2861},{"class":1048,"line":1218},[2862,2866,2870,2874,2878,2883,2887,2892,2896,2900,2904],{"type":30,"tag":1046,"props":2863,"children":2864},{"style":1053},[2865],{"type":40,"value":1130},{"type":30,"tag":1046,"props":2867,"children":2868},{"style":1084},[2869],{"type":40,"value":1067},{"type":30,"tag":1046,"props":2871,"children":2872},{"style":1138},[2873],{"type":40,"value":1876},{"type":30,"tag":1046,"props":2875,"children":2876},{"style":1070},[2877],{"type":40,"value":1146},{"type":30,"tag":1046,"props":2879,"children":2880},{"style":1084},[2881],{"type":40,"value":2882},"String",{"type":30,"tag":1046,"props":2884,"children":2885},{"style":1153},[2886],{"type":40,"value":2072},{"type":30,"tag":1046,"props":2888,"children":2889},{"style":1070},[2890],{"type":40,"value":2891},",",{"type":30,"tag":1046,"props":2893,"children":2894},{"style":1084},[2895],{"type":40,"value":1894},{"type":30,"tag":1046,"props":2897,"children":2898},{"style":1153},[2899],{"type":40,"value":1156},{"type":30,"tag":1046,"props":2901,"children":2902},{"style":1070},[2903],{"type":40,"value":1161},{"type":30,"tag":1046,"props":2905,"children":2906},{"style":1070},[2907],{"type":40,"value":1073},{"type":30,"tag":1046,"props":2909,"children":2910},{"class":1048,"line":1255},[2911,2915,2919,2923,2927,2931,2936,2940,2944],{"type":30,"tag":1046,"props":2912,"children":2913},{"style":1084},[2914],{"type":40,"value":1914},{"type":30,"tag":1046,"props":2916,"children":2917},{"style":1105},[2918],{"type":40,"value":2093},{"type":30,"tag":1046,"props":2920,"children":2921},{"style":1795},[2922],{"type":40,"value":1798},{"type":30,"tag":1046,"props":2924,"children":2925},{"style":1105},[2926],{"type":40,"value":2773},{"type":30,"tag":1046,"props":2928,"children":2929},{"style":1070},[2930],{"type":40,"value":1179},{"type":30,"tag":1046,"props":2932,"children":2933},{"style":1138},[2934],{"type":40,"value":2935},"findById",{"type":30,"tag":1046,"props":2937,"children":2938},{"style":1070},[2939],{"type":40,"value":1146},{"type":30,"tag":1046,"props":2941,"children":2942},{"style":1105},[2943],{"type":40,"value":2119},{"type":30,"tag":1046,"props":2945,"children":2946},{"style":1070},[2947],{"type":40,"value":1198},{"type":30,"tag":1046,"props":2949,"children":2950},{"class":1048,"line":1284},[2951,2956,2960,2964,2968,2972],{"type":30,"tag":1046,"props":2952,"children":2953},{"style":1105},[2954],{"type":40,"value":2955},"        cart",{"type":30,"tag":1046,"props":2957,"children":2958},{"style":1070},[2959],{"type":40,"value":1179},{"type":30,"tag":1046,"props":2961,"children":2962},{"style":1138},[2963],{"type":40,"value":1936},{"type":30,"tag":1046,"props":2965,"children":2966},{"style":1070},[2967],{"type":40,"value":1146},{"type":30,"tag":1046,"props":2969,"children":2970},{"style":1105},[2971],{"type":40,"value":1193},{"type":30,"tag":1046,"props":2973,"children":2974},{"style":1070},[2975],{"type":40,"value":1198},{"type":30,"tag":1046,"props":2977,"children":2978},{"class":1048,"line":1292},[2979,2984,2988,2993,2997,3001],{"type":30,"tag":1046,"props":2980,"children":2981},{"style":1105},[2982],{"type":40,"value":2983},"        cartRepository",{"type":30,"tag":1046,"props":2985,"children":2986},{"style":1070},[2987],{"type":40,"value":1179},{"type":30,"tag":1046,"props":2989,"children":2990},{"style":1138},[2991],{"type":40,"value":2992},"save",{"type":30,"tag":1046,"props":2994,"children":2995},{"style":1070},[2996],{"type":40,"value":1146},{"type":30,"tag":1046,"props":2998,"children":2999},{"style":1105},[3000],{"type":40,"value":2152},{"type":30,"tag":1046,"props":3002,"children":3003},{"style":1070},[3004],{"type":40,"value":1198},{"type":30,"tag":1046,"props":3006,"children":3007},{"class":1048,"line":1300},[3008,3012,3017],{"type":30,"tag":1046,"props":3009,"children":3010},{"style":1053},[3011],{"type":40,"value":1333},{"type":30,"tag":1046,"props":3013,"children":3014},{"style":1105},[3015],{"type":40,"value":3016}," cart",{"type":30,"tag":1046,"props":3018,"children":3019},{"style":1070},[3020],{"type":40,"value":1113},{"type":30,"tag":1046,"props":3022,"children":3023},{"class":1048,"line":1327},[3024],{"type":30,"tag":1046,"props":3025,"children":3026},{"style":1070},[3027],{"type":40,"value":1207},{"type":30,"tag":1046,"props":3029,"children":3030},{"class":1048,"line":1354},[3031],{"type":30,"tag":1046,"props":3032,"children":3033},{"emptyLinePlaceholder":13},[3034],{"type":40,"value":1121},{"type":30,"tag":1046,"props":3036,"children":3037},{"class":1048,"line":1391},[3038,3042,3046,3050,3054,3058,3062,3066],{"type":30,"tag":1046,"props":3039,"children":3040},{"style":1053},[3041],{"type":40,"value":1130},{"type":30,"tag":1046,"props":3043,"children":3044},{"style":1084},[3045],{"type":40,"value":1067},{"type":30,"tag":1046,"props":3047,"children":3048},{"style":1138},[3049],{"type":40,"value":2049},{"type":30,"tag":1046,"props":3051,"children":3052},{"style":1070},[3053],{"type":40,"value":1146},{"type":30,"tag":1046,"props":3055,"children":3056},{"style":1084},[3057],{"type":40,"value":2882},{"type":30,"tag":1046,"props":3059,"children":3060},{"style":1153},[3061],{"type":40,"value":2072},{"type":30,"tag":1046,"props":3063,"children":3064},{"style":1070},[3065],{"type":40,"value":1161},{"type":30,"tag":1046,"props":3067,"children":3068},{"style":1070},[3069],{"type":40,"value":1073},{"type":30,"tag":1046,"props":3071,"children":3072},{"class":1048,"line":1409},[3073,3077,3081,3085,3089,3093,3097],{"type":30,"tag":1046,"props":3074,"children":3075},{"style":1053},[3076],{"type":40,"value":1333},{"type":30,"tag":1046,"props":3078,"children":3079},{"style":1105},[3080],{"type":40,"value":2773},{"type":30,"tag":1046,"props":3082,"children":3083},{"style":1070},[3084],{"type":40,"value":1179},{"type":30,"tag":1046,"props":3086,"children":3087},{"style":1138},[3088],{"type":40,"value":2935},{"type":30,"tag":1046,"props":3090,"children":3091},{"style":1070},[3092],{"type":40,"value":1146},{"type":30,"tag":1046,"props":3094,"children":3095},{"style":1105},[3096],{"type":40,"value":2119},{"type":30,"tag":1046,"props":3098,"children":3099},{"style":1070},[3100],{"type":40,"value":1198},{"type":30,"tag":1046,"props":3102,"children":3103},{"class":1048,"line":1417},[3104],{"type":30,"tag":1046,"props":3105,"children":3106},{"style":1070},[3107],{"type":40,"value":1207},{"type":30,"tag":1046,"props":3109,"children":3110},{"class":1048,"line":2023},[3111],{"type":30,"tag":1046,"props":3112,"children":3113},{"style":1070},[3114],{"type":40,"value":1423},{"type":30,"tag":1518,"props":3116,"children":3117},{"start":681},[3118],{"type":30,"tag":167,"props":3119,"children":3120},{},[3121,3125],{"type":30,"tag":36,"props":3122,"children":3123},{},[3124],{"type":40,"value":2383},{"type":40,"value":3126}," : Ici, nous implémentons les détails techniques, comme le stockage des données.",{"type":30,"tag":1035,"props":3128,"children":3130},{"code":3129,"language":1038,"meta":8,"className":1039,"style":8},"@Repository\npublic class CartRepositoryImpl implements CartRepository {\n\n    private final Map\u003CString, Cart> database = new HashMap\u003C>();\n\n    @Override\n    public Cart findById(String cartId) {\n        return database.getOrDefault(cartId, new Cart());\n    }\n\n    @Override\n    public void save(Cart cart) {\n        database.put(\"cartId\", cart);\n    }\n}\n",[3131],{"type":30,"tag":1042,"props":3132,"children":3133},{"__ignoreMap":8},[3134,3146,3175,3182,3240,3247,3259,3295,3341,3348,3355,3366,3402,3440,3447],{"type":30,"tag":1046,"props":3135,"children":3136},{"class":1048,"line":1049},[3137,3141],{"type":30,"tag":1046,"props":3138,"children":3139},{"style":1647},[3140],{"type":40,"value":1650},{"type":30,"tag":1046,"props":3142,"children":3143},{"style":1653},[3144],{"type":40,"value":3145},"Repository\n",{"type":30,"tag":1046,"props":3147,"children":3148},{"class":1048,"line":675},[3149,3153,3157,3162,3167,3171],{"type":30,"tag":1046,"props":3150,"children":3151},{"style":1053},[3152],{"type":40,"value":1056},{"type":30,"tag":1046,"props":3154,"children":3155},{"style":1053},[3156],{"type":40,"value":1061},{"type":30,"tag":1046,"props":3158,"children":3159},{"style":1064},[3160],{"type":40,"value":3161}," CartRepositoryImpl",{"type":30,"tag":1046,"props":3163,"children":3164},{"style":1053},[3165],{"type":40,"value":3166}," implements",{"type":30,"tag":1046,"props":3168,"children":3169},{"style":1064},[3170],{"type":40,"value":2768},{"type":30,"tag":1046,"props":3172,"children":3173},{"style":1070},[3174],{"type":40,"value":1073},{"type":30,"tag":1046,"props":3176,"children":3177},{"class":1048,"line":681},[3178],{"type":30,"tag":1046,"props":3179,"children":3180},{"emptyLinePlaceholder":13},[3181],{"type":40,"value":1121},{"type":30,"tag":1046,"props":3183,"children":3184},{"class":1048,"line":1124},[3185,3189,3193,3198,3202,3206,3210,3214,3218,3223,3227,3231,3236],{"type":30,"tag":1046,"props":3186,"children":3187},{"style":1053},[3188],{"type":40,"value":1081},{"type":30,"tag":1046,"props":3190,"children":3191},{"style":1053},[3192],{"type":40,"value":1721},{"type":30,"tag":1046,"props":3194,"children":3195},{"style":1084},[3196],{"type":40,"value":3197}," Map",{"type":30,"tag":1046,"props":3199,"children":3200},{"style":1070},[3201],{"type":40,"value":1092},{"type":30,"tag":1046,"props":3203,"children":3204},{"style":1053},[3205],{"type":40,"value":2882},{"type":30,"tag":1046,"props":3207,"children":3208},{"style":1070},[3209],{"type":40,"value":2891},{"type":30,"tag":1046,"props":3211,"children":3212},{"style":1053},[3213],{"type":40,"value":1067},{"type":30,"tag":1046,"props":3215,"children":3216},{"style":1070},[3217],{"type":40,"value":1102},{"type":30,"tag":1046,"props":3219,"children":3220},{"style":1105},[3221],{"type":40,"value":3222}," database ",{"type":30,"tag":1046,"props":3224,"children":3225},{"style":1795},[3226],{"type":40,"value":1798},{"type":30,"tag":1046,"props":3228,"children":3229},{"style":1053},[3230],{"type":40,"value":2480},{"type":30,"tag":1046,"props":3232,"children":3233},{"style":1084},[3234],{"type":40,"value":3235}," HashMap",{"type":30,"tag":1046,"props":3237,"children":3238},{"style":1070},[3239],{"type":40,"value":2490},{"type":30,"tag":1046,"props":3241,"children":3242},{"class":1048,"line":1168},[3243],{"type":30,"tag":1046,"props":3244,"children":3245},{"emptyLinePlaceholder":13},[3246],{"type":40,"value":1121},{"type":30,"tag":1046,"props":3248,"children":3249},{"class":1048,"line":1201},[3250,3254],{"type":30,"tag":1046,"props":3251,"children":3252},{"style":1647},[3253],{"type":40,"value":1828},{"type":30,"tag":1046,"props":3255,"children":3256},{"style":1653},[3257],{"type":40,"value":3258},"Override\n",{"type":30,"tag":1046,"props":3260,"children":3261},{"class":1048,"line":1210},[3262,3266,3270,3275,3279,3283,3287,3291],{"type":30,"tag":1046,"props":3263,"children":3264},{"style":1053},[3265],{"type":40,"value":1130},{"type":30,"tag":1046,"props":3267,"children":3268},{"style":1084},[3269],{"type":40,"value":1067},{"type":30,"tag":1046,"props":3271,"children":3272},{"style":1138},[3273],{"type":40,"value":3274}," findById",{"type":30,"tag":1046,"props":3276,"children":3277},{"style":1070},[3278],{"type":40,"value":1146},{"type":30,"tag":1046,"props":3280,"children":3281},{"style":1084},[3282],{"type":40,"value":2882},{"type":30,"tag":1046,"props":3284,"children":3285},{"style":1153},[3286],{"type":40,"value":2072},{"type":30,"tag":1046,"props":3288,"children":3289},{"style":1070},[3290],{"type":40,"value":1161},{"type":30,"tag":1046,"props":3292,"children":3293},{"style":1070},[3294],{"type":40,"value":1073},{"type":30,"tag":1046,"props":3296,"children":3297},{"class":1048,"line":1218},[3298,3302,3307,3311,3316,3320,3324,3328,3332,3336],{"type":30,"tag":1046,"props":3299,"children":3300},{"style":1053},[3301],{"type":40,"value":1333},{"type":30,"tag":1046,"props":3303,"children":3304},{"style":1105},[3305],{"type":40,"value":3306}," database",{"type":30,"tag":1046,"props":3308,"children":3309},{"style":1070},[3310],{"type":40,"value":1179},{"type":30,"tag":1046,"props":3312,"children":3313},{"style":1138},[3314],{"type":40,"value":3315},"getOrDefault",{"type":30,"tag":1046,"props":3317,"children":3318},{"style":1070},[3319],{"type":40,"value":1146},{"type":30,"tag":1046,"props":3321,"children":3322},{"style":1105},[3323],{"type":40,"value":2119},{"type":30,"tag":1046,"props":3325,"children":3326},{"style":1070},[3327],{"type":40,"value":2891},{"type":30,"tag":1046,"props":3329,"children":3330},{"style":1053},[3331],{"type":40,"value":2480},{"type":30,"tag":1046,"props":3333,"children":3334},{"style":1138},[3335],{"type":40,"value":1067},{"type":30,"tag":1046,"props":3337,"children":3338},{"style":1070},[3339],{"type":40,"value":3340},"());\n",{"type":30,"tag":1046,"props":3342,"children":3343},{"class":1048,"line":1255},[3344],{"type":30,"tag":1046,"props":3345,"children":3346},{"style":1070},[3347],{"type":40,"value":1207},{"type":30,"tag":1046,"props":3349,"children":3350},{"class":1048,"line":1284},[3351],{"type":30,"tag":1046,"props":3352,"children":3353},{"emptyLinePlaceholder":13},[3354],{"type":40,"value":1121},{"type":30,"tag":1046,"props":3356,"children":3357},{"class":1048,"line":1292},[3358,3362],{"type":30,"tag":1046,"props":3359,"children":3360},{"style":1647},[3361],{"type":40,"value":1828},{"type":30,"tag":1046,"props":3363,"children":3364},{"style":1653},[3365],{"type":40,"value":3258},{"type":30,"tag":1046,"props":3367,"children":3368},{"class":1048,"line":1300},[3369,3373,3377,3382,3386,3390,3394,3398],{"type":30,"tag":1046,"props":3370,"children":3371},{"style":1053},[3372],{"type":40,"value":1130},{"type":30,"tag":1046,"props":3374,"children":3375},{"style":1053},[3376],{"type":40,"value":1135},{"type":30,"tag":1046,"props":3378,"children":3379},{"style":1138},[3380],{"type":40,"value":3381}," save",{"type":30,"tag":1046,"props":3383,"children":3384},{"style":1070},[3385],{"type":40,"value":1146},{"type":30,"tag":1046,"props":3387,"children":3388},{"style":1084},[3389],{"type":40,"value":1867},{"type":30,"tag":1046,"props":3391,"children":3392},{"style":1153},[3393],{"type":40,"value":3016},{"type":30,"tag":1046,"props":3395,"children":3396},{"style":1070},[3397],{"type":40,"value":1161},{"type":30,"tag":1046,"props":3399,"children":3400},{"style":1070},[3401],{"type":40,"value":1073},{"type":30,"tag":1046,"props":3403,"children":3404},{"class":1048,"line":1327},[3405,3410,3414,3419,3423,3428,3432,3436],{"type":30,"tag":1046,"props":3406,"children":3407},{"style":1105},[3408],{"type":40,"value":3409},"        database",{"type":30,"tag":1046,"props":3411,"children":3412},{"style":1070},[3413],{"type":40,"value":1179},{"type":30,"tag":1046,"props":3415,"children":3416},{"style":1138},[3417],{"type":40,"value":3418},"put",{"type":30,"tag":1046,"props":3420,"children":3421},{"style":1070},[3422],{"type":40,"value":1146},{"type":30,"tag":1046,"props":3424,"children":3425},{"style":1675},[3426],{"type":40,"value":3427},"\"cartId\"",{"type":30,"tag":1046,"props":3429,"children":3430},{"style":1070},[3431],{"type":40,"value":2891},{"type":30,"tag":1046,"props":3433,"children":3434},{"style":1105},[3435],{"type":40,"value":3016},{"type":30,"tag":1046,"props":3437,"children":3438},{"style":1070},[3439],{"type":40,"value":1198},{"type":30,"tag":1046,"props":3441,"children":3442},{"class":1048,"line":1354},[3443],{"type":30,"tag":1046,"props":3444,"children":3445},{"style":1070},[3446],{"type":40,"value":1207},{"type":30,"tag":1046,"props":3448,"children":3449},{"class":1048,"line":1391},[3450],{"type":30,"tag":1046,"props":3451,"children":3452},{"style":1070},[3453],{"type":40,"value":1423},{"type":30,"tag":964,"props":3455,"children":3456},{},[3457,3465],{"type":30,"tag":43,"props":3458,"children":3459},{},[3460],{"type":30,"tag":36,"props":3461,"children":3462},{},[3463],{"type":40,"value":3464},"Tip : Utiliser des Adapters pour faciliter les tests",{"type":30,"tag":43,"props":3466,"children":3467},{},[3468,3470,3475,3477,3482],{"type":40,"value":3469},"Une des forces de l'architecture hexagonale est de permettre un ",{"type":30,"tag":36,"props":3471,"children":3472},{},[3473],{"type":40,"value":3474},"découplage fort",{"type":40,"value":3476}," entre la logique métier et les aspects techniques. En implémentant des ",{"type":30,"tag":36,"props":3478,"children":3479},{},[3480],{"type":40,"value":3481},"adapters",{"type":40,"value":3483}," dans la couche infrastructure, vous pouvez facilement substituer des dépendances pour les tests.",{"type":30,"tag":84,"props":3485,"children":3486},{},[],{"type":30,"tag":31,"props":3488,"children":3490},{"id":3489},"exemples-en-java-de-la-théorie-à-la-pratique",[3491],{"type":30,"tag":36,"props":3492,"children":3493},{},[3494],{"type":40,"value":3495},"Exemples en Java : De la théorie à la pratique",{"type":30,"tag":43,"props":3497,"children":3498},{},[3499,3501,3506],{"type":40,"value":3500},"Nous allons créer un microservice qui gère un ",{"type":30,"tag":36,"props":3502,"children":3503},{},[3504],{"type":40,"value":3505},"Panier d’achat",{"type":40,"value":3507}," dans une application de gestion de commandes. Ce service illustrera comment utiliser les trois concepts (DDD, API First et architecture hexagonale) pour structurer un service solide, maintenable et facilement testable. C’est un pattern que j’ai appliqué dans plusieurs missions de refactorisation d’applications métier, notamment dans le secteur financier : la clarté des couches se traduit directement par une réduction du lead time de correction des bugs.",{"type":30,"tag":116,"props":3509,"children":3511},{"id":3510},"étape-1-définir-le-domaine-métier-avec-ddd",[3512],{"type":30,"tag":36,"props":3513,"children":3514},{},[3515],{"type":40,"value":3516},"Étape 1 : Définir le domaine métier avec DDD",{"type":30,"tag":43,"props":3518,"children":3519},{},[3520,3522,3526],{"type":40,"value":3521},"Notre service ",{"type":30,"tag":36,"props":3523,"children":3524},{},[3525],{"type":40,"value":1632},{"type":40,"value":3527}," (Cart) doit gérer les actions principales suivantes :",{"type":30,"tag":163,"props":3529,"children":3530},{},[3531,3536,3541],{"type":30,"tag":167,"props":3532,"children":3533},{},[3534],{"type":40,"value":3535},"Ajouter un article au panier",{"type":30,"tag":167,"props":3537,"children":3538},{},[3539],{"type":40,"value":3540},"Supprimer un article",{"type":30,"tag":167,"props":3542,"children":3543},{},[3544],{"type":40,"value":3545},"Calculer le total des articles dans le panier",{"type":30,"tag":43,"props":3547,"children":3548},{},[3549,3551,3555],{"type":40,"value":3550},"Commençons par définir la logique métier de base dans la couche ",{"type":30,"tag":36,"props":3552,"children":3553},{},[3554],{"type":40,"value":2363},{"type":40,"value":1179},{"type":30,"tag":1035,"props":3557,"children":3559},{"code":3558,"language":1038,"meta":8,"className":1039,"style":8},"public class Cart {\n    private final List\u003CItem> items = new ArrayList\u003C>();\n\n    public void addItem(Item item) {\n        items.add(item);\n    }\n\n    public void removeItem(Item item) {\n        items.remove(item);\n    }\n\n    public double calculateTotal() {\n        return items.stream()\n            .mapToDouble(Item::getPrice)\n            .sum();\n    }\n\n    public List\u003CItem> getItems() {\n        return new ArrayList\u003C>(items); // retour d'une copie pour éviter les modifications extérieures\n    }\n}\n",[3560],{"type":30,"tag":1042,"props":3561,"children":3562},{"__ignoreMap":8},[3563,3582,3629,3636,3671,3698,3705,3712,3747,3774,3781,3788,3811,3834,3865,3880,3887,3894,3929,3965,3972],{"type":30,"tag":1046,"props":3564,"children":3565},{"class":1048,"line":1049},[3566,3570,3574,3578],{"type":30,"tag":1046,"props":3567,"children":3568},{"style":1053},[3569],{"type":40,"value":1056},{"type":30,"tag":1046,"props":3571,"children":3572},{"style":1053},[3573],{"type":40,"value":1061},{"type":30,"tag":1046,"props":3575,"children":3576},{"style":1064},[3577],{"type":40,"value":1067},{"type":30,"tag":1046,"props":3579,"children":3580},{"style":1070},[3581],{"type":40,"value":1073},{"type":30,"tag":1046,"props":3583,"children":3584},{"class":1048,"line":675},[3585,3589,3593,3597,3601,3605,3609,3613,3617,3621,3625],{"type":30,"tag":1046,"props":3586,"children":3587},{"style":1053},[3588],{"type":40,"value":1081},{"type":30,"tag":1046,"props":3590,"children":3591},{"style":1053},[3592],{"type":40,"value":1721},{"type":30,"tag":1046,"props":3594,"children":3595},{"style":1084},[3596],{"type":40,"value":1087},{"type":30,"tag":1046,"props":3598,"children":3599},{"style":1070},[3600],{"type":40,"value":1092},{"type":30,"tag":1046,"props":3602,"children":3603},{"style":1053},[3604],{"type":40,"value":1097},{"type":30,"tag":1046,"props":3606,"children":3607},{"style":1070},[3608],{"type":40,"value":1102},{"type":30,"tag":1046,"props":3610,"children":3611},{"style":1105},[3612],{"type":40,"value":2471},{"type":30,"tag":1046,"props":3614,"children":3615},{"style":1795},[3616],{"type":40,"value":1798},{"type":30,"tag":1046,"props":3618,"children":3619},{"style":1053},[3620],{"type":40,"value":2480},{"type":30,"tag":1046,"props":3622,"children":3623},{"style":1084},[3624],{"type":40,"value":2485},{"type":30,"tag":1046,"props":3626,"children":3627},{"style":1070},[3628],{"type":40,"value":2490},{"type":30,"tag":1046,"props":3630,"children":3631},{"class":1048,"line":681},[3632],{"type":30,"tag":1046,"props":3633,"children":3634},{"emptyLinePlaceholder":13},[3635],{"type":40,"value":1121},{"type":30,"tag":1046,"props":3637,"children":3638},{"class":1048,"line":1124},[3639,3643,3647,3651,3655,3659,3663,3667],{"type":30,"tag":1046,"props":3640,"children":3641},{"style":1053},[3642],{"type":40,"value":1130},{"type":30,"tag":1046,"props":3644,"children":3645},{"style":1053},[3646],{"type":40,"value":1135},{"type":30,"tag":1046,"props":3648,"children":3649},{"style":1138},[3650],{"type":40,"value":1141},{"type":30,"tag":1046,"props":3652,"children":3653},{"style":1070},[3654],{"type":40,"value":1146},{"type":30,"tag":1046,"props":3656,"children":3657},{"style":1084},[3658],{"type":40,"value":1097},{"type":30,"tag":1046,"props":3660,"children":3661},{"style":1153},[3662],{"type":40,"value":1156},{"type":30,"tag":1046,"props":3664,"children":3665},{"style":1070},[3666],{"type":40,"value":1161},{"type":30,"tag":1046,"props":3668,"children":3669},{"style":1070},[3670],{"type":40,"value":1073},{"type":30,"tag":1046,"props":3672,"children":3673},{"class":1048,"line":1168},[3674,3678,3682,3686,3690,3694],{"type":30,"tag":1046,"props":3675,"children":3676},{"style":1105},[3677],{"type":40,"value":1174},{"type":30,"tag":1046,"props":3679,"children":3680},{"style":1070},[3681],{"type":40,"value":1179},{"type":30,"tag":1046,"props":3683,"children":3684},{"style":1138},[3685],{"type":40,"value":1184},{"type":30,"tag":1046,"props":3687,"children":3688},{"style":1070},[3689],{"type":40,"value":1146},{"type":30,"tag":1046,"props":3691,"children":3692},{"style":1105},[3693],{"type":40,"value":1193},{"type":30,"tag":1046,"props":3695,"children":3696},{"style":1070},[3697],{"type":40,"value":1198},{"type":30,"tag":1046,"props":3699,"children":3700},{"class":1048,"line":1201},[3701],{"type":30,"tag":1046,"props":3702,"children":3703},{"style":1070},[3704],{"type":40,"value":1207},{"type":30,"tag":1046,"props":3706,"children":3707},{"class":1048,"line":1210},[3708],{"type":30,"tag":1046,"props":3709,"children":3710},{"emptyLinePlaceholder":13},[3711],{"type":40,"value":1121},{"type":30,"tag":1046,"props":3713,"children":3714},{"class":1048,"line":1218},[3715,3719,3723,3727,3731,3735,3739,3743],{"type":30,"tag":1046,"props":3716,"children":3717},{"style":1053},[3718],{"type":40,"value":1130},{"type":30,"tag":1046,"props":3720,"children":3721},{"style":1053},[3722],{"type":40,"value":1135},{"type":30,"tag":1046,"props":3724,"children":3725},{"style":1138},[3726],{"type":40,"value":1232},{"type":30,"tag":1046,"props":3728,"children":3729},{"style":1070},[3730],{"type":40,"value":1146},{"type":30,"tag":1046,"props":3732,"children":3733},{"style":1084},[3734],{"type":40,"value":1097},{"type":30,"tag":1046,"props":3736,"children":3737},{"style":1153},[3738],{"type":40,"value":1156},{"type":30,"tag":1046,"props":3740,"children":3741},{"style":1070},[3742],{"type":40,"value":1161},{"type":30,"tag":1046,"props":3744,"children":3745},{"style":1070},[3746],{"type":40,"value":1073},{"type":30,"tag":1046,"props":3748,"children":3749},{"class":1048,"line":1255},[3750,3754,3758,3762,3766,3770],{"type":30,"tag":1046,"props":3751,"children":3752},{"style":1105},[3753],{"type":40,"value":1174},{"type":30,"tag":1046,"props":3755,"children":3756},{"style":1070},[3757],{"type":40,"value":1179},{"type":30,"tag":1046,"props":3759,"children":3760},{"style":1138},[3761],{"type":40,"value":1269},{"type":30,"tag":1046,"props":3763,"children":3764},{"style":1070},[3765],{"type":40,"value":1146},{"type":30,"tag":1046,"props":3767,"children":3768},{"style":1105},[3769],{"type":40,"value":1193},{"type":30,"tag":1046,"props":3771,"children":3772},{"style":1070},[3773],{"type":40,"value":1198},{"type":30,"tag":1046,"props":3775,"children":3776},{"class":1048,"line":1284},[3777],{"type":30,"tag":1046,"props":3778,"children":3779},{"style":1070},[3780],{"type":40,"value":1207},{"type":30,"tag":1046,"props":3782,"children":3783},{"class":1048,"line":1292},[3784],{"type":30,"tag":1046,"props":3785,"children":3786},{"emptyLinePlaceholder":13},[3787],{"type":40,"value":1121},{"type":30,"tag":1046,"props":3789,"children":3790},{"class":1048,"line":1300},[3791,3795,3799,3803,3807],{"type":30,"tag":1046,"props":3792,"children":3793},{"style":1053},[3794],{"type":40,"value":1130},{"type":30,"tag":1046,"props":3796,"children":3797},{"style":1053},[3798],{"type":40,"value":1310},{"type":30,"tag":1046,"props":3800,"children":3801},{"style":1138},[3802],{"type":40,"value":1315},{"type":30,"tag":1046,"props":3804,"children":3805},{"style":1070},[3806],{"type":40,"value":1320},{"type":30,"tag":1046,"props":3808,"children":3809},{"style":1070},[3810],{"type":40,"value":1073},{"type":30,"tag":1046,"props":3812,"children":3813},{"class":1048,"line":1327},[3814,3818,3822,3826,3830],{"type":30,"tag":1046,"props":3815,"children":3816},{"style":1053},[3817],{"type":40,"value":1333},{"type":30,"tag":1046,"props":3819,"children":3820},{"style":1105},[3821],{"type":40,"value":1108},{"type":30,"tag":1046,"props":3823,"children":3824},{"style":1070},[3825],{"type":40,"value":1179},{"type":30,"tag":1046,"props":3827,"children":3828},{"style":1138},[3829],{"type":40,"value":1346},{"type":30,"tag":1046,"props":3831,"children":3832},{"style":1070},[3833],{"type":40,"value":1351},{"type":30,"tag":1046,"props":3835,"children":3836},{"class":1048,"line":1354},[3837,3841,3845,3849,3853,3857,3861],{"type":30,"tag":1046,"props":3838,"children":3839},{"style":1070},[3840],{"type":40,"value":1360},{"type":30,"tag":1046,"props":3842,"children":3843},{"style":1138},[3844],{"type":40,"value":1365},{"type":30,"tag":1046,"props":3846,"children":3847},{"style":1070},[3848],{"type":40,"value":1146},{"type":30,"tag":1046,"props":3850,"children":3851},{"style":1105},[3852],{"type":40,"value":1097},{"type":30,"tag":1046,"props":3854,"children":3855},{"style":1053},[3856],{"type":40,"value":1378},{"type":30,"tag":1046,"props":3858,"children":3859},{"style":1105},[3860],{"type":40,"value":1383},{"type":30,"tag":1046,"props":3862,"children":3863},{"style":1070},[3864],{"type":40,"value":1388},{"type":30,"tag":1046,"props":3866,"children":3867},{"class":1048,"line":1391},[3868,3872,3876],{"type":30,"tag":1046,"props":3869,"children":3870},{"style":1070},[3871],{"type":40,"value":1360},{"type":30,"tag":1046,"props":3873,"children":3874},{"style":1138},[3875],{"type":40,"value":1401},{"type":30,"tag":1046,"props":3877,"children":3878},{"style":1070},[3879],{"type":40,"value":1406},{"type":30,"tag":1046,"props":3881,"children":3882},{"class":1048,"line":1409},[3883],{"type":30,"tag":1046,"props":3884,"children":3885},{"style":1070},[3886],{"type":40,"value":1207},{"type":30,"tag":1046,"props":3888,"children":3889},{"class":1048,"line":1417},[3890],{"type":30,"tag":1046,"props":3891,"children":3892},{"emptyLinePlaceholder":13},[3893],{"type":40,"value":1121},{"type":30,"tag":1046,"props":3895,"children":3896},{"class":1048,"line":2023},[3897,3901,3905,3909,3913,3917,3921,3925],{"type":30,"tag":1046,"props":3898,"children":3899},{"style":1053},[3900],{"type":40,"value":1130},{"type":30,"tag":1046,"props":3902,"children":3903},{"style":1084},[3904],{"type":40,"value":1087},{"type":30,"tag":1046,"props":3906,"children":3907},{"style":1070},[3908],{"type":40,"value":1092},{"type":30,"tag":1046,"props":3910,"children":3911},{"style":1053},[3912],{"type":40,"value":1097},{"type":30,"tag":1046,"props":3914,"children":3915},{"style":1070},[3916],{"type":40,"value":1102},{"type":30,"tag":1046,"props":3918,"children":3919},{"style":1138},[3920],{"type":40,"value":2677},{"type":30,"tag":1046,"props":3922,"children":3923},{"style":1070},[3924],{"type":40,"value":1320},{"type":30,"tag":1046,"props":3926,"children":3927},{"style":1070},[3928],{"type":40,"value":1073},{"type":30,"tag":1046,"props":3930,"children":3931},{"class":1048,"line":2083},[3932,3936,3940,3944,3949,3954,3959],{"type":30,"tag":1046,"props":3933,"children":3934},{"style":1053},[3935],{"type":40,"value":1333},{"type":30,"tag":1046,"props":3937,"children":3938},{"style":1053},[3939],{"type":40,"value":2480},{"type":30,"tag":1046,"props":3941,"children":3942},{"style":1084},[3943],{"type":40,"value":2485},{"type":30,"tag":1046,"props":3945,"children":3946},{"style":1070},[3947],{"type":40,"value":3948},"\u003C>(",{"type":30,"tag":1046,"props":3950,"children":3951},{"style":1105},[3952],{"type":40,"value":3953},"items",{"type":30,"tag":1046,"props":3955,"children":3956},{"style":1070},[3957],{"type":40,"value":3958},");",{"type":30,"tag":1046,"props":3960,"children":3962},{"style":3961},"--shiki-default:#737994;--shiki-default-font-style:italic;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit",[3963],{"type":40,"value":3964}," // retour d'une copie pour éviter les modifications extérieures\n",{"type":30,"tag":1046,"props":3966,"children":3967},{"class":1048,"line":2126},[3968],{"type":30,"tag":1046,"props":3969,"children":3970},{"style":1070},[3971],{"type":40,"value":1207},{"type":30,"tag":1046,"props":3973,"children":3974},{"class":1048,"line":2159},[3975],{"type":30,"tag":1046,"props":3976,"children":3977},{"style":1070},[3978],{"type":40,"value":1423},{"type":30,"tag":116,"props":3980,"children":3982},{"id":3981},"étape-2-orchestrer-les-cas-dutilisation-dans-la-couche-application",[3983],{"type":30,"tag":36,"props":3984,"children":3985},{},[3986],{"type":40,"value":3987},"Étape 2 : Orchestrer les cas d’utilisation dans la couche Application",{"type":30,"tag":43,"props":3989,"children":3990},{},[3991,3993,3997],{"type":40,"value":3992},"Ensuite, nous avons besoin d’une couche ",{"type":30,"tag":36,"props":3994,"children":3995},{},[3996],{"type":40,"value":2373},{"type":40,"value":3998}," pour orchestrer les interactions avec ce domaine.",{"type":30,"tag":1035,"props":4000,"children":4002},{"code":4001,"language":1038,"meta":8,"className":1039,"style":8},"public class CartService {\n    private final CartRepository cartRepository;\n\n    public CartService(CartRepository cartRepository) {\n        this.cartRepository = cartRepository;\n    }\n\n    public Cart addItemToCart(String cartId, Item item) {\n        Cart cart = cartRepository.findById(cartId)\n                .orElse(new Cart());\n        cart.addItem(item);\n        cartRepository.save(cart);\n        return cart;\n    }\n\n    public Cart removeItemFromCart(String cartId, Item item) {\n        Cart cart = cartRepository.findById(cartId)\n                .orElseThrow(() -> new IllegalArgumentException(\"Panier introuvable\"));\n        cart.removeItem(item);\n        cartRepository.save(cart);\n        return cart;\n    }\n\n    public double getCartTotal(String cartId) {\n        Cart cart = cartRepository.findById(cartId)\n                .orElseThrow(() -> new IllegalArgumentException(\"Panier introuvable\"));\n        return cart.calculateTotal();\n    }\n\n    public Cart getCart(String cartId) {\n        return cartRepository.findById(cartId)\n                .orElseThrow(() -> new IllegalArgumentException(\"Panier introuvable\"));\n    }\n}\n",[4003],{"type":30,"tag":1042,"props":4004,"children":4005},{"__ignoreMap":8},[4006,4025,4048,4055,4086,4113,4120,4127,4174,4213,4243,4270,4297,4312,4319,4326,4374,4413,4458,4486,4513,4528,4535,4543,4580,4620,4660,4685,4693,4701,4737,4769,4809,4817],{"type":30,"tag":1046,"props":4007,"children":4008},{"class":1048,"line":1049},[4009,4013,4017,4021],{"type":30,"tag":1046,"props":4010,"children":4011},{"style":1053},[4012],{"type":40,"value":1056},{"type":30,"tag":1046,"props":4014,"children":4015},{"style":1053},[4016],{"type":40,"value":1061},{"type":30,"tag":1046,"props":4018,"children":4019},{"style":1064},[4020],{"type":40,"value":1726},{"type":30,"tag":1046,"props":4022,"children":4023},{"style":1070},[4024],{"type":40,"value":1073},{"type":30,"tag":1046,"props":4026,"children":4027},{"class":1048,"line":675},[4028,4032,4036,4040,4044],{"type":30,"tag":1046,"props":4029,"children":4030},{"style":1053},[4031],{"type":40,"value":1081},{"type":30,"tag":1046,"props":4033,"children":4034},{"style":1053},[4035],{"type":40,"value":1721},{"type":30,"tag":1046,"props":4037,"children":4038},{"style":1084},[4039],{"type":40,"value":2768},{"type":30,"tag":1046,"props":4041,"children":4042},{"style":1105},[4043],{"type":40,"value":2773},{"type":30,"tag":1046,"props":4045,"children":4046},{"style":1070},[4047],{"type":40,"value":1113},{"type":30,"tag":1046,"props":4049,"children":4050},{"class":1048,"line":681},[4051],{"type":30,"tag":1046,"props":4052,"children":4053},{"emptyLinePlaceholder":13},[4054],{"type":40,"value":1121},{"type":30,"tag":1046,"props":4056,"children":4057},{"class":1048,"line":1124},[4058,4062,4066,4070,4074,4078,4082],{"type":30,"tag":1046,"props":4059,"children":4060},{"style":1053},[4061],{"type":40,"value":1130},{"type":30,"tag":1046,"props":4063,"children":4064},{"style":1138},[4065],{"type":40,"value":1726},{"type":30,"tag":1046,"props":4067,"children":4068},{"style":1070},[4069],{"type":40,"value":1146},{"type":30,"tag":1046,"props":4071,"children":4072},{"style":1084},[4073],{"type":40,"value":2804},{"type":30,"tag":1046,"props":4075,"children":4076},{"style":1153},[4077],{"type":40,"value":2773},{"type":30,"tag":1046,"props":4079,"children":4080},{"style":1070},[4081],{"type":40,"value":1161},{"type":30,"tag":1046,"props":4083,"children":4084},{"style":1070},[4085],{"type":40,"value":1073},{"type":30,"tag":1046,"props":4087,"children":4088},{"class":1048,"line":1168},[4089,4093,4097,4101,4105,4109],{"type":30,"tag":1046,"props":4090,"children":4091},{"style":1780},[4092],{"type":40,"value":1783},{"type":30,"tag":1046,"props":4094,"children":4095},{"style":1070},[4096],{"type":40,"value":1179},{"type":30,"tag":1046,"props":4098,"children":4099},{"style":1105},[4100],{"type":40,"value":2832},{"type":30,"tag":1046,"props":4102,"children":4103},{"style":1795},[4104],{"type":40,"value":1798},{"type":30,"tag":1046,"props":4106,"children":4107},{"style":1105},[4108],{"type":40,"value":2773},{"type":30,"tag":1046,"props":4110,"children":4111},{"style":1070},[4112],{"type":40,"value":1113},{"type":30,"tag":1046,"props":4114,"children":4115},{"class":1048,"line":1201},[4116],{"type":30,"tag":1046,"props":4117,"children":4118},{"style":1070},[4119],{"type":40,"value":1207},{"type":30,"tag":1046,"props":4121,"children":4122},{"class":1048,"line":1210},[4123],{"type":30,"tag":1046,"props":4124,"children":4125},{"emptyLinePlaceholder":13},[4126],{"type":40,"value":1121},{"type":30,"tag":1046,"props":4128,"children":4129},{"class":1048,"line":1218},[4130,4134,4138,4142,4146,4150,4154,4158,4162,4166,4170],{"type":30,"tag":1046,"props":4131,"children":4132},{"style":1053},[4133],{"type":40,"value":1130},{"type":30,"tag":1046,"props":4135,"children":4136},{"style":1084},[4137],{"type":40,"value":1067},{"type":30,"tag":1046,"props":4139,"children":4140},{"style":1138},[4141],{"type":40,"value":1876},{"type":30,"tag":1046,"props":4143,"children":4144},{"style":1070},[4145],{"type":40,"value":1146},{"type":30,"tag":1046,"props":4147,"children":4148},{"style":1084},[4149],{"type":40,"value":2882},{"type":30,"tag":1046,"props":4151,"children":4152},{"style":1153},[4153],{"type":40,"value":2072},{"type":30,"tag":1046,"props":4155,"children":4156},{"style":1070},[4157],{"type":40,"value":2891},{"type":30,"tag":1046,"props":4159,"children":4160},{"style":1084},[4161],{"type":40,"value":1894},{"type":30,"tag":1046,"props":4163,"children":4164},{"style":1153},[4165],{"type":40,"value":1156},{"type":30,"tag":1046,"props":4167,"children":4168},{"style":1070},[4169],{"type":40,"value":1161},{"type":30,"tag":1046,"props":4171,"children":4172},{"style":1070},[4173],{"type":40,"value":1073},{"type":30,"tag":1046,"props":4175,"children":4176},{"class":1048,"line":1255},[4177,4181,4185,4189,4193,4197,4201,4205,4209],{"type":30,"tag":1046,"props":4178,"children":4179},{"style":1084},[4180],{"type":40,"value":1914},{"type":30,"tag":1046,"props":4182,"children":4183},{"style":1105},[4184],{"type":40,"value":2093},{"type":30,"tag":1046,"props":4186,"children":4187},{"style":1795},[4188],{"type":40,"value":1798},{"type":30,"tag":1046,"props":4190,"children":4191},{"style":1105},[4192],{"type":40,"value":2773},{"type":30,"tag":1046,"props":4194,"children":4195},{"style":1070},[4196],{"type":40,"value":1179},{"type":30,"tag":1046,"props":4198,"children":4199},{"style":1138},[4200],{"type":40,"value":2935},{"type":30,"tag":1046,"props":4202,"children":4203},{"style":1070},[4204],{"type":40,"value":1146},{"type":30,"tag":1046,"props":4206,"children":4207},{"style":1105},[4208],{"type":40,"value":2119},{"type":30,"tag":1046,"props":4210,"children":4211},{"style":1070},[4212],{"type":40,"value":1388},{"type":30,"tag":1046,"props":4214,"children":4215},{"class":1048,"line":1284},[4216,4221,4226,4230,4235,4239],{"type":30,"tag":1046,"props":4217,"children":4218},{"style":1070},[4219],{"type":40,"value":4220},"                .",{"type":30,"tag":1046,"props":4222,"children":4223},{"style":1138},[4224],{"type":40,"value":4225},"orElse",{"type":30,"tag":1046,"props":4227,"children":4228},{"style":1070},[4229],{"type":40,"value":1146},{"type":30,"tag":1046,"props":4231,"children":4232},{"style":1053},[4233],{"type":40,"value":4234},"new",{"type":30,"tag":1046,"props":4236,"children":4237},{"style":1138},[4238],{"type":40,"value":1067},{"type":30,"tag":1046,"props":4240,"children":4241},{"style":1070},[4242],{"type":40,"value":3340},{"type":30,"tag":1046,"props":4244,"children":4245},{"class":1048,"line":1292},[4246,4250,4254,4258,4262,4266],{"type":30,"tag":1046,"props":4247,"children":4248},{"style":1105},[4249],{"type":40,"value":2955},{"type":30,"tag":1046,"props":4251,"children":4252},{"style":1070},[4253],{"type":40,"value":1179},{"type":30,"tag":1046,"props":4255,"children":4256},{"style":1138},[4257],{"type":40,"value":1936},{"type":30,"tag":1046,"props":4259,"children":4260},{"style":1070},[4261],{"type":40,"value":1146},{"type":30,"tag":1046,"props":4263,"children":4264},{"style":1105},[4265],{"type":40,"value":1193},{"type":30,"tag":1046,"props":4267,"children":4268},{"style":1070},[4269],{"type":40,"value":1198},{"type":30,"tag":1046,"props":4271,"children":4272},{"class":1048,"line":1300},[4273,4277,4281,4285,4289,4293],{"type":30,"tag":1046,"props":4274,"children":4275},{"style":1105},[4276],{"type":40,"value":2983},{"type":30,"tag":1046,"props":4278,"children":4279},{"style":1070},[4280],{"type":40,"value":1179},{"type":30,"tag":1046,"props":4282,"children":4283},{"style":1138},[4284],{"type":40,"value":2992},{"type":30,"tag":1046,"props":4286,"children":4287},{"style":1070},[4288],{"type":40,"value":1146},{"type":30,"tag":1046,"props":4290,"children":4291},{"style":1105},[4292],{"type":40,"value":2152},{"type":30,"tag":1046,"props":4294,"children":4295},{"style":1070},[4296],{"type":40,"value":1198},{"type":30,"tag":1046,"props":4298,"children":4299},{"class":1048,"line":1327},[4300,4304,4308],{"type":30,"tag":1046,"props":4301,"children":4302},{"style":1053},[4303],{"type":40,"value":1333},{"type":30,"tag":1046,"props":4305,"children":4306},{"style":1105},[4307],{"type":40,"value":3016},{"type":30,"tag":1046,"props":4309,"children":4310},{"style":1070},[4311],{"type":40,"value":1113},{"type":30,"tag":1046,"props":4313,"children":4314},{"class":1048,"line":1354},[4315],{"type":30,"tag":1046,"props":4316,"children":4317},{"style":1070},[4318],{"type":40,"value":1207},{"type":30,"tag":1046,"props":4320,"children":4321},{"class":1048,"line":1391},[4322],{"type":30,"tag":1046,"props":4323,"children":4324},{"emptyLinePlaceholder":13},[4325],{"type":40,"value":1121},{"type":30,"tag":1046,"props":4327,"children":4328},{"class":1048,"line":1409},[4329,4333,4337,4342,4346,4350,4354,4358,4362,4366,4370],{"type":30,"tag":1046,"props":4330,"children":4331},{"style":1053},[4332],{"type":40,"value":1130},{"type":30,"tag":1046,"props":4334,"children":4335},{"style":1084},[4336],{"type":40,"value":1067},{"type":30,"tag":1046,"props":4338,"children":4339},{"style":1138},[4340],{"type":40,"value":4341}," removeItemFromCart",{"type":30,"tag":1046,"props":4343,"children":4344},{"style":1070},[4345],{"type":40,"value":1146},{"type":30,"tag":1046,"props":4347,"children":4348},{"style":1084},[4349],{"type":40,"value":2882},{"type":30,"tag":1046,"props":4351,"children":4352},{"style":1153},[4353],{"type":40,"value":2072},{"type":30,"tag":1046,"props":4355,"children":4356},{"style":1070},[4357],{"type":40,"value":2891},{"type":30,"tag":1046,"props":4359,"children":4360},{"style":1084},[4361],{"type":40,"value":1894},{"type":30,"tag":1046,"props":4363,"children":4364},{"style":1153},[4365],{"type":40,"value":1156},{"type":30,"tag":1046,"props":4367,"children":4368},{"style":1070},[4369],{"type":40,"value":1161},{"type":30,"tag":1046,"props":4371,"children":4372},{"style":1070},[4373],{"type":40,"value":1073},{"type":30,"tag":1046,"props":4375,"children":4376},{"class":1048,"line":1417},[4377,4381,4385,4389,4393,4397,4401,4405,4409],{"type":30,"tag":1046,"props":4378,"children":4379},{"style":1084},[4380],{"type":40,"value":1914},{"type":30,"tag":1046,"props":4382,"children":4383},{"style":1105},[4384],{"type":40,"value":2093},{"type":30,"tag":1046,"props":4386,"children":4387},{"style":1795},[4388],{"type":40,"value":1798},{"type":30,"tag":1046,"props":4390,"children":4391},{"style":1105},[4392],{"type":40,"value":2773},{"type":30,"tag":1046,"props":4394,"children":4395},{"style":1070},[4396],{"type":40,"value":1179},{"type":30,"tag":1046,"props":4398,"children":4399},{"style":1138},[4400],{"type":40,"value":2935},{"type":30,"tag":1046,"props":4402,"children":4403},{"style":1070},[4404],{"type":40,"value":1146},{"type":30,"tag":1046,"props":4406,"children":4407},{"style":1105},[4408],{"type":40,"value":2119},{"type":30,"tag":1046,"props":4410,"children":4411},{"style":1070},[4412],{"type":40,"value":1388},{"type":30,"tag":1046,"props":4414,"children":4415},{"class":1048,"line":2023},[4416,4420,4425,4430,4435,4439,4444,4448,4453],{"type":30,"tag":1046,"props":4417,"children":4418},{"style":1070},[4419],{"type":40,"value":4220},{"type":30,"tag":1046,"props":4421,"children":4422},{"style":1138},[4423],{"type":40,"value":4424},"orElseThrow",{"type":30,"tag":1046,"props":4426,"children":4427},{"style":1070},[4428],{"type":40,"value":4429},"(()",{"type":30,"tag":1046,"props":4431,"children":4432},{"style":1053},[4433],{"type":40,"value":4434}," ->",{"type":30,"tag":1046,"props":4436,"children":4437},{"style":1053},[4438],{"type":40,"value":2480},{"type":30,"tag":1046,"props":4440,"children":4441},{"style":1138},[4442],{"type":40,"value":4443}," IllegalArgumentException",{"type":30,"tag":1046,"props":4445,"children":4446},{"style":1070},[4447],{"type":40,"value":1146},{"type":30,"tag":1046,"props":4449,"children":4450},{"style":1675},[4451],{"type":40,"value":4452},"\"Panier introuvable\"",{"type":30,"tag":1046,"props":4454,"children":4455},{"style":1070},[4456],{"type":40,"value":4457},"));\n",{"type":30,"tag":1046,"props":4459,"children":4460},{"class":1048,"line":2083},[4461,4465,4469,4474,4478,4482],{"type":30,"tag":1046,"props":4462,"children":4463},{"style":1105},[4464],{"type":40,"value":2955},{"type":30,"tag":1046,"props":4466,"children":4467},{"style":1070},[4468],{"type":40,"value":1179},{"type":30,"tag":1046,"props":4470,"children":4471},{"style":1138},[4472],{"type":40,"value":4473},"removeItem",{"type":30,"tag":1046,"props":4475,"children":4476},{"style":1070},[4477],{"type":40,"value":1146},{"type":30,"tag":1046,"props":4479,"children":4480},{"style":1105},[4481],{"type":40,"value":1193},{"type":30,"tag":1046,"props":4483,"children":4484},{"style":1070},[4485],{"type":40,"value":1198},{"type":30,"tag":1046,"props":4487,"children":4488},{"class":1048,"line":2126},[4489,4493,4497,4501,4505,4509],{"type":30,"tag":1046,"props":4490,"children":4491},{"style":1105},[4492],{"type":40,"value":2983},{"type":30,"tag":1046,"props":4494,"children":4495},{"style":1070},[4496],{"type":40,"value":1179},{"type":30,"tag":1046,"props":4498,"children":4499},{"style":1138},[4500],{"type":40,"value":2992},{"type":30,"tag":1046,"props":4502,"children":4503},{"style":1070},[4504],{"type":40,"value":1146},{"type":30,"tag":1046,"props":4506,"children":4507},{"style":1105},[4508],{"type":40,"value":2152},{"type":30,"tag":1046,"props":4510,"children":4511},{"style":1070},[4512],{"type":40,"value":1198},{"type":30,"tag":1046,"props":4514,"children":4515},{"class":1048,"line":2159},[4516,4520,4524],{"type":30,"tag":1046,"props":4517,"children":4518},{"style":1053},[4519],{"type":40,"value":1333},{"type":30,"tag":1046,"props":4521,"children":4522},{"style":1105},[4523],{"type":40,"value":3016},{"type":30,"tag":1046,"props":4525,"children":4526},{"style":1070},[4527],{"type":40,"value":1113},{"type":30,"tag":1046,"props":4529,"children":4530},{"class":1048,"line":2167},[4531],{"type":30,"tag":1046,"props":4532,"children":4533},{"style":1070},[4534],{"type":40,"value":1207},{"type":30,"tag":1046,"props":4536,"children":4538},{"class":1048,"line":4537},23,[4539],{"type":30,"tag":1046,"props":4540,"children":4541},{"emptyLinePlaceholder":13},[4542],{"type":40,"value":1121},{"type":30,"tag":1046,"props":4544,"children":4546},{"class":1048,"line":4545},24,[4547,4551,4555,4560,4564,4568,4572,4576],{"type":30,"tag":1046,"props":4548,"children":4549},{"style":1053},[4550],{"type":40,"value":1130},{"type":30,"tag":1046,"props":4552,"children":4553},{"style":1053},[4554],{"type":40,"value":1310},{"type":30,"tag":1046,"props":4556,"children":4557},{"style":1138},[4558],{"type":40,"value":4559}," getCartTotal",{"type":30,"tag":1046,"props":4561,"children":4562},{"style":1070},[4563],{"type":40,"value":1146},{"type":30,"tag":1046,"props":4565,"children":4566},{"style":1084},[4567],{"type":40,"value":2882},{"type":30,"tag":1046,"props":4569,"children":4570},{"style":1153},[4571],{"type":40,"value":2072},{"type":30,"tag":1046,"props":4573,"children":4574},{"style":1070},[4575],{"type":40,"value":1161},{"type":30,"tag":1046,"props":4577,"children":4578},{"style":1070},[4579],{"type":40,"value":1073},{"type":30,"tag":1046,"props":4581,"children":4583},{"class":1048,"line":4582},25,[4584,4588,4592,4596,4600,4604,4608,4612,4616],{"type":30,"tag":1046,"props":4585,"children":4586},{"style":1084},[4587],{"type":40,"value":1914},{"type":30,"tag":1046,"props":4589,"children":4590},{"style":1105},[4591],{"type":40,"value":2093},{"type":30,"tag":1046,"props":4593,"children":4594},{"style":1795},[4595],{"type":40,"value":1798},{"type":30,"tag":1046,"props":4597,"children":4598},{"style":1105},[4599],{"type":40,"value":2773},{"type":30,"tag":1046,"props":4601,"children":4602},{"style":1070},[4603],{"type":40,"value":1179},{"type":30,"tag":1046,"props":4605,"children":4606},{"style":1138},[4607],{"type":40,"value":2935},{"type":30,"tag":1046,"props":4609,"children":4610},{"style":1070},[4611],{"type":40,"value":1146},{"type":30,"tag":1046,"props":4613,"children":4614},{"style":1105},[4615],{"type":40,"value":2119},{"type":30,"tag":1046,"props":4617,"children":4618},{"style":1070},[4619],{"type":40,"value":1388},{"type":30,"tag":1046,"props":4621,"children":4623},{"class":1048,"line":4622},26,[4624,4628,4632,4636,4640,4644,4648,4652,4656],{"type":30,"tag":1046,"props":4625,"children":4626},{"style":1070},[4627],{"type":40,"value":4220},{"type":30,"tag":1046,"props":4629,"children":4630},{"style":1138},[4631],{"type":40,"value":4424},{"type":30,"tag":1046,"props":4633,"children":4634},{"style":1070},[4635],{"type":40,"value":4429},{"type":30,"tag":1046,"props":4637,"children":4638},{"style":1053},[4639],{"type":40,"value":4434},{"type":30,"tag":1046,"props":4641,"children":4642},{"style":1053},[4643],{"type":40,"value":2480},{"type":30,"tag":1046,"props":4645,"children":4646},{"style":1138},[4647],{"type":40,"value":4443},{"type":30,"tag":1046,"props":4649,"children":4650},{"style":1070},[4651],{"type":40,"value":1146},{"type":30,"tag":1046,"props":4653,"children":4654},{"style":1675},[4655],{"type":40,"value":4452},{"type":30,"tag":1046,"props":4657,"children":4658},{"style":1070},[4659],{"type":40,"value":4457},{"type":30,"tag":1046,"props":4661,"children":4663},{"class":1048,"line":4662},27,[4664,4668,4672,4676,4681],{"type":30,"tag":1046,"props":4665,"children":4666},{"style":1053},[4667],{"type":40,"value":1333},{"type":30,"tag":1046,"props":4669,"children":4670},{"style":1105},[4671],{"type":40,"value":3016},{"type":30,"tag":1046,"props":4673,"children":4674},{"style":1070},[4675],{"type":40,"value":1179},{"type":30,"tag":1046,"props":4677,"children":4678},{"style":1138},[4679],{"type":40,"value":4680},"calculateTotal",{"type":30,"tag":1046,"props":4682,"children":4683},{"style":1070},[4684],{"type":40,"value":1406},{"type":30,"tag":1046,"props":4686,"children":4688},{"class":1048,"line":4687},28,[4689],{"type":30,"tag":1046,"props":4690,"children":4691},{"style":1070},[4692],{"type":40,"value":1207},{"type":30,"tag":1046,"props":4694,"children":4696},{"class":1048,"line":4695},29,[4697],{"type":30,"tag":1046,"props":4698,"children":4699},{"emptyLinePlaceholder":13},[4700],{"type":40,"value":1121},{"type":30,"tag":1046,"props":4702,"children":4704},{"class":1048,"line":4703},30,[4705,4709,4713,4717,4721,4725,4729,4733],{"type":30,"tag":1046,"props":4706,"children":4707},{"style":1053},[4708],{"type":40,"value":1130},{"type":30,"tag":1046,"props":4710,"children":4711},{"style":1084},[4712],{"type":40,"value":1067},{"type":30,"tag":1046,"props":4714,"children":4715},{"style":1138},[4716],{"type":40,"value":2049},{"type":30,"tag":1046,"props":4718,"children":4719},{"style":1070},[4720],{"type":40,"value":1146},{"type":30,"tag":1046,"props":4722,"children":4723},{"style":1084},[4724],{"type":40,"value":2882},{"type":30,"tag":1046,"props":4726,"children":4727},{"style":1153},[4728],{"type":40,"value":2072},{"type":30,"tag":1046,"props":4730,"children":4731},{"style":1070},[4732],{"type":40,"value":1161},{"type":30,"tag":1046,"props":4734,"children":4735},{"style":1070},[4736],{"type":40,"value":1073},{"type":30,"tag":1046,"props":4738,"children":4740},{"class":1048,"line":4739},31,[4741,4745,4749,4753,4757,4761,4765],{"type":30,"tag":1046,"props":4742,"children":4743},{"style":1053},[4744],{"type":40,"value":1333},{"type":30,"tag":1046,"props":4746,"children":4747},{"style":1105},[4748],{"type":40,"value":2773},{"type":30,"tag":1046,"props":4750,"children":4751},{"style":1070},[4752],{"type":40,"value":1179},{"type":30,"tag":1046,"props":4754,"children":4755},{"style":1138},[4756],{"type":40,"value":2935},{"type":30,"tag":1046,"props":4758,"children":4759},{"style":1070},[4760],{"type":40,"value":1146},{"type":30,"tag":1046,"props":4762,"children":4763},{"style":1105},[4764],{"type":40,"value":2119},{"type":30,"tag":1046,"props":4766,"children":4767},{"style":1070},[4768],{"type":40,"value":1388},{"type":30,"tag":1046,"props":4770,"children":4772},{"class":1048,"line":4771},32,[4773,4777,4781,4785,4789,4793,4797,4801,4805],{"type":30,"tag":1046,"props":4774,"children":4775},{"style":1070},[4776],{"type":40,"value":4220},{"type":30,"tag":1046,"props":4778,"children":4779},{"style":1138},[4780],{"type":40,"value":4424},{"type":30,"tag":1046,"props":4782,"children":4783},{"style":1070},[4784],{"type":40,"value":4429},{"type":30,"tag":1046,"props":4786,"children":4787},{"style":1053},[4788],{"type":40,"value":4434},{"type":30,"tag":1046,"props":4790,"children":4791},{"style":1053},[4792],{"type":40,"value":2480},{"type":30,"tag":1046,"props":4794,"children":4795},{"style":1138},[4796],{"type":40,"value":4443},{"type":30,"tag":1046,"props":4798,"children":4799},{"style":1070},[4800],{"type":40,"value":1146},{"type":30,"tag":1046,"props":4802,"children":4803},{"style":1675},[4804],{"type":40,"value":4452},{"type":30,"tag":1046,"props":4806,"children":4807},{"style":1070},[4808],{"type":40,"value":4457},{"type":30,"tag":1046,"props":4810,"children":4812},{"class":1048,"line":4811},33,[4813],{"type":30,"tag":1046,"props":4814,"children":4815},{"style":1070},[4816],{"type":40,"value":1207},{"type":30,"tag":1046,"props":4818,"children":4820},{"class":1048,"line":4819},34,[4821],{"type":30,"tag":1046,"props":4822,"children":4823},{"style":1070},[4824],{"type":40,"value":1423},{"type":30,"tag":116,"props":4826,"children":4828},{"id":4827},"étape-3-implémenter-la-couche-infrastructure",[4829],{"type":30,"tag":36,"props":4830,"children":4831},{},[4832],{"type":40,"value":4833},"Étape 3 : Implémenter la couche Infrastructure",{"type":30,"tag":1035,"props":4835,"children":4837},{"code":4836,"language":1038,"meta":8,"className":1039,"style":8},"public interface CartRepository {\n    Optional\u003CCart> findById(String cartId);\n    void save(Cart cart);\n}\n\n@Repository\npublic class InMemoryCartRepository implements CartRepository {\n\n    private final Map\u003CString, Cart> database = new HashMap\u003C>();\n\n    @Override\n    public Optional\u003CCart> findById(String cartId) {\n        return Optional.ofNullable(database.get(cartId));\n    }\n\n    @Override\n    public void save(Cart cart) {\n        database.put(\"cartId\", cart);\n    }\n}\n",[4838],{"type":30,"tag":1042,"props":4839,"children":4840},{"__ignoreMap":8},[4841,4861,4901,4929,4936,4943,4954,4982,4989,5044,5051,5062,5110,5160,5167,5174,5185,5220,5255,5262],{"type":30,"tag":1046,"props":4842,"children":4843},{"class":1048,"line":1049},[4844,4848,4853,4857],{"type":30,"tag":1046,"props":4845,"children":4846},{"style":1053},[4847],{"type":40,"value":1056},{"type":30,"tag":1046,"props":4849,"children":4850},{"style":1053},[4851],{"type":40,"value":4852}," interface",{"type":30,"tag":1046,"props":4854,"children":4855},{"style":1064},[4856],{"type":40,"value":2768},{"type":30,"tag":1046,"props":4858,"children":4859},{"style":1070},[4860],{"type":40,"value":1073},{"type":30,"tag":1046,"props":4862,"children":4863},{"class":1048,"line":675},[4864,4869,4873,4877,4881,4885,4889,4893,4897],{"type":30,"tag":1046,"props":4865,"children":4866},{"style":1084},[4867],{"type":40,"value":4868},"    Optional",{"type":30,"tag":1046,"props":4870,"children":4871},{"style":1070},[4872],{"type":40,"value":1092},{"type":30,"tag":1046,"props":4874,"children":4875},{"style":1053},[4876],{"type":40,"value":1867},{"type":30,"tag":1046,"props":4878,"children":4879},{"style":1070},[4880],{"type":40,"value":1102},{"type":30,"tag":1046,"props":4882,"children":4883},{"style":1138},[4884],{"type":40,"value":3274},{"type":30,"tag":1046,"props":4886,"children":4887},{"style":1070},[4888],{"type":40,"value":1146},{"type":30,"tag":1046,"props":4890,"children":4891},{"style":1084},[4892],{"type":40,"value":2882},{"type":30,"tag":1046,"props":4894,"children":4895},{"style":1153},[4896],{"type":40,"value":2072},{"type":30,"tag":1046,"props":4898,"children":4899},{"style":1070},[4900],{"type":40,"value":1198},{"type":30,"tag":1046,"props":4902,"children":4903},{"class":1048,"line":681},[4904,4909,4913,4917,4921,4925],{"type":30,"tag":1046,"props":4905,"children":4906},{"style":1053},[4907],{"type":40,"value":4908},"    void",{"type":30,"tag":1046,"props":4910,"children":4911},{"style":1138},[4912],{"type":40,"value":3381},{"type":30,"tag":1046,"props":4914,"children":4915},{"style":1070},[4916],{"type":40,"value":1146},{"type":30,"tag":1046,"props":4918,"children":4919},{"style":1084},[4920],{"type":40,"value":1867},{"type":30,"tag":1046,"props":4922,"children":4923},{"style":1153},[4924],{"type":40,"value":3016},{"type":30,"tag":1046,"props":4926,"children":4927},{"style":1070},[4928],{"type":40,"value":1198},{"type":30,"tag":1046,"props":4930,"children":4931},{"class":1048,"line":1124},[4932],{"type":30,"tag":1046,"props":4933,"children":4934},{"style":1070},[4935],{"type":40,"value":1423},{"type":30,"tag":1046,"props":4937,"children":4938},{"class":1048,"line":1168},[4939],{"type":30,"tag":1046,"props":4940,"children":4941},{"emptyLinePlaceholder":13},[4942],{"type":40,"value":1121},{"type":30,"tag":1046,"props":4944,"children":4945},{"class":1048,"line":1201},[4946,4950],{"type":30,"tag":1046,"props":4947,"children":4948},{"style":1647},[4949],{"type":40,"value":1650},{"type":30,"tag":1046,"props":4951,"children":4952},{"style":1653},[4953],{"type":40,"value":3145},{"type":30,"tag":1046,"props":4955,"children":4956},{"class":1048,"line":1210},[4957,4961,4965,4970,4974,4978],{"type":30,"tag":1046,"props":4958,"children":4959},{"style":1053},[4960],{"type":40,"value":1056},{"type":30,"tag":1046,"props":4962,"children":4963},{"style":1053},[4964],{"type":40,"value":1061},{"type":30,"tag":1046,"props":4966,"children":4967},{"style":1064},[4968],{"type":40,"value":4969}," InMemoryCartRepository",{"type":30,"tag":1046,"props":4971,"children":4972},{"style":1053},[4973],{"type":40,"value":3166},{"type":30,"tag":1046,"props":4975,"children":4976},{"style":1064},[4977],{"type":40,"value":2768},{"type":30,"tag":1046,"props":4979,"children":4980},{"style":1070},[4981],{"type":40,"value":1073},{"type":30,"tag":1046,"props":4983,"children":4984},{"class":1048,"line":1218},[4985],{"type":30,"tag":1046,"props":4986,"children":4987},{"emptyLinePlaceholder":13},[4988],{"type":40,"value":1121},{"type":30,"tag":1046,"props":4990,"children":4991},{"class":1048,"line":1255},[4992,4996,5000,5004,5008,5012,5016,5020,5024,5028,5032,5036,5040],{"type":30,"tag":1046,"props":4993,"children":4994},{"style":1053},[4995],{"type":40,"value":1081},{"type":30,"tag":1046,"props":4997,"children":4998},{"style":1053},[4999],{"type":40,"value":1721},{"type":30,"tag":1046,"props":5001,"children":5002},{"style":1084},[5003],{"type":40,"value":3197},{"type":30,"tag":1046,"props":5005,"children":5006},{"style":1070},[5007],{"type":40,"value":1092},{"type":30,"tag":1046,"props":5009,"children":5010},{"style":1053},[5011],{"type":40,"value":2882},{"type":30,"tag":1046,"props":5013,"children":5014},{"style":1070},[5015],{"type":40,"value":2891},{"type":30,"tag":1046,"props":5017,"children":5018},{"style":1053},[5019],{"type":40,"value":1067},{"type":30,"tag":1046,"props":5021,"children":5022},{"style":1070},[5023],{"type":40,"value":1102},{"type":30,"tag":1046,"props":5025,"children":5026},{"style":1105},[5027],{"type":40,"value":3222},{"type":30,"tag":1046,"props":5029,"children":5030},{"style":1795},[5031],{"type":40,"value":1798},{"type":30,"tag":1046,"props":5033,"children":5034},{"style":1053},[5035],{"type":40,"value":2480},{"type":30,"tag":1046,"props":5037,"children":5038},{"style":1084},[5039],{"type":40,"value":3235},{"type":30,"tag":1046,"props":5041,"children":5042},{"style":1070},[5043],{"type":40,"value":2490},{"type":30,"tag":1046,"props":5045,"children":5046},{"class":1048,"line":1284},[5047],{"type":30,"tag":1046,"props":5048,"children":5049},{"emptyLinePlaceholder":13},[5050],{"type":40,"value":1121},{"type":30,"tag":1046,"props":5052,"children":5053},{"class":1048,"line":1292},[5054,5058],{"type":30,"tag":1046,"props":5055,"children":5056},{"style":1647},[5057],{"type":40,"value":1828},{"type":30,"tag":1046,"props":5059,"children":5060},{"style":1653},[5061],{"type":40,"value":3258},{"type":30,"tag":1046,"props":5063,"children":5064},{"class":1048,"line":1300},[5065,5069,5074,5078,5082,5086,5090,5094,5098,5102,5106],{"type":30,"tag":1046,"props":5066,"children":5067},{"style":1053},[5068],{"type":40,"value":1130},{"type":30,"tag":1046,"props":5070,"children":5071},{"style":1084},[5072],{"type":40,"value":5073}," Optional",{"type":30,"tag":1046,"props":5075,"children":5076},{"style":1070},[5077],{"type":40,"value":1092},{"type":30,"tag":1046,"props":5079,"children":5080},{"style":1053},[5081],{"type":40,"value":1867},{"type":30,"tag":1046,"props":5083,"children":5084},{"style":1070},[5085],{"type":40,"value":1102},{"type":30,"tag":1046,"props":5087,"children":5088},{"style":1138},[5089],{"type":40,"value":3274},{"type":30,"tag":1046,"props":5091,"children":5092},{"style":1070},[5093],{"type":40,"value":1146},{"type":30,"tag":1046,"props":5095,"children":5096},{"style":1084},[5097],{"type":40,"value":2882},{"type":30,"tag":1046,"props":5099,"children":5100},{"style":1153},[5101],{"type":40,"value":2072},{"type":30,"tag":1046,"props":5103,"children":5104},{"style":1070},[5105],{"type":40,"value":1161},{"type":30,"tag":1046,"props":5107,"children":5108},{"style":1070},[5109],{"type":40,"value":1073},{"type":30,"tag":1046,"props":5111,"children":5112},{"class":1048,"line":1327},[5113,5117,5121,5125,5130,5134,5139,5143,5148,5152,5156],{"type":30,"tag":1046,"props":5114,"children":5115},{"style":1053},[5116],{"type":40,"value":1333},{"type":30,"tag":1046,"props":5118,"children":5119},{"style":1105},[5120],{"type":40,"value":5073},{"type":30,"tag":1046,"props":5122,"children":5123},{"style":1070},[5124],{"type":40,"value":1179},{"type":30,"tag":1046,"props":5126,"children":5127},{"style":1138},[5128],{"type":40,"value":5129},"ofNullable",{"type":30,"tag":1046,"props":5131,"children":5132},{"style":1070},[5133],{"type":40,"value":1146},{"type":30,"tag":1046,"props":5135,"children":5136},{"style":1105},[5137],{"type":40,"value":5138},"database",{"type":30,"tag":1046,"props":5140,"children":5141},{"style":1070},[5142],{"type":40,"value":1179},{"type":30,"tag":1046,"props":5144,"children":5145},{"style":1138},[5146],{"type":40,"value":5147},"get",{"type":30,"tag":1046,"props":5149,"children":5150},{"style":1070},[5151],{"type":40,"value":1146},{"type":30,"tag":1046,"props":5153,"children":5154},{"style":1105},[5155],{"type":40,"value":2119},{"type":30,"tag":1046,"props":5157,"children":5158},{"style":1070},[5159],{"type":40,"value":4457},{"type":30,"tag":1046,"props":5161,"children":5162},{"class":1048,"line":1354},[5163],{"type":30,"tag":1046,"props":5164,"children":5165},{"style":1070},[5166],{"type":40,"value":1207},{"type":30,"tag":1046,"props":5168,"children":5169},{"class":1048,"line":1391},[5170],{"type":30,"tag":1046,"props":5171,"children":5172},{"emptyLinePlaceholder":13},[5173],{"type":40,"value":1121},{"type":30,"tag":1046,"props":5175,"children":5176},{"class":1048,"line":1409},[5177,5181],{"type":30,"tag":1046,"props":5178,"children":5179},{"style":1647},[5180],{"type":40,"value":1828},{"type":30,"tag":1046,"props":5182,"children":5183},{"style":1653},[5184],{"type":40,"value":3258},{"type":30,"tag":1046,"props":5186,"children":5187},{"class":1048,"line":1417},[5188,5192,5196,5200,5204,5208,5212,5216],{"type":30,"tag":1046,"props":5189,"children":5190},{"style":1053},[5191],{"type":40,"value":1130},{"type":30,"tag":1046,"props":5193,"children":5194},{"style":1053},[5195],{"type":40,"value":1135},{"type":30,"tag":1046,"props":5197,"children":5198},{"style":1138},[5199],{"type":40,"value":3381},{"type":30,"tag":1046,"props":5201,"children":5202},{"style":1070},[5203],{"type":40,"value":1146},{"type":30,"tag":1046,"props":5205,"children":5206},{"style":1084},[5207],{"type":40,"value":1867},{"type":30,"tag":1046,"props":5209,"children":5210},{"style":1153},[5211],{"type":40,"value":3016},{"type":30,"tag":1046,"props":5213,"children":5214},{"style":1070},[5215],{"type":40,"value":1161},{"type":30,"tag":1046,"props":5217,"children":5218},{"style":1070},[5219],{"type":40,"value":1073},{"type":30,"tag":1046,"props":5221,"children":5222},{"class":1048,"line":2023},[5223,5227,5231,5235,5239,5243,5247,5251],{"type":30,"tag":1046,"props":5224,"children":5225},{"style":1105},[5226],{"type":40,"value":3409},{"type":30,"tag":1046,"props":5228,"children":5229},{"style":1070},[5230],{"type":40,"value":1179},{"type":30,"tag":1046,"props":5232,"children":5233},{"style":1138},[5234],{"type":40,"value":3418},{"type":30,"tag":1046,"props":5236,"children":5237},{"style":1070},[5238],{"type":40,"value":1146},{"type":30,"tag":1046,"props":5240,"children":5241},{"style":1675},[5242],{"type":40,"value":3427},{"type":30,"tag":1046,"props":5244,"children":5245},{"style":1070},[5246],{"type":40,"value":2891},{"type":30,"tag":1046,"props":5248,"children":5249},{"style":1105},[5250],{"type":40,"value":3016},{"type":30,"tag":1046,"props":5252,"children":5253},{"style":1070},[5254],{"type":40,"value":1198},{"type":30,"tag":1046,"props":5256,"children":5257},{"class":1048,"line":2083},[5258],{"type":30,"tag":1046,"props":5259,"children":5260},{"style":1070},[5261],{"type":40,"value":1207},{"type":30,"tag":1046,"props":5263,"children":5264},{"class":1048,"line":2126},[5265],{"type":30,"tag":1046,"props":5266,"children":5267},{"style":1070},[5268],{"type":40,"value":1423},{"type":30,"tag":43,"props":5270,"children":5271},{},[5272,5274,5279],{"type":40,"value":5273},"Cet exemple stocke les paniers dans une simple ",{"type":30,"tag":36,"props":5275,"children":5276},{},[5277],{"type":40,"value":5278},"HashMap",{"type":40,"value":5280}," pour simuler une base de données en mémoire.",{"type":30,"tag":2339,"props":5282,"children":5284},{"id":5283},"étape-4-exposer-lapi-avec-spring-boot-et-lapproche-api-first",[5285],{"type":30,"tag":36,"props":5286,"children":5287},{},[5288],{"type":40,"value":5289},"Étape 4 : Exposer l’API avec Spring Boot et l’approche API First",{"type":30,"tag":1035,"props":5291,"children":5293},{"code":5292,"language":1038,"meta":8,"className":1039,"style":8},"@RestController\n@RequestMapping(\"/api/v1/cart\")\npublic class CartController {\n\n    private final CartService cartService;\n\n    public CartController(CartService cartService) {\n        this.cartService = cartService;\n    }\n\n    @PostMapping(\"/{cartId}/add\")\n    public ResponseEntity\u003CCart> addItem(@PathVariable String cartId, @RequestBody Item item) {\n        Cart updatedCart = cartService.addItemToCart(cartId, item);\n        return ResponseEntity.ok(updatedCart);\n    }\n\n    @DeleteMapping(\"/{cartId}/remove\")\n    public ResponseEntity\u003CCart> removeItem(@PathVariable String cartId, @RequestBody Item item) {\n        Cart updatedCart = cartService.removeItemFromCart(cartId, item);\n        return ResponseEntity.ok(updatedCart);\n    }\n\n    @GetMapping(\"/{cartId}/total\")\n    public ResponseEntity\u003CDouble> getCartTotal(@PathVariable String cartId) {\n        double total = cartService.getCartTotal(cartId);\n        return ResponseEntity.ok(total);\n    }\n\n    @GetMapping(\"/{cartId}\")\n    public ResponseEntity\u003CCart> getCart(@PathVariable String cartId) {\n        Cart cart = cartService.getCart(cartId);\n        return ResponseEntity.ok(cart);\n    }\n}\n",[5294],{"type":30,"tag":1042,"props":5295,"children":5296},{"__ignoreMap":8},[5297,5308,5332,5351,5358,5381,5388,5419,5446,5453,5460,5484,5560,5608,5639,5646,5653,5678,5753,5801,5832,5839,5846,5870,5926,5968,6000,6007,6014,6037,6092,6131,6162,6169],{"type":30,"tag":1046,"props":5298,"children":5299},{"class":1048,"line":1049},[5300,5304],{"type":30,"tag":1046,"props":5301,"children":5302},{"style":1647},[5303],{"type":40,"value":1650},{"type":30,"tag":1046,"props":5305,"children":5306},{"style":1653},[5307],{"type":40,"value":1656},{"type":30,"tag":1046,"props":5309,"children":5310},{"class":1048,"line":675},[5311,5315,5319,5323,5328],{"type":30,"tag":1046,"props":5312,"children":5313},{"style":1647},[5314],{"type":40,"value":1650},{"type":30,"tag":1046,"props":5316,"children":5317},{"style":1653},[5318],{"type":40,"value":1668},{"type":30,"tag":1046,"props":5320,"children":5321},{"style":1070},[5322],{"type":40,"value":1146},{"type":30,"tag":1046,"props":5324,"children":5325},{"style":1675},[5326],{"type":40,"value":5327},"\"/api/v1/cart\"",{"type":30,"tag":1046,"props":5329,"children":5330},{"style":1070},[5331],{"type":40,"value":1388},{"type":30,"tag":1046,"props":5333,"children":5334},{"class":1048,"line":681},[5335,5339,5343,5347],{"type":30,"tag":1046,"props":5336,"children":5337},{"style":1053},[5338],{"type":40,"value":1056},{"type":30,"tag":1046,"props":5340,"children":5341},{"style":1053},[5342],{"type":40,"value":1061},{"type":30,"tag":1046,"props":5344,"children":5345},{"style":1064},[5346],{"type":40,"value":1698},{"type":30,"tag":1046,"props":5348,"children":5349},{"style":1070},[5350],{"type":40,"value":1073},{"type":30,"tag":1046,"props":5352,"children":5353},{"class":1048,"line":1124},[5354],{"type":30,"tag":1046,"props":5355,"children":5356},{"emptyLinePlaceholder":13},[5357],{"type":40,"value":1121},{"type":30,"tag":1046,"props":5359,"children":5360},{"class":1048,"line":1168},[5361,5365,5369,5373,5377],{"type":30,"tag":1046,"props":5362,"children":5363},{"style":1053},[5364],{"type":40,"value":1081},{"type":30,"tag":1046,"props":5366,"children":5367},{"style":1053},[5368],{"type":40,"value":1721},{"type":30,"tag":1046,"props":5370,"children":5371},{"style":1084},[5372],{"type":40,"value":1726},{"type":30,"tag":1046,"props":5374,"children":5375},{"style":1105},[5376],{"type":40,"value":1731},{"type":30,"tag":1046,"props":5378,"children":5379},{"style":1070},[5380],{"type":40,"value":1113},{"type":30,"tag":1046,"props":5382,"children":5383},{"class":1048,"line":1201},[5384],{"type":30,"tag":1046,"props":5385,"children":5386},{"emptyLinePlaceholder":13},[5387],{"type":40,"value":1121},{"type":30,"tag":1046,"props":5389,"children":5390},{"class":1048,"line":1210},[5391,5395,5399,5403,5407,5411,5415],{"type":30,"tag":1046,"props":5392,"children":5393},{"style":1053},[5394],{"type":40,"value":1130},{"type":30,"tag":1046,"props":5396,"children":5397},{"style":1138},[5398],{"type":40,"value":1698},{"type":30,"tag":1046,"props":5400,"children":5401},{"style":1070},[5402],{"type":40,"value":1146},{"type":30,"tag":1046,"props":5404,"children":5405},{"style":1084},[5406],{"type":40,"value":1762},{"type":30,"tag":1046,"props":5408,"children":5409},{"style":1153},[5410],{"type":40,"value":1731},{"type":30,"tag":1046,"props":5412,"children":5413},{"style":1070},[5414],{"type":40,"value":1161},{"type":30,"tag":1046,"props":5416,"children":5417},{"style":1070},[5418],{"type":40,"value":1073},{"type":30,"tag":1046,"props":5420,"children":5421},{"class":1048,"line":1218},[5422,5426,5430,5434,5438,5442],{"type":30,"tag":1046,"props":5423,"children":5424},{"style":1780},[5425],{"type":40,"value":1783},{"type":30,"tag":1046,"props":5427,"children":5428},{"style":1070},[5429],{"type":40,"value":1179},{"type":30,"tag":1046,"props":5431,"children":5432},{"style":1105},[5433],{"type":40,"value":1792},{"type":30,"tag":1046,"props":5435,"children":5436},{"style":1795},[5437],{"type":40,"value":1798},{"type":30,"tag":1046,"props":5439,"children":5440},{"style":1105},[5441],{"type":40,"value":1731},{"type":30,"tag":1046,"props":5443,"children":5444},{"style":1070},[5445],{"type":40,"value":1113},{"type":30,"tag":1046,"props":5447,"children":5448},{"class":1048,"line":1255},[5449],{"type":30,"tag":1046,"props":5450,"children":5451},{"style":1070},[5452],{"type":40,"value":1207},{"type":30,"tag":1046,"props":5454,"children":5455},{"class":1048,"line":1284},[5456],{"type":30,"tag":1046,"props":5457,"children":5458},{"emptyLinePlaceholder":13},[5459],{"type":40,"value":1121},{"type":30,"tag":1046,"props":5461,"children":5462},{"class":1048,"line":1292},[5463,5467,5471,5475,5480],{"type":30,"tag":1046,"props":5464,"children":5465},{"style":1647},[5466],{"type":40,"value":1828},{"type":30,"tag":1046,"props":5468,"children":5469},{"style":1653},[5470],{"type":40,"value":1833},{"type":30,"tag":1046,"props":5472,"children":5473},{"style":1070},[5474],{"type":40,"value":1146},{"type":30,"tag":1046,"props":5476,"children":5477},{"style":1675},[5478],{"type":40,"value":5479},"\"/{cartId}/add\"",{"type":30,"tag":1046,"props":5481,"children":5482},{"style":1070},[5483],{"type":40,"value":1388},{"type":30,"tag":1046,"props":5485,"children":5486},{"class":1048,"line":1300},[5487,5491,5495,5499,5503,5507,5511,5515,5519,5523,5527,5531,5535,5540,5544,5548,5552,5556],{"type":30,"tag":1046,"props":5488,"children":5489},{"style":1053},[5490],{"type":40,"value":1130},{"type":30,"tag":1046,"props":5492,"children":5493},{"style":1084},[5494],{"type":40,"value":1858},{"type":30,"tag":1046,"props":5496,"children":5497},{"style":1070},[5498],{"type":40,"value":1092},{"type":30,"tag":1046,"props":5500,"children":5501},{"style":1053},[5502],{"type":40,"value":1867},{"type":30,"tag":1046,"props":5504,"children":5505},{"style":1070},[5506],{"type":40,"value":1102},{"type":30,"tag":1046,"props":5508,"children":5509},{"style":1138},[5510],{"type":40,"value":1141},{"type":30,"tag":1046,"props":5512,"children":5513},{"style":1070},[5514],{"type":40,"value":1146},{"type":30,"tag":1046,"props":5516,"children":5517},{"style":1647},[5518],{"type":40,"value":1650},{"type":30,"tag":1046,"props":5520,"children":5521},{"style":1653},[5522],{"type":40,"value":2062},{"type":30,"tag":1046,"props":5524,"children":5525},{"style":1084},[5526],{"type":40,"value":2067},{"type":30,"tag":1046,"props":5528,"children":5529},{"style":1153},[5530],{"type":40,"value":2072},{"type":30,"tag":1046,"props":5532,"children":5533},{"style":1070},[5534],{"type":40,"value":2891},{"type":30,"tag":1046,"props":5536,"children":5537},{"style":1647},[5538],{"type":40,"value":5539}," @",{"type":30,"tag":1046,"props":5541,"children":5542},{"style":1653},[5543],{"type":40,"value":1889},{"type":30,"tag":1046,"props":5545,"children":5546},{"style":1084},[5547],{"type":40,"value":1894},{"type":30,"tag":1046,"props":5549,"children":5550},{"style":1153},[5551],{"type":40,"value":1156},{"type":30,"tag":1046,"props":5553,"children":5554},{"style":1070},[5555],{"type":40,"value":1161},{"type":30,"tag":1046,"props":5557,"children":5558},{"style":1070},[5559],{"type":40,"value":1073},{"type":30,"tag":1046,"props":5561,"children":5562},{"class":1048,"line":1327},[5563,5567,5571,5575,5579,5583,5588,5592,5596,5600,5604],{"type":30,"tag":1046,"props":5564,"children":5565},{"style":1084},[5566],{"type":40,"value":1914},{"type":30,"tag":1046,"props":5568,"children":5569},{"style":1105},[5570],{"type":40,"value":1919},{"type":30,"tag":1046,"props":5572,"children":5573},{"style":1795},[5574],{"type":40,"value":1798},{"type":30,"tag":1046,"props":5576,"children":5577},{"style":1105},[5578],{"type":40,"value":1731},{"type":30,"tag":1046,"props":5580,"children":5581},{"style":1070},[5582],{"type":40,"value":1179},{"type":30,"tag":1046,"props":5584,"children":5585},{"style":1138},[5586],{"type":40,"value":5587},"addItemToCart",{"type":30,"tag":1046,"props":5589,"children":5590},{"style":1070},[5591],{"type":40,"value":1146},{"type":30,"tag":1046,"props":5593,"children":5594},{"style":1105},[5595],{"type":40,"value":2119},{"type":30,"tag":1046,"props":5597,"children":5598},{"style":1070},[5599],{"type":40,"value":2891},{"type":30,"tag":1046,"props":5601,"children":5602},{"style":1105},[5603],{"type":40,"value":1156},{"type":30,"tag":1046,"props":5605,"children":5606},{"style":1070},[5607],{"type":40,"value":1198},{"type":30,"tag":1046,"props":5609,"children":5610},{"class":1048,"line":1354},[5611,5615,5619,5623,5627,5631,5635],{"type":30,"tag":1046,"props":5612,"children":5613},{"style":1053},[5614],{"type":40,"value":1333},{"type":30,"tag":1046,"props":5616,"children":5617},{"style":1105},[5618],{"type":40,"value":1858},{"type":30,"tag":1046,"props":5620,"children":5621},{"style":1070},[5622],{"type":40,"value":1179},{"type":30,"tag":1046,"props":5624,"children":5625},{"style":1138},[5626],{"type":40,"value":1968},{"type":30,"tag":1046,"props":5628,"children":5629},{"style":1070},[5630],{"type":40,"value":1146},{"type":30,"tag":1046,"props":5632,"children":5633},{"style":1105},[5634],{"type":40,"value":1977},{"type":30,"tag":1046,"props":5636,"children":5637},{"style":1070},[5638],{"type":40,"value":1198},{"type":30,"tag":1046,"props":5640,"children":5641},{"class":1048,"line":1391},[5642],{"type":30,"tag":1046,"props":5643,"children":5644},{"style":1070},[5645],{"type":40,"value":1207},{"type":30,"tag":1046,"props":5647,"children":5648},{"class":1048,"line":1409},[5649],{"type":30,"tag":1046,"props":5650,"children":5651},{"emptyLinePlaceholder":13},[5652],{"type":40,"value":1121},{"type":30,"tag":1046,"props":5654,"children":5655},{"class":1048,"line":1417},[5656,5660,5665,5669,5674],{"type":30,"tag":1046,"props":5657,"children":5658},{"style":1647},[5659],{"type":40,"value":1828},{"type":30,"tag":1046,"props":5661,"children":5662},{"style":1653},[5663],{"type":40,"value":5664},"DeleteMapping",{"type":30,"tag":1046,"props":5666,"children":5667},{"style":1070},[5668],{"type":40,"value":1146},{"type":30,"tag":1046,"props":5670,"children":5671},{"style":1675},[5672],{"type":40,"value":5673},"\"/{cartId}/remove\"",{"type":30,"tag":1046,"props":5675,"children":5676},{"style":1070},[5677],{"type":40,"value":1388},{"type":30,"tag":1046,"props":5679,"children":5680},{"class":1048,"line":2023},[5681,5685,5689,5693,5697,5701,5705,5709,5713,5717,5721,5725,5729,5733,5737,5741,5745,5749],{"type":30,"tag":1046,"props":5682,"children":5683},{"style":1053},[5684],{"type":40,"value":1130},{"type":30,"tag":1046,"props":5686,"children":5687},{"style":1084},[5688],{"type":40,"value":1858},{"type":30,"tag":1046,"props":5690,"children":5691},{"style":1070},[5692],{"type":40,"value":1092},{"type":30,"tag":1046,"props":5694,"children":5695},{"style":1053},[5696],{"type":40,"value":1867},{"type":30,"tag":1046,"props":5698,"children":5699},{"style":1070},[5700],{"type":40,"value":1102},{"type":30,"tag":1046,"props":5702,"children":5703},{"style":1138},[5704],{"type":40,"value":1232},{"type":30,"tag":1046,"props":5706,"children":5707},{"style":1070},[5708],{"type":40,"value":1146},{"type":30,"tag":1046,"props":5710,"children":5711},{"style":1647},[5712],{"type":40,"value":1650},{"type":30,"tag":1046,"props":5714,"children":5715},{"style":1653},[5716],{"type":40,"value":2062},{"type":30,"tag":1046,"props":5718,"children":5719},{"style":1084},[5720],{"type":40,"value":2067},{"type":30,"tag":1046,"props":5722,"children":5723},{"style":1153},[5724],{"type":40,"value":2072},{"type":30,"tag":1046,"props":5726,"children":5727},{"style":1070},[5728],{"type":40,"value":2891},{"type":30,"tag":1046,"props":5730,"children":5731},{"style":1647},[5732],{"type":40,"value":5539},{"type":30,"tag":1046,"props":5734,"children":5735},{"style":1653},[5736],{"type":40,"value":1889},{"type":30,"tag":1046,"props":5738,"children":5739},{"style":1084},[5740],{"type":40,"value":1894},{"type":30,"tag":1046,"props":5742,"children":5743},{"style":1153},[5744],{"type":40,"value":1156},{"type":30,"tag":1046,"props":5746,"children":5747},{"style":1070},[5748],{"type":40,"value":1161},{"type":30,"tag":1046,"props":5750,"children":5751},{"style":1070},[5752],{"type":40,"value":1073},{"type":30,"tag":1046,"props":5754,"children":5755},{"class":1048,"line":2083},[5756,5760,5764,5768,5772,5776,5781,5785,5789,5793,5797],{"type":30,"tag":1046,"props":5757,"children":5758},{"style":1084},[5759],{"type":40,"value":1914},{"type":30,"tag":1046,"props":5761,"children":5762},{"style":1105},[5763],{"type":40,"value":1919},{"type":30,"tag":1046,"props":5765,"children":5766},{"style":1795},[5767],{"type":40,"value":1798},{"type":30,"tag":1046,"props":5769,"children":5770},{"style":1105},[5771],{"type":40,"value":1731},{"type":30,"tag":1046,"props":5773,"children":5774},{"style":1070},[5775],{"type":40,"value":1179},{"type":30,"tag":1046,"props":5777,"children":5778},{"style":1138},[5779],{"type":40,"value":5780},"removeItemFromCart",{"type":30,"tag":1046,"props":5782,"children":5783},{"style":1070},[5784],{"type":40,"value":1146},{"type":30,"tag":1046,"props":5786,"children":5787},{"style":1105},[5788],{"type":40,"value":2119},{"type":30,"tag":1046,"props":5790,"children":5791},{"style":1070},[5792],{"type":40,"value":2891},{"type":30,"tag":1046,"props":5794,"children":5795},{"style":1105},[5796],{"type":40,"value":1156},{"type":30,"tag":1046,"props":5798,"children":5799},{"style":1070},[5800],{"type":40,"value":1198},{"type":30,"tag":1046,"props":5802,"children":5803},{"class":1048,"line":2126},[5804,5808,5812,5816,5820,5824,5828],{"type":30,"tag":1046,"props":5805,"children":5806},{"style":1053},[5807],{"type":40,"value":1333},{"type":30,"tag":1046,"props":5809,"children":5810},{"style":1105},[5811],{"type":40,"value":1858},{"type":30,"tag":1046,"props":5813,"children":5814},{"style":1070},[5815],{"type":40,"value":1179},{"type":30,"tag":1046,"props":5817,"children":5818},{"style":1138},[5819],{"type":40,"value":1968},{"type":30,"tag":1046,"props":5821,"children":5822},{"style":1070},[5823],{"type":40,"value":1146},{"type":30,"tag":1046,"props":5825,"children":5826},{"style":1105},[5827],{"type":40,"value":1977},{"type":30,"tag":1046,"props":5829,"children":5830},{"style":1070},[5831],{"type":40,"value":1198},{"type":30,"tag":1046,"props":5833,"children":5834},{"class":1048,"line":2159},[5835],{"type":30,"tag":1046,"props":5836,"children":5837},{"style":1070},[5838],{"type":40,"value":1207},{"type":30,"tag":1046,"props":5840,"children":5841},{"class":1048,"line":2167},[5842],{"type":30,"tag":1046,"props":5843,"children":5844},{"emptyLinePlaceholder":13},[5845],{"type":40,"value":1121},{"type":30,"tag":1046,"props":5847,"children":5848},{"class":1048,"line":4537},[5849,5853,5857,5861,5866],{"type":30,"tag":1046,"props":5850,"children":5851},{"style":1647},[5852],{"type":40,"value":1828},{"type":30,"tag":1046,"props":5854,"children":5855},{"style":1653},[5856],{"type":40,"value":2007},{"type":30,"tag":1046,"props":5858,"children":5859},{"style":1070},[5860],{"type":40,"value":1146},{"type":30,"tag":1046,"props":5862,"children":5863},{"style":1675},[5864],{"type":40,"value":5865},"\"/{cartId}/total\"",{"type":30,"tag":1046,"props":5867,"children":5868},{"style":1070},[5869],{"type":40,"value":1388},{"type":30,"tag":1046,"props":5871,"children":5872},{"class":1048,"line":4545},[5873,5877,5881,5885,5890,5894,5898,5902,5906,5910,5914,5918,5922],{"type":30,"tag":1046,"props":5874,"children":5875},{"style":1053},[5876],{"type":40,"value":1130},{"type":30,"tag":1046,"props":5878,"children":5879},{"style":1084},[5880],{"type":40,"value":1858},{"type":30,"tag":1046,"props":5882,"children":5883},{"style":1070},[5884],{"type":40,"value":1092},{"type":30,"tag":1046,"props":5886,"children":5887},{"style":1053},[5888],{"type":40,"value":5889},"Double",{"type":30,"tag":1046,"props":5891,"children":5892},{"style":1070},[5893],{"type":40,"value":1102},{"type":30,"tag":1046,"props":5895,"children":5896},{"style":1138},[5897],{"type":40,"value":4559},{"type":30,"tag":1046,"props":5899,"children":5900},{"style":1070},[5901],{"type":40,"value":1146},{"type":30,"tag":1046,"props":5903,"children":5904},{"style":1647},[5905],{"type":40,"value":1650},{"type":30,"tag":1046,"props":5907,"children":5908},{"style":1653},[5909],{"type":40,"value":2062},{"type":30,"tag":1046,"props":5911,"children":5912},{"style":1084},[5913],{"type":40,"value":2067},{"type":30,"tag":1046,"props":5915,"children":5916},{"style":1153},[5917],{"type":40,"value":2072},{"type":30,"tag":1046,"props":5919,"children":5920},{"style":1070},[5921],{"type":40,"value":1161},{"type":30,"tag":1046,"props":5923,"children":5924},{"style":1070},[5925],{"type":40,"value":1073},{"type":30,"tag":1046,"props":5927,"children":5928},{"class":1048,"line":4582},[5929,5934,5939,5943,5947,5951,5956,5960,5964],{"type":30,"tag":1046,"props":5930,"children":5931},{"style":1053},[5932],{"type":40,"value":5933},"        double",{"type":30,"tag":1046,"props":5935,"children":5936},{"style":1105},[5937],{"type":40,"value":5938}," total ",{"type":30,"tag":1046,"props":5940,"children":5941},{"style":1795},[5942],{"type":40,"value":1798},{"type":30,"tag":1046,"props":5944,"children":5945},{"style":1105},[5946],{"type":40,"value":1731},{"type":30,"tag":1046,"props":5948,"children":5949},{"style":1070},[5950],{"type":40,"value":1179},{"type":30,"tag":1046,"props":5952,"children":5953},{"style":1138},[5954],{"type":40,"value":5955},"getCartTotal",{"type":30,"tag":1046,"props":5957,"children":5958},{"style":1070},[5959],{"type":40,"value":1146},{"type":30,"tag":1046,"props":5961,"children":5962},{"style":1105},[5963],{"type":40,"value":2119},{"type":30,"tag":1046,"props":5965,"children":5966},{"style":1070},[5967],{"type":40,"value":1198},{"type":30,"tag":1046,"props":5969,"children":5970},{"class":1048,"line":4622},[5971,5975,5979,5983,5987,5991,5996],{"type":30,"tag":1046,"props":5972,"children":5973},{"style":1053},[5974],{"type":40,"value":1333},{"type":30,"tag":1046,"props":5976,"children":5977},{"style":1105},[5978],{"type":40,"value":1858},{"type":30,"tag":1046,"props":5980,"children":5981},{"style":1070},[5982],{"type":40,"value":1179},{"type":30,"tag":1046,"props":5984,"children":5985},{"style":1138},[5986],{"type":40,"value":1968},{"type":30,"tag":1046,"props":5988,"children":5989},{"style":1070},[5990],{"type":40,"value":1146},{"type":30,"tag":1046,"props":5992,"children":5993},{"style":1105},[5994],{"type":40,"value":5995},"total",{"type":30,"tag":1046,"props":5997,"children":5998},{"style":1070},[5999],{"type":40,"value":1198},{"type":30,"tag":1046,"props":6001,"children":6002},{"class":1048,"line":4662},[6003],{"type":30,"tag":1046,"props":6004,"children":6005},{"style":1070},[6006],{"type":40,"value":1207},{"type":30,"tag":1046,"props":6008,"children":6009},{"class":1048,"line":4687},[6010],{"type":30,"tag":1046,"props":6011,"children":6012},{"emptyLinePlaceholder":13},[6013],{"type":40,"value":1121},{"type":30,"tag":1046,"props":6015,"children":6016},{"class":1048,"line":4695},[6017,6021,6025,6029,6033],{"type":30,"tag":1046,"props":6018,"children":6019},{"style":1647},[6020],{"type":40,"value":1828},{"type":30,"tag":1046,"props":6022,"children":6023},{"style":1653},[6024],{"type":40,"value":2007},{"type":30,"tag":1046,"props":6026,"children":6027},{"style":1070},[6028],{"type":40,"value":1146},{"type":30,"tag":1046,"props":6030,"children":6031},{"style":1675},[6032],{"type":40,"value":2016},{"type":30,"tag":1046,"props":6034,"children":6035},{"style":1070},[6036],{"type":40,"value":1388},{"type":30,"tag":1046,"props":6038,"children":6039},{"class":1048,"line":4703},[6040,6044,6048,6052,6056,6060,6064,6068,6072,6076,6080,6084,6088],{"type":30,"tag":1046,"props":6041,"children":6042},{"style":1053},[6043],{"type":40,"value":1130},{"type":30,"tag":1046,"props":6045,"children":6046},{"style":1084},[6047],{"type":40,"value":1858},{"type":30,"tag":1046,"props":6049,"children":6050},{"style":1070},[6051],{"type":40,"value":1092},{"type":30,"tag":1046,"props":6053,"children":6054},{"style":1053},[6055],{"type":40,"value":1867},{"type":30,"tag":1046,"props":6057,"children":6058},{"style":1070},[6059],{"type":40,"value":1102},{"type":30,"tag":1046,"props":6061,"children":6062},{"style":1138},[6063],{"type":40,"value":2049},{"type":30,"tag":1046,"props":6065,"children":6066},{"style":1070},[6067],{"type":40,"value":1146},{"type":30,"tag":1046,"props":6069,"children":6070},{"style":1647},[6071],{"type":40,"value":1650},{"type":30,"tag":1046,"props":6073,"children":6074},{"style":1653},[6075],{"type":40,"value":2062},{"type":30,"tag":1046,"props":6077,"children":6078},{"style":1084},[6079],{"type":40,"value":2067},{"type":30,"tag":1046,"props":6081,"children":6082},{"style":1153},[6083],{"type":40,"value":2072},{"type":30,"tag":1046,"props":6085,"children":6086},{"style":1070},[6087],{"type":40,"value":1161},{"type":30,"tag":1046,"props":6089,"children":6090},{"style":1070},[6091],{"type":40,"value":1073},{"type":30,"tag":1046,"props":6093,"children":6094},{"class":1048,"line":4739},[6095,6099,6103,6107,6111,6115,6119,6123,6127],{"type":30,"tag":1046,"props":6096,"children":6097},{"style":1084},[6098],{"type":40,"value":1914},{"type":30,"tag":1046,"props":6100,"children":6101},{"style":1105},[6102],{"type":40,"value":2093},{"type":30,"tag":1046,"props":6104,"children":6105},{"style":1795},[6106],{"type":40,"value":1798},{"type":30,"tag":1046,"props":6108,"children":6109},{"style":1105},[6110],{"type":40,"value":1731},{"type":30,"tag":1046,"props":6112,"children":6113},{"style":1070},[6114],{"type":40,"value":1179},{"type":30,"tag":1046,"props":6116,"children":6117},{"style":1138},[6118],{"type":40,"value":2110},{"type":30,"tag":1046,"props":6120,"children":6121},{"style":1070},[6122],{"type":40,"value":1146},{"type":30,"tag":1046,"props":6124,"children":6125},{"style":1105},[6126],{"type":40,"value":2119},{"type":30,"tag":1046,"props":6128,"children":6129},{"style":1070},[6130],{"type":40,"value":1198},{"type":30,"tag":1046,"props":6132,"children":6133},{"class":1048,"line":4771},[6134,6138,6142,6146,6150,6154,6158],{"type":30,"tag":1046,"props":6135,"children":6136},{"style":1053},[6137],{"type":40,"value":1333},{"type":30,"tag":1046,"props":6139,"children":6140},{"style":1105},[6141],{"type":40,"value":1858},{"type":30,"tag":1046,"props":6143,"children":6144},{"style":1070},[6145],{"type":40,"value":1179},{"type":30,"tag":1046,"props":6147,"children":6148},{"style":1138},[6149],{"type":40,"value":1968},{"type":30,"tag":1046,"props":6151,"children":6152},{"style":1070},[6153],{"type":40,"value":1146},{"type":30,"tag":1046,"props":6155,"children":6156},{"style":1105},[6157],{"type":40,"value":2152},{"type":30,"tag":1046,"props":6159,"children":6160},{"style":1070},[6161],{"type":40,"value":1198},{"type":30,"tag":1046,"props":6163,"children":6164},{"class":1048,"line":4811},[6165],{"type":30,"tag":1046,"props":6166,"children":6167},{"style":1070},[6168],{"type":40,"value":1207},{"type":30,"tag":1046,"props":6170,"children":6171},{"class":1048,"line":4819},[6172],{"type":30,"tag":1046,"props":6173,"children":6174},{"style":1070},[6175],{"type":40,"value":1423},{"type":30,"tag":964,"props":6177,"children":6178},{},[6179,6187],{"type":30,"tag":43,"props":6180,"children":6181},{},[6182],{"type":30,"tag":36,"props":6183,"children":6184},{},[6185],{"type":40,"value":6186},"Tips : Gérer les transactions distribuées",{"type":30,"tag":43,"props":6188,"children":6189},{},[6190,6192,6197],{"type":40,"value":6191},"Dans une architecture microservices, une transaction peut impliquer plusieurs services. Utilisez le ",{"type":30,"tag":36,"props":6193,"children":6194},{},[6195],{"type":40,"value":6196},"pattern de la cohérence éventuelle",{"type":40,"value":6198}," pour synchroniser les services plutôt que de tenter une transaction distribuée complexe.",{"type":30,"tag":84,"props":6200,"children":6201},{},[],{"type":30,"tag":31,"props":6203,"children":6205},{"id":6204},"conclusion-récapitulatif-et-pièges-à-éviter",[6206],{"type":30,"tag":36,"props":6207,"children":6208},{},[6209],{"type":40,"value":6210},"Conclusion : Récapitulatif et pièges à éviter",{"type":30,"tag":43,"props":6212,"children":6213},{},[6214],{"type":40,"value":6215},"Décomposer un monolithe en microservices peut sembler être une tâche complexe et intimidante, mais avec la bonne approche, cela",{"type":30,"tag":43,"props":6217,"children":6218},{},[6219,6221,6225,6227,6231,6233,6237],{"type":40,"value":6220},"devient beaucoup plus gérable. En utilisant des concepts comme le ",{"type":30,"tag":36,"props":6222,"children":6223},{},[6224],{"type":40,"value":770},{"type":40,"value":6226}," pour bien comprendre et structurer vos besoins métier, l'approche ",{"type":30,"tag":36,"props":6228,"children":6229},{},[6230],{"type":40,"value":777},{"type":40,"value":6232}," pour exposer vos services proprement, et l'",{"type":30,"tag":36,"props":6234,"children":6235},{},[6236],{"type":40,"value":784},{"type":40,"value":6238}," pour organiser votre code de façon modulaire et évolutive, vous mettez toutes les chances de votre côté pour réussir cette transition.",{"type":30,"tag":43,"props":6240,"children":6241},{},[6242],{"type":30,"tag":36,"props":6243,"children":6244},{},[6245],{"type":40,"value":6246},"Petit récap’ des points clés :",{"type":30,"tag":1518,"props":6248,"children":6249},{},[6250,6265,6276],{"type":30,"tag":167,"props":6251,"children":6252},{},[6253,6257,6259,6263],{"type":30,"tag":36,"props":6254,"children":6255},{},[6256],{"type":40,"value":804},{"type":40,"value":6258}," vous aide à découper vos services en fonction des besoins métier, grâce à des ",{"type":30,"tag":36,"props":6260,"children":6261},{},[6262],{"type":40,"value":811},{"type":40,"value":6264}," bien définis.",{"type":30,"tag":167,"props":6266,"children":6267},{},[6268,6270,6274],{"type":40,"value":6269},"L'approche ",{"type":30,"tag":36,"props":6271,"children":6272},{},[6273],{"type":40,"value":777},{"type":40,"value":6275}," permet de bien réfléchir à la communication entre vos microservices dès le début, en exposant des interfaces claires et documentées.",{"type":30,"tag":167,"props":6277,"children":6278},{},[6279,6280,6284],{"type":40,"value":2265},{"type":30,"tag":36,"props":6281,"children":6282},{},[6283],{"type":40,"value":784},{"type":40,"value":6285}," structure votre projet en trois couches (domaine, application, infrastructure), facilitant la maintenabilité et les tests.",{"type":30,"tag":31,"props":6287,"children":6289},{"id":6288},"les-pièges-à-éviter",[6290,6295],{"type":30,"tag":36,"props":6291,"children":6292},{},[6293],{"type":40,"value":6294},"Les pièges à éviter",{"type":40,"value":6296}," :",{"type":30,"tag":163,"props":6298,"children":6299},{},[6300,6310,6320],{"type":30,"tag":167,"props":6301,"children":6302},{},[6303,6308],{"type":30,"tag":36,"props":6304,"children":6305},{},[6306],{"type":40,"value":6307},"Ne pas découper trop finement",{"type":40,"value":6309}," : Vous ne voulez pas que vos services deviennent tellement petits qu'ils dépendent les uns des autres en permanence, créant un chaos ingérable.",{"type":30,"tag":167,"props":6311,"children":6312},{},[6313,6318],{"type":30,"tag":36,"props":6314,"children":6315},{},[6316],{"type":40,"value":6317},"Oublier la documentation d’API",{"type":40,"value":6319}," : Si vos APIs ne sont pas bien pensées et bien documentées, vous risquez de ralentir toute l’équipe.",{"type":30,"tag":167,"props":6321,"children":6322},{},[6323,6328],{"type":30,"tag":36,"props":6324,"children":6325},{},[6326],{"type":40,"value":6327},"Sous-estimer les dépendances entre services",{"type":40,"value":6329}," : Assurez-vous de bien gérer les transactions entre services, notamment en utilisant des événements ou des mécanismes de compensation pour éviter des incohérences.",{"type":30,"tag":84,"props":6331,"children":6332},{},[],{"type":30,"tag":31,"props":6334,"children":6336},{"id":6335},"faq-réponses-aux-questions-fréquentes",[6337],{"type":30,"tag":36,"props":6338,"children":6339},{},[6340],{"type":40,"value":6341},"FAQ : Réponses aux questions fréquentes",{"type":30,"tag":530,"props":6343,"children":6344},{},[6345,6350],{"type":30,"tag":534,"props":6346,"children":6347},{},[6348],{"type":40,"value":6349},"1. Comment savoir si un microservice est trop petit ou trop gros ?",{"type":30,"tag":43,"props":6351,"children":6352},{},[6353,6355,6359,6361,6365],{"type":40,"value":6354},"Un bon microservice doit avoir une responsabilité claire et isolée. S’il doit constamment interagir avec d’autres services pour accomplir une tâche, il est probablement trop petit. À l’inverse, s’il englobe plusieurs domaines fonctionnels, il est probablement trop gros. Le ",{"type":30,"tag":36,"props":6356,"children":6357},{},[6358],{"type":40,"value":804},{"type":40,"value":6360}," aide à déterminer la bonne taille grâce aux ",{"type":30,"tag":36,"props":6362,"children":6363},{},[6364],{"type":40,"value":811},{"type":40,"value":1179},{"type":30,"tag":530,"props":6367,"children":6368},{},[6369,6374],{"type":30,"tag":534,"props":6370,"children":6371},{},[6372],{"type":40,"value":6373},"2. Est-ce que l’architecture hexagonale n’ajoute pas trop de complexité ?",{"type":30,"tag":43,"props":6375,"children":6376},{},[6377,6379,6384,6386,6391],{"type":40,"value":6378},"Au début, cela peut sembler ajouter quelques couches supplémentaires, mais à long terme, cela simplifie grandement la maintenabilité de votre code. L’idée est de séparer les préoccupations métiers (le ",{"type":30,"tag":36,"props":6380,"children":6381},{},[6382],{"type":40,"value":6383},"domaine",{"type":40,"value":6385},") des détails techniques (l’",{"type":30,"tag":36,"props":6387,"children":6388},{},[6389],{"type":40,"value":6390},"infrastructure",{"type":40,"value":6392},").",{"type":30,"tag":530,"props":6394,"children":6395},{},[6396,6401],{"type":30,"tag":534,"props":6397,"children":6398},{},[6399],{"type":40,"value":6400},"3. Comment gérer les transactions distribuées dans une architecture microservices ?",{"type":30,"tag":43,"props":6402,"children":6403},{},[6404,6406,6411],{"type":40,"value":6405},"Les transactions distribuées peuvent être complexes. Une solution est d’utiliser le principe de ",{"type":30,"tag":36,"props":6407,"children":6408},{},[6409],{"type":40,"value":6410},"cohérence éventuelle",{"type":40,"value":6412},". Par exemple, utilisez des événements pour notifier les services et effectuer des ajustements en asynchrone.",{"type":30,"tag":530,"props":6414,"children":6415},{},[6416,6421],{"type":30,"tag":534,"props":6417,"children":6418},{},[6419],{"type":40,"value":6420},"4. L’API First, ça paraît beaucoup de documentation, est-ce vraiment nécessaire ?",{"type":30,"tag":43,"props":6422,"children":6423},{},[6424,6426,6430],{"type":40,"value":6425},"Oui, absolument. Bien documenter vos APIs avant de coder vous fait gagner un temps précieux à long terme. Utilisez ",{"type":30,"tag":36,"props":6427,"children":6428},{},[6429],{"type":40,"value":1571},{"type":40,"value":6431}," pour générer la documentation automatiquement.",{"type":30,"tag":530,"props":6433,"children":6434},{},[6435,6440],{"type":30,"tag":534,"props":6436,"children":6437},{},[6438],{"type":40,"value":6439},"5. Quand faut-il envisager de décomposer un monolithe en microservices ?",{"type":30,"tag":43,"props":6441,"children":6442},{},[6443],{"type":40,"value":6444},"Quand votre monolithe devient trop lourd à maintenir : temps de déploiement long, dépendances fortes entre les modules, difficultés à scaler certaines parties du système.",{"type":30,"tag":211,"props":6446,"children":6449},{"cta":6447,"href":639,"title":6448,"type":641},"Télécharger le guide gratuit →","Ressource gratuite : De 6 semaines à 8 jours de lead time en 90 jours",[6450],{"type":30,"tag":43,"props":6451,"children":6452},{},[6453],{"type":40,"value":6454},"Le framework 4 phases appliqué dans 12 équipes engineering, avec des exemples before/after chiffrés (services financiers, médias, assurance). Réduire votre lead time de 50%, c'est possible avec la bonne méthode.",{"type":30,"tag":6456,"props":6457,"children":6458},"style",{},[6459],{"type":40,"value":6460},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":8,"searchDepth":675,"depth":675,"links":6462},[6463,6464,6468,6472,6476,6481,6482,6484],{"id":737,"depth":675,"text":743},{"id":853,"depth":675,"text":859,"children":6465},[6466,6467],{"id":896,"depth":681,"text":902},{"id":1010,"depth":681,"text":1016},{"id":1465,"depth":675,"text":1471,"children":6469},[6470,6471],{"id":1498,"depth":681,"text":1504},{"id":1616,"depth":681,"text":1622},{"id":2254,"depth":675,"text":2260,"children":6473},[6474,6475],{"id":2294,"depth":681,"text":2300},{"id":2388,"depth":681,"text":2394},{"id":3489,"depth":675,"text":3495,"children":6477},[6478,6479,6480],{"id":3510,"depth":681,"text":3516},{"id":3981,"depth":681,"text":3987},{"id":4827,"depth":681,"text":4833},{"id":6204,"depth":675,"text":6210},{"id":6288,"depth":675,"text":6483},"Les pièges à éviter :",{"id":6335,"depth":675,"text":6341},"content:fr:architecture-craft:decomposer-monolithe-microservices-ddd-api-hexagonal-java.md","fr/architecture-craft/decomposer-monolithe-microservices-ddd-api-hexagonal-java.md","fr/architecture-craft/decomposer-monolithe-microservices-ddd-api-hexagonal-java",{"_path":6489,"_dir":717,"_draft":7,"_partial":7,"_locale":8,"title":6490,"description":6491,"id":6492,"date":6493,"listed":13,"nocomments":7,"hidden":7,"categories":6494,"tags":6495,"--cover":6496,"readingTime":6497,"body":6502,"_type":709,"_id":8261,"_source":711,"_file":8262,"_stem":8263,"_extension":714},"/fr/architecture-craft/backend-for-frontend-bff-java","Backend for Frontend (BFF), Comprendre, Implémenter et Optimiser avec des Exemples en Java","Découvrez le concept du Backend for Frontend (BFF), ses avantages et comment l’implémenter avec des exemples en Java. Apprenez les bonnes pratiques et réponses aux...",56,"2024-08-21",[723],[725,726],"covers/articles/backend-for-frontend.jpg",{"text":6498,"minutes":6499,"time":6500,"words":6501},"10 min read",9.91,594600,1982,{"type":27,"children":6503,"toc":8238},[6504,6511,6516,6528,6540,6545,6548,6554,6559,6570,6576,6619,6625,6630,6633,6639,6644,6650,6669,6675,6680,6933,6938,6944,6949,7478,7483,7489,7494,7808,7813,7819,7831,7919,7925,7930,7953,7958,7961,7975,7981,7986,7992,8004,8014,8020,8031,8041,8047,8060,8084,8090,8095,8104,8110,8115,8124,8130,8135,8144,8147,8153,8166,8179,8192,8205,8218,8221,8226,8234],{"type":30,"tag":6505,"props":6506,"children":6508},"h1",{"id":6507},"le-backend-for-frontend-bff-pourquoi-et-comment-ladopter-exemples-en-java",[6509],{"type":40,"value":6510},"Le Backend for Frontend (BFF) : Pourquoi et comment l'adopter ? (Exemples en Java)",{"type":30,"tag":43,"props":6512,"children":6513},{},[6514],{"type":40,"value":6515},"Mise en situation : vous construisez une API backend qui doit servir plusieurs types de frontends, une application web, une application mobile, peut-être même une smartwatch. Le problème ? Chaque interface a des besoins légèrement différents. Les requêtes REST classiques ne suffisent plus. Les frontends se retrouvent à manipuler trop de données inutiles, et tout devient compliqué à maintenir.",{"type":30,"tag":43,"props":6517,"children":6518},{},[6519,6521,6526],{"type":40,"value":6520},"C’est là qu’intervient le ",{"type":30,"tag":36,"props":6522,"children":6523},{},[6524],{"type":40,"value":6525},"Backend for Frontend (BFF)",{"type":40,"value":6527},". Ce concept peut sembler ajouter une couche de complexité supplémentaire à votre architecture. Mais parfois, un peu de complexité au bon endroit peut éviter bien des migraines. Imaginez un petit serveur backend qui s’adapte à chaque frontend, tel un tailleur qui ajuste votre costume pour qu’il vous aille parfaitement.",{"type":30,"tag":43,"props":6529,"children":6530},{},[6531,6533,6538],{"type":40,"value":6532},"J’ai accompagné plusieurs équipes dans cette transition, notamment dans des contextes bancaires et médias où la multiplicité des frontends est la règle plutôt que l’exception. Dans ces missions, adopter un BFF a fait une différence concrète sur la performance des livraisons et la satisfaction des équipes frontend. Dans cet article, je vais vous montrer ",{"type":30,"tag":36,"props":6534,"children":6535},{},[6536],{"type":40,"value":6537},"comment vous pouvez améliorer la modularité et la performance de votre projet",{"type":40,"value":6539}," en adoptant cette approche, avec des exemples en Java.",{"type":30,"tag":43,"props":6541,"children":6542},{},[6543],{"type":40,"value":6544},"Prêt à en découvrir plus ? C’est parti !",{"type":30,"tag":84,"props":6546,"children":6547},{},[],{"type":30,"tag":31,"props":6549,"children":6551},{"id":6550},"pourquoi-utiliser-le-backend-for-frontend",[6552],{"type":40,"value":6553},"Pourquoi utiliser le Backend for Frontend ?",{"type":30,"tag":43,"props":6555,"children":6556},{},[6557],{"type":40,"value":6558},"Pourquoi s’embêter avec un BFF ? Après tout, les API REST fonctionnent bien, non ? Oui, mais seulement jusqu’à un certain point. Imaginez que vous ayez un backend qui doit servir à la fois une application web, une application mobile, et une app sur tablette. Le problème, c’est que chacun de ces frontends a des besoins spécifiques. L’application mobile veut des données minimales pour ne pas saturer le réseau, l’application web a besoin de détails supplémentaires, et la tablette demande un mélange des deux. Si vous essayez de tout gérer avec un seul backend, ça devient vite le chaos, ce que j’observe systématiquement dans les grandes DSI que j’accompagne.",{"type":30,"tag":43,"props":6560,"children":6561},{},[6562,6563,6568],{"type":40,"value":143},{"type":30,"tag":36,"props":6564,"children":6565},{},[6566],{"type":40,"value":6567},"Backend for Frontend",{"type":40,"value":6569}," est une réponse à ce problème. Plutôt que d’avoir une API unique qui tente de satisfaire tout le monde (et échoue), vous créez un backend dédié pour chaque frontend. Chaque BFF se charge d’adapter les données et la logique métier en fonction des besoins spécifiques du client auquel il s’adresse.",{"type":30,"tag":116,"props":6571,"children":6573},{"id":6572},"les-avantages-du-bff",[6574],{"type":40,"value":6575},"Les avantages du BFF :",{"type":30,"tag":1518,"props":6577,"children":6578},{},[6579,6589,6599,6609],{"type":30,"tag":167,"props":6580,"children":6581},{},[6582,6587],{"type":30,"tag":36,"props":6583,"children":6584},{},[6585],{"type":40,"value":6586},"Optimisation des performances",{"type":40,"value":6588},"\nLes frontends reçoivent exactement les données dont ils ont besoin, ni plus, ni moins. Moins de surcharge réseau pour les mobiles, et des requêtes plus rapides pour les interfaces web. Ce que j’observe concrètement : des temps de réponse réduits de 30 à 50 % sur les interfaces mobiles après introduction d’un BFF dédié.",{"type":30,"tag":167,"props":6590,"children":6591},{},[6592,6597],{"type":30,"tag":36,"props":6593,"children":6594},{},[6595],{"type":40,"value":6596},"Séparation des responsabilités",{"type":40,"value":6598},"\nChaque BFF se concentre uniquement sur son frontend. Cela simplifie la gestion du code, évite les embrouilles et permet de mettre à jour une interface sans impacter les autres.",{"type":30,"tag":167,"props":6600,"children":6601},{},[6602,6607],{"type":30,"tag":36,"props":6603,"children":6604},{},[6605],{"type":40,"value":6606},"Meilleure maintenabilité",{"type":40,"value":6608},"\nLe code est plus modulaire, plus facile à tester et à maintenir. Au lieu de tout entasser dans un seul backend, chaque frontend a son serveur backend propre, ce qui réduit les risques d’introduire des bugs en essayant de répondre aux besoins divergents.",{"type":30,"tag":167,"props":6610,"children":6611},{},[6612,6617],{"type":30,"tag":36,"props":6613,"children":6614},{},[6615],{"type":40,"value":6616},"Flexibilité",{"type":40,"value":6618},"\nSi votre application web doit utiliser une logique métier différente de celle de l’application mobile, aucun problème. Chaque BFF peut implémenter sa propre version de la logique, sans impacter les autres.",{"type":30,"tag":116,"props":6620,"children":6622},{"id":6621},"mais-attention-ce-nest-pas-magique",[6623],{"type":40,"value":6624},"Mais attention, ce n’est pas magique :",{"type":30,"tag":43,"props":6626,"children":6627},{},[6628],{"type":40,"value":6629},"Le BFF apporte de réels bénéfices, mais il ajoute une couche supplémentaire à votre architecture. Si vous n’êtes pas vigilant, cela peut compliquer la gestion et la maintenance de votre projet. Je vous recommande de trouver le bon équilibre entre modularité et complexité avant de vous lancer.",{"type":30,"tag":84,"props":6631,"children":6632},{},[],{"type":30,"tag":31,"props":6634,"children":6636},{"id":6635},"exemple-concret-en-java-implémenter-un-backend-for-frontend",[6637],{"type":40,"value":6638},"Exemple concret en Java : Implémenter un Backend for Frontend",{"type":30,"tag":43,"props":6640,"children":6641},{},[6642],{"type":40,"value":6643},"Imaginez que vous développez une application avec une interface web et une application mobile. Ces deux clients doivent récupérer des informations sur les produits, mais l'application mobile a besoin de moins de données pour éviter la surcharge réseau, tandis que l'interface web veut des détails supplémentaires. Voici comment un BFF pourrait aider.",{"type":30,"tag":116,"props":6645,"children":6647},{"id":6646},"architecture-simple",[6648],{"type":40,"value":6649},"Architecture simple",{"type":30,"tag":43,"props":6651,"children":6652},{},[6653,6655,6660,6662,6667],{"type":40,"value":6654},"Pour cet exemple, nous allons créer deux BFF : un pour le ",{"type":30,"tag":36,"props":6656,"children":6657},{},[6658],{"type":40,"value":6659},"frontend mobile",{"type":40,"value":6661}," et un pour le ",{"type":30,"tag":36,"props":6663,"children":6664},{},[6665],{"type":40,"value":6666},"frontend web",{"type":40,"value":6668},". Chaque BFF fera appel au même backend principal (l'API de notre système e-commerce) mais adaptera la réponse selon le client.",{"type":30,"tag":116,"props":6670,"children":6672},{"id":6671},"_1-définir-le-backend-principal-api-e-commerce",[6673],{"type":40,"value":6674},"1. Définir le backend principal (API e-commerce)",{"type":30,"tag":43,"props":6676,"children":6677},{},[6678],{"type":40,"value":6679},"Le backend principal expose une API classique qui fournit toutes les informations sur les produits.",{"type":30,"tag":1035,"props":6681,"children":6683},{"className":1039,"code":6682,"language":1038,"meta":8,"style":8},"@RestController\n@RequestMapping(\"/api/products\")\npublic class ProductController {\n\n    @GetMapping(\"/{id}\")\n    public Product getProductDetails(@PathVariable Long id) {\n        // Simule la récupération d'un produit à partir d'une base de données\n        Product product = new Product(id, \"Smartphone\", \"Un smartphone ultra performant\", 699.99, \"caractéristiques complètes...\");\n        return product;\n    }\n}\n",[6684],{"type":30,"tag":1042,"props":6685,"children":6686},{"__ignoreMap":8},[6687,6698,6722,6742,6749,6773,6820,6828,6903,6919,6926],{"type":30,"tag":1046,"props":6688,"children":6689},{"class":1048,"line":1049},[6690,6694],{"type":30,"tag":1046,"props":6691,"children":6692},{"style":1647},[6693],{"type":40,"value":1650},{"type":30,"tag":1046,"props":6695,"children":6696},{"style":1653},[6697],{"type":40,"value":1656},{"type":30,"tag":1046,"props":6699,"children":6700},{"class":1048,"line":675},[6701,6705,6709,6713,6718],{"type":30,"tag":1046,"props":6702,"children":6703},{"style":1647},[6704],{"type":40,"value":1650},{"type":30,"tag":1046,"props":6706,"children":6707},{"style":1653},[6708],{"type":40,"value":1668},{"type":30,"tag":1046,"props":6710,"children":6711},{"style":1070},[6712],{"type":40,"value":1146},{"type":30,"tag":1046,"props":6714,"children":6715},{"style":1675},[6716],{"type":40,"value":6717},"\"/api/products\"",{"type":30,"tag":1046,"props":6719,"children":6720},{"style":1070},[6721],{"type":40,"value":1388},{"type":30,"tag":1046,"props":6723,"children":6724},{"class":1048,"line":681},[6725,6729,6733,6738],{"type":30,"tag":1046,"props":6726,"children":6727},{"style":1053},[6728],{"type":40,"value":1056},{"type":30,"tag":1046,"props":6730,"children":6731},{"style":1053},[6732],{"type":40,"value":1061},{"type":30,"tag":1046,"props":6734,"children":6735},{"style":1064},[6736],{"type":40,"value":6737}," ProductController",{"type":30,"tag":1046,"props":6739,"children":6740},{"style":1070},[6741],{"type":40,"value":1073},{"type":30,"tag":1046,"props":6743,"children":6744},{"class":1048,"line":1124},[6745],{"type":30,"tag":1046,"props":6746,"children":6747},{"emptyLinePlaceholder":13},[6748],{"type":40,"value":1121},{"type":30,"tag":1046,"props":6750,"children":6751},{"class":1048,"line":1168},[6752,6756,6760,6764,6769],{"type":30,"tag":1046,"props":6753,"children":6754},{"style":1647},[6755],{"type":40,"value":1828},{"type":30,"tag":1046,"props":6757,"children":6758},{"style":1653},[6759],{"type":40,"value":2007},{"type":30,"tag":1046,"props":6761,"children":6762},{"style":1070},[6763],{"type":40,"value":1146},{"type":30,"tag":1046,"props":6765,"children":6766},{"style":1675},[6767],{"type":40,"value":6768},"\"/{id}\"",{"type":30,"tag":1046,"props":6770,"children":6771},{"style":1070},[6772],{"type":40,"value":1388},{"type":30,"tag":1046,"props":6774,"children":6775},{"class":1048,"line":1201},[6776,6780,6785,6790,6794,6798,6802,6807,6812,6816],{"type":30,"tag":1046,"props":6777,"children":6778},{"style":1053},[6779],{"type":40,"value":1130},{"type":30,"tag":1046,"props":6781,"children":6782},{"style":1084},[6783],{"type":40,"value":6784}," Product",{"type":30,"tag":1046,"props":6786,"children":6787},{"style":1138},[6788],{"type":40,"value":6789}," getProductDetails",{"type":30,"tag":1046,"props":6791,"children":6792},{"style":1070},[6793],{"type":40,"value":1146},{"type":30,"tag":1046,"props":6795,"children":6796},{"style":1647},[6797],{"type":40,"value":1650},{"type":30,"tag":1046,"props":6799,"children":6800},{"style":1653},[6801],{"type":40,"value":2062},{"type":30,"tag":1046,"props":6803,"children":6804},{"style":1084},[6805],{"type":40,"value":6806}," Long",{"type":30,"tag":1046,"props":6808,"children":6809},{"style":1153},[6810],{"type":40,"value":6811}," id",{"type":30,"tag":1046,"props":6813,"children":6814},{"style":1070},[6815],{"type":40,"value":1161},{"type":30,"tag":1046,"props":6817,"children":6818},{"style":1070},[6819],{"type":40,"value":1073},{"type":30,"tag":1046,"props":6821,"children":6822},{"class":1048,"line":1210},[6823],{"type":30,"tag":1046,"props":6824,"children":6825},{"style":3961},[6826],{"type":40,"value":6827},"        // Simule la récupération d'un produit à partir d'une base de données\n",{"type":30,"tag":1046,"props":6829,"children":6830},{"class":1048,"line":1218},[6831,6836,6841,6845,6849,6853,6857,6862,6866,6871,6875,6880,6884,6890,6894,6899],{"type":30,"tag":1046,"props":6832,"children":6833},{"style":1084},[6834],{"type":40,"value":6835},"        Product",{"type":30,"tag":1046,"props":6837,"children":6838},{"style":1105},[6839],{"type":40,"value":6840}," product ",{"type":30,"tag":1046,"props":6842,"children":6843},{"style":1795},[6844],{"type":40,"value":1798},{"type":30,"tag":1046,"props":6846,"children":6847},{"style":1053},[6848],{"type":40,"value":2480},{"type":30,"tag":1046,"props":6850,"children":6851},{"style":1138},[6852],{"type":40,"value":6784},{"type":30,"tag":1046,"props":6854,"children":6855},{"style":1070},[6856],{"type":40,"value":1146},{"type":30,"tag":1046,"props":6858,"children":6859},{"style":1105},[6860],{"type":40,"value":6861},"id",{"type":30,"tag":1046,"props":6863,"children":6864},{"style":1070},[6865],{"type":40,"value":2891},{"type":30,"tag":1046,"props":6867,"children":6868},{"style":1675},[6869],{"type":40,"value":6870}," \"Smartphone\"",{"type":30,"tag":1046,"props":6872,"children":6873},{"style":1070},[6874],{"type":40,"value":2891},{"type":30,"tag":1046,"props":6876,"children":6877},{"style":1675},[6878],{"type":40,"value":6879}," \"Un smartphone ultra performant\"",{"type":30,"tag":1046,"props":6881,"children":6882},{"style":1070},[6883],{"type":40,"value":2891},{"type":30,"tag":1046,"props":6885,"children":6887},{"style":6886},"--shiki-default:#EF9F76;--shiki-dark:#79B8FF",[6888],{"type":40,"value":6889}," 699.99",{"type":30,"tag":1046,"props":6891,"children":6892},{"style":1070},[6893],{"type":40,"value":2891},{"type":30,"tag":1046,"props":6895,"children":6896},{"style":1675},[6897],{"type":40,"value":6898}," \"caractéristiques complètes...\"",{"type":30,"tag":1046,"props":6900,"children":6901},{"style":1070},[6902],{"type":40,"value":1198},{"type":30,"tag":1046,"props":6904,"children":6905},{"class":1048,"line":1255},[6906,6910,6915],{"type":30,"tag":1046,"props":6907,"children":6908},{"style":1053},[6909],{"type":40,"value":1333},{"type":30,"tag":1046,"props":6911,"children":6912},{"style":1105},[6913],{"type":40,"value":6914}," product",{"type":30,"tag":1046,"props":6916,"children":6917},{"style":1070},[6918],{"type":40,"value":1113},{"type":30,"tag":1046,"props":6920,"children":6921},{"class":1048,"line":1284},[6922],{"type":30,"tag":1046,"props":6923,"children":6924},{"style":1070},[6925],{"type":40,"value":1207},{"type":30,"tag":1046,"props":6927,"children":6928},{"class":1048,"line":1292},[6929],{"type":30,"tag":1046,"props":6930,"children":6931},{"style":1070},[6932],{"type":40,"value":1423},{"type":30,"tag":43,"props":6934,"children":6935},{},[6936],{"type":40,"value":6937},"Ce backend renvoie toutes les informations d’un produit, qu’il s’agisse de son nom, sa description, son prix et d’autres détails. C’est génial pour une interface web, mais probablement trop lourd pour une application mobile.",{"type":30,"tag":116,"props":6939,"children":6941},{"id":6940},"_2-implémenter-le-bff-pour-lapplication-mobile",[6942],{"type":40,"value":6943},"2. Implémenter le BFF pour l’application mobile",{"type":30,"tag":43,"props":6945,"children":6946},{},[6947],{"type":40,"value":6948},"Le BFF mobile n'a besoin que du nom et du prix du produit. Voici comment il peut simplifier les données renvoyées au frontend mobile.",{"type":30,"tag":1035,"props":6950,"children":6952},{"className":1039,"code":6951,"language":1038,"meta":8,"style":8},"@RestController\n@RequestMapping(\"/bff/mobile/products\")\npublic class MobileProductController {\n\n    private final RestTemplate restTemplate;\n\n    public MobileProductController(RestTemplate restTemplate) {\n        this.restTemplate = restTemplate;\n    }\n\n    @GetMapping(\"/{id}\")\n    public Map\u003CString, Object> getProductForMobile(@PathVariable Long id) {\n        // Récupération des données complètes depuis le backend principal\n        Product product = restTemplate.getForObject(\"http://localhost:8080/api/products/\" + id, Product.class);\n\n        // Adapter la réponse pour le mobile\n        Map\u003CString, Object> productForMobile = new HashMap\u003C>();\n        productForMobile.put(\"name\", product.getName());\n        productForMobile.put(\"price\", product.getPrice());\n\n        return productForMobile;\n    }\n}\n",[6953],{"type":30,"tag":1042,"props":6954,"children":6955},{"__ignoreMap":8},[6956,6967,6991,7011,7018,7043,7050,7082,7110,7117,7124,7147,7212,7220,7287,7294,7302,7351,7397,7441,7448,7464,7471],{"type":30,"tag":1046,"props":6957,"children":6958},{"class":1048,"line":1049},[6959,6963],{"type":30,"tag":1046,"props":6960,"children":6961},{"style":1647},[6962],{"type":40,"value":1650},{"type":30,"tag":1046,"props":6964,"children":6965},{"style":1653},[6966],{"type":40,"value":1656},{"type":30,"tag":1046,"props":6968,"children":6969},{"class":1048,"line":675},[6970,6974,6978,6982,6987],{"type":30,"tag":1046,"props":6971,"children":6972},{"style":1647},[6973],{"type":40,"value":1650},{"type":30,"tag":1046,"props":6975,"children":6976},{"style":1653},[6977],{"type":40,"value":1668},{"type":30,"tag":1046,"props":6979,"children":6980},{"style":1070},[6981],{"type":40,"value":1146},{"type":30,"tag":1046,"props":6983,"children":6984},{"style":1675},[6985],{"type":40,"value":6986},"\"/bff/mobile/products\"",{"type":30,"tag":1046,"props":6988,"children":6989},{"style":1070},[6990],{"type":40,"value":1388},{"type":30,"tag":1046,"props":6992,"children":6993},{"class":1048,"line":681},[6994,6998,7002,7007],{"type":30,"tag":1046,"props":6995,"children":6996},{"style":1053},[6997],{"type":40,"value":1056},{"type":30,"tag":1046,"props":6999,"children":7000},{"style":1053},[7001],{"type":40,"value":1061},{"type":30,"tag":1046,"props":7003,"children":7004},{"style":1064},[7005],{"type":40,"value":7006}," MobileProductController",{"type":30,"tag":1046,"props":7008,"children":7009},{"style":1070},[7010],{"type":40,"value":1073},{"type":30,"tag":1046,"props":7012,"children":7013},{"class":1048,"line":1124},[7014],{"type":30,"tag":1046,"props":7015,"children":7016},{"emptyLinePlaceholder":13},[7017],{"type":40,"value":1121},{"type":30,"tag":1046,"props":7019,"children":7020},{"class":1048,"line":1168},[7021,7025,7029,7034,7039],{"type":30,"tag":1046,"props":7022,"children":7023},{"style":1053},[7024],{"type":40,"value":1081},{"type":30,"tag":1046,"props":7026,"children":7027},{"style":1053},[7028],{"type":40,"value":1721},{"type":30,"tag":1046,"props":7030,"children":7031},{"style":1084},[7032],{"type":40,"value":7033}," RestTemplate",{"type":30,"tag":1046,"props":7035,"children":7036},{"style":1105},[7037],{"type":40,"value":7038}," restTemplate",{"type":30,"tag":1046,"props":7040,"children":7041},{"style":1070},[7042],{"type":40,"value":1113},{"type":30,"tag":1046,"props":7044,"children":7045},{"class":1048,"line":1201},[7046],{"type":30,"tag":1046,"props":7047,"children":7048},{"emptyLinePlaceholder":13},[7049],{"type":40,"value":1121},{"type":30,"tag":1046,"props":7051,"children":7052},{"class":1048,"line":1210},[7053,7057,7061,7065,7070,7074,7078],{"type":30,"tag":1046,"props":7054,"children":7055},{"style":1053},[7056],{"type":40,"value":1130},{"type":30,"tag":1046,"props":7058,"children":7059},{"style":1138},[7060],{"type":40,"value":7006},{"type":30,"tag":1046,"props":7062,"children":7063},{"style":1070},[7064],{"type":40,"value":1146},{"type":30,"tag":1046,"props":7066,"children":7067},{"style":1084},[7068],{"type":40,"value":7069},"RestTemplate",{"type":30,"tag":1046,"props":7071,"children":7072},{"style":1153},[7073],{"type":40,"value":7038},{"type":30,"tag":1046,"props":7075,"children":7076},{"style":1070},[7077],{"type":40,"value":1161},{"type":30,"tag":1046,"props":7079,"children":7080},{"style":1070},[7081],{"type":40,"value":1073},{"type":30,"tag":1046,"props":7083,"children":7084},{"class":1048,"line":1218},[7085,7089,7093,7098,7102,7106],{"type":30,"tag":1046,"props":7086,"children":7087},{"style":1780},[7088],{"type":40,"value":1783},{"type":30,"tag":1046,"props":7090,"children":7091},{"style":1070},[7092],{"type":40,"value":1179},{"type":30,"tag":1046,"props":7094,"children":7095},{"style":1105},[7096],{"type":40,"value":7097},"restTemplate ",{"type":30,"tag":1046,"props":7099,"children":7100},{"style":1795},[7101],{"type":40,"value":1798},{"type":30,"tag":1046,"props":7103,"children":7104},{"style":1105},[7105],{"type":40,"value":7038},{"type":30,"tag":1046,"props":7107,"children":7108},{"style":1070},[7109],{"type":40,"value":1113},{"type":30,"tag":1046,"props":7111,"children":7112},{"class":1048,"line":1255},[7113],{"type":30,"tag":1046,"props":7114,"children":7115},{"style":1070},[7116],{"type":40,"value":1207},{"type":30,"tag":1046,"props":7118,"children":7119},{"class":1048,"line":1284},[7120],{"type":30,"tag":1046,"props":7121,"children":7122},{"emptyLinePlaceholder":13},[7123],{"type":40,"value":1121},{"type":30,"tag":1046,"props":7125,"children":7126},{"class":1048,"line":1292},[7127,7131,7135,7139,7143],{"type":30,"tag":1046,"props":7128,"children":7129},{"style":1647},[7130],{"type":40,"value":1828},{"type":30,"tag":1046,"props":7132,"children":7133},{"style":1653},[7134],{"type":40,"value":2007},{"type":30,"tag":1046,"props":7136,"children":7137},{"style":1070},[7138],{"type":40,"value":1146},{"type":30,"tag":1046,"props":7140,"children":7141},{"style":1675},[7142],{"type":40,"value":6768},{"type":30,"tag":1046,"props":7144,"children":7145},{"style":1070},[7146],{"type":40,"value":1388},{"type":30,"tag":1046,"props":7148,"children":7149},{"class":1048,"line":1300},[7150,7154,7158,7162,7166,7170,7175,7179,7184,7188,7192,7196,7200,7204,7208],{"type":30,"tag":1046,"props":7151,"children":7152},{"style":1053},[7153],{"type":40,"value":1130},{"type":30,"tag":1046,"props":7155,"children":7156},{"style":1084},[7157],{"type":40,"value":3197},{"type":30,"tag":1046,"props":7159,"children":7160},{"style":1070},[7161],{"type":40,"value":1092},{"type":30,"tag":1046,"props":7163,"children":7164},{"style":1053},[7165],{"type":40,"value":2882},{"type":30,"tag":1046,"props":7167,"children":7168},{"style":1070},[7169],{"type":40,"value":2891},{"type":30,"tag":1046,"props":7171,"children":7172},{"style":1053},[7173],{"type":40,"value":7174}," Object",{"type":30,"tag":1046,"props":7176,"children":7177},{"style":1070},[7178],{"type":40,"value":1102},{"type":30,"tag":1046,"props":7180,"children":7181},{"style":1138},[7182],{"type":40,"value":7183}," getProductForMobile",{"type":30,"tag":1046,"props":7185,"children":7186},{"style":1070},[7187],{"type":40,"value":1146},{"type":30,"tag":1046,"props":7189,"children":7190},{"style":1647},[7191],{"type":40,"value":1650},{"type":30,"tag":1046,"props":7193,"children":7194},{"style":1653},[7195],{"type":40,"value":2062},{"type":30,"tag":1046,"props":7197,"children":7198},{"style":1084},[7199],{"type":40,"value":6806},{"type":30,"tag":1046,"props":7201,"children":7202},{"style":1153},[7203],{"type":40,"value":6811},{"type":30,"tag":1046,"props":7205,"children":7206},{"style":1070},[7207],{"type":40,"value":1161},{"type":30,"tag":1046,"props":7209,"children":7210},{"style":1070},[7211],{"type":40,"value":1073},{"type":30,"tag":1046,"props":7213,"children":7214},{"class":1048,"line":1327},[7215],{"type":30,"tag":1046,"props":7216,"children":7217},{"style":3961},[7218],{"type":40,"value":7219},"        // Récupération des données complètes depuis le backend principal\n",{"type":30,"tag":1046,"props":7221,"children":7222},{"class":1048,"line":1354},[7223,7227,7231,7235,7239,7243,7248,7252,7257,7262,7266,7270,7274,7278,7283],{"type":30,"tag":1046,"props":7224,"children":7225},{"style":1084},[7226],{"type":40,"value":6835},{"type":30,"tag":1046,"props":7228,"children":7229},{"style":1105},[7230],{"type":40,"value":6840},{"type":30,"tag":1046,"props":7232,"children":7233},{"style":1795},[7234],{"type":40,"value":1798},{"type":30,"tag":1046,"props":7236,"children":7237},{"style":1105},[7238],{"type":40,"value":7038},{"type":30,"tag":1046,"props":7240,"children":7241},{"style":1070},[7242],{"type":40,"value":1179},{"type":30,"tag":1046,"props":7244,"children":7245},{"style":1138},[7246],{"type":40,"value":7247},"getForObject",{"type":30,"tag":1046,"props":7249,"children":7250},{"style":1070},[7251],{"type":40,"value":1146},{"type":30,"tag":1046,"props":7253,"children":7254},{"style":1675},[7255],{"type":40,"value":7256},"\"http://localhost:8080/api/products/\"",{"type":30,"tag":1046,"props":7258,"children":7259},{"style":1795},[7260],{"type":40,"value":7261}," +",{"type":30,"tag":1046,"props":7263,"children":7264},{"style":1105},[7265],{"type":40,"value":6811},{"type":30,"tag":1046,"props":7267,"children":7268},{"style":1070},[7269],{"type":40,"value":2891},{"type":30,"tag":1046,"props":7271,"children":7272},{"style":1105},[7273],{"type":40,"value":6784},{"type":30,"tag":1046,"props":7275,"children":7276},{"style":1070},[7277],{"type":40,"value":1179},{"type":30,"tag":1046,"props":7279,"children":7280},{"style":1105},[7281],{"type":40,"value":7282},"class",{"type":30,"tag":1046,"props":7284,"children":7285},{"style":1070},[7286],{"type":40,"value":1198},{"type":30,"tag":1046,"props":7288,"children":7289},{"class":1048,"line":1391},[7290],{"type":30,"tag":1046,"props":7291,"children":7292},{"emptyLinePlaceholder":13},[7293],{"type":40,"value":1121},{"type":30,"tag":1046,"props":7295,"children":7296},{"class":1048,"line":1409},[7297],{"type":30,"tag":1046,"props":7298,"children":7299},{"style":3961},[7300],{"type":40,"value":7301},"        // Adapter la réponse pour le mobile\n",{"type":30,"tag":1046,"props":7303,"children":7304},{"class":1048,"line":1417},[7305,7310,7314,7318,7322,7326,7330,7335,7339,7343,7347],{"type":30,"tag":1046,"props":7306,"children":7307},{"style":1084},[7308],{"type":40,"value":7309},"        Map",{"type":30,"tag":1046,"props":7311,"children":7312},{"style":1070},[7313],{"type":40,"value":1092},{"type":30,"tag":1046,"props":7315,"children":7316},{"style":1053},[7317],{"type":40,"value":2882},{"type":30,"tag":1046,"props":7319,"children":7320},{"style":1070},[7321],{"type":40,"value":2891},{"type":30,"tag":1046,"props":7323,"children":7324},{"style":1053},[7325],{"type":40,"value":7174},{"type":30,"tag":1046,"props":7327,"children":7328},{"style":1070},[7329],{"type":40,"value":1102},{"type":30,"tag":1046,"props":7331,"children":7332},{"style":1105},[7333],{"type":40,"value":7334}," productForMobile ",{"type":30,"tag":1046,"props":7336,"children":7337},{"style":1795},[7338],{"type":40,"value":1798},{"type":30,"tag":1046,"props":7340,"children":7341},{"style":1053},[7342],{"type":40,"value":2480},{"type":30,"tag":1046,"props":7344,"children":7345},{"style":1084},[7346],{"type":40,"value":3235},{"type":30,"tag":1046,"props":7348,"children":7349},{"style":1070},[7350],{"type":40,"value":2490},{"type":30,"tag":1046,"props":7352,"children":7353},{"class":1048,"line":2023},[7354,7359,7363,7367,7371,7376,7380,7384,7388,7393],{"type":30,"tag":1046,"props":7355,"children":7356},{"style":1105},[7357],{"type":40,"value":7358},"        productForMobile",{"type":30,"tag":1046,"props":7360,"children":7361},{"style":1070},[7362],{"type":40,"value":1179},{"type":30,"tag":1046,"props":7364,"children":7365},{"style":1138},[7366],{"type":40,"value":3418},{"type":30,"tag":1046,"props":7368,"children":7369},{"style":1070},[7370],{"type":40,"value":1146},{"type":30,"tag":1046,"props":7372,"children":7373},{"style":1675},[7374],{"type":40,"value":7375},"\"name\"",{"type":30,"tag":1046,"props":7377,"children":7378},{"style":1070},[7379],{"type":40,"value":2891},{"type":30,"tag":1046,"props":7381,"children":7382},{"style":1105},[7383],{"type":40,"value":6914},{"type":30,"tag":1046,"props":7385,"children":7386},{"style":1070},[7387],{"type":40,"value":1179},{"type":30,"tag":1046,"props":7389,"children":7390},{"style":1138},[7391],{"type":40,"value":7392},"getName",{"type":30,"tag":1046,"props":7394,"children":7395},{"style":1070},[7396],{"type":40,"value":3340},{"type":30,"tag":1046,"props":7398,"children":7399},{"class":1048,"line":2083},[7400,7404,7408,7412,7416,7421,7425,7429,7433,7437],{"type":30,"tag":1046,"props":7401,"children":7402},{"style":1105},[7403],{"type":40,"value":7358},{"type":30,"tag":1046,"props":7405,"children":7406},{"style":1070},[7407],{"type":40,"value":1179},{"type":30,"tag":1046,"props":7409,"children":7410},{"style":1138},[7411],{"type":40,"value":3418},{"type":30,"tag":1046,"props":7413,"children":7414},{"style":1070},[7415],{"type":40,"value":1146},{"type":30,"tag":1046,"props":7417,"children":7418},{"style":1675},[7419],{"type":40,"value":7420},"\"price\"",{"type":30,"tag":1046,"props":7422,"children":7423},{"style":1070},[7424],{"type":40,"value":2891},{"type":30,"tag":1046,"props":7426,"children":7427},{"style":1105},[7428],{"type":40,"value":6914},{"type":30,"tag":1046,"props":7430,"children":7431},{"style":1070},[7432],{"type":40,"value":1179},{"type":30,"tag":1046,"props":7434,"children":7435},{"style":1138},[7436],{"type":40,"value":1383},{"type":30,"tag":1046,"props":7438,"children":7439},{"style":1070},[7440],{"type":40,"value":3340},{"type":30,"tag":1046,"props":7442,"children":7443},{"class":1048,"line":2126},[7444],{"type":30,"tag":1046,"props":7445,"children":7446},{"emptyLinePlaceholder":13},[7447],{"type":40,"value":1121},{"type":30,"tag":1046,"props":7449,"children":7450},{"class":1048,"line":2159},[7451,7455,7460],{"type":30,"tag":1046,"props":7452,"children":7453},{"style":1053},[7454],{"type":40,"value":1333},{"type":30,"tag":1046,"props":7456,"children":7457},{"style":1105},[7458],{"type":40,"value":7459}," productForMobile",{"type":30,"tag":1046,"props":7461,"children":7462},{"style":1070},[7463],{"type":40,"value":1113},{"type":30,"tag":1046,"props":7465,"children":7466},{"class":1048,"line":2167},[7467],{"type":30,"tag":1046,"props":7468,"children":7469},{"style":1070},[7470],{"type":40,"value":1207},{"type":30,"tag":1046,"props":7472,"children":7473},{"class":1048,"line":4537},[7474],{"type":30,"tag":1046,"props":7475,"children":7476},{"style":1070},[7477],{"type":40,"value":1423},{"type":30,"tag":43,"props":7479,"children":7480},{},[7481],{"type":40,"value":7482},"Ici, le BFF mobile fait une requête au backend principal, mais ne renvoie que les informations pertinentes pour l’application mobile : le nom et le prix du produit. On simplifie ainsi la réponse pour qu’elle soit plus légère et adaptée au réseau mobile.",{"type":30,"tag":116,"props":7484,"children":7486},{"id":7485},"_3-implémenter-le-bff-pour-lapplication-web",[7487],{"type":40,"value":7488},"3. Implémenter le BFF pour l’application web",{"type":30,"tag":43,"props":7490,"children":7491},{},[7492],{"type":40,"value":7493},"L'application web, quant à elle, a besoin de plus de détails : la description complète, les caractéristiques, etc. Voici le BFF pour cette interface.",{"type":30,"tag":1035,"props":7495,"children":7497},{"className":1039,"code":7496,"language":1038,"meta":8,"style":8},"@RestController\n@RequestMapping(\"/bff/web/products\")\npublic class WebProductController {\n\n    private final RestTemplate restTemplate;\n\n    public WebProductController(RestTemplate restTemplate) {\n        this.restTemplate = restTemplate;\n    }\n\n    @GetMapping(\"/{id}\")\n    public Product getProductForWeb(@PathVariable Long id) {\n        // Récupération des données complètes depuis le backend principal\n        return restTemplate.getForObject(\"http://localhost:8080/api/products/\" + id, Product.class);\n    }\n}\n",[7498],{"type":30,"tag":1042,"props":7499,"children":7500},{"__ignoreMap":8},[7501,7512,7536,7556,7563,7586,7593,7624,7651,7658,7665,7688,7732,7739,7794,7801],{"type":30,"tag":1046,"props":7502,"children":7503},{"class":1048,"line":1049},[7504,7508],{"type":30,"tag":1046,"props":7505,"children":7506},{"style":1647},[7507],{"type":40,"value":1650},{"type":30,"tag":1046,"props":7509,"children":7510},{"style":1653},[7511],{"type":40,"value":1656},{"type":30,"tag":1046,"props":7513,"children":7514},{"class":1048,"line":675},[7515,7519,7523,7527,7532],{"type":30,"tag":1046,"props":7516,"children":7517},{"style":1647},[7518],{"type":40,"value":1650},{"type":30,"tag":1046,"props":7520,"children":7521},{"style":1653},[7522],{"type":40,"value":1668},{"type":30,"tag":1046,"props":7524,"children":7525},{"style":1070},[7526],{"type":40,"value":1146},{"type":30,"tag":1046,"props":7528,"children":7529},{"style":1675},[7530],{"type":40,"value":7531},"\"/bff/web/products\"",{"type":30,"tag":1046,"props":7533,"children":7534},{"style":1070},[7535],{"type":40,"value":1388},{"type":30,"tag":1046,"props":7537,"children":7538},{"class":1048,"line":681},[7539,7543,7547,7552],{"type":30,"tag":1046,"props":7540,"children":7541},{"style":1053},[7542],{"type":40,"value":1056},{"type":30,"tag":1046,"props":7544,"children":7545},{"style":1053},[7546],{"type":40,"value":1061},{"type":30,"tag":1046,"props":7548,"children":7549},{"style":1064},[7550],{"type":40,"value":7551}," WebProductController",{"type":30,"tag":1046,"props":7553,"children":7554},{"style":1070},[7555],{"type":40,"value":1073},{"type":30,"tag":1046,"props":7557,"children":7558},{"class":1048,"line":1124},[7559],{"type":30,"tag":1046,"props":7560,"children":7561},{"emptyLinePlaceholder":13},[7562],{"type":40,"value":1121},{"type":30,"tag":1046,"props":7564,"children":7565},{"class":1048,"line":1168},[7566,7570,7574,7578,7582],{"type":30,"tag":1046,"props":7567,"children":7568},{"style":1053},[7569],{"type":40,"value":1081},{"type":30,"tag":1046,"props":7571,"children":7572},{"style":1053},[7573],{"type":40,"value":1721},{"type":30,"tag":1046,"props":7575,"children":7576},{"style":1084},[7577],{"type":40,"value":7033},{"type":30,"tag":1046,"props":7579,"children":7580},{"style":1105},[7581],{"type":40,"value":7038},{"type":30,"tag":1046,"props":7583,"children":7584},{"style":1070},[7585],{"type":40,"value":1113},{"type":30,"tag":1046,"props":7587,"children":7588},{"class":1048,"line":1201},[7589],{"type":30,"tag":1046,"props":7590,"children":7591},{"emptyLinePlaceholder":13},[7592],{"type":40,"value":1121},{"type":30,"tag":1046,"props":7594,"children":7595},{"class":1048,"line":1210},[7596,7600,7604,7608,7612,7616,7620],{"type":30,"tag":1046,"props":7597,"children":7598},{"style":1053},[7599],{"type":40,"value":1130},{"type":30,"tag":1046,"props":7601,"children":7602},{"style":1138},[7603],{"type":40,"value":7551},{"type":30,"tag":1046,"props":7605,"children":7606},{"style":1070},[7607],{"type":40,"value":1146},{"type":30,"tag":1046,"props":7609,"children":7610},{"style":1084},[7611],{"type":40,"value":7069},{"type":30,"tag":1046,"props":7613,"children":7614},{"style":1153},[7615],{"type":40,"value":7038},{"type":30,"tag":1046,"props":7617,"children":7618},{"style":1070},[7619],{"type":40,"value":1161},{"type":30,"tag":1046,"props":7621,"children":7622},{"style":1070},[7623],{"type":40,"value":1073},{"type":30,"tag":1046,"props":7625,"children":7626},{"class":1048,"line":1218},[7627,7631,7635,7639,7643,7647],{"type":30,"tag":1046,"props":7628,"children":7629},{"style":1780},[7630],{"type":40,"value":1783},{"type":30,"tag":1046,"props":7632,"children":7633},{"style":1070},[7634],{"type":40,"value":1179},{"type":30,"tag":1046,"props":7636,"children":7637},{"style":1105},[7638],{"type":40,"value":7097},{"type":30,"tag":1046,"props":7640,"children":7641},{"style":1795},[7642],{"type":40,"value":1798},{"type":30,"tag":1046,"props":7644,"children":7645},{"style":1105},[7646],{"type":40,"value":7038},{"type":30,"tag":1046,"props":7648,"children":7649},{"style":1070},[7650],{"type":40,"value":1113},{"type":30,"tag":1046,"props":7652,"children":7653},{"class":1048,"line":1255},[7654],{"type":30,"tag":1046,"props":7655,"children":7656},{"style":1070},[7657],{"type":40,"value":1207},{"type":30,"tag":1046,"props":7659,"children":7660},{"class":1048,"line":1284},[7661],{"type":30,"tag":1046,"props":7662,"children":7663},{"emptyLinePlaceholder":13},[7664],{"type":40,"value":1121},{"type":30,"tag":1046,"props":7666,"children":7667},{"class":1048,"line":1292},[7668,7672,7676,7680,7684],{"type":30,"tag":1046,"props":7669,"children":7670},{"style":1647},[7671],{"type":40,"value":1828},{"type":30,"tag":1046,"props":7673,"children":7674},{"style":1653},[7675],{"type":40,"value":2007},{"type":30,"tag":1046,"props":7677,"children":7678},{"style":1070},[7679],{"type":40,"value":1146},{"type":30,"tag":1046,"props":7681,"children":7682},{"style":1675},[7683],{"type":40,"value":6768},{"type":30,"tag":1046,"props":7685,"children":7686},{"style":1070},[7687],{"type":40,"value":1388},{"type":30,"tag":1046,"props":7689,"children":7690},{"class":1048,"line":1300},[7691,7695,7699,7704,7708,7712,7716,7720,7724,7728],{"type":30,"tag":1046,"props":7692,"children":7693},{"style":1053},[7694],{"type":40,"value":1130},{"type":30,"tag":1046,"props":7696,"children":7697},{"style":1084},[7698],{"type":40,"value":6784},{"type":30,"tag":1046,"props":7700,"children":7701},{"style":1138},[7702],{"type":40,"value":7703}," getProductForWeb",{"type":30,"tag":1046,"props":7705,"children":7706},{"style":1070},[7707],{"type":40,"value":1146},{"type":30,"tag":1046,"props":7709,"children":7710},{"style":1647},[7711],{"type":40,"value":1650},{"type":30,"tag":1046,"props":7713,"children":7714},{"style":1653},[7715],{"type":40,"value":2062},{"type":30,"tag":1046,"props":7717,"children":7718},{"style":1084},[7719],{"type":40,"value":6806},{"type":30,"tag":1046,"props":7721,"children":7722},{"style":1153},[7723],{"type":40,"value":6811},{"type":30,"tag":1046,"props":7725,"children":7726},{"style":1070},[7727],{"type":40,"value":1161},{"type":30,"tag":1046,"props":7729,"children":7730},{"style":1070},[7731],{"type":40,"value":1073},{"type":30,"tag":1046,"props":7733,"children":7734},{"class":1048,"line":1327},[7735],{"type":30,"tag":1046,"props":7736,"children":7737},{"style":3961},[7738],{"type":40,"value":7219},{"type":30,"tag":1046,"props":7740,"children":7741},{"class":1048,"line":1354},[7742,7746,7750,7754,7758,7762,7766,7770,7774,7778,7782,7786,7790],{"type":30,"tag":1046,"props":7743,"children":7744},{"style":1053},[7745],{"type":40,"value":1333},{"type":30,"tag":1046,"props":7747,"children":7748},{"style":1105},[7749],{"type":40,"value":7038},{"type":30,"tag":1046,"props":7751,"children":7752},{"style":1070},[7753],{"type":40,"value":1179},{"type":30,"tag":1046,"props":7755,"children":7756},{"style":1138},[7757],{"type":40,"value":7247},{"type":30,"tag":1046,"props":7759,"children":7760},{"style":1070},[7761],{"type":40,"value":1146},{"type":30,"tag":1046,"props":7763,"children":7764},{"style":1675},[7765],{"type":40,"value":7256},{"type":30,"tag":1046,"props":7767,"children":7768},{"style":1795},[7769],{"type":40,"value":7261},{"type":30,"tag":1046,"props":7771,"children":7772},{"style":1105},[7773],{"type":40,"value":6811},{"type":30,"tag":1046,"props":7775,"children":7776},{"style":1070},[7777],{"type":40,"value":2891},{"type":30,"tag":1046,"props":7779,"children":7780},{"style":1105},[7781],{"type":40,"value":6784},{"type":30,"tag":1046,"props":7783,"children":7784},{"style":1070},[7785],{"type":40,"value":1179},{"type":30,"tag":1046,"props":7787,"children":7788},{"style":1105},[7789],{"type":40,"value":7282},{"type":30,"tag":1046,"props":7791,"children":7792},{"style":1070},[7793],{"type":40,"value":1198},{"type":30,"tag":1046,"props":7795,"children":7796},{"class":1048,"line":1391},[7797],{"type":30,"tag":1046,"props":7798,"children":7799},{"style":1070},[7800],{"type":40,"value":1207},{"type":30,"tag":1046,"props":7802,"children":7803},{"class":1048,"line":1409},[7804],{"type":30,"tag":1046,"props":7805,"children":7806},{"style":1070},[7807],{"type":40,"value":1423},{"type":30,"tag":43,"props":7809,"children":7810},{},[7811],{"type":40,"value":7812},"Dans ce cas, le BFF web renvoie toutes les informations fournies par le backend principal, car l’interface web a besoin de ces détails.",{"type":30,"tag":116,"props":7814,"children":7816},{"id":7815},"_4-configuration-spring-boot-pour-gérer-plusieurs-bff",[7817],{"type":40,"value":7818},"4. Configuration Spring Boot pour gérer plusieurs BFF",{"type":30,"tag":43,"props":7820,"children":7821},{},[7822,7824,7829],{"type":40,"value":7823},"Dans notre configuration Spring Boot, nous devons ajouter une gestion des requêtes HTTP avec ",{"type":30,"tag":1042,"props":7825,"children":7827},{"className":7826},[],[7828],{"type":40,"value":7069},{"type":40,"value":7830},", qui permet à chaque BFF de communiquer avec le backend principal.",{"type":30,"tag":1035,"props":7832,"children":7834},{"className":1039,"code":7833,"language":1038,"meta":8,"style":8},"@Bean\npublic RestTemplate restTemplate(RestTemplateBuilder builder) {\n    return builder.build();\n}\n",[7835],{"type":30,"tag":1042,"props":7836,"children":7837},{"__ignoreMap":8},[7838,7850,7887,7912],{"type":30,"tag":1046,"props":7839,"children":7840},{"class":1048,"line":1049},[7841,7845],{"type":30,"tag":1046,"props":7842,"children":7843},{"style":1647},[7844],{"type":40,"value":1650},{"type":30,"tag":1046,"props":7846,"children":7847},{"style":1653},[7848],{"type":40,"value":7849},"Bean\n",{"type":30,"tag":1046,"props":7851,"children":7852},{"class":1048,"line":675},[7853,7857,7861,7865,7869,7874,7879,7883],{"type":30,"tag":1046,"props":7854,"children":7855},{"style":1053},[7856],{"type":40,"value":1056},{"type":30,"tag":1046,"props":7858,"children":7859},{"style":1084},[7860],{"type":40,"value":7033},{"type":30,"tag":1046,"props":7862,"children":7863},{"style":1138},[7864],{"type":40,"value":7038},{"type":30,"tag":1046,"props":7866,"children":7867},{"style":1070},[7868],{"type":40,"value":1146},{"type":30,"tag":1046,"props":7870,"children":7871},{"style":1084},[7872],{"type":40,"value":7873},"RestTemplateBuilder",{"type":30,"tag":1046,"props":7875,"children":7876},{"style":1105},[7877],{"type":40,"value":7878}," builder",{"type":30,"tag":1046,"props":7880,"children":7881},{"style":1070},[7882],{"type":40,"value":1161},{"type":30,"tag":1046,"props":7884,"children":7885},{"style":1070},[7886],{"type":40,"value":1073},{"type":30,"tag":1046,"props":7888,"children":7889},{"class":1048,"line":681},[7890,7895,7899,7903,7908],{"type":30,"tag":1046,"props":7891,"children":7892},{"style":1053},[7893],{"type":40,"value":7894},"    return",{"type":30,"tag":1046,"props":7896,"children":7897},{"style":1105},[7898],{"type":40,"value":7878},{"type":30,"tag":1046,"props":7900,"children":7901},{"style":1070},[7902],{"type":40,"value":1179},{"type":30,"tag":1046,"props":7904,"children":7905},{"style":1138},[7906],{"type":40,"value":7907},"build",{"type":30,"tag":1046,"props":7909,"children":7910},{"style":1070},[7911],{"type":40,"value":1406},{"type":30,"tag":1046,"props":7913,"children":7914},{"class":1048,"line":1124},[7915],{"type":30,"tag":1046,"props":7916,"children":7917},{"style":1070},[7918],{"type":40,"value":1423},{"type":30,"tag":116,"props":7920,"children":7922},{"id":7921},"_5-résultat-final",[7923],{"type":40,"value":7924},"5. Résultat final",{"type":30,"tag":43,"props":7926,"children":7927},{},[7928],{"type":40,"value":7929},"Nous avons maintenant deux BFF distincts :",{"type":30,"tag":163,"props":7931,"children":7932},{},[7933,7943],{"type":30,"tag":167,"props":7934,"children":7935},{},[7936,7941],{"type":30,"tag":36,"props":7937,"children":7938},{},[7939],{"type":40,"value":7940},"/bff/mobile/products/{id}",{"type":40,"value":7942}," : Renvoie des données optimisées pour le mobile (nom et prix du produit).",{"type":30,"tag":167,"props":7944,"children":7945},{},[7946,7951],{"type":30,"tag":36,"props":7947,"children":7948},{},[7949],{"type":40,"value":7950},"/bff/web/products/{id}",{"type":40,"value":7952}," : Renvoie les données complètes pour l’application web.",{"type":30,"tag":43,"props":7954,"children":7955},{},[7956],{"type":40,"value":7957},"Chaque frontend reçoit les données spécifiques dont il a besoin, sans surcharge.",{"type":30,"tag":84,"props":7959,"children":7960},{},[],{"type":30,"tag":211,"props":7962,"children":7964},{"cta":213,"href":214,"title":7963,"type":216},"Votre backend est devenu le goulot d'étranglement de toutes vos équipes frontend ?",[7965,7970],{"type":30,"tag":43,"props":7966,"children":7967},{},[7968],{"type":40,"value":7969},"Mobile, web, tablette — chaque interface attend les autres, les compromis s'accumulent, les performances se dégradent et les équipes se marchent dessus ? Quand un seul backend tente de tout servir, tout le monde souffre.",{"type":30,"tag":43,"props":7971,"children":7972},{},[7973],{"type":40,"value":7974},"Réservons 30 minutes pour diagnostiquer votre architecture multi-frontend et identifier les ajustements qui débloquent vos équipes sans tout réécrire.",{"type":30,"tag":31,"props":7976,"children":7978},{"id":7977},"bonnes-pratiques-pour-réussir-votre-backend-for-frontend-bff",[7979],{"type":40,"value":7980},"Bonnes pratiques pour réussir votre Backend for Frontend (BFF)",{"type":30,"tag":43,"props":7982,"children":7983},{},[7984],{"type":40,"value":7985},"Maintenant que vous avez vu un exemple concret d’implémentation en Java, voici quelques bonnes pratiques pour que votre architecture Backend for Frontend soit robuste, maintenable et évolutive.",{"type":30,"tag":116,"props":7987,"children":7989},{"id":7988},"_1-séparer-les-responsabilités-de-chaque-bff",[7990],{"type":40,"value":7991},"1. Séparer les responsabilités de chaque BFF",{"type":30,"tag":43,"props":7993,"children":7994},{},[7995,7997,8002],{"type":40,"value":7996},"Chaque BFF doit rester centré sur les besoins de ",{"type":30,"tag":36,"props":7998,"children":7999},{},[8000],{"type":40,"value":8001},"son",{"type":40,"value":8003}," frontend spécifique. Je vous recommande d’éviter de mélanger les fonctionnalités pour différentes interfaces dans un même BFF, car cela entraînera à nouveau une surcharge et une complexité inutiles.",{"type":30,"tag":43,"props":8005,"children":8006},{},[8007,8012],{"type":30,"tag":36,"props":8008,"children":8009},{},[8010],{"type":40,"value":8011},"Astuce :",{"type":40,"value":8013}," Pensez à chaque BFF comme un service dédié à son frontend. Gardez son périmètre aussi restreint que possible pour faciliter les mises à jour et l’ajout de nouvelles fonctionnalités sans impacter les autres.",{"type":30,"tag":116,"props":8015,"children":8017},{"id":8016},"_2-minimiser-la-logique-métier-dans-le-bff",[8018],{"type":40,"value":8019},"2. Minimiser la logique métier dans le BFF",{"type":30,"tag":43,"props":8021,"children":8022},{},[8023,8025,8029],{"type":40,"value":8024},"Le rôle du BFF est d’adapter les données, pas d’implémenter de la logique métier complexe. La logique métier doit rester dans le backend principal (ou dans d’autres services backend), afin de conserver une architecture claire et maintenable. Cette séparation entre la couche d’adaptation et le domaine métier est au cœur de la ",{"type":30,"tag":75,"props":8026,"children":8027},{"href":2274},[8028],{"type":40,"value":2277},{"type":40,"value":8030}," telle que la décrit Robert C. Martin : les dépendances doivent toujours pointer vers le domaine, jamais vers la périphérie.",{"type":30,"tag":43,"props":8032,"children":8033},{},[8034,8039],{"type":30,"tag":36,"props":8035,"children":8036},{},[8037],{"type":40,"value":8038},"Piège à éviter :",{"type":40,"value":8040}," Ne transformez pas votre BFF en un \"mini-backend\" avec des tonnes de logique métier. Cela risque de rendre votre couche BFF lourde et difficile à maintenir.",{"type":30,"tag":116,"props":8042,"children":8044},{"id":8043},"_3-utiliser-des-outils-dagrégation-de-données",[8045],{"type":40,"value":8046},"3. Utiliser des outils d’agrégation de données",{"type":30,"tag":43,"props":8048,"children":8049},{},[8050,8052,8058],{"type":40,"value":8051},"Un BFF est particulièrement utile pour agréger des données provenant de plusieurs services backend. Si vous devez composer des données venant de différentes sources (par exemple, un service d’authentification, un service produit, et un service de recommandations), le BFF est l’endroit idéal pour faire cela. Dans une architecture ",{"type":30,"tag":75,"props":8053,"children":8055},{"href":8054},"/fr/architecture-craft/database-per-service-microservices",[8056],{"type":40,"value":8057},"microservices avec une base de données par service",{"type":40,"value":8059},", le BFF devient un point d’agrégation naturel pour les lectures cross-services.",{"type":30,"tag":43,"props":8061,"children":8062},{},[8063,8067,8069,8074,8076,8082],{"type":30,"tag":36,"props":8064,"children":8065},{},[8066],{"type":40,"value":8011},{"type":40,"value":8068}," Utilisez des outils comme ",{"type":30,"tag":1042,"props":8070,"children":8072},{"className":8071},[],[8073],{"type":40,"value":7069},{"type":40,"value":8075}," ou des librairies de gestion des requêtes asynchrones (comme ",{"type":30,"tag":1042,"props":8077,"children":8079},{"className":8078},[],[8080],{"type":40,"value":8081},"WebClient",{"type":40,"value":8083}," dans Spring) pour faciliter la gestion de ces multiples appels backend.",{"type":30,"tag":116,"props":8085,"children":8087},{"id":8086},"_4-documenter-clairement-chaque-bff",[8088],{"type":40,"value":8089},"4. Documenter clairement chaque BFF",{"type":30,"tag":43,"props":8091,"children":8092},{},[8093],{"type":40,"value":8094},"Comme chaque BFF sert un frontend spécifique, la documentation est cruciale pour éviter les confusions entre les équipes frontend et backend. Je vous encourage à documenter clairement les endpoints et les types de réponses pour que les développeurs frontend sachent exactement ce qu’ils vont recevoir.",{"type":30,"tag":43,"props":8096,"children":8097},{},[8098,8102],{"type":30,"tag":36,"props":8099,"children":8100},{},[8101],{"type":40,"value":8011},{"type":40,"value":8103}," Utilisez des outils comme Swagger pour générer automatiquement de la documentation API et garder les différentes équipes synchronisées.",{"type":30,"tag":116,"props":8105,"children":8107},{"id":8106},"_5-éviter-la-duplication-de-code",[8108],{"type":40,"value":8109},"5. Éviter la duplication de code",{"type":30,"tag":43,"props":8111,"children":8112},{},[8113],{"type":40,"value":8114},"Si plusieurs BFF doivent accéder à des données similaires, essayez de centraliser certaines fonctions ou modèles de données. Le risque avec plusieurs BFF est de créer des duplications inutiles dans le code. Utilisez des services partagés ou des bibliothèques communes pour éviter ces duplications.",{"type":30,"tag":43,"props":8116,"children":8117},{},[8118,8122],{"type":30,"tag":36,"props":8119,"children":8120},{},[8121],{"type":40,"value":8011},{"type":40,"value":8123}," Créez des services utilitaires ou des bibliothèques que chaque BFF peut réutiliser pour les parties communes, comme l’authentification, la gestion des erreurs, ou l’accès aux données partagées.",{"type":30,"tag":116,"props":8125,"children":8127},{"id":8126},"_6-mettre-en-place-des-tests-automatisés",[8128],{"type":40,"value":8129},"6. Mettre en place des tests automatisés",{"type":30,"tag":43,"props":8131,"children":8132},{},[8133],{"type":40,"value":8134},"Comme tout service backend, chaque BFF doit être couvert par des tests unitaires et d’intégration. Assurez-vous de tester non seulement les réponses pour chaque frontend, mais aussi les interactions avec le backend principal.",{"type":30,"tag":43,"props":8136,"children":8137},{},[8138,8142],{"type":30,"tag":36,"props":8139,"children":8140},{},[8141],{"type":40,"value":8011},{"type":40,"value":8143}," Utilisez JUnit et MockMVC (ou d’autres frameworks de tests comme Mockito) pour simuler les appels aux backends et vérifier que chaque BFF renvoie bien les données attendues pour son frontend.",{"type":30,"tag":84,"props":8145,"children":8146},{},[],{"type":30,"tag":31,"props":8148,"children":8150},{"id":8149},"faq-sur-le-backend-for-frontend-bff",[8151],{"type":40,"value":8152},"FAQ sur le Backend for Frontend (BFF)",{"type":30,"tag":530,"props":8154,"children":8155},{},[8156,8161],{"type":30,"tag":534,"props":8157,"children":8158},{},[8159],{"type":40,"value":8160},"1. Quelle est la différence entre un BFF et une API REST classique ?",{"type":30,"tag":43,"props":8162,"children":8163},{},[8164],{"type":40,"value":8165},"Contrairement à une API REST classique, qui tente de servir tous les types de frontends avec la même interface, un BFF est conçu spécifiquement pour un type de frontend. Il adapte les réponses pour répondre précisément aux besoins de chaque client (mobile, web, etc.), améliorant ainsi les performances et la simplicité d’utilisation pour chaque frontend.",{"type":30,"tag":530,"props":8167,"children":8168},{},[8169,8174],{"type":30,"tag":534,"props":8170,"children":8171},{},[8172],{"type":40,"value":8173},"2. Est-ce que cela ne rend pas l’architecture plus complexe ?",{"type":30,"tag":43,"props":8175,"children":8176},{},[8177],{"type":40,"value":8178},"Cela peut ajouter une couche de complexité, mais en contrepartie, cela simplifie la gestion des données et des interactions pour chaque frontend. La complexité est bien placée : au lieu de créer une API gigantesque qui essaie de tout faire, on la découpe en petits services dédiés, plus faciles à maintenir.",{"type":30,"tag":530,"props":8180,"children":8181},{},[8182,8187],{"type":30,"tag":534,"props":8183,"children":8184},{},[8185],{"type":40,"value":8186},"3. Dois-je créer un BFF pour chaque type d’application (iOS, Android, Web) ?",{"type":30,"tag":43,"props":8188,"children":8189},{},[8190],{"type":40,"value":8191},"Pas nécessairement. Cela dépend des besoins spécifiques de chaque frontend. Si plusieurs frontends ont des exigences similaires, vous pouvez utiliser un seul BFF pour ces clients. Mais s’ils ont des besoins très différents, un BFF par interface peut être plus pertinent.",{"type":30,"tag":530,"props":8193,"children":8194},{},[8195,8200],{"type":30,"tag":534,"props":8196,"children":8197},{},[8198],{"type":40,"value":8199},"4. Est-ce que le BFF impacte les performances globales ?",{"type":30,"tag":43,"props":8201,"children":8202},{},[8203],{"type":40,"value":8204},"En fait, il peut les améliorer. En personnalisant les réponses aux besoins spécifiques de chaque frontend, vous évitez d’envoyer des données inutiles et vous optimisez les requêtes. Cela réduit la consommation de bande passante, notamment pour les clients mobiles.",{"type":30,"tag":530,"props":8206,"children":8207},{},[8208,8213],{"type":30,"tag":534,"props":8209,"children":8210},{},[8211],{"type":40,"value":8212},"5. Est-ce que le BFF est une bonne solution pour les projets à petite échelle ?",{"type":30,"tag":43,"props":8214,"children":8215},{},[8216],{"type":40,"value":8217},"Si vous gérez une seule application frontend, vous n’aurez peut-être pas besoin d’un BFF. Mais dès que vous commencez à avoir plusieurs interfaces avec des besoins spécifiques, le BFF devient une solution intéressante, même pour des projets relativement modestes.",{"type":30,"tag":84,"props":8219,"children":8220},{},[],{"type":30,"tag":43,"props":8222,"children":8223},{},[8224],{"type":40,"value":8225},"J’espère que cet article vous aura éclairé sur le concept du Backend for Frontend. Dans mon expérience, c’est un pattern qui débloque les équipes multi-frontend et leur redonne de la vélocité, à condition de ne pas l’utiliser comme prétexte pour ajouter de la logique métier dans la mauvaise couche.",{"type":30,"tag":211,"props":8227,"children":8228},{"cta":638,"href":639,"title":640,"type":641},[8229],{"type":30,"tag":43,"props":8230,"children":8231},{},[8232],{"type":40,"value":8233},"Les architectures multi-frontend comme le BFF sont la fondation des systèmes IA modernes. 25 questions, 5 dimensions, score de maturité IA sur 25 — identifiez vos 3 gaps critiques avant de scaler vos outils IA.",{"type":30,"tag":6456,"props":8235,"children":8236},{},[8237],{"type":40,"value":6460},{"title":8,"searchDepth":675,"depth":675,"links":8239},[8240,8244,8252,8260],{"id":6550,"depth":675,"text":6553,"children":8241},[8242,8243],{"id":6572,"depth":681,"text":6575},{"id":6621,"depth":681,"text":6624},{"id":6635,"depth":675,"text":6638,"children":8245},[8246,8247,8248,8249,8250,8251],{"id":6646,"depth":681,"text":6649},{"id":6671,"depth":681,"text":6674},{"id":6940,"depth":681,"text":6943},{"id":7485,"depth":681,"text":7488},{"id":7815,"depth":681,"text":7818},{"id":7921,"depth":681,"text":7924},{"id":7977,"depth":675,"text":7980,"children":8253},[8254,8255,8256,8257,8258,8259],{"id":7988,"depth":681,"text":7991},{"id":8016,"depth":681,"text":8019},{"id":8043,"depth":681,"text":8046},{"id":8086,"depth":681,"text":8089},{"id":8106,"depth":681,"text":8109},{"id":8126,"depth":681,"text":8129},{"id":8149,"depth":675,"text":8152},"content:fr:architecture-craft:backend-for-frontend-bff-java.md","fr/architecture-craft/backend-for-frontend-bff-java.md","fr/architecture-craft/backend-for-frontend-bff-java",{"_path":8265,"_dir":717,"_draft":7,"_partial":7,"_locale":8,"title":8266,"description":8267,"id":8268,"date":8269,"listed":13,"nocomments":7,"hidden":7,"categories":8270,"tags":8271,"--cover":8272,"readingTime":8273,"body":8277,"_type":709,"_id":11158,"_source":711,"_file":11159,"_stem":11160,"_extension":714},"/fr/architecture-craft/api-first-openapi-spring-boot","API First, Avantages, Bonnes Pratiques et Intégration avec OpenAPI et Spring Boot","Découvrez les avantages de l'approche API First, comment utiliser OpenAPI pour documenter vos API et générer du code avec Spring Boot et Java. Guide complet avec...",54,"2024-08-20",[723],[725,726],"covers/articles/principe-api-first.jpg",{"text":22,"minutes":8274,"time":8275,"words":8276},10.58,634800,2116,{"type":27,"children":8278,"toc":11136},[8279,8285,8290,8300,8318,8335,8338,8344,8355,8361,8366,8372,8383,8389,8402,8408,8413,8419,8424,8427,8441,8447,8464,8470,8475,8796,8840,8846,8851,8884,8890,8908,8913,9093,10716,10722,10784,10789,10792,10798,10819,10825,10830,10836,10860,10865,10918,10924,10941,10947,10965,10971,10982,10985,10991,11010,11051,11068,11087,11100,11119,11129,11132],{"type":30,"tag":6505,"props":8280,"children":8282},{"id":8281},"découverte-du-concept-api-first-avec-openapi-et-spring-boot",[8283],{"type":40,"value":8284},"Découverte du concept API First avec OpenAPI et Spring Boot",{"type":30,"tag":43,"props":8286,"children":8287},{},[8288],{"type":40,"value":8289},"Si vous avez déjà travaillé sur des projets logiciels où plusieurs équipes (front-end, back-end, gestion de produit) doivent collaborer étroitement, vous savez à quel point il peut être difficile de maintenir une cohérence entre les différentes parties du projet. Les API, qui permettent la communication entre ces composants, sont souvent développées en cours de route, après avoir déjà commencé à écrire le code. Résultat ? Des malentendus, des bugs inattendus et beaucoup de temps perdu en corrections.",{"type":30,"tag":43,"props":8291,"children":8292},{},[8293,8294,8298],{"type":40,"value":6269},{"type":30,"tag":36,"props":8295,"children":8296},{},[8297],{"type":40,"value":777},{"type":40,"value":8299}," vient résoudre ce problème. Avec cette méthode, les API ne sont plus une réflexion après coup. Au contraire, elles deviennent l'élément central de votre projet. Plutôt que de commencer par écrire du code, vous commencez par définir, documenter et valider l'API avant même de coder. Cela permet d'aligner toutes les équipes dès le départ et d’éviter les incohérences.",{"type":30,"tag":43,"props":8301,"children":8302},{},[8303,8305,8309,8311,8316],{"type":40,"value":8304},"Je sais que vous vous demandez peut-être : \"Est-ce que cela complique le processus de développement ?\" Je comprends cette préoccupation, mais en réalité, API First simplifie la vie des développeurs à long terme. En utilisant des outils comme ",{"type":30,"tag":36,"props":8306,"children":8307},{},[8308],{"type":40,"value":1578},{"type":40,"value":8310},", vous pouvez non seulement définir vos API de manière standardisée, mais aussi générer automatiquement du code pour votre projet ",{"type":30,"tag":36,"props":8312,"children":8313},{},[8314],{"type":40,"value":8315},"Spring Boot",{"type":40,"value":8317},", ce qui vous fait gagner du temps précieux.",{"type":30,"tag":43,"props":8319,"children":8320},{},[8321,8323,8327,8329,8333],{"type":40,"value":8322},"Dans cet article, vous découvrirez comment l'approche API First, associée à ",{"type":30,"tag":36,"props":8324,"children":8325},{},[8326],{"type":40,"value":8315},{"type":40,"value":8328}," et ",{"type":30,"tag":36,"props":8330,"children":8331},{},[8332],{"type":40,"value":845},{"type":40,"value":8334},", peut transformer votre manière de développer des logiciels. Je vous montrerai également des exemples concrets de spécifications OpenAPI et comment les utiliser dans un projet Java pour générer du code rapidement et efficacement. Vous repartirez avec une compréhension claire des avantages de cette approche et des bonnes pratiques pour l'adopter dans vos projets.",{"type":30,"tag":84,"props":8336,"children":8337},{},[],{"type":30,"tag":31,"props":8339,"children":8341},{"id":8340},"les-avantages-dune-approche-api-first",[8342],{"type":40,"value":8343},"Les avantages d'une approche API First",{"type":30,"tag":43,"props":8345,"children":8346},{},[8347,8349,8353],{"type":40,"value":8348},"L’adoption d'une approche ",{"type":30,"tag":36,"props":8350,"children":8351},{},[8352],{"type":40,"value":777},{"type":40,"value":8354}," présente plusieurs avantages notables, en particulier pour les équipes travaillant sur des projets complexes avec des composants front-end et back-end distincts. Voici les principaux bénéfices que vous pouvez attendre de cette méthodologie :",{"type":30,"tag":116,"props":8356,"children":8358},{"id":8357},"_1-amélioration-de-la-collaboration-inter-équipes",[8359],{"type":40,"value":8360},"1. Amélioration de la collaboration inter-équipes",{"type":30,"tag":43,"props":8362,"children":8363},{},[8364],{"type":40,"value":8365},"Quand vous développez une API après avoir commencé à coder, il arrive souvent que les équipes front-end et back-end ne soient pas synchronisées. Les développeurs front-end peuvent créer des interfaces qui ne correspondent pas aux services disponibles, et les développeurs back-end peuvent ajouter des fonctionnalités qui ne sont pas encore exploitées par le front-end. Avec l’approche API First, tout le monde part d'une spécification commune. Cela veut dire que dès le début du projet, toutes les équipes ont une vue claire de ce à quoi ressemblera l'API finale. Cela améliore la communication et permet aux équipes de travailler en parallèle sans surprises.",{"type":30,"tag":116,"props":8367,"children":8369},{"id":8368},"_2-documentation-centralisée-dès-le-début",[8370],{"type":40,"value":8371},"2. Documentation centralisée dès le début",{"type":30,"tag":43,"props":8373,"children":8374},{},[8375,8377,8381],{"type":40,"value":8376},"L’un des gros points faibles des projets traditionnels est la documentation. Souvent, elle est écrite en fin de projet, quand tout est déjà en place – voire pas du tout. Avec API First, la spécification de l’API (généralement en utilisant un format comme ",{"type":30,"tag":36,"props":8378,"children":8379},{},[8380],{"type":40,"value":1578},{"type":40,"value":8382},") devient la source de vérité. Elle est à la fois la documentation et le contrat entre les équipes. De plus, cette spécification est mise à jour tout au long du projet, ce qui signifie que tout changement dans l'API est immédiatement visible et répercuté. Cela élimine les mauvaises surprises et garantit que la documentation reste à jour en permanence.",{"type":30,"tag":116,"props":8384,"children":8386},{"id":8385},"_3-réduction-des-erreurs-grâce-à-une-spécification-claire",[8387],{"type":40,"value":8388},"3. Réduction des erreurs grâce à une spécification claire",{"type":30,"tag":43,"props":8390,"children":8391},{},[8392,8394,8400],{"type":40,"value":8393},"Les erreurs dans la communication entre le front-end et le back-end sont courantes lorsque les API ne sont pas bien spécifiées ou changent en cours de route. Avec API First, ces erreurs sont réduites parce que tout est planifié et validé en amont. Chaque décision de conception d'API mérite d'être consignée dans un ",{"type":30,"tag":75,"props":8395,"children":8397},{"href":8396},"/fr/architecture-craft/adr-architecture-decision-record",[8398],{"type":40,"value":8399},"Architecture Decision Record",{"type":40,"value":8401}," pour que le contexte reste accessible à toute l'équipe. Par exemple, vous pouvez valider la spécification de votre API avant de commencer à écrire du code, et des outils comme OpenAPI permettent même de générer automatiquement des tests pour vérifier que le comportement de l’API correspond bien à ce qui a été défini.",{"type":30,"tag":116,"props":8403,"children":8405},{"id":8404},"_4-gains-de-temps-à-long-terme",[8406],{"type":40,"value":8407},"4. Gains de temps à long terme",{"type":30,"tag":43,"props":8409,"children":8410},{},[8411],{"type":40,"value":8412},"Même si cela peut sembler long de commencer par définir l’API, cela permet de gagner du temps à long terme. En ayant une API bien définie et validée avant de coder, vous minimisez le risque de bugs et de retours en arrière. De plus, la génération automatique de code à partir d’une spécification OpenAPI (illustré plus loin avec Spring Boot) permet de réduire le temps nécessaire pour écrire du code manuel et de se concentrer sur les fonctionnalités essentielles. J’ai observé ce gain concrètement dans des missions chez des grandes DSI du secteur bancaire : adopter l’OpenAPI Specification comme contrat d’équipe a réduit de moitié les allers-retours d’intégration entre les équipes front et back.",{"type":30,"tag":116,"props":8414,"children":8416},{"id":8415},"_5-facilité-de-maintenance-et-dévolution",[8417],{"type":40,"value":8418},"5. Facilité de maintenance et d’évolution",{"type":30,"tag":43,"props":8420,"children":8421},{},[8422],{"type":40,"value":8423},"Une API bien documentée et centralisée permet de mieux anticiper les évolutions futures. Quand vient le moment de faire évoluer le projet, une API déjà définie vous permet de voir clairement quelles sont les parties à ajuster sans devoir tout redévelopper ou risquer de casser d’autres fonctionnalités.",{"type":30,"tag":84,"props":8425,"children":8426},{},[],{"type":30,"tag":211,"props":8428,"children":8430},{"cta":213,"href":214,"title":8429,"type":216},"Vos équipes front et back se bloquent mutuellement en attendant les specs ?",[8431,8436],{"type":30,"tag":43,"props":8432,"children":8433},{},[8434],{"type":40,"value":8435},"Des semaines perdues en allers-retours, des sprints entiers engloutis dans des corrections d’intégration, et une frustration qui monte des deux côtés ? Quand les APIs ne sont pas pensées en amont, tout le monde subit.",{"type":30,"tag":43,"props":8437,"children":8438},{},[8439],{"type":40,"value":8440},"Réservons 30 minutes pour identifier précisément les frictions inter-équipes dans votre processus et définir une approche API First adaptée à votre contexte.",{"type":30,"tag":31,"props":8442,"children":8444},{"id":8443},"openapi-le-standard-pour-api-first",[8445],{"type":40,"value":8446},"OpenAPI : Le standard pour API First",{"type":30,"tag":43,"props":8448,"children":8449},{},[8450,8452,8456,8458,8462],{"type":40,"value":8451},"L’un des piliers de l’approche ",{"type":30,"tag":36,"props":8453,"children":8454},{},[8455],{"type":40,"value":777},{"type":40,"value":8457}," est l’utilisation d’outils standardisés pour définir et documenter les API. Parmi ces outils, ",{"type":30,"tag":36,"props":8459,"children":8460},{},[8461],{"type":40,"value":1578},{"type":40,"value":8463}," (anciennement connu sous le nom de Swagger) est sans doute le plus populaire et le plus utilisé dans l’industrie. OpenAPI permet de spécifier les API de manière claire et concise, en fournissant une description complète de chaque endpoint, des méthodes HTTP supportées, des paramètres, des types de réponse, et bien plus encore. Cette spécification devient le contrat sur lequel toutes les équipes s’alignent.",{"type":30,"tag":116,"props":8465,"children":8467},{"id":8466},"_1-présentation-dopenapi",[8468],{"type":40,"value":8469},"1. Présentation d’OpenAPI",{"type":30,"tag":43,"props":8471,"children":8472},{},[8473],{"type":40,"value":8474},"OpenAPI est un format de fichier (souvent en JSON ou en YAML) qui décrit votre API. Voici un exemple simple d’une spécification OpenAPI pour un service de gestion d’utilisateurs :",{"type":30,"tag":1035,"props":8476,"children":8480},{"className":8477,"code":8478,"language":8479,"meta":8,"style":8},"language-yaml shiki shiki-themes catppuccin-frappe github-dark","openapi: 3.0.0\ninfo:\n  title: User Management API\n  version: 1.0.0\npaths:\n  /users:\n    get:\n      summary: Get a list of users\n      responses:\n        '200':\n          description: A JSON array of user objects\n          content:\n            application/json:\n              schema:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    id:\n                      type: integer\n                    name:\n                      type: string\n","yaml",[8481],{"type":30,"tag":1042,"props":8482,"children":8483},{"__ignoreMap":8},[8484,8504,8517,8534,8551,8563,8575,8587,8604,8616,8628,8645,8657,8669,8681,8698,8710,8727,8739,8751,8768,8780],{"type":30,"tag":1046,"props":8485,"children":8486},{"class":1048,"line":1049},[8487,8493,8499],{"type":30,"tag":1046,"props":8488,"children":8490},{"style":8489},"--shiki-default:#8CAAEE;--shiki-dark:#85E89D",[8491],{"type":40,"value":8492},"openapi",{"type":30,"tag":1046,"props":8494,"children":8496},{"style":8495},"--shiki-default:#81C8BE;--shiki-dark:#E1E4E8",[8497],{"type":40,"value":8498},":",{"type":30,"tag":1046,"props":8500,"children":8501},{"style":6886},[8502],{"type":40,"value":8503}," 3.0.0\n",{"type":30,"tag":1046,"props":8505,"children":8506},{"class":1048,"line":675},[8507,8512],{"type":30,"tag":1046,"props":8508,"children":8509},{"style":8489},[8510],{"type":40,"value":8511},"info",{"type":30,"tag":1046,"props":8513,"children":8514},{"style":8495},[8515],{"type":40,"value":8516},":\n",{"type":30,"tag":1046,"props":8518,"children":8519},{"class":1048,"line":681},[8520,8525,8529],{"type":30,"tag":1046,"props":8521,"children":8522},{"style":8489},[8523],{"type":40,"value":8524},"  title",{"type":30,"tag":1046,"props":8526,"children":8527},{"style":8495},[8528],{"type":40,"value":8498},{"type":30,"tag":1046,"props":8530,"children":8531},{"style":1675},[8532],{"type":40,"value":8533}," User Management API\n",{"type":30,"tag":1046,"props":8535,"children":8536},{"class":1048,"line":1124},[8537,8542,8546],{"type":30,"tag":1046,"props":8538,"children":8539},{"style":8489},[8540],{"type":40,"value":8541},"  version",{"type":30,"tag":1046,"props":8543,"children":8544},{"style":8495},[8545],{"type":40,"value":8498},{"type":30,"tag":1046,"props":8547,"children":8548},{"style":6886},[8549],{"type":40,"value":8550}," 1.0.0\n",{"type":30,"tag":1046,"props":8552,"children":8553},{"class":1048,"line":1168},[8554,8559],{"type":30,"tag":1046,"props":8555,"children":8556},{"style":8489},[8557],{"type":40,"value":8558},"paths",{"type":30,"tag":1046,"props":8560,"children":8561},{"style":8495},[8562],{"type":40,"value":8516},{"type":30,"tag":1046,"props":8564,"children":8565},{"class":1048,"line":1201},[8566,8571],{"type":30,"tag":1046,"props":8567,"children":8568},{"style":8489},[8569],{"type":40,"value":8570},"  /users",{"type":30,"tag":1046,"props":8572,"children":8573},{"style":8495},[8574],{"type":40,"value":8516},{"type":30,"tag":1046,"props":8576,"children":8577},{"class":1048,"line":1210},[8578,8583],{"type":30,"tag":1046,"props":8579,"children":8580},{"style":8489},[8581],{"type":40,"value":8582},"    get",{"type":30,"tag":1046,"props":8584,"children":8585},{"style":8495},[8586],{"type":40,"value":8516},{"type":30,"tag":1046,"props":8588,"children":8589},{"class":1048,"line":1218},[8590,8595,8599],{"type":30,"tag":1046,"props":8591,"children":8592},{"style":8489},[8593],{"type":40,"value":8594},"      summary",{"type":30,"tag":1046,"props":8596,"children":8597},{"style":8495},[8598],{"type":40,"value":8498},{"type":30,"tag":1046,"props":8600,"children":8601},{"style":1675},[8602],{"type":40,"value":8603}," Get a list of users\n",{"type":30,"tag":1046,"props":8605,"children":8606},{"class":1048,"line":1255},[8607,8612],{"type":30,"tag":1046,"props":8608,"children":8609},{"style":8489},[8610],{"type":40,"value":8611},"      responses",{"type":30,"tag":1046,"props":8613,"children":8614},{"style":8495},[8615],{"type":40,"value":8516},{"type":30,"tag":1046,"props":8617,"children":8618},{"class":1048,"line":1284},[8619,8624],{"type":30,"tag":1046,"props":8620,"children":8621},{"style":1675},[8622],{"type":40,"value":8623},"        '200'",{"type":30,"tag":1046,"props":8625,"children":8626},{"style":8495},[8627],{"type":40,"value":8516},{"type":30,"tag":1046,"props":8629,"children":8630},{"class":1048,"line":1292},[8631,8636,8640],{"type":30,"tag":1046,"props":8632,"children":8633},{"style":8489},[8634],{"type":40,"value":8635},"          description",{"type":30,"tag":1046,"props":8637,"children":8638},{"style":8495},[8639],{"type":40,"value":8498},{"type":30,"tag":1046,"props":8641,"children":8642},{"style":1675},[8643],{"type":40,"value":8644}," A JSON array of user objects\n",{"type":30,"tag":1046,"props":8646,"children":8647},{"class":1048,"line":1300},[8648,8653],{"type":30,"tag":1046,"props":8649,"children":8650},{"style":8489},[8651],{"type":40,"value":8652},"          content",{"type":30,"tag":1046,"props":8654,"children":8655},{"style":8495},[8656],{"type":40,"value":8516},{"type":30,"tag":1046,"props":8658,"children":8659},{"class":1048,"line":1327},[8660,8665],{"type":30,"tag":1046,"props":8661,"children":8662},{"style":8489},[8663],{"type":40,"value":8664},"            application/json",{"type":30,"tag":1046,"props":8666,"children":8667},{"style":8495},[8668],{"type":40,"value":8516},{"type":30,"tag":1046,"props":8670,"children":8671},{"class":1048,"line":1354},[8672,8677],{"type":30,"tag":1046,"props":8673,"children":8674},{"style":8489},[8675],{"type":40,"value":8676},"              schema",{"type":30,"tag":1046,"props":8678,"children":8679},{"style":8495},[8680],{"type":40,"value":8516},{"type":30,"tag":1046,"props":8682,"children":8683},{"class":1048,"line":1391},[8684,8689,8693],{"type":30,"tag":1046,"props":8685,"children":8686},{"style":8489},[8687],{"type":40,"value":8688},"                type",{"type":30,"tag":1046,"props":8690,"children":8691},{"style":8495},[8692],{"type":40,"value":8498},{"type":30,"tag":1046,"props":8694,"children":8695},{"style":1675},[8696],{"type":40,"value":8697}," array\n",{"type":30,"tag":1046,"props":8699,"children":8700},{"class":1048,"line":1409},[8701,8706],{"type":30,"tag":1046,"props":8702,"children":8703},{"style":8489},[8704],{"type":40,"value":8705},"                items",{"type":30,"tag":1046,"props":8707,"children":8708},{"style":8495},[8709],{"type":40,"value":8516},{"type":30,"tag":1046,"props":8711,"children":8712},{"class":1048,"line":1417},[8713,8718,8722],{"type":30,"tag":1046,"props":8714,"children":8715},{"style":8489},[8716],{"type":40,"value":8717},"                  type",{"type":30,"tag":1046,"props":8719,"children":8720},{"style":8495},[8721],{"type":40,"value":8498},{"type":30,"tag":1046,"props":8723,"children":8724},{"style":1675},[8725],{"type":40,"value":8726}," object\n",{"type":30,"tag":1046,"props":8728,"children":8729},{"class":1048,"line":2023},[8730,8735],{"type":30,"tag":1046,"props":8731,"children":8732},{"style":8489},[8733],{"type":40,"value":8734},"                  properties",{"type":30,"tag":1046,"props":8736,"children":8737},{"style":8495},[8738],{"type":40,"value":8516},{"type":30,"tag":1046,"props":8740,"children":8741},{"class":1048,"line":2083},[8742,8747],{"type":30,"tag":1046,"props":8743,"children":8744},{"style":8489},[8745],{"type":40,"value":8746},"                    id",{"type":30,"tag":1046,"props":8748,"children":8749},{"style":8495},[8750],{"type":40,"value":8516},{"type":30,"tag":1046,"props":8752,"children":8753},{"class":1048,"line":2126},[8754,8759,8763],{"type":30,"tag":1046,"props":8755,"children":8756},{"style":8489},[8757],{"type":40,"value":8758},"                      type",{"type":30,"tag":1046,"props":8760,"children":8761},{"style":8495},[8762],{"type":40,"value":8498},{"type":30,"tag":1046,"props":8764,"children":8765},{"style":1675},[8766],{"type":40,"value":8767}," integer\n",{"type":30,"tag":1046,"props":8769,"children":8770},{"class":1048,"line":2159},[8771,8776],{"type":30,"tag":1046,"props":8772,"children":8773},{"style":8489},[8774],{"type":40,"value":8775},"                    name",{"type":30,"tag":1046,"props":8777,"children":8778},{"style":8495},[8779],{"type":40,"value":8516},{"type":30,"tag":1046,"props":8781,"children":8782},{"class":1048,"line":2167},[8783,8787,8791],{"type":30,"tag":1046,"props":8784,"children":8785},{"style":8489},[8786],{"type":40,"value":8758},{"type":30,"tag":1046,"props":8788,"children":8789},{"style":8495},[8790],{"type":40,"value":8498},{"type":30,"tag":1046,"props":8792,"children":8793},{"style":1675},[8794],{"type":40,"value":8795}," string\n",{"type":30,"tag":43,"props":8797,"children":8798},{},[8799,8801,8807,8809,8815,8816,8822,8824,8830,8832,8838],{"type":40,"value":8800},"Dans cet exemple, nous avons une API qui gère une collection d’utilisateurs avec un endpoint ",{"type":30,"tag":1042,"props":8802,"children":8804},{"className":8803},[],[8805],{"type":40,"value":8806},"/users",{"type":40,"value":8808}," qui retourne une liste d’utilisateurs en JSON. La spécification définit les types de données (comme ",{"type":30,"tag":1042,"props":8810,"children":8812},{"className":8811},[],[8813],{"type":40,"value":8814},"integer",{"type":40,"value":1573},{"type":30,"tag":1042,"props":8817,"children":8819},{"className":8818},[],[8820],{"type":40,"value":8821},"string",{"type":40,"value":8823},"), les méthodes HTTP (ici ",{"type":30,"tag":1042,"props":8825,"children":8827},{"className":8826},[],[8828],{"type":40,"value":8829},"GET",{"type":40,"value":8831},"), ainsi que les réponses possibles (un code HTTP ",{"type":30,"tag":1042,"props":8833,"children":8835},{"className":8834},[],[8836],{"type":40,"value":8837},"200",{"type":40,"value":8839}," pour indiquer une réponse réussie).",{"type":30,"tag":116,"props":8841,"children":8843},{"id":8842},"_2-avantages-dopenapi-dans-lapproche-api-first",[8844],{"type":40,"value":8845},"2. Avantages d'OpenAPI dans l'approche API First",{"type":30,"tag":43,"props":8847,"children":8848},{},[8849],{"type":40,"value":8850},"L’utilisation d’OpenAPI dans une approche API First présente plusieurs avantages :",{"type":30,"tag":163,"props":8852,"children":8853},{},[8854,8864,8874],{"type":30,"tag":167,"props":8855,"children":8856},{},[8857,8862],{"type":30,"tag":36,"props":8858,"children":8859},{},[8860],{"type":40,"value":8861},"Clarté et transparence",{"type":40,"value":8863}," : La spécification sert de documentation unique et centralisée que toutes les équipes peuvent consulter.",{"type":30,"tag":167,"props":8865,"children":8866},{},[8867,8872],{"type":30,"tag":36,"props":8868,"children":8869},{},[8870],{"type":40,"value":8871},"Validations automatiques",{"type":40,"value":8873}," : Des outils existent pour valider que les appels à l’API respectent la spécification.",{"type":30,"tag":167,"props":8875,"children":8876},{},[8877,8882],{"type":30,"tag":36,"props":8878,"children":8879},{},[8880],{"type":40,"value":8881},"Génération de code",{"type":40,"value":8883}," : OpenAPI permet de générer automatiquement du code pour plusieurs langages, ce qui accélère le développement.",{"type":30,"tag":116,"props":8885,"children":8887},{"id":8886},"_3-utilisation-dopenapi-dans-un-projet-spring-boot",[8888],{"type":40,"value":8889},"3. Utilisation d’OpenAPI dans un projet Spring Boot",{"type":30,"tag":43,"props":8891,"children":8892},{},[8893,8895,8899,8901,8906],{"type":40,"value":8894},"Intégrer ",{"type":30,"tag":36,"props":8896,"children":8897},{},[8898],{"type":40,"value":1578},{"type":40,"value":8900}," dans un projet Spring Boot est simple grâce à des bibliothèques comme ",{"type":30,"tag":36,"props":8902,"children":8903},{},[8904],{"type":40,"value":8905},"springdoc-openapi",{"type":40,"value":8907},", qui génèrent automatiquement une spécification OpenAPI à partir de votre code Java.",{"type":30,"tag":43,"props":8909,"children":8910},{},[8911],{"type":40,"value":8912},"Voici comment configurer Spring Boot pour générer une documentation OpenAPI :",{"type":30,"tag":1518,"props":8914,"children":8915},{},[8916,9070,9082],{"type":30,"tag":167,"props":8917,"children":8918},{},[8919,8921,8927,8928],{"type":40,"value":8920},"Ajoutez la dépendance suivante à votre fichier ",{"type":30,"tag":1042,"props":8922,"children":8924},{"className":8923},[],[8925],{"type":40,"value":8926},"pom.xml",{"type":40,"value":6296},{"type":30,"tag":1035,"props":8929,"children":8933},{"className":8930,"code":8931,"language":8932,"meta":8,"style":8},"language-xml shiki shiki-themes catppuccin-frappe github-dark","\u003Cdependency>\n    \u003CgroupId>org.springdoc\u003C/groupId>\n    \u003CartifactId>springdoc-openapi-ui\u003C/artifactId>\n    \u003Cversion>1.5.12\u003C/version>\n\u003C/dependency>\n","xml",[8934],{"type":30,"tag":1042,"props":8935,"children":8936},{"__ignoreMap":8},[8937,8954,8989,9022,9055],{"type":30,"tag":1046,"props":8938,"children":8939},{"class":1048,"line":1049},[8940,8944,8949],{"type":30,"tag":1046,"props":8941,"children":8942},{"style":8495},[8943],{"type":40,"value":1092},{"type":30,"tag":1046,"props":8945,"children":8946},{"style":8489},[8947],{"type":40,"value":8948},"dependency",{"type":30,"tag":1046,"props":8950,"children":8951},{"style":8495},[8952],{"type":40,"value":8953},">\n",{"type":30,"tag":1046,"props":8955,"children":8956},{"class":1048,"line":675},[8957,8962,8967,8971,8976,8981,8985],{"type":30,"tag":1046,"props":8958,"children":8959},{"style":8495},[8960],{"type":40,"value":8961},"    \u003C",{"type":30,"tag":1046,"props":8963,"children":8964},{"style":8489},[8965],{"type":40,"value":8966},"groupId",{"type":30,"tag":1046,"props":8968,"children":8969},{"style":8495},[8970],{"type":40,"value":1102},{"type":30,"tag":1046,"props":8972,"children":8973},{"style":1105},[8974],{"type":40,"value":8975},"org.springdoc",{"type":30,"tag":1046,"props":8977,"children":8978},{"style":8495},[8979],{"type":40,"value":8980},"\u003C/",{"type":30,"tag":1046,"props":8982,"children":8983},{"style":8489},[8984],{"type":40,"value":8966},{"type":30,"tag":1046,"props":8986,"children":8987},{"style":8495},[8988],{"type":40,"value":8953},{"type":30,"tag":1046,"props":8990,"children":8991},{"class":1048,"line":681},[8992,8996,9001,9005,9010,9014,9018],{"type":30,"tag":1046,"props":8993,"children":8994},{"style":8495},[8995],{"type":40,"value":8961},{"type":30,"tag":1046,"props":8997,"children":8998},{"style":8489},[8999],{"type":40,"value":9000},"artifactId",{"type":30,"tag":1046,"props":9002,"children":9003},{"style":8495},[9004],{"type":40,"value":1102},{"type":30,"tag":1046,"props":9006,"children":9007},{"style":1105},[9008],{"type":40,"value":9009},"springdoc-openapi-ui",{"type":30,"tag":1046,"props":9011,"children":9012},{"style":8495},[9013],{"type":40,"value":8980},{"type":30,"tag":1046,"props":9015,"children":9016},{"style":8489},[9017],{"type":40,"value":9000},{"type":30,"tag":1046,"props":9019,"children":9020},{"style":8495},[9021],{"type":40,"value":8953},{"type":30,"tag":1046,"props":9023,"children":9024},{"class":1048,"line":1124},[9025,9029,9034,9038,9043,9047,9051],{"type":30,"tag":1046,"props":9026,"children":9027},{"style":8495},[9028],{"type":40,"value":8961},{"type":30,"tag":1046,"props":9030,"children":9031},{"style":8489},[9032],{"type":40,"value":9033},"version",{"type":30,"tag":1046,"props":9035,"children":9036},{"style":8495},[9037],{"type":40,"value":1102},{"type":30,"tag":1046,"props":9039,"children":9040},{"style":1105},[9041],{"type":40,"value":9042},"1.5.12",{"type":30,"tag":1046,"props":9044,"children":9045},{"style":8495},[9046],{"type":40,"value":8980},{"type":30,"tag":1046,"props":9048,"children":9049},{"style":8489},[9050],{"type":40,"value":9033},{"type":30,"tag":1046,"props":9052,"children":9053},{"style":8495},[9054],{"type":40,"value":8953},{"type":30,"tag":1046,"props":9056,"children":9057},{"class":1048,"line":1168},[9058,9062,9066],{"type":30,"tag":1046,"props":9059,"children":9060},{"style":8495},[9061],{"type":40,"value":8980},{"type":30,"tag":1046,"props":9063,"children":9064},{"style":8489},[9065],{"type":40,"value":8948},{"type":30,"tag":1046,"props":9067,"children":9068},{"style":8495},[9069],{"type":40,"value":8953},{"type":30,"tag":167,"props":9071,"children":9072},{},[9073,9075,9081],{"type":40,"value":9074},"Ensuite, lancez votre projet Spring Boot. Cela générera automatiquement une interface Swagger disponible à l’URL suivante : ",{"type":30,"tag":1042,"props":9076,"children":9078},{"className":9077},[],[9079],{"type":40,"value":9080},"http://localhost:8080/swagger-ui.html",{"type":40,"value":1179},{"type":30,"tag":167,"props":9083,"children":9084},{},[9085,9087,9091],{"type":40,"value":9086},"Voici un exemple de contrôleur Spring Boot qui est automatiquement documenté par OpenAPI avec des annotations ",{"type":30,"tag":36,"props":9088,"children":9089},{},[9090],{"type":40,"value":1571},{"type":40,"value":9092}," pour enrichir la documentation :",{"type":30,"tag":1035,"props":9094,"children":9096},{"className":1039,"code":9095,"language":1038,"meta":8,"style":8},"import io.swagger.v3.oas.annotations.Operation;\nimport io.swagger.v3.oas.annotations.media.Content;\nimport io.swagger.v3.oas.annotations.media.Schema;\nimport io.swagger.v3.oas.annotations.responses.ApiResponse;\nimport io.swagger.v3.oas.annotations.responses.ApiResponses;\nimport org.springframework.web.bind.annotation.GetMapping;\nimport org.springframework.web.bind.annotation.RequestMapping;\nimport org.springframework.web.bind.annotation.RestController;\n\nimport java.util.List;\n\n@RestController\n@RequestMapping(\"/api/users\")\npublic class UserController {\n\n    @Operation(summary = \"Obtenir la liste des utilisateurs\")\n    @ApiResponses(value = {\n        @ApiResponse(responseCode = \"200\", description = \"Liste des utilisateurs trouvée\",\n            content = { @Content(mediaType = \"application/json\",\n            schema = @Schema(implementation = User.class)) }),\n        @ApiResponse(responseCode = \"400\", description = \"Requête invalide\",\n            content = @Content),\n        @ApiResponse(responseCode = \"404\", description = \"Utilisateurs non trouvés\",\n            content = @Content) })\n    @GetMapping\n    public List\u003CUser> getUsers() {\n        // Simuler une liste d'utilisateurs\n        return List.of(new User(1, \"Alice\"), new User(2, \"Bob\"));\n    }\n\n}\n\nclass User {\n    private int id;\n    private String name;\n\n    public User(int id, String name) {\n        this.id = id\n\n;\n        this.name = name;\n    }\n\n    // Getters et setters\n    public int getId() {\n        return id;\n    }\n\n    public void setId(int id) {\n        this.id = id;\n    }\n\n    public String getName() {\n        return name;\n    }\n\n    public void setName(String name) {\n        this.name = name;\n    }\n}\n",[9097],{"type":30,"tag":1042,"props":9098,"children":9099},{"__ignoreMap":8},[9100,9162,9227,9291,9356,9420,9480,9535,9591,9598,9632,9639,9650,9674,9694,9701,9735,9763,9816,9863,9919,9968,9992,10041,10069,10081,10118,10126,10211,10218,10225,10232,10239,10254,10274,10295,10303,10348,10374,10382,10390,10419,10427,10435,10444,10469,10485,10493,10501,10538,10566,10573,10581,10606,10621,10629,10636,10672,10700,10708],{"type":30,"tag":1046,"props":9101,"children":9102},{"class":1048,"line":1049},[9103,9108,9113,9117,9122,9126,9131,9135,9140,9144,9149,9153,9158],{"type":30,"tag":1046,"props":9104,"children":9105},{"style":1053},[9106],{"type":40,"value":9107},"import",{"type":30,"tag":1046,"props":9109,"children":9110},{"style":1105},[9111],{"type":40,"value":9112}," io",{"type":30,"tag":1046,"props":9114,"children":9115},{"style":1070},[9116],{"type":40,"value":1179},{"type":30,"tag":1046,"props":9118,"children":9119},{"style":1105},[9120],{"type":40,"value":9121},"swagger",{"type":30,"tag":1046,"props":9123,"children":9124},{"style":1070},[9125],{"type":40,"value":1179},{"type":30,"tag":1046,"props":9127,"children":9128},{"style":1105},[9129],{"type":40,"value":9130},"v3",{"type":30,"tag":1046,"props":9132,"children":9133},{"style":1070},[9134],{"type":40,"value":1179},{"type":30,"tag":1046,"props":9136,"children":9137},{"style":1105},[9138],{"type":40,"value":9139},"oas",{"type":30,"tag":1046,"props":9141,"children":9142},{"style":1070},[9143],{"type":40,"value":1179},{"type":30,"tag":1046,"props":9145,"children":9146},{"style":1105},[9147],{"type":40,"value":9148},"annotations",{"type":30,"tag":1046,"props":9150,"children":9151},{"style":1070},[9152],{"type":40,"value":1179},{"type":30,"tag":1046,"props":9154,"children":9155},{"style":1105},[9156],{"type":40,"value":9157},"Operation",{"type":30,"tag":1046,"props":9159,"children":9160},{"style":1070},[9161],{"type":40,"value":1113},{"type":30,"tag":1046,"props":9163,"children":9164},{"class":1048,"line":675},[9165,9169,9173,9177,9181,9185,9189,9193,9197,9201,9205,9209,9214,9218,9223],{"type":30,"tag":1046,"props":9166,"children":9167},{"style":1053},[9168],{"type":40,"value":9107},{"type":30,"tag":1046,"props":9170,"children":9171},{"style":1105},[9172],{"type":40,"value":9112},{"type":30,"tag":1046,"props":9174,"children":9175},{"style":1070},[9176],{"type":40,"value":1179},{"type":30,"tag":1046,"props":9178,"children":9179},{"style":1105},[9180],{"type":40,"value":9121},{"type":30,"tag":1046,"props":9182,"children":9183},{"style":1070},[9184],{"type":40,"value":1179},{"type":30,"tag":1046,"props":9186,"children":9187},{"style":1105},[9188],{"type":40,"value":9130},{"type":30,"tag":1046,"props":9190,"children":9191},{"style":1070},[9192],{"type":40,"value":1179},{"type":30,"tag":1046,"props":9194,"children":9195},{"style":1105},[9196],{"type":40,"value":9139},{"type":30,"tag":1046,"props":9198,"children":9199},{"style":1070},[9200],{"type":40,"value":1179},{"type":30,"tag":1046,"props":9202,"children":9203},{"style":1105},[9204],{"type":40,"value":9148},{"type":30,"tag":1046,"props":9206,"children":9207},{"style":1070},[9208],{"type":40,"value":1179},{"type":30,"tag":1046,"props":9210,"children":9211},{"style":1105},[9212],{"type":40,"value":9213},"media",{"type":30,"tag":1046,"props":9215,"children":9216},{"style":1070},[9217],{"type":40,"value":1179},{"type":30,"tag":1046,"props":9219,"children":9220},{"style":1105},[9221],{"type":40,"value":9222},"Content",{"type":30,"tag":1046,"props":9224,"children":9225},{"style":1070},[9226],{"type":40,"value":1113},{"type":30,"tag":1046,"props":9228,"children":9229},{"class":1048,"line":681},[9230,9234,9238,9242,9246,9250,9254,9258,9262,9266,9270,9274,9278,9282,9287],{"type":30,"tag":1046,"props":9231,"children":9232},{"style":1053},[9233],{"type":40,"value":9107},{"type":30,"tag":1046,"props":9235,"children":9236},{"style":1105},[9237],{"type":40,"value":9112},{"type":30,"tag":1046,"props":9239,"children":9240},{"style":1070},[9241],{"type":40,"value":1179},{"type":30,"tag":1046,"props":9243,"children":9244},{"style":1105},[9245],{"type":40,"value":9121},{"type":30,"tag":1046,"props":9247,"children":9248},{"style":1070},[9249],{"type":40,"value":1179},{"type":30,"tag":1046,"props":9251,"children":9252},{"style":1105},[9253],{"type":40,"value":9130},{"type":30,"tag":1046,"props":9255,"children":9256},{"style":1070},[9257],{"type":40,"value":1179},{"type":30,"tag":1046,"props":9259,"children":9260},{"style":1105},[9261],{"type":40,"value":9139},{"type":30,"tag":1046,"props":9263,"children":9264},{"style":1070},[9265],{"type":40,"value":1179},{"type":30,"tag":1046,"props":9267,"children":9268},{"style":1105},[9269],{"type":40,"value":9148},{"type":30,"tag":1046,"props":9271,"children":9272},{"style":1070},[9273],{"type":40,"value":1179},{"type":30,"tag":1046,"props":9275,"children":9276},{"style":1105},[9277],{"type":40,"value":9213},{"type":30,"tag":1046,"props":9279,"children":9280},{"style":1070},[9281],{"type":40,"value":1179},{"type":30,"tag":1046,"props":9283,"children":9284},{"style":1105},[9285],{"type":40,"value":9286},"Schema",{"type":30,"tag":1046,"props":9288,"children":9289},{"style":1070},[9290],{"type":40,"value":1113},{"type":30,"tag":1046,"props":9292,"children":9293},{"class":1048,"line":1124},[9294,9298,9302,9306,9310,9314,9318,9322,9326,9330,9334,9338,9343,9347,9352],{"type":30,"tag":1046,"props":9295,"children":9296},{"style":1053},[9297],{"type":40,"value":9107},{"type":30,"tag":1046,"props":9299,"children":9300},{"style":1105},[9301],{"type":40,"value":9112},{"type":30,"tag":1046,"props":9303,"children":9304},{"style":1070},[9305],{"type":40,"value":1179},{"type":30,"tag":1046,"props":9307,"children":9308},{"style":1105},[9309],{"type":40,"value":9121},{"type":30,"tag":1046,"props":9311,"children":9312},{"style":1070},[9313],{"type":40,"value":1179},{"type":30,"tag":1046,"props":9315,"children":9316},{"style":1105},[9317],{"type":40,"value":9130},{"type":30,"tag":1046,"props":9319,"children":9320},{"style":1070},[9321],{"type":40,"value":1179},{"type":30,"tag":1046,"props":9323,"children":9324},{"style":1105},[9325],{"type":40,"value":9139},{"type":30,"tag":1046,"props":9327,"children":9328},{"style":1070},[9329],{"type":40,"value":1179},{"type":30,"tag":1046,"props":9331,"children":9332},{"style":1105},[9333],{"type":40,"value":9148},{"type":30,"tag":1046,"props":9335,"children":9336},{"style":1070},[9337],{"type":40,"value":1179},{"type":30,"tag":1046,"props":9339,"children":9340},{"style":1105},[9341],{"type":40,"value":9342},"responses",{"type":30,"tag":1046,"props":9344,"children":9345},{"style":1070},[9346],{"type":40,"value":1179},{"type":30,"tag":1046,"props":9348,"children":9349},{"style":1105},[9350],{"type":40,"value":9351},"ApiResponse",{"type":30,"tag":1046,"props":9353,"children":9354},{"style":1070},[9355],{"type":40,"value":1113},{"type":30,"tag":1046,"props":9357,"children":9358},{"class":1048,"line":1168},[9359,9363,9367,9371,9375,9379,9383,9387,9391,9395,9399,9403,9407,9411,9416],{"type":30,"tag":1046,"props":9360,"children":9361},{"style":1053},[9362],{"type":40,"value":9107},{"type":30,"tag":1046,"props":9364,"children":9365},{"style":1105},[9366],{"type":40,"value":9112},{"type":30,"tag":1046,"props":9368,"children":9369},{"style":1070},[9370],{"type":40,"value":1179},{"type":30,"tag":1046,"props":9372,"children":9373},{"style":1105},[9374],{"type":40,"value":9121},{"type":30,"tag":1046,"props":9376,"children":9377},{"style":1070},[9378],{"type":40,"value":1179},{"type":30,"tag":1046,"props":9380,"children":9381},{"style":1105},[9382],{"type":40,"value":9130},{"type":30,"tag":1046,"props":9384,"children":9385},{"style":1070},[9386],{"type":40,"value":1179},{"type":30,"tag":1046,"props":9388,"children":9389},{"style":1105},[9390],{"type":40,"value":9139},{"type":30,"tag":1046,"props":9392,"children":9393},{"style":1070},[9394],{"type":40,"value":1179},{"type":30,"tag":1046,"props":9396,"children":9397},{"style":1105},[9398],{"type":40,"value":9148},{"type":30,"tag":1046,"props":9400,"children":9401},{"style":1070},[9402],{"type":40,"value":1179},{"type":30,"tag":1046,"props":9404,"children":9405},{"style":1105},[9406],{"type":40,"value":9342},{"type":30,"tag":1046,"props":9408,"children":9409},{"style":1070},[9410],{"type":40,"value":1179},{"type":30,"tag":1046,"props":9412,"children":9413},{"style":1105},[9414],{"type":40,"value":9415},"ApiResponses",{"type":30,"tag":1046,"props":9417,"children":9418},{"style":1070},[9419],{"type":40,"value":1113},{"type":30,"tag":1046,"props":9421,"children":9422},{"class":1048,"line":1201},[9423,9427,9432,9436,9441,9445,9450,9454,9459,9463,9468,9472,9476],{"type":30,"tag":1046,"props":9424,"children":9425},{"style":1053},[9426],{"type":40,"value":9107},{"type":30,"tag":1046,"props":9428,"children":9429},{"style":1105},[9430],{"type":40,"value":9431}," org",{"type":30,"tag":1046,"props":9433,"children":9434},{"style":1070},[9435],{"type":40,"value":1179},{"type":30,"tag":1046,"props":9437,"children":9438},{"style":1105},[9439],{"type":40,"value":9440},"springframework",{"type":30,"tag":1046,"props":9442,"children":9443},{"style":1070},[9444],{"type":40,"value":1179},{"type":30,"tag":1046,"props":9446,"children":9447},{"style":1105},[9448],{"type":40,"value":9449},"web",{"type":30,"tag":1046,"props":9451,"children":9452},{"style":1070},[9453],{"type":40,"value":1179},{"type":30,"tag":1046,"props":9455,"children":9456},{"style":1105},[9457],{"type":40,"value":9458},"bind",{"type":30,"tag":1046,"props":9460,"children":9461},{"style":1070},[9462],{"type":40,"value":1179},{"type":30,"tag":1046,"props":9464,"children":9465},{"style":1105},[9466],{"type":40,"value":9467},"annotation",{"type":30,"tag":1046,"props":9469,"children":9470},{"style":1070},[9471],{"type":40,"value":1179},{"type":30,"tag":1046,"props":9473,"children":9474},{"style":1105},[9475],{"type":40,"value":2007},{"type":30,"tag":1046,"props":9477,"children":9478},{"style":1070},[9479],{"type":40,"value":1113},{"type":30,"tag":1046,"props":9481,"children":9482},{"class":1048,"line":1210},[9483,9487,9491,9495,9499,9503,9507,9511,9515,9519,9523,9527,9531],{"type":30,"tag":1046,"props":9484,"children":9485},{"style":1053},[9486],{"type":40,"value":9107},{"type":30,"tag":1046,"props":9488,"children":9489},{"style":1105},[9490],{"type":40,"value":9431},{"type":30,"tag":1046,"props":9492,"children":9493},{"style":1070},[9494],{"type":40,"value":1179},{"type":30,"tag":1046,"props":9496,"children":9497},{"style":1105},[9498],{"type":40,"value":9440},{"type":30,"tag":1046,"props":9500,"children":9501},{"style":1070},[9502],{"type":40,"value":1179},{"type":30,"tag":1046,"props":9504,"children":9505},{"style":1105},[9506],{"type":40,"value":9449},{"type":30,"tag":1046,"props":9508,"children":9509},{"style":1070},[9510],{"type":40,"value":1179},{"type":30,"tag":1046,"props":9512,"children":9513},{"style":1105},[9514],{"type":40,"value":9458},{"type":30,"tag":1046,"props":9516,"children":9517},{"style":1070},[9518],{"type":40,"value":1179},{"type":30,"tag":1046,"props":9520,"children":9521},{"style":1105},[9522],{"type":40,"value":9467},{"type":30,"tag":1046,"props":9524,"children":9525},{"style":1070},[9526],{"type":40,"value":1179},{"type":30,"tag":1046,"props":9528,"children":9529},{"style":1105},[9530],{"type":40,"value":1668},{"type":30,"tag":1046,"props":9532,"children":9533},{"style":1070},[9534],{"type":40,"value":1113},{"type":30,"tag":1046,"props":9536,"children":9537},{"class":1048,"line":1218},[9538,9542,9546,9550,9554,9558,9562,9566,9570,9574,9578,9582,9587],{"type":30,"tag":1046,"props":9539,"children":9540},{"style":1053},[9541],{"type":40,"value":9107},{"type":30,"tag":1046,"props":9543,"children":9544},{"style":1105},[9545],{"type":40,"value":9431},{"type":30,"tag":1046,"props":9547,"children":9548},{"style":1070},[9549],{"type":40,"value":1179},{"type":30,"tag":1046,"props":9551,"children":9552},{"style":1105},[9553],{"type":40,"value":9440},{"type":30,"tag":1046,"props":9555,"children":9556},{"style":1070},[9557],{"type":40,"value":1179},{"type":30,"tag":1046,"props":9559,"children":9560},{"style":1105},[9561],{"type":40,"value":9449},{"type":30,"tag":1046,"props":9563,"children":9564},{"style":1070},[9565],{"type":40,"value":1179},{"type":30,"tag":1046,"props":9567,"children":9568},{"style":1105},[9569],{"type":40,"value":9458},{"type":30,"tag":1046,"props":9571,"children":9572},{"style":1070},[9573],{"type":40,"value":1179},{"type":30,"tag":1046,"props":9575,"children":9576},{"style":1105},[9577],{"type":40,"value":9467},{"type":30,"tag":1046,"props":9579,"children":9580},{"style":1070},[9581],{"type":40,"value":1179},{"type":30,"tag":1046,"props":9583,"children":9584},{"style":1105},[9585],{"type":40,"value":9586},"RestController",{"type":30,"tag":1046,"props":9588,"children":9589},{"style":1070},[9590],{"type":40,"value":1113},{"type":30,"tag":1046,"props":9592,"children":9593},{"class":1048,"line":1255},[9594],{"type":30,"tag":1046,"props":9595,"children":9596},{"emptyLinePlaceholder":13},[9597],{"type":40,"value":1121},{"type":30,"tag":1046,"props":9599,"children":9600},{"class":1048,"line":1284},[9601,9605,9610,9614,9619,9623,9628],{"type":30,"tag":1046,"props":9602,"children":9603},{"style":1053},[9604],{"type":40,"value":9107},{"type":30,"tag":1046,"props":9606,"children":9607},{"style":1105},[9608],{"type":40,"value":9609}," java",{"type":30,"tag":1046,"props":9611,"children":9612},{"style":1070},[9613],{"type":40,"value":1179},{"type":30,"tag":1046,"props":9615,"children":9616},{"style":1105},[9617],{"type":40,"value":9618},"util",{"type":30,"tag":1046,"props":9620,"children":9621},{"style":1070},[9622],{"type":40,"value":1179},{"type":30,"tag":1046,"props":9624,"children":9625},{"style":1105},[9626],{"type":40,"value":9627},"List",{"type":30,"tag":1046,"props":9629,"children":9630},{"style":1070},[9631],{"type":40,"value":1113},{"type":30,"tag":1046,"props":9633,"children":9634},{"class":1048,"line":1292},[9635],{"type":30,"tag":1046,"props":9636,"children":9637},{"emptyLinePlaceholder":13},[9638],{"type":40,"value":1121},{"type":30,"tag":1046,"props":9640,"children":9641},{"class":1048,"line":1300},[9642,9646],{"type":30,"tag":1046,"props":9643,"children":9644},{"style":1647},[9645],{"type":40,"value":1650},{"type":30,"tag":1046,"props":9647,"children":9648},{"style":1653},[9649],{"type":40,"value":1656},{"type":30,"tag":1046,"props":9651,"children":9652},{"class":1048,"line":1327},[9653,9657,9661,9665,9670],{"type":30,"tag":1046,"props":9654,"children":9655},{"style":1647},[9656],{"type":40,"value":1650},{"type":30,"tag":1046,"props":9658,"children":9659},{"style":1653},[9660],{"type":40,"value":1668},{"type":30,"tag":1046,"props":9662,"children":9663},{"style":1070},[9664],{"type":40,"value":1146},{"type":30,"tag":1046,"props":9666,"children":9667},{"style":1675},[9668],{"type":40,"value":9669},"\"/api/users\"",{"type":30,"tag":1046,"props":9671,"children":9672},{"style":1070},[9673],{"type":40,"value":1388},{"type":30,"tag":1046,"props":9675,"children":9676},{"class":1048,"line":1354},[9677,9681,9685,9690],{"type":30,"tag":1046,"props":9678,"children":9679},{"style":1053},[9680],{"type":40,"value":1056},{"type":30,"tag":1046,"props":9682,"children":9683},{"style":1053},[9684],{"type":40,"value":1061},{"type":30,"tag":1046,"props":9686,"children":9687},{"style":1064},[9688],{"type":40,"value":9689}," UserController",{"type":30,"tag":1046,"props":9691,"children":9692},{"style":1070},[9693],{"type":40,"value":1073},{"type":30,"tag":1046,"props":9695,"children":9696},{"class":1048,"line":1391},[9697],{"type":30,"tag":1046,"props":9698,"children":9699},{"emptyLinePlaceholder":13},[9700],{"type":40,"value":1121},{"type":30,"tag":1046,"props":9702,"children":9703},{"class":1048,"line":1409},[9704,9708,9712,9716,9721,9726,9731],{"type":30,"tag":1046,"props":9705,"children":9706},{"style":1647},[9707],{"type":40,"value":1828},{"type":30,"tag":1046,"props":9709,"children":9710},{"style":1653},[9711],{"type":40,"value":9157},{"type":30,"tag":1046,"props":9713,"children":9714},{"style":1070},[9715],{"type":40,"value":1146},{"type":30,"tag":1046,"props":9717,"children":9719},{"style":9718},"--shiki-default:#C6D0F5;--shiki-dark:#79B8FF",[9720],{"type":40,"value":534},{"type":30,"tag":1046,"props":9722,"children":9723},{"style":1795},[9724],{"type":40,"value":9725}," =",{"type":30,"tag":1046,"props":9727,"children":9728},{"style":1675},[9729],{"type":40,"value":9730}," \"Obtenir la liste des utilisateurs\"",{"type":30,"tag":1046,"props":9732,"children":9733},{"style":1070},[9734],{"type":40,"value":1388},{"type":30,"tag":1046,"props":9736,"children":9737},{"class":1048,"line":1417},[9738,9742,9746,9750,9755,9759],{"type":30,"tag":1046,"props":9739,"children":9740},{"style":1647},[9741],{"type":40,"value":1828},{"type":30,"tag":1046,"props":9743,"children":9744},{"style":1653},[9745],{"type":40,"value":9415},{"type":30,"tag":1046,"props":9747,"children":9748},{"style":1070},[9749],{"type":40,"value":1146},{"type":30,"tag":1046,"props":9751,"children":9752},{"style":9718},[9753],{"type":40,"value":9754},"value",{"type":30,"tag":1046,"props":9756,"children":9757},{"style":1795},[9758],{"type":40,"value":9725},{"type":30,"tag":1046,"props":9760,"children":9761},{"style":1070},[9762],{"type":40,"value":1073},{"type":30,"tag":1046,"props":9764,"children":9765},{"class":1048,"line":2023},[9766,9771,9775,9779,9784,9788,9793,9797,9802,9806,9811],{"type":30,"tag":1046,"props":9767,"children":9768},{"style":1647},[9769],{"type":40,"value":9770},"        @",{"type":30,"tag":1046,"props":9772,"children":9773},{"style":1653},[9774],{"type":40,"value":9351},{"type":30,"tag":1046,"props":9776,"children":9777},{"style":1070},[9778],{"type":40,"value":1146},{"type":30,"tag":1046,"props":9780,"children":9781},{"style":9718},[9782],{"type":40,"value":9783},"responseCode",{"type":30,"tag":1046,"props":9785,"children":9786},{"style":1795},[9787],{"type":40,"value":9725},{"type":30,"tag":1046,"props":9789,"children":9790},{"style":1675},[9791],{"type":40,"value":9792}," \"200\"",{"type":30,"tag":1046,"props":9794,"children":9795},{"style":1070},[9796],{"type":40,"value":2891},{"type":30,"tag":1046,"props":9798,"children":9799},{"style":9718},[9800],{"type":40,"value":9801}," description",{"type":30,"tag":1046,"props":9803,"children":9804},{"style":1795},[9805],{"type":40,"value":9725},{"type":30,"tag":1046,"props":9807,"children":9808},{"style":1675},[9809],{"type":40,"value":9810}," \"Liste des utilisateurs trouvée\"",{"type":30,"tag":1046,"props":9812,"children":9813},{"style":1070},[9814],{"type":40,"value":9815},",\n",{"type":30,"tag":1046,"props":9817,"children":9818},{"class":1048,"line":2083},[9819,9824,9828,9833,9837,9841,9845,9850,9854,9859],{"type":30,"tag":1046,"props":9820,"children":9821},{"style":9718},[9822],{"type":40,"value":9823},"            content",{"type":30,"tag":1046,"props":9825,"children":9826},{"style":1795},[9827],{"type":40,"value":9725},{"type":30,"tag":1046,"props":9829,"children":9830},{"style":1070},[9831],{"type":40,"value":9832}," {",{"type":30,"tag":1046,"props":9834,"children":9835},{"style":1647},[9836],{"type":40,"value":5539},{"type":30,"tag":1046,"props":9838,"children":9839},{"style":1653},[9840],{"type":40,"value":9222},{"type":30,"tag":1046,"props":9842,"children":9843},{"style":1070},[9844],{"type":40,"value":1146},{"type":30,"tag":1046,"props":9846,"children":9847},{"style":9718},[9848],{"type":40,"value":9849},"mediaType",{"type":30,"tag":1046,"props":9851,"children":9852},{"style":1795},[9853],{"type":40,"value":9725},{"type":30,"tag":1046,"props":9855,"children":9856},{"style":1675},[9857],{"type":40,"value":9858}," \"application/json\"",{"type":30,"tag":1046,"props":9860,"children":9861},{"style":1070},[9862],{"type":40,"value":9815},{"type":30,"tag":1046,"props":9864,"children":9865},{"class":1048,"line":2126},[9866,9871,9875,9879,9883,9887,9892,9896,9901,9905,9909,9914],{"type":30,"tag":1046,"props":9867,"children":9868},{"style":9718},[9869],{"type":40,"value":9870},"            schema",{"type":30,"tag":1046,"props":9872,"children":9873},{"style":1795},[9874],{"type":40,"value":9725},{"type":30,"tag":1046,"props":9876,"children":9877},{"style":1647},[9878],{"type":40,"value":5539},{"type":30,"tag":1046,"props":9880,"children":9881},{"style":1653},[9882],{"type":40,"value":9286},{"type":30,"tag":1046,"props":9884,"children":9885},{"style":1070},[9886],{"type":40,"value":1146},{"type":30,"tag":1046,"props":9888,"children":9889},{"style":9718},[9890],{"type":40,"value":9891},"implementation",{"type":30,"tag":1046,"props":9893,"children":9894},{"style":1795},[9895],{"type":40,"value":9725},{"type":30,"tag":1046,"props":9897,"children":9898},{"style":1105},[9899],{"type":40,"value":9900}," User",{"type":30,"tag":1046,"props":9902,"children":9903},{"style":1070},[9904],{"type":40,"value":1179},{"type":30,"tag":1046,"props":9906,"children":9907},{"style":1105},[9908],{"type":40,"value":7282},{"type":30,"tag":1046,"props":9910,"children":9911},{"style":1070},[9912],{"type":40,"value":9913},"))",{"type":30,"tag":1046,"props":9915,"children":9916},{"style":1070},[9917],{"type":40,"value":9918}," }),\n",{"type":30,"tag":1046,"props":9920,"children":9921},{"class":1048,"line":2159},[9922,9926,9930,9934,9938,9942,9947,9951,9955,9959,9964],{"type":30,"tag":1046,"props":9923,"children":9924},{"style":1647},[9925],{"type":40,"value":9770},{"type":30,"tag":1046,"props":9927,"children":9928},{"style":1653},[9929],{"type":40,"value":9351},{"type":30,"tag":1046,"props":9931,"children":9932},{"style":1070},[9933],{"type":40,"value":1146},{"type":30,"tag":1046,"props":9935,"children":9936},{"style":9718},[9937],{"type":40,"value":9783},{"type":30,"tag":1046,"props":9939,"children":9940},{"style":1795},[9941],{"type":40,"value":9725},{"type":30,"tag":1046,"props":9943,"children":9944},{"style":1675},[9945],{"type":40,"value":9946}," \"400\"",{"type":30,"tag":1046,"props":9948,"children":9949},{"style":1070},[9950],{"type":40,"value":2891},{"type":30,"tag":1046,"props":9952,"children":9953},{"style":9718},[9954],{"type":40,"value":9801},{"type":30,"tag":1046,"props":9956,"children":9957},{"style":1795},[9958],{"type":40,"value":9725},{"type":30,"tag":1046,"props":9960,"children":9961},{"style":1675},[9962],{"type":40,"value":9963}," \"Requête invalide\"",{"type":30,"tag":1046,"props":9965,"children":9966},{"style":1070},[9967],{"type":40,"value":9815},{"type":30,"tag":1046,"props":9969,"children":9970},{"class":1048,"line":2167},[9971,9975,9979,9983,9987],{"type":30,"tag":1046,"props":9972,"children":9973},{"style":9718},[9974],{"type":40,"value":9823},{"type":30,"tag":1046,"props":9976,"children":9977},{"style":1795},[9978],{"type":40,"value":9725},{"type":30,"tag":1046,"props":9980,"children":9981},{"style":1647},[9982],{"type":40,"value":5539},{"type":30,"tag":1046,"props":9984,"children":9985},{"style":1653},[9986],{"type":40,"value":9222},{"type":30,"tag":1046,"props":9988,"children":9989},{"style":1070},[9990],{"type":40,"value":9991},"),\n",{"type":30,"tag":1046,"props":9993,"children":9994},{"class":1048,"line":4537},[9995,9999,10003,10007,10011,10015,10020,10024,10028,10032,10037],{"type":30,"tag":1046,"props":9996,"children":9997},{"style":1647},[9998],{"type":40,"value":9770},{"type":30,"tag":1046,"props":10000,"children":10001},{"style":1653},[10002],{"type":40,"value":9351},{"type":30,"tag":1046,"props":10004,"children":10005},{"style":1070},[10006],{"type":40,"value":1146},{"type":30,"tag":1046,"props":10008,"children":10009},{"style":9718},[10010],{"type":40,"value":9783},{"type":30,"tag":1046,"props":10012,"children":10013},{"style":1795},[10014],{"type":40,"value":9725},{"type":30,"tag":1046,"props":10016,"children":10017},{"style":1675},[10018],{"type":40,"value":10019}," \"404\"",{"type":30,"tag":1046,"props":10021,"children":10022},{"style":1070},[10023],{"type":40,"value":2891},{"type":30,"tag":1046,"props":10025,"children":10026},{"style":9718},[10027],{"type":40,"value":9801},{"type":30,"tag":1046,"props":10029,"children":10030},{"style":1795},[10031],{"type":40,"value":9725},{"type":30,"tag":1046,"props":10033,"children":10034},{"style":1675},[10035],{"type":40,"value":10036}," \"Utilisateurs non trouvés\"",{"type":30,"tag":1046,"props":10038,"children":10039},{"style":1070},[10040],{"type":40,"value":9815},{"type":30,"tag":1046,"props":10042,"children":10043},{"class":1048,"line":4545},[10044,10048,10052,10056,10060,10064],{"type":30,"tag":1046,"props":10045,"children":10046},{"style":9718},[10047],{"type":40,"value":9823},{"type":30,"tag":1046,"props":10049,"children":10050},{"style":1795},[10051],{"type":40,"value":9725},{"type":30,"tag":1046,"props":10053,"children":10054},{"style":1647},[10055],{"type":40,"value":5539},{"type":30,"tag":1046,"props":10057,"children":10058},{"style":1653},[10059],{"type":40,"value":9222},{"type":30,"tag":1046,"props":10061,"children":10062},{"style":1070},[10063],{"type":40,"value":1161},{"type":30,"tag":1046,"props":10065,"children":10066},{"style":1070},[10067],{"type":40,"value":10068}," })\n",{"type":30,"tag":1046,"props":10070,"children":10071},{"class":1048,"line":4582},[10072,10076],{"type":30,"tag":1046,"props":10073,"children":10074},{"style":1647},[10075],{"type":40,"value":1828},{"type":30,"tag":1046,"props":10077,"children":10078},{"style":1653},[10079],{"type":40,"value":10080},"GetMapping\n",{"type":30,"tag":1046,"props":10082,"children":10083},{"class":1048,"line":4622},[10084,10088,10092,10096,10101,10105,10110,10114],{"type":30,"tag":1046,"props":10085,"children":10086},{"style":1053},[10087],{"type":40,"value":1130},{"type":30,"tag":1046,"props":10089,"children":10090},{"style":1084},[10091],{"type":40,"value":1087},{"type":30,"tag":1046,"props":10093,"children":10094},{"style":1070},[10095],{"type":40,"value":1092},{"type":30,"tag":1046,"props":10097,"children":10098},{"style":1053},[10099],{"type":40,"value":10100},"User",{"type":30,"tag":1046,"props":10102,"children":10103},{"style":1070},[10104],{"type":40,"value":1102},{"type":30,"tag":1046,"props":10106,"children":10107},{"style":1138},[10108],{"type":40,"value":10109}," getUsers",{"type":30,"tag":1046,"props":10111,"children":10112},{"style":1070},[10113],{"type":40,"value":1320},{"type":30,"tag":1046,"props":10115,"children":10116},{"style":1070},[10117],{"type":40,"value":1073},{"type":30,"tag":1046,"props":10119,"children":10120},{"class":1048,"line":4662},[10121],{"type":30,"tag":1046,"props":10122,"children":10123},{"style":3961},[10124],{"type":40,"value":10125},"        // Simuler une liste d'utilisateurs\n",{"type":30,"tag":1046,"props":10127,"children":10128},{"class":1048,"line":4687},[10129,10133,10137,10141,10146,10150,10154,10158,10162,10167,10171,10176,10181,10185,10189,10193,10198,10202,10207],{"type":30,"tag":1046,"props":10130,"children":10131},{"style":1053},[10132],{"type":40,"value":1333},{"type":30,"tag":1046,"props":10134,"children":10135},{"style":1105},[10136],{"type":40,"value":1087},{"type":30,"tag":1046,"props":10138,"children":10139},{"style":1070},[10140],{"type":40,"value":1179},{"type":30,"tag":1046,"props":10142,"children":10143},{"style":1138},[10144],{"type":40,"value":10145},"of",{"type":30,"tag":1046,"props":10147,"children":10148},{"style":1070},[10149],{"type":40,"value":1146},{"type":30,"tag":1046,"props":10151,"children":10152},{"style":1053},[10153],{"type":40,"value":4234},{"type":30,"tag":1046,"props":10155,"children":10156},{"style":1138},[10157],{"type":40,"value":9900},{"type":30,"tag":1046,"props":10159,"children":10160},{"style":1070},[10161],{"type":40,"value":1146},{"type":30,"tag":1046,"props":10163,"children":10164},{"style":6886},[10165],{"type":40,"value":10166},"1",{"type":30,"tag":1046,"props":10168,"children":10169},{"style":1070},[10170],{"type":40,"value":2891},{"type":30,"tag":1046,"props":10172,"children":10173},{"style":1675},[10174],{"type":40,"value":10175}," \"Alice\"",{"type":30,"tag":1046,"props":10177,"children":10178},{"style":1070},[10179],{"type":40,"value":10180},"),",{"type":30,"tag":1046,"props":10182,"children":10183},{"style":1053},[10184],{"type":40,"value":2480},{"type":30,"tag":1046,"props":10186,"children":10187},{"style":1138},[10188],{"type":40,"value":9900},{"type":30,"tag":1046,"props":10190,"children":10191},{"style":1070},[10192],{"type":40,"value":1146},{"type":30,"tag":1046,"props":10194,"children":10195},{"style":6886},[10196],{"type":40,"value":10197},"2",{"type":30,"tag":1046,"props":10199,"children":10200},{"style":1070},[10201],{"type":40,"value":2891},{"type":30,"tag":1046,"props":10203,"children":10204},{"style":1675},[10205],{"type":40,"value":10206}," \"Bob\"",{"type":30,"tag":1046,"props":10208,"children":10209},{"style":1070},[10210],{"type":40,"value":4457},{"type":30,"tag":1046,"props":10212,"children":10213},{"class":1048,"line":4695},[10214],{"type":30,"tag":1046,"props":10215,"children":10216},{"style":1070},[10217],{"type":40,"value":1207},{"type":30,"tag":1046,"props":10219,"children":10220},{"class":1048,"line":4703},[10221],{"type":30,"tag":1046,"props":10222,"children":10223},{"emptyLinePlaceholder":13},[10224],{"type":40,"value":1121},{"type":30,"tag":1046,"props":10226,"children":10227},{"class":1048,"line":4739},[10228],{"type":30,"tag":1046,"props":10229,"children":10230},{"style":1070},[10231],{"type":40,"value":1423},{"type":30,"tag":1046,"props":10233,"children":10234},{"class":1048,"line":4771},[10235],{"type":30,"tag":1046,"props":10236,"children":10237},{"emptyLinePlaceholder":13},[10238],{"type":40,"value":1121},{"type":30,"tag":1046,"props":10240,"children":10241},{"class":1048,"line":4811},[10242,10246,10250],{"type":30,"tag":1046,"props":10243,"children":10244},{"style":1053},[10245],{"type":40,"value":7282},{"type":30,"tag":1046,"props":10247,"children":10248},{"style":1064},[10249],{"type":40,"value":9900},{"type":30,"tag":1046,"props":10251,"children":10252},{"style":1070},[10253],{"type":40,"value":1073},{"type":30,"tag":1046,"props":10255,"children":10256},{"class":1048,"line":4819},[10257,10261,10266,10270],{"type":30,"tag":1046,"props":10258,"children":10259},{"style":1053},[10260],{"type":40,"value":1081},{"type":30,"tag":1046,"props":10262,"children":10263},{"style":1053},[10264],{"type":40,"value":10265}," int",{"type":30,"tag":1046,"props":10267,"children":10268},{"style":1105},[10269],{"type":40,"value":6811},{"type":30,"tag":1046,"props":10271,"children":10272},{"style":1070},[10273],{"type":40,"value":1113},{"type":30,"tag":1046,"props":10275,"children":10277},{"class":1048,"line":10276},35,[10278,10282,10286,10291],{"type":30,"tag":1046,"props":10279,"children":10280},{"style":1053},[10281],{"type":40,"value":1081},{"type":30,"tag":1046,"props":10283,"children":10284},{"style":1084},[10285],{"type":40,"value":2067},{"type":30,"tag":1046,"props":10287,"children":10288},{"style":1105},[10289],{"type":40,"value":10290}," name",{"type":30,"tag":1046,"props":10292,"children":10293},{"style":1070},[10294],{"type":40,"value":1113},{"type":30,"tag":1046,"props":10296,"children":10298},{"class":1048,"line":10297},36,[10299],{"type":30,"tag":1046,"props":10300,"children":10301},{"emptyLinePlaceholder":13},[10302],{"type":40,"value":1121},{"type":30,"tag":1046,"props":10304,"children":10306},{"class":1048,"line":10305},37,[10307,10311,10315,10319,10324,10328,10332,10336,10340,10344],{"type":30,"tag":1046,"props":10308,"children":10309},{"style":1053},[10310],{"type":40,"value":1130},{"type":30,"tag":1046,"props":10312,"children":10313},{"style":1138},[10314],{"type":40,"value":9900},{"type":30,"tag":1046,"props":10316,"children":10317},{"style":1070},[10318],{"type":40,"value":1146},{"type":30,"tag":1046,"props":10320,"children":10321},{"style":1053},[10322],{"type":40,"value":10323},"int",{"type":30,"tag":1046,"props":10325,"children":10326},{"style":1153},[10327],{"type":40,"value":6811},{"type":30,"tag":1046,"props":10329,"children":10330},{"style":1070},[10331],{"type":40,"value":2891},{"type":30,"tag":1046,"props":10333,"children":10334},{"style":1084},[10335],{"type":40,"value":2067},{"type":30,"tag":1046,"props":10337,"children":10338},{"style":1153},[10339],{"type":40,"value":10290},{"type":30,"tag":1046,"props":10341,"children":10342},{"style":1070},[10343],{"type":40,"value":1161},{"type":30,"tag":1046,"props":10345,"children":10346},{"style":1070},[10347],{"type":40,"value":1073},{"type":30,"tag":1046,"props":10349,"children":10351},{"class":1048,"line":10350},38,[10352,10356,10360,10365,10369],{"type":30,"tag":1046,"props":10353,"children":10354},{"style":1780},[10355],{"type":40,"value":1783},{"type":30,"tag":1046,"props":10357,"children":10358},{"style":1070},[10359],{"type":40,"value":1179},{"type":30,"tag":1046,"props":10361,"children":10362},{"style":1105},[10363],{"type":40,"value":10364},"id ",{"type":30,"tag":1046,"props":10366,"children":10367},{"style":1795},[10368],{"type":40,"value":1798},{"type":30,"tag":1046,"props":10370,"children":10371},{"style":1105},[10372],{"type":40,"value":10373}," id\n",{"type":30,"tag":1046,"props":10375,"children":10377},{"class":1048,"line":10376},39,[10378],{"type":30,"tag":1046,"props":10379,"children":10380},{"emptyLinePlaceholder":13},[10381],{"type":40,"value":1121},{"type":30,"tag":1046,"props":10383,"children":10385},{"class":1048,"line":10384},40,[10386],{"type":30,"tag":1046,"props":10387,"children":10388},{"style":1070},[10389],{"type":40,"value":1113},{"type":30,"tag":1046,"props":10391,"children":10393},{"class":1048,"line":10392},41,[10394,10398,10402,10407,10411,10415],{"type":30,"tag":1046,"props":10395,"children":10396},{"style":1780},[10397],{"type":40,"value":1783},{"type":30,"tag":1046,"props":10399,"children":10400},{"style":1070},[10401],{"type":40,"value":1179},{"type":30,"tag":1046,"props":10403,"children":10404},{"style":1105},[10405],{"type":40,"value":10406},"name ",{"type":30,"tag":1046,"props":10408,"children":10409},{"style":1795},[10410],{"type":40,"value":1798},{"type":30,"tag":1046,"props":10412,"children":10413},{"style":1105},[10414],{"type":40,"value":10290},{"type":30,"tag":1046,"props":10416,"children":10417},{"style":1070},[10418],{"type":40,"value":1113},{"type":30,"tag":1046,"props":10420,"children":10422},{"class":1048,"line":10421},42,[10423],{"type":30,"tag":1046,"props":10424,"children":10425},{"style":1070},[10426],{"type":40,"value":1207},{"type":30,"tag":1046,"props":10428,"children":10430},{"class":1048,"line":10429},43,[10431],{"type":30,"tag":1046,"props":10432,"children":10433},{"emptyLinePlaceholder":13},[10434],{"type":40,"value":1121},{"type":30,"tag":1046,"props":10436,"children":10438},{"class":1048,"line":10437},44,[10439],{"type":30,"tag":1046,"props":10440,"children":10441},{"style":3961},[10442],{"type":40,"value":10443},"    // Getters et setters\n",{"type":30,"tag":1046,"props":10445,"children":10447},{"class":1048,"line":10446},45,[10448,10452,10456,10461,10465],{"type":30,"tag":1046,"props":10449,"children":10450},{"style":1053},[10451],{"type":40,"value":1130},{"type":30,"tag":1046,"props":10453,"children":10454},{"style":1053},[10455],{"type":40,"value":10265},{"type":30,"tag":1046,"props":10457,"children":10458},{"style":1138},[10459],{"type":40,"value":10460}," getId",{"type":30,"tag":1046,"props":10462,"children":10463},{"style":1070},[10464],{"type":40,"value":1320},{"type":30,"tag":1046,"props":10466,"children":10467},{"style":1070},[10468],{"type":40,"value":1073},{"type":30,"tag":1046,"props":10470,"children":10472},{"class":1048,"line":10471},46,[10473,10477,10481],{"type":30,"tag":1046,"props":10474,"children":10475},{"style":1053},[10476],{"type":40,"value":1333},{"type":30,"tag":1046,"props":10478,"children":10479},{"style":1105},[10480],{"type":40,"value":6811},{"type":30,"tag":1046,"props":10482,"children":10483},{"style":1070},[10484],{"type":40,"value":1113},{"type":30,"tag":1046,"props":10486,"children":10488},{"class":1048,"line":10487},47,[10489],{"type":30,"tag":1046,"props":10490,"children":10491},{"style":1070},[10492],{"type":40,"value":1207},{"type":30,"tag":1046,"props":10494,"children":10496},{"class":1048,"line":10495},48,[10497],{"type":30,"tag":1046,"props":10498,"children":10499},{"emptyLinePlaceholder":13},[10500],{"type":40,"value":1121},{"type":30,"tag":1046,"props":10502,"children":10504},{"class":1048,"line":10503},49,[10505,10509,10513,10518,10522,10526,10530,10534],{"type":30,"tag":1046,"props":10506,"children":10507},{"style":1053},[10508],{"type":40,"value":1130},{"type":30,"tag":1046,"props":10510,"children":10511},{"style":1053},[10512],{"type":40,"value":1135},{"type":30,"tag":1046,"props":10514,"children":10515},{"style":1138},[10516],{"type":40,"value":10517}," setId",{"type":30,"tag":1046,"props":10519,"children":10520},{"style":1070},[10521],{"type":40,"value":1146},{"type":30,"tag":1046,"props":10523,"children":10524},{"style":1053},[10525],{"type":40,"value":10323},{"type":30,"tag":1046,"props":10527,"children":10528},{"style":1153},[10529],{"type":40,"value":6811},{"type":30,"tag":1046,"props":10531,"children":10532},{"style":1070},[10533],{"type":40,"value":1161},{"type":30,"tag":1046,"props":10535,"children":10536},{"style":1070},[10537],{"type":40,"value":1073},{"type":30,"tag":1046,"props":10539,"children":10541},{"class":1048,"line":10540},50,[10542,10546,10550,10554,10558,10562],{"type":30,"tag":1046,"props":10543,"children":10544},{"style":1780},[10545],{"type":40,"value":1783},{"type":30,"tag":1046,"props":10547,"children":10548},{"style":1070},[10549],{"type":40,"value":1179},{"type":30,"tag":1046,"props":10551,"children":10552},{"style":1105},[10553],{"type":40,"value":10364},{"type":30,"tag":1046,"props":10555,"children":10556},{"style":1795},[10557],{"type":40,"value":1798},{"type":30,"tag":1046,"props":10559,"children":10560},{"style":1105},[10561],{"type":40,"value":6811},{"type":30,"tag":1046,"props":10563,"children":10564},{"style":1070},[10565],{"type":40,"value":1113},{"type":30,"tag":1046,"props":10567,"children":10568},{"class":1048,"line":11},[10569],{"type":30,"tag":1046,"props":10570,"children":10571},{"style":1070},[10572],{"type":40,"value":1207},{"type":30,"tag":1046,"props":10574,"children":10576},{"class":1048,"line":10575},52,[10577],{"type":30,"tag":1046,"props":10578,"children":10579},{"emptyLinePlaceholder":13},[10580],{"type":40,"value":1121},{"type":30,"tag":1046,"props":10582,"children":10584},{"class":1048,"line":10583},53,[10585,10589,10593,10598,10602],{"type":30,"tag":1046,"props":10586,"children":10587},{"style":1053},[10588],{"type":40,"value":1130},{"type":30,"tag":1046,"props":10590,"children":10591},{"style":1084},[10592],{"type":40,"value":2067},{"type":30,"tag":1046,"props":10594,"children":10595},{"style":1138},[10596],{"type":40,"value":10597}," getName",{"type":30,"tag":1046,"props":10599,"children":10600},{"style":1070},[10601],{"type":40,"value":1320},{"type":30,"tag":1046,"props":10603,"children":10604},{"style":1070},[10605],{"type":40,"value":1073},{"type":30,"tag":1046,"props":10607,"children":10608},{"class":1048,"line":8268},[10609,10613,10617],{"type":30,"tag":1046,"props":10610,"children":10611},{"style":1053},[10612],{"type":40,"value":1333},{"type":30,"tag":1046,"props":10614,"children":10615},{"style":1105},[10616],{"type":40,"value":10290},{"type":30,"tag":1046,"props":10618,"children":10619},{"style":1070},[10620],{"type":40,"value":1113},{"type":30,"tag":1046,"props":10622,"children":10624},{"class":1048,"line":10623},55,[10625],{"type":30,"tag":1046,"props":10626,"children":10627},{"style":1070},[10628],{"type":40,"value":1207},{"type":30,"tag":1046,"props":10630,"children":10631},{"class":1048,"line":6492},[10632],{"type":30,"tag":1046,"props":10633,"children":10634},{"emptyLinePlaceholder":13},[10635],{"type":40,"value":1121},{"type":30,"tag":1046,"props":10637,"children":10638},{"class":1048,"line":720},[10639,10643,10647,10652,10656,10660,10664,10668],{"type":30,"tag":1046,"props":10640,"children":10641},{"style":1053},[10642],{"type":40,"value":1130},{"type":30,"tag":1046,"props":10644,"children":10645},{"style":1053},[10646],{"type":40,"value":1135},{"type":30,"tag":1046,"props":10648,"children":10649},{"style":1138},[10650],{"type":40,"value":10651}," setName",{"type":30,"tag":1046,"props":10653,"children":10654},{"style":1070},[10655],{"type":40,"value":1146},{"type":30,"tag":1046,"props":10657,"children":10658},{"style":1084},[10659],{"type":40,"value":2882},{"type":30,"tag":1046,"props":10661,"children":10662},{"style":1153},[10663],{"type":40,"value":10290},{"type":30,"tag":1046,"props":10665,"children":10666},{"style":1070},[10667],{"type":40,"value":1161},{"type":30,"tag":1046,"props":10669,"children":10670},{"style":1070},[10671],{"type":40,"value":1073},{"type":30,"tag":1046,"props":10673,"children":10675},{"class":1048,"line":10674},58,[10676,10680,10684,10688,10692,10696],{"type":30,"tag":1046,"props":10677,"children":10678},{"style":1780},[10679],{"type":40,"value":1783},{"type":30,"tag":1046,"props":10681,"children":10682},{"style":1070},[10683],{"type":40,"value":1179},{"type":30,"tag":1046,"props":10685,"children":10686},{"style":1105},[10687],{"type":40,"value":10406},{"type":30,"tag":1046,"props":10689,"children":10690},{"style":1795},[10691],{"type":40,"value":1798},{"type":30,"tag":1046,"props":10693,"children":10694},{"style":1105},[10695],{"type":40,"value":10290},{"type":30,"tag":1046,"props":10697,"children":10698},{"style":1070},[10699],{"type":40,"value":1113},{"type":30,"tag":1046,"props":10701,"children":10703},{"class":1048,"line":10702},59,[10704],{"type":30,"tag":1046,"props":10705,"children":10706},{"style":1070},[10707],{"type":40,"value":1207},{"type":30,"tag":1046,"props":10709,"children":10711},{"class":1048,"line":10710},60,[10712],{"type":30,"tag":1046,"props":10713,"children":10714},{"style":1070},[10715],{"type":40,"value":1423},{"type":30,"tag":2339,"props":10717,"children":10719},{"id":10718},"explication-des-annotations-swagger",[10720],{"type":40,"value":10721},"Explication des annotations Swagger :",{"type":30,"tag":163,"props":10723,"children":10724},{},[10725,10743,10768],{"type":30,"tag":167,"props":10726,"children":10727},{},[10728,10733,10735,10741],{"type":30,"tag":36,"props":10729,"children":10730},{},[10731],{"type":40,"value":10732},"@Operation",{"type":40,"value":10734}," : Décrit l'opération ou l'endpoint de manière concise. Ici, la méthode ",{"type":30,"tag":1042,"props":10736,"children":10738},{"className":10737},[],[10739],{"type":40,"value":10740},"getUsers()",{"type":40,"value":10742}," est annotée pour indiquer qu'elle retourne une liste d’utilisateurs.",{"type":30,"tag":167,"props":10744,"children":10745},{},[10746,10751,10753,10758,10760,10766],{"type":30,"tag":36,"props":10747,"children":10748},{},[10749],{"type":40,"value":10750},"@ApiResponses",{"type":40,"value":10752}," : Définit les réponses possibles de l'API, comme le code ",{"type":30,"tag":1042,"props":10754,"children":10756},{"className":10755},[],[10757],{"type":40,"value":8837},{"type":40,"value":10759}," pour une réponse réussie ou ",{"type":30,"tag":1042,"props":10761,"children":10763},{"className":10762},[],[10764],{"type":40,"value":10765},"404",{"type":40,"value":10767}," pour des utilisateurs non trouvés.",{"type":30,"tag":167,"props":10769,"children":10770},{},[10771,10776,10778,10783],{"type":30,"tag":36,"props":10772,"children":10773},{},[10774],{"type":40,"value":10775},"@Schema",{"type":40,"value":10777}," : Définit le modèle des données pour structurer les réponses, ici l'objet ",{"type":30,"tag":1042,"props":10779,"children":10781},{"className":10780},[],[10782],{"type":40,"value":10100},{"type":40,"value":1179},{"type":30,"tag":43,"props":10785,"children":10786},{},[10787],{"type":40,"value":10788},"Avec cette configuration, vous pouvez visualiser et tester vos endpoints directement dans Swagger UI via votre navigateur.",{"type":30,"tag":84,"props":10790,"children":10791},{},[],{"type":30,"tag":31,"props":10793,"children":10795},{"id":10794},"bonnes-pratiques-pour-réussir-ladoption-dapi-first-avec-spring-boot-et-java",[10796],{"type":40,"value":10797},"Bonnes pratiques pour réussir l’adoption d’API First avec Spring Boot et Java",{"type":30,"tag":43,"props":10799,"children":10800},{},[10801,10803,10807,10809,10813,10814,10818],{"type":40,"value":10802},"Adopter l’approche ",{"type":30,"tag":36,"props":10804,"children":10805},{},[10806],{"type":40,"value":777},{"type":40,"value":10808}," dans vos projets de développement peut transformer la manière dont vous collaborez et écrivez du code. Voici quelques conseils essentiels pour une adoption réussie d'API First avec ",{"type":30,"tag":36,"props":10810,"children":10811},{},[10812],{"type":40,"value":8315},{"type":40,"value":8328},{"type":30,"tag":36,"props":10815,"children":10816},{},[10817],{"type":40,"value":845},{"type":40,"value":1179},{"type":30,"tag":116,"props":10820,"children":10822},{"id":10821},"_1-impliquer-toutes-les-équipes-dès-le-début",[10823],{"type":40,"value":10824},"1. Impliquer toutes les équipes dès le début",{"type":30,"tag":43,"props":10826,"children":10827},{},[10828],{"type":40,"value":10829},"L’un des principes clés de l’approche API First est de considérer l’API comme un contrat entre toutes les parties prenantes : les développeurs front-end, back-end, les équipes QA, et parfois même les équipes produits. Il est donc crucial que ces équipes soient impliquées dès la phase de spécification de l’API. Cela garantit une collaboration harmonieuse et réduit les risques d’incohérences.",{"type":30,"tag":116,"props":10831,"children":10833},{"id":10832},"_2-automatiser-la-génération-du-code-et-des-tests",[10834],{"type":40,"value":10835},"2. Automatiser la génération du code et des tests",{"type":30,"tag":43,"props":10837,"children":10838},{},[10839,10841,10845,10847,10852,10853,10858],{"type":40,"value":10840},"Un des avantages majeurs de l’approche API First est la possibilité de générer automatiquement du code à partir de la spécification ",{"type":30,"tag":36,"props":10842,"children":10843},{},[10844],{"type":40,"value":1578},{"type":40,"value":10846},". Avec des outils comme ",{"type":30,"tag":36,"props":10848,"children":10849},{},[10850],{"type":40,"value":10851},"Swagger Codegen",{"type":40,"value":1573},{"type":30,"tag":36,"props":10854,"children":10855},{},[10856],{"type":40,"value":10857},"OpenAPI Generator",{"type":40,"value":10859},", vous pouvez automatiser la création de contrôleurs, de modèles et même de clients API pour accélérer le développement.",{"type":30,"tag":43,"props":10861,"children":10862},{},[10863],{"type":40,"value":10864},"Voici un exemple de commande pour générer du code Spring Boot à partir d'une spécification OpenAPI :",{"type":30,"tag":1035,"props":10866,"children":10870},{"className":10867,"code":10868,"language":10869,"meta":8,"style":8},"language-bash shiki shiki-themes catppuccin-frappe github-dark","openapi-generator-cli generate -i openapi.yaml -g spring -o ./generated-code/\n","bash",[10871],{"type":30,"tag":1042,"props":10872,"children":10873},{"__ignoreMap":8},[10874],{"type":30,"tag":1046,"props":10875,"children":10876},{"class":1048,"line":1049},[10877,10882,10887,10893,10898,10903,10908,10913],{"type":30,"tag":1046,"props":10878,"children":10879},{"style":1138},[10880],{"type":40,"value":10881},"openapi-generator-cli",{"type":30,"tag":1046,"props":10883,"children":10884},{"style":1675},[10885],{"type":40,"value":10886}," generate",{"type":30,"tag":1046,"props":10888,"children":10890},{"style":10889},"--shiki-default:#A6D189;--shiki-dark:#79B8FF",[10891],{"type":40,"value":10892}," -i",{"type":30,"tag":1046,"props":10894,"children":10895},{"style":1675},[10896],{"type":40,"value":10897}," openapi.yaml",{"type":30,"tag":1046,"props":10899,"children":10900},{"style":10889},[10901],{"type":40,"value":10902}," -g",{"type":30,"tag":1046,"props":10904,"children":10905},{"style":1675},[10906],{"type":40,"value":10907}," spring",{"type":30,"tag":1046,"props":10909,"children":10910},{"style":10889},[10911],{"type":40,"value":10912}," -o",{"type":30,"tag":1046,"props":10914,"children":10915},{"style":1675},[10916],{"type":40,"value":10917}," ./generated-code/\n",{"type":30,"tag":116,"props":10919,"children":10921},{"id":10920},"_3-mettre-à-jour-régulièrement-la-spécification",[10922],{"type":40,"value":10923},"3. Mettre à jour régulièrement la spécification",{"type":30,"tag":43,"props":10925,"children":10926},{},[10927,10929,10933,10935,10939],{"type":40,"value":10928},"Votre spécification ",{"type":30,"tag":36,"props":10930,"children":10931},{},[10932],{"type":40,"value":1578},{"type":40,"value":10934}," doit toujours être à jour avec votre code. Utilisez des outils comme ",{"type":30,"tag":36,"props":10936,"children":10937},{},[10938],{"type":40,"value":8905},{"type":40,"value":10940}," pour générer automatiquement une documentation OpenAPI à partir de vos contrôleurs Java. En maintenant cette documentation à jour, vous garantissez que l’API reste synchronisée avec le développement.",{"type":30,"tag":116,"props":10942,"children":10944},{"id":10943},"_4-valider-lapi-dès-les-premières-étapes-du-projet",[10945],{"type":40,"value":10946},"4. Valider l’API dès les premières étapes du projet",{"type":30,"tag":43,"props":10948,"children":10949},{},[10950,10952,10957,10958,10963],{"type":40,"value":10951},"Avant même de commencer à coder, validez la spécification de votre API avec des outils comme ",{"type":30,"tag":36,"props":10953,"children":10954},{},[10955],{"type":40,"value":10956},"Swagger Editor",{"type":40,"value":1573},{"type":30,"tag":36,"props":10959,"children":10960},{},[10961],{"type":40,"value":10962},"Postman",{"type":40,"value":10964},". Cela permet de tester les endpoints et d’assurer que tout est en phase avec les attentes des équipes avant de passer à la phase d’implémentation.",{"type":30,"tag":116,"props":10966,"children":10968},{"id":10967},"_5-favoriser-une-communication-continue-entre-les-équipes",[10969],{"type":40,"value":10970},"5. Favoriser une communication continue entre les équipes",{"type":30,"tag":43,"props":10972,"children":10973},{},[10974,10976,10980],{"type":40,"value":10975},"L’approche API First encourage la communication régulière entre les équipes de développement front-end, back-end et produit. Pour que cette API reste découplée de l’infrastructure et testable indépendamment, les principes de la ",{"type":30,"tag":75,"props":10977,"children":10978},{"href":2274},[10979],{"type":40,"value":2277},{"type":40,"value":10981}," sont un complément naturel. Organisez des revues régulières de la spécification de l’API pour vous assurer que toutes les parties prenantes sont alignées et que les changements sont bien compris par tous.",{"type":30,"tag":84,"props":10983,"children":10984},{},[],{"type":30,"tag":31,"props":10986,"children":10988},{"id":10987},"faq-sur-api-first-et-spring-boot",[10989],{"type":40,"value":10990},"FAQ sur API First et Spring Boot",{"type":30,"tag":530,"props":10992,"children":10993},{},[10994,10999],{"type":30,"tag":534,"props":10995,"children":10996},{},[10997],{"type":40,"value":10998},"1. Qu’est-ce que l’approche API First ?",{"type":30,"tag":43,"props":11000,"children":11001},{},[11002,11004,11008],{"type":40,"value":11003},"L’approche ",{"type":30,"tag":36,"props":11005,"children":11006},{},[11007],{"type":40,"value":777},{"type":40,"value":11009}," consiste à définir et documenter une API avant de commencer à coder. L’API devient ainsi le contrat central entre toutes les équipes (front-end, back-end, QA, produit). Cela permet d’aligner les équipes dès le début et d’éviter les erreurs de communication et d’intégration tout au long du développement.",{"type":30,"tag":530,"props":11011,"children":11012},{},[11013,11018],{"type":30,"tag":534,"props":11014,"children":11015},{},[11016],{"type":40,"value":11017},"2. Quels sont les principaux avantages de l’approche API First ?",{"type":30,"tag":163,"props":11019,"children":11020},{},[11021,11031,11041],{"type":30,"tag":167,"props":11022,"children":11023},{},[11024,11029],{"type":30,"tag":36,"props":11025,"children":11026},{},[11027],{"type":40,"value":11028},"Collaboration inter-équipes",{"type":40,"value":11030}," : Les équipes front-end et back-end sont synchronisées dès le début grâce à une spécification centralisée.",{"type":30,"tag":167,"props":11032,"children":11033},{},[11034,11039],{"type":30,"tag":36,"props":11035,"children":11036},{},[11037],{"type":40,"value":11038},"Documentation à jour",{"type":40,"value":11040}," : OpenAPI sert à la fois de documentation et de contrat technique.",{"type":30,"tag":167,"props":11042,"children":11043},{},[11044,11049],{"type":30,"tag":36,"props":11045,"children":11046},{},[11047],{"type":40,"value":11048},"Réduction des erreurs",{"type":40,"value":11050}," : Les erreurs liées à des APIs mal définies sont minimisées car tout est validé et testé dès le début.",{"type":30,"tag":530,"props":11052,"children":11053},{},[11054,11059],{"type":30,"tag":534,"props":11055,"children":11056},{},[11057],{"type":40,"value":11058},"3. Comment OpenAPI s’intègre-t-il dans l’approche API First ?",{"type":30,"tag":43,"props":11060,"children":11061},{},[11062,11066],{"type":30,"tag":36,"props":11063,"children":11064},{},[11065],{"type":40,"value":1578},{"type":40,"value":11067}," est un standard permettant de définir les API de manière formelle, souvent en format YAML ou JSON. Il permet de générer du code automatiquement, de documenter les API et de valider les endpoints à chaque étape du développement.",{"type":30,"tag":530,"props":11069,"children":11070},{},[11071,11076],{"type":30,"tag":534,"props":11072,"children":11073},{},[11074],{"type":40,"value":11075},"4. Comment utiliser OpenAPI avec Spring Boot ?",{"type":30,"tag":43,"props":11077,"children":11078},{},[11079,11081,11085],{"type":40,"value":11080},"Ajoutez la dépendance ",{"type":30,"tag":36,"props":11082,"children":11083},{},[11084],{"type":40,"value":8905},{"type":40,"value":11086}," à votre projet, et utilisez les annotations Swagger pour enrichir la documentation. Swagger UI vous permet de visualiser et tester vos endpoints en temps réel, et OpenAPI Generator peut automatiser la génération de code à partir d’une spécification.",{"type":30,"tag":530,"props":11088,"children":11089},{},[11090,11095],{"type":30,"tag":534,"props":11091,"children":11092},{},[11093],{"type":40,"value":11094},"5. Est-ce que l’approche API First est adaptée aux petites équipes ?",{"type":30,"tag":43,"props":11096,"children":11097},{},[11098],{"type":40,"value":11099},"Oui, API First est tout aussi bénéfique pour les petites équipes. Cela permet d’éviter des allers-retours coûteux entre front-end et back-end, et la documentation est toujours liée au code, réduisant les erreurs et augmentant l’efficacité.",{"type":30,"tag":530,"props":11101,"children":11102},{},[11103,11108],{"type":30,"tag":534,"props":11104,"children":11105},{},[11106],{"type":40,"value":11107},"6. Comment maintenir la documentation OpenAPI à jour pendant le développement ?",{"type":30,"tag":43,"props":11109,"children":11110},{},[11111,11113,11117],{"type":40,"value":11112},"Intégrez la mise à jour de la spécification OpenAPI dans votre flux de travail. Utiliser ",{"type":30,"tag":36,"props":11114,"children":11115},{},[11116],{"type":40,"value":8905},{"type":40,"value":11118}," vous permet de générer automatiquement une documentation OpenAPI à partir du code Java, en la tenant à jour à chaque modification du code.",{"type":30,"tag":211,"props":11120,"children":11123},{"cta":11121,"href":639,"title":11122,"type":641},"Accéder au template gratuit →","Ressource gratuite : Auditez votre équipe engineering en 2 heures",[11124],{"type":30,"tag":43,"props":11125,"children":11126},{},[11127],{"type":40,"value":11128},"Le template Notion utilisé dans 15+ audits professionnels. 6 sections, 40 questions guidées, scoring visuel automatique. Format décisionnel prêt à présenter à votre direction.",{"type":30,"tag":84,"props":11130,"children":11131},{},[],{"type":30,"tag":6456,"props":11133,"children":11134},{},[11135],{"type":40,"value":6460},{"title":8,"searchDepth":675,"depth":675,"links":11137},[11138,11145,11150,11157],{"id":8340,"depth":675,"text":8343,"children":11139},[11140,11141,11142,11143,11144],{"id":8357,"depth":681,"text":8360},{"id":8368,"depth":681,"text":8371},{"id":8385,"depth":681,"text":8388},{"id":8404,"depth":681,"text":8407},{"id":8415,"depth":681,"text":8418},{"id":8443,"depth":675,"text":8446,"children":11146},[11147,11148,11149],{"id":8466,"depth":681,"text":8469},{"id":8842,"depth":681,"text":8845},{"id":8886,"depth":681,"text":8889},{"id":10794,"depth":675,"text":10797,"children":11151},[11152,11153,11154,11155,11156],{"id":10821,"depth":681,"text":10824},{"id":10832,"depth":681,"text":10835},{"id":10920,"depth":681,"text":10923},{"id":10943,"depth":681,"text":10946},{"id":10967,"depth":681,"text":10970},{"id":10987,"depth":675,"text":10990},"content:fr:architecture-craft:api-first-openapi-spring-boot.md","fr/architecture-craft/api-first-openapi-spring-boot.md","fr/architecture-craft/api-first-openapi-spring-boot",{"_path":11162,"_dir":717,"_draft":7,"_partial":7,"_locale":8,"title":11163,"description":11164,"id":10623,"date":11165,"listed":13,"nocomments":7,"hidden":7,"categories":11166,"tags":11167,"--cover":11168,"readingTime":11169,"body":11174,"_type":709,"_id":13012,"_source":711,"_file":13013,"_stem":13014,"_extension":714},"/fr/architecture-craft/architecture-hexagonale-java-exemples-bonnes-pratiques","Architecture Hexagonale en Java, Avantages, Bonnes Pratiques et Exemple","Découvrez l'architecture hexagonale, ses avantages pour vos projets Java, et comment l'implémenter avec des exemples concrets. Apprenez à structurer vos applications pour...","2024-08-15",[723],[725,726],"covers/articles/architecture-hexagonale.jpg",{"text":11170,"minutes":11171,"time":11172,"words":11173},"7 min read",6.695,401700,1339,{"type":27,"children":11175,"toc":12987},[11176,11185,11190,11195,11200,11205,11208,11217,11236,11245,11250,11259,11277,11294,11307,11316,11321,11330,11962,11971,12316,12325,12636,12655,12658,12672,12681,12686,12696,12715,12727,12737,12742,12752,12757,12760,12769,12774,12784,12801,12813,12823,12856,12866,12878,12890,12893,12902,12915,12928,12941,12973,12983],{"type":30,"tag":31,"props":11177,"children":11179},{"id":11178},"introduction-pourquoi-larchitecture-hexagonale",[11180],{"type":30,"tag":36,"props":11181,"children":11182},{},[11183],{"type":40,"value":11184},"Introduction : Pourquoi l'architecture hexagonale ?",{"type":30,"tag":43,"props":11186,"children":11187},{},[11188],{"type":40,"value":11189},"Mise en situation : vous êtes en train de développer une application Java, et tout se passe bien jusqu’à ce que votre belle architecture en couches se transforme en spaghetti. Tout est connecté, les tests deviennent un casse-tête, et chaque changement dans une partie du système menace de tout faire exploser.",{"type":30,"tag":43,"props":11191,"children":11192},{},[11193],{"type":40,"value":11194},"J’ai accompagné des équipes dans cette situation, notamment chez des clients du secteur bancaire et de l’assurance, et ce pattern se répète à chaque fois : la couche métier dépend de la base de données, les tests unitaires prennent en otage toute l’application pour s’exécuter. Un joyeux désordre qui coûte concrètement plusieurs semaines de lead time par an.",{"type":30,"tag":43,"props":11196,"children":11197},{},[11198],{"type":40,"value":11199},"C’est là que l’architecture hexagonale (ou l’architecture \"Ports et Adapters\", formalisée par Alistair Cockburn) entre en jeu. Imaginez que vous puissiez découpler tout ça, créer une architecture où votre domaine métier est au centre, protégé, et où l’infrastructure (la base de données, les services externes, etc.) ne soit qu’une simple collection d’adaptateurs interchangeables. Plus besoin de tout casser à chaque changement.",{"type":30,"tag":43,"props":11201,"children":11202},{},[11203],{"type":40,"value":11204},"Dans cet article, vous allez découvrir comment l’architecture hexagonale peut transformer votre code Java en un petit bijou de modularité et de testabilité. À la fin, vous repartirez avec une compréhension claire de comment et pourquoi cette approche peut rendre vos applications Java plus faciles à maintenir et à faire évoluer.",{"type":30,"tag":84,"props":11206,"children":11207},{},[],{"type":30,"tag":31,"props":11209,"children":11211},{"id":11210},"le-concept-darchitecture-hexagonale",[11212],{"type":30,"tag":36,"props":11213,"children":11214},{},[11215],{"type":40,"value":11216},"Le concept d'architecture hexagonale",{"type":30,"tag":43,"props":11218,"children":11219},{},[11220,11222,11227,11229,11234],{"type":40,"value":11221},"L’architecture hexagonale, également appelée ",{"type":30,"tag":36,"props":11223,"children":11224},{},[11225],{"type":40,"value":11226},"architecture Ports et Adapters",{"type":40,"value":11228},", place le ",{"type":30,"tag":36,"props":11230,"children":11231},{},[11232],{"type":40,"value":11233},"domaine métier",{"type":40,"value":11235}," au centre de l’application. L’objectif est de séparer complètement votre logique métier des aspects techniques comme la base de données, l’interface utilisateur ou encore les services externes.",{"type":30,"tag":116,"props":11237,"children":11239},{"id":11238},"un-problème-de-dépendances",[11240],{"type":30,"tag":36,"props":11241,"children":11242},{},[11243],{"type":40,"value":11244},"Un problème de dépendances",{"type":30,"tag":43,"props":11246,"children":11247},{},[11248],{"type":40,"value":11249},"L’une des grandes faiblesses des architectures traditionnelles (comme l’architecture en couches) est que les couches sont souvent trop interconnectées. Prenons un exemple simple : un service bancaire où vous consultez le solde d'un compte. Si votre couche métier dépend directement de la base de données, tout changement dans la base de données vous obligera à modifier votre logique métier. Résultat : la maintenabilité du projet devient un cauchemar.",{"type":30,"tag":116,"props":11251,"children":11253},{"id":11252},"une-séparation-claire-le-domaine-au-centre",[11254],{"type":30,"tag":36,"props":11255,"children":11256},{},[11257],{"type":40,"value":11258},"Une séparation claire : le domaine au centre",{"type":30,"tag":43,"props":11260,"children":11261},{},[11262,11264,11268,11270,11275],{"type":40,"value":11263},"L’architecture hexagonale résout ce problème en séparant clairement le domaine métier du reste de l’application. Votre domaine contient toute la logique métier, tandis que les aspects techniques sont gérés par des ",{"type":30,"tag":36,"props":11265,"children":11266},{},[11267],{"type":40,"value":3481},{"type":40,"value":11269},", qui ne sont que des implémentations concrètes de ",{"type":30,"tag":36,"props":11271,"children":11272},{},[11273],{"type":40,"value":11274},"ports",{"type":40,"value":11276}," définis dans le domaine.",{"type":30,"tag":43,"props":11278,"children":11279},{},[11280,11282,11286,11288,11292],{"type":40,"value":11281},"En termes simples, les ",{"type":30,"tag":36,"props":11283,"children":11284},{},[11285],{"type":40,"value":11274},{"type":40,"value":11287}," sont des interfaces qui définissent comment le domaine interagit avec le reste du système, et les ",{"type":30,"tag":36,"props":11289,"children":11290},{},[11291],{"type":40,"value":3481},{"type":40,"value":11293}," sont des implémentations de ces interfaces. Ainsi, vous pouvez changer une implémentation (comme la base de données) sans toucher à votre domaine métier.",{"type":30,"tag":964,"props":11295,"children":11296},{},[11297],{"type":30,"tag":43,"props":11298,"children":11299},{},[11300,11305],{"type":30,"tag":36,"props":11301,"children":11302},{},[11303],{"type":40,"value":11304},"TIP :",{"type":40,"value":11306}," Gardez en tête que le but de cette architecture est de protéger votre domaine métier des changements technologiques. Cela permet de réduire les risques de \"cascades de modifications\" qui peuvent survenir dans les projets trop couplés à leurs infrastructures.",{"type":30,"tag":116,"props":11308,"children":11310},{"id":11309},"exemple-un-service-bancaire-en-java",[11311],{"type":30,"tag":36,"props":11312,"children":11313},{},[11314],{"type":40,"value":11315},"Exemple : un service bancaire en Java",{"type":30,"tag":43,"props":11317,"children":11318},{},[11319],{"type":40,"value":11320},"Voici un exemple simple en Java illustrant cette approche.",{"type":30,"tag":43,"props":11322,"children":11323},{},[11324,11329],{"type":30,"tag":36,"props":11325,"children":11326},{},[11327],{"type":40,"value":11328},"Le domaine (Compte et ServiceBancaire)",{"type":40,"value":6296},{"type":30,"tag":1035,"props":11331,"children":11333},{"className":1039,"code":11332,"language":1038,"meta":8,"style":8},"public class Compte {\n    private String id;\n    private double solde;\n\n    public Compte(String id, double solde) {\n        this.id = id;\n        this.solde = solde;\n    }\n\n    public double obtenirSolde() {\n        return this.solde;\n    }\n}\n\npublic interface ComptePort {\n    Compte obtenirCompteParId(String id);\n}\n\npublic class ServiceBancaire {\n    private ComptePort comptePort;\n\n    public ServiceBancaire(ComptePort comptePort) {\n        this.comptePort = comptePort;\n    }\n\n    public double consulterSolde(String idCompte) {\n        Compte compte = comptePort.obtenirCompteParId(idCompte);\n        if (compte == null) {\n            throw new RuntimeException(\"Compte non trouvé !\");\n        }\n        return compte.obtenirSolde();\n    }\n}\n",[11334],{"type":30,"tag":1042,"props":11335,"children":11336},{"__ignoreMap":8},[11337,11357,11376,11396,11403,11446,11473,11501,11508,11515,11539,11564,11571,11578,11585,11605,11634,11641,11648,11668,11688,11695,11727,11755,11762,11769,11806,11849,11885,11915,11923,11948,11955],{"type":30,"tag":1046,"props":11338,"children":11339},{"class":1048,"line":1049},[11340,11344,11348,11353],{"type":30,"tag":1046,"props":11341,"children":11342},{"style":1053},[11343],{"type":40,"value":1056},{"type":30,"tag":1046,"props":11345,"children":11346},{"style":1053},[11347],{"type":40,"value":1061},{"type":30,"tag":1046,"props":11349,"children":11350},{"style":1064},[11351],{"type":40,"value":11352}," Compte",{"type":30,"tag":1046,"props":11354,"children":11355},{"style":1070},[11356],{"type":40,"value":1073},{"type":30,"tag":1046,"props":11358,"children":11359},{"class":1048,"line":675},[11360,11364,11368,11372],{"type":30,"tag":1046,"props":11361,"children":11362},{"style":1053},[11363],{"type":40,"value":1081},{"type":30,"tag":1046,"props":11365,"children":11366},{"style":1084},[11367],{"type":40,"value":2067},{"type":30,"tag":1046,"props":11369,"children":11370},{"style":1105},[11371],{"type":40,"value":6811},{"type":30,"tag":1046,"props":11373,"children":11374},{"style":1070},[11375],{"type":40,"value":1113},{"type":30,"tag":1046,"props":11377,"children":11378},{"class":1048,"line":681},[11379,11383,11387,11392],{"type":30,"tag":1046,"props":11380,"children":11381},{"style":1053},[11382],{"type":40,"value":1081},{"type":30,"tag":1046,"props":11384,"children":11385},{"style":1053},[11386],{"type":40,"value":1310},{"type":30,"tag":1046,"props":11388,"children":11389},{"style":1105},[11390],{"type":40,"value":11391}," solde",{"type":30,"tag":1046,"props":11393,"children":11394},{"style":1070},[11395],{"type":40,"value":1113},{"type":30,"tag":1046,"props":11397,"children":11398},{"class":1048,"line":1124},[11399],{"type":30,"tag":1046,"props":11400,"children":11401},{"emptyLinePlaceholder":13},[11402],{"type":40,"value":1121},{"type":30,"tag":1046,"props":11404,"children":11405},{"class":1048,"line":1168},[11406,11410,11414,11418,11422,11426,11430,11434,11438,11442],{"type":30,"tag":1046,"props":11407,"children":11408},{"style":1053},[11409],{"type":40,"value":1130},{"type":30,"tag":1046,"props":11411,"children":11412},{"style":1138},[11413],{"type":40,"value":11352},{"type":30,"tag":1046,"props":11415,"children":11416},{"style":1070},[11417],{"type":40,"value":1146},{"type":30,"tag":1046,"props":11419,"children":11420},{"style":1084},[11421],{"type":40,"value":2882},{"type":30,"tag":1046,"props":11423,"children":11424},{"style":1153},[11425],{"type":40,"value":6811},{"type":30,"tag":1046,"props":11427,"children":11428},{"style":1070},[11429],{"type":40,"value":2891},{"type":30,"tag":1046,"props":11431,"children":11432},{"style":1053},[11433],{"type":40,"value":1310},{"type":30,"tag":1046,"props":11435,"children":11436},{"style":1153},[11437],{"type":40,"value":11391},{"type":30,"tag":1046,"props":11439,"children":11440},{"style":1070},[11441],{"type":40,"value":1161},{"type":30,"tag":1046,"props":11443,"children":11444},{"style":1070},[11445],{"type":40,"value":1073},{"type":30,"tag":1046,"props":11447,"children":11448},{"class":1048,"line":1201},[11449,11453,11457,11461,11465,11469],{"type":30,"tag":1046,"props":11450,"children":11451},{"style":1780},[11452],{"type":40,"value":1783},{"type":30,"tag":1046,"props":11454,"children":11455},{"style":1070},[11456],{"type":40,"value":1179},{"type":30,"tag":1046,"props":11458,"children":11459},{"style":1105},[11460],{"type":40,"value":10364},{"type":30,"tag":1046,"props":11462,"children":11463},{"style":1795},[11464],{"type":40,"value":1798},{"type":30,"tag":1046,"props":11466,"children":11467},{"style":1105},[11468],{"type":40,"value":6811},{"type":30,"tag":1046,"props":11470,"children":11471},{"style":1070},[11472],{"type":40,"value":1113},{"type":30,"tag":1046,"props":11474,"children":11475},{"class":1048,"line":1210},[11476,11480,11484,11489,11493,11497],{"type":30,"tag":1046,"props":11477,"children":11478},{"style":1780},[11479],{"type":40,"value":1783},{"type":30,"tag":1046,"props":11481,"children":11482},{"style":1070},[11483],{"type":40,"value":1179},{"type":30,"tag":1046,"props":11485,"children":11486},{"style":1105},[11487],{"type":40,"value":11488},"solde ",{"type":30,"tag":1046,"props":11490,"children":11491},{"style":1795},[11492],{"type":40,"value":1798},{"type":30,"tag":1046,"props":11494,"children":11495},{"style":1105},[11496],{"type":40,"value":11391},{"type":30,"tag":1046,"props":11498,"children":11499},{"style":1070},[11500],{"type":40,"value":1113},{"type":30,"tag":1046,"props":11502,"children":11503},{"class":1048,"line":1218},[11504],{"type":30,"tag":1046,"props":11505,"children":11506},{"style":1070},[11507],{"type":40,"value":1207},{"type":30,"tag":1046,"props":11509,"children":11510},{"class":1048,"line":1255},[11511],{"type":30,"tag":1046,"props":11512,"children":11513},{"emptyLinePlaceholder":13},[11514],{"type":40,"value":1121},{"type":30,"tag":1046,"props":11516,"children":11517},{"class":1048,"line":1284},[11518,11522,11526,11531,11535],{"type":30,"tag":1046,"props":11519,"children":11520},{"style":1053},[11521],{"type":40,"value":1130},{"type":30,"tag":1046,"props":11523,"children":11524},{"style":1053},[11525],{"type":40,"value":1310},{"type":30,"tag":1046,"props":11527,"children":11528},{"style":1138},[11529],{"type":40,"value":11530}," obtenirSolde",{"type":30,"tag":1046,"props":11532,"children":11533},{"style":1070},[11534],{"type":40,"value":1320},{"type":30,"tag":1046,"props":11536,"children":11537},{"style":1070},[11538],{"type":40,"value":1073},{"type":30,"tag":1046,"props":11540,"children":11541},{"class":1048,"line":1292},[11542,11546,11551,11555,11560],{"type":30,"tag":1046,"props":11543,"children":11544},{"style":1053},[11545],{"type":40,"value":1333},{"type":30,"tag":1046,"props":11547,"children":11548},{"style":1780},[11549],{"type":40,"value":11550}," this",{"type":30,"tag":1046,"props":11552,"children":11553},{"style":1070},[11554],{"type":40,"value":1179},{"type":30,"tag":1046,"props":11556,"children":11557},{"style":1105},[11558],{"type":40,"value":11559},"solde",{"type":30,"tag":1046,"props":11561,"children":11562},{"style":1070},[11563],{"type":40,"value":1113},{"type":30,"tag":1046,"props":11565,"children":11566},{"class":1048,"line":1300},[11567],{"type":30,"tag":1046,"props":11568,"children":11569},{"style":1070},[11570],{"type":40,"value":1207},{"type":30,"tag":1046,"props":11572,"children":11573},{"class":1048,"line":1327},[11574],{"type":30,"tag":1046,"props":11575,"children":11576},{"style":1070},[11577],{"type":40,"value":1423},{"type":30,"tag":1046,"props":11579,"children":11580},{"class":1048,"line":1354},[11581],{"type":30,"tag":1046,"props":11582,"children":11583},{"emptyLinePlaceholder":13},[11584],{"type":40,"value":1121},{"type":30,"tag":1046,"props":11586,"children":11587},{"class":1048,"line":1391},[11588,11592,11596,11601],{"type":30,"tag":1046,"props":11589,"children":11590},{"style":1053},[11591],{"type":40,"value":1056},{"type":30,"tag":1046,"props":11593,"children":11594},{"style":1053},[11595],{"type":40,"value":4852},{"type":30,"tag":1046,"props":11597,"children":11598},{"style":1064},[11599],{"type":40,"value":11600}," ComptePort",{"type":30,"tag":1046,"props":11602,"children":11603},{"style":1070},[11604],{"type":40,"value":1073},{"type":30,"tag":1046,"props":11606,"children":11607},{"class":1048,"line":1409},[11608,11613,11618,11622,11626,11630],{"type":30,"tag":1046,"props":11609,"children":11610},{"style":1084},[11611],{"type":40,"value":11612},"    Compte",{"type":30,"tag":1046,"props":11614,"children":11615},{"style":1138},[11616],{"type":40,"value":11617}," obtenirCompteParId",{"type":30,"tag":1046,"props":11619,"children":11620},{"style":1070},[11621],{"type":40,"value":1146},{"type":30,"tag":1046,"props":11623,"children":11624},{"style":1084},[11625],{"type":40,"value":2882},{"type":30,"tag":1046,"props":11627,"children":11628},{"style":1153},[11629],{"type":40,"value":6811},{"type":30,"tag":1046,"props":11631,"children":11632},{"style":1070},[11633],{"type":40,"value":1198},{"type":30,"tag":1046,"props":11635,"children":11636},{"class":1048,"line":1417},[11637],{"type":30,"tag":1046,"props":11638,"children":11639},{"style":1070},[11640],{"type":40,"value":1423},{"type":30,"tag":1046,"props":11642,"children":11643},{"class":1048,"line":2023},[11644],{"type":30,"tag":1046,"props":11645,"children":11646},{"emptyLinePlaceholder":13},[11647],{"type":40,"value":1121},{"type":30,"tag":1046,"props":11649,"children":11650},{"class":1048,"line":2083},[11651,11655,11659,11664],{"type":30,"tag":1046,"props":11652,"children":11653},{"style":1053},[11654],{"type":40,"value":1056},{"type":30,"tag":1046,"props":11656,"children":11657},{"style":1053},[11658],{"type":40,"value":1061},{"type":30,"tag":1046,"props":11660,"children":11661},{"style":1064},[11662],{"type":40,"value":11663}," ServiceBancaire",{"type":30,"tag":1046,"props":11665,"children":11666},{"style":1070},[11667],{"type":40,"value":1073},{"type":30,"tag":1046,"props":11669,"children":11670},{"class":1048,"line":2126},[11671,11675,11679,11684],{"type":30,"tag":1046,"props":11672,"children":11673},{"style":1053},[11674],{"type":40,"value":1081},{"type":30,"tag":1046,"props":11676,"children":11677},{"style":1084},[11678],{"type":40,"value":11600},{"type":30,"tag":1046,"props":11680,"children":11681},{"style":1105},[11682],{"type":40,"value":11683}," comptePort",{"type":30,"tag":1046,"props":11685,"children":11686},{"style":1070},[11687],{"type":40,"value":1113},{"type":30,"tag":1046,"props":11689,"children":11690},{"class":1048,"line":2159},[11691],{"type":30,"tag":1046,"props":11692,"children":11693},{"emptyLinePlaceholder":13},[11694],{"type":40,"value":1121},{"type":30,"tag":1046,"props":11696,"children":11697},{"class":1048,"line":2167},[11698,11702,11706,11710,11715,11719,11723],{"type":30,"tag":1046,"props":11699,"children":11700},{"style":1053},[11701],{"type":40,"value":1130},{"type":30,"tag":1046,"props":11703,"children":11704},{"style":1138},[11705],{"type":40,"value":11663},{"type":30,"tag":1046,"props":11707,"children":11708},{"style":1070},[11709],{"type":40,"value":1146},{"type":30,"tag":1046,"props":11711,"children":11712},{"style":1084},[11713],{"type":40,"value":11714},"ComptePort",{"type":30,"tag":1046,"props":11716,"children":11717},{"style":1153},[11718],{"type":40,"value":11683},{"type":30,"tag":1046,"props":11720,"children":11721},{"style":1070},[11722],{"type":40,"value":1161},{"type":30,"tag":1046,"props":11724,"children":11725},{"style":1070},[11726],{"type":40,"value":1073},{"type":30,"tag":1046,"props":11728,"children":11729},{"class":1048,"line":4537},[11730,11734,11738,11743,11747,11751],{"type":30,"tag":1046,"props":11731,"children":11732},{"style":1780},[11733],{"type":40,"value":1783},{"type":30,"tag":1046,"props":11735,"children":11736},{"style":1070},[11737],{"type":40,"value":1179},{"type":30,"tag":1046,"props":11739,"children":11740},{"style":1105},[11741],{"type":40,"value":11742},"comptePort ",{"type":30,"tag":1046,"props":11744,"children":11745},{"style":1795},[11746],{"type":40,"value":1798},{"type":30,"tag":1046,"props":11748,"children":11749},{"style":1105},[11750],{"type":40,"value":11683},{"type":30,"tag":1046,"props":11752,"children":11753},{"style":1070},[11754],{"type":40,"value":1113},{"type":30,"tag":1046,"props":11756,"children":11757},{"class":1048,"line":4545},[11758],{"type":30,"tag":1046,"props":11759,"children":11760},{"style":1070},[11761],{"type":40,"value":1207},{"type":30,"tag":1046,"props":11763,"children":11764},{"class":1048,"line":4582},[11765],{"type":30,"tag":1046,"props":11766,"children":11767},{"emptyLinePlaceholder":13},[11768],{"type":40,"value":1121},{"type":30,"tag":1046,"props":11770,"children":11771},{"class":1048,"line":4622},[11772,11776,11780,11785,11789,11793,11798,11802],{"type":30,"tag":1046,"props":11773,"children":11774},{"style":1053},[11775],{"type":40,"value":1130},{"type":30,"tag":1046,"props":11777,"children":11778},{"style":1053},[11779],{"type":40,"value":1310},{"type":30,"tag":1046,"props":11781,"children":11782},{"style":1138},[11783],{"type":40,"value":11784}," consulterSolde",{"type":30,"tag":1046,"props":11786,"children":11787},{"style":1070},[11788],{"type":40,"value":1146},{"type":30,"tag":1046,"props":11790,"children":11791},{"style":1084},[11792],{"type":40,"value":2882},{"type":30,"tag":1046,"props":11794,"children":11795},{"style":1153},[11796],{"type":40,"value":11797}," idCompte",{"type":30,"tag":1046,"props":11799,"children":11800},{"style":1070},[11801],{"type":40,"value":1161},{"type":30,"tag":1046,"props":11803,"children":11804},{"style":1070},[11805],{"type":40,"value":1073},{"type":30,"tag":1046,"props":11807,"children":11808},{"class":1048,"line":4662},[11809,11814,11819,11823,11827,11831,11836,11840,11845],{"type":30,"tag":1046,"props":11810,"children":11811},{"style":1084},[11812],{"type":40,"value":11813},"        Compte",{"type":30,"tag":1046,"props":11815,"children":11816},{"style":1105},[11817],{"type":40,"value":11818}," compte ",{"type":30,"tag":1046,"props":11820,"children":11821},{"style":1795},[11822],{"type":40,"value":1798},{"type":30,"tag":1046,"props":11824,"children":11825},{"style":1105},[11826],{"type":40,"value":11683},{"type":30,"tag":1046,"props":11828,"children":11829},{"style":1070},[11830],{"type":40,"value":1179},{"type":30,"tag":1046,"props":11832,"children":11833},{"style":1138},[11834],{"type":40,"value":11835},"obtenirCompteParId",{"type":30,"tag":1046,"props":11837,"children":11838},{"style":1070},[11839],{"type":40,"value":1146},{"type":30,"tag":1046,"props":11841,"children":11842},{"style":1105},[11843],{"type":40,"value":11844},"idCompte",{"type":30,"tag":1046,"props":11846,"children":11847},{"style":1070},[11848],{"type":40,"value":1198},{"type":30,"tag":1046,"props":11850,"children":11851},{"class":1048,"line":4687},[11852,11857,11862,11867,11872,11877,11881],{"type":30,"tag":1046,"props":11853,"children":11854},{"style":1053},[11855],{"type":40,"value":11856},"        if",{"type":30,"tag":1046,"props":11858,"children":11859},{"style":1070},[11860],{"type":40,"value":11861}," (",{"type":30,"tag":1046,"props":11863,"children":11864},{"style":1105},[11865],{"type":40,"value":11866},"compte ",{"type":30,"tag":1046,"props":11868,"children":11869},{"style":1795},[11870],{"type":40,"value":11871},"==",{"type":30,"tag":1046,"props":11873,"children":11874},{"style":1780},[11875],{"type":40,"value":11876}," null",{"type":30,"tag":1046,"props":11878,"children":11879},{"style":1070},[11880],{"type":40,"value":1161},{"type":30,"tag":1046,"props":11882,"children":11883},{"style":1070},[11884],{"type":40,"value":1073},{"type":30,"tag":1046,"props":11886,"children":11887},{"class":1048,"line":4695},[11888,11893,11897,11902,11906,11911],{"type":30,"tag":1046,"props":11889,"children":11890},{"style":1053},[11891],{"type":40,"value":11892},"            throw",{"type":30,"tag":1046,"props":11894,"children":11895},{"style":1053},[11896],{"type":40,"value":2480},{"type":30,"tag":1046,"props":11898,"children":11899},{"style":1138},[11900],{"type":40,"value":11901}," RuntimeException",{"type":30,"tag":1046,"props":11903,"children":11904},{"style":1070},[11905],{"type":40,"value":1146},{"type":30,"tag":1046,"props":11907,"children":11908},{"style":1675},[11909],{"type":40,"value":11910},"\"Compte non trouvé !\"",{"type":30,"tag":1046,"props":11912,"children":11913},{"style":1070},[11914],{"type":40,"value":1198},{"type":30,"tag":1046,"props":11916,"children":11917},{"class":1048,"line":4703},[11918],{"type":30,"tag":1046,"props":11919,"children":11920},{"style":1070},[11921],{"type":40,"value":11922},"        }\n",{"type":30,"tag":1046,"props":11924,"children":11925},{"class":1048,"line":4739},[11926,11930,11935,11939,11944],{"type":30,"tag":1046,"props":11927,"children":11928},{"style":1053},[11929],{"type":40,"value":1333},{"type":30,"tag":1046,"props":11931,"children":11932},{"style":1105},[11933],{"type":40,"value":11934}," compte",{"type":30,"tag":1046,"props":11936,"children":11937},{"style":1070},[11938],{"type":40,"value":1179},{"type":30,"tag":1046,"props":11940,"children":11941},{"style":1138},[11942],{"type":40,"value":11943},"obtenirSolde",{"type":30,"tag":1046,"props":11945,"children":11946},{"style":1070},[11947],{"type":40,"value":1406},{"type":30,"tag":1046,"props":11949,"children":11950},{"class":1048,"line":4771},[11951],{"type":30,"tag":1046,"props":11952,"children":11953},{"style":1070},[11954],{"type":40,"value":1207},{"type":30,"tag":1046,"props":11956,"children":11957},{"class":1048,"line":4811},[11958],{"type":30,"tag":1046,"props":11959,"children":11960},{"style":1070},[11961],{"type":40,"value":1423},{"type":30,"tag":43,"props":11963,"children":11964},{},[11965,11970],{"type":30,"tag":36,"props":11966,"children":11967},{},[11968],{"type":40,"value":11969},"L’implémentation de l'Adapter dans l'infrastructure (Infra)",{"type":40,"value":6296},{"type":30,"tag":1035,"props":11972,"children":11974},{"className":1039,"code":11973,"language":1038,"meta":8,"style":8},"public class CompteAdapter implements ComptePort {\n    private Map\u003CString, Compte> baseDeDonnees;\n\n    public CompteAdapter() {\n        baseDeDonnees = new HashMap\u003C>();\n        baseDeDonnees.put(\"123\", new Compte(\"123\", 1500.0));\n        baseDeDonnees.put(\"456\", new Compte(\"456\", 2500.0));\n    }\n\n    @Override\n    public Compte obtenirCompteParId(String id) {\n        return baseDeDonnees.get(id);\n    }\n}\n",[11975],{"type":30,"tag":1042,"props":11976,"children":11977},{"__ignoreMap":8},[11978,12006,12046,12053,12072,12096,12154,12211,12218,12225,12236,12271,12302,12309],{"type":30,"tag":1046,"props":11979,"children":11980},{"class":1048,"line":1049},[11981,11985,11989,11994,11998,12002],{"type":30,"tag":1046,"props":11982,"children":11983},{"style":1053},[11984],{"type":40,"value":1056},{"type":30,"tag":1046,"props":11986,"children":11987},{"style":1053},[11988],{"type":40,"value":1061},{"type":30,"tag":1046,"props":11990,"children":11991},{"style":1064},[11992],{"type":40,"value":11993}," CompteAdapter",{"type":30,"tag":1046,"props":11995,"children":11996},{"style":1053},[11997],{"type":40,"value":3166},{"type":30,"tag":1046,"props":11999,"children":12000},{"style":1064},[12001],{"type":40,"value":11600},{"type":30,"tag":1046,"props":12003,"children":12004},{"style":1070},[12005],{"type":40,"value":1073},{"type":30,"tag":1046,"props":12007,"children":12008},{"class":1048,"line":675},[12009,12013,12017,12021,12025,12029,12033,12037,12042],{"type":30,"tag":1046,"props":12010,"children":12011},{"style":1053},[12012],{"type":40,"value":1081},{"type":30,"tag":1046,"props":12014,"children":12015},{"style":1084},[12016],{"type":40,"value":3197},{"type":30,"tag":1046,"props":12018,"children":12019},{"style":1070},[12020],{"type":40,"value":1092},{"type":30,"tag":1046,"props":12022,"children":12023},{"style":1053},[12024],{"type":40,"value":2882},{"type":30,"tag":1046,"props":12026,"children":12027},{"style":1070},[12028],{"type":40,"value":2891},{"type":30,"tag":1046,"props":12030,"children":12031},{"style":1053},[12032],{"type":40,"value":11352},{"type":30,"tag":1046,"props":12034,"children":12035},{"style":1070},[12036],{"type":40,"value":1102},{"type":30,"tag":1046,"props":12038,"children":12039},{"style":1105},[12040],{"type":40,"value":12041}," baseDeDonnees",{"type":30,"tag":1046,"props":12043,"children":12044},{"style":1070},[12045],{"type":40,"value":1113},{"type":30,"tag":1046,"props":12047,"children":12048},{"class":1048,"line":681},[12049],{"type":30,"tag":1046,"props":12050,"children":12051},{"emptyLinePlaceholder":13},[12052],{"type":40,"value":1121},{"type":30,"tag":1046,"props":12054,"children":12055},{"class":1048,"line":1124},[12056,12060,12064,12068],{"type":30,"tag":1046,"props":12057,"children":12058},{"style":1053},[12059],{"type":40,"value":1130},{"type":30,"tag":1046,"props":12061,"children":12062},{"style":1138},[12063],{"type":40,"value":11993},{"type":30,"tag":1046,"props":12065,"children":12066},{"style":1070},[12067],{"type":40,"value":1320},{"type":30,"tag":1046,"props":12069,"children":12070},{"style":1070},[12071],{"type":40,"value":1073},{"type":30,"tag":1046,"props":12073,"children":12074},{"class":1048,"line":1168},[12075,12080,12084,12088,12092],{"type":30,"tag":1046,"props":12076,"children":12077},{"style":1105},[12078],{"type":40,"value":12079},"        baseDeDonnees ",{"type":30,"tag":1046,"props":12081,"children":12082},{"style":1795},[12083],{"type":40,"value":1798},{"type":30,"tag":1046,"props":12085,"children":12086},{"style":1053},[12087],{"type":40,"value":2480},{"type":30,"tag":1046,"props":12089,"children":12090},{"style":1084},[12091],{"type":40,"value":3235},{"type":30,"tag":1046,"props":12093,"children":12094},{"style":1070},[12095],{"type":40,"value":2490},{"type":30,"tag":1046,"props":12097,"children":12098},{"class":1048,"line":1201},[12099,12104,12108,12112,12116,12121,12125,12129,12133,12137,12141,12145,12150],{"type":30,"tag":1046,"props":12100,"children":12101},{"style":1105},[12102],{"type":40,"value":12103},"        baseDeDonnees",{"type":30,"tag":1046,"props":12105,"children":12106},{"style":1070},[12107],{"type":40,"value":1179},{"type":30,"tag":1046,"props":12109,"children":12110},{"style":1138},[12111],{"type":40,"value":3418},{"type":30,"tag":1046,"props":12113,"children":12114},{"style":1070},[12115],{"type":40,"value":1146},{"type":30,"tag":1046,"props":12117,"children":12118},{"style":1675},[12119],{"type":40,"value":12120},"\"123\"",{"type":30,"tag":1046,"props":12122,"children":12123},{"style":1070},[12124],{"type":40,"value":2891},{"type":30,"tag":1046,"props":12126,"children":12127},{"style":1053},[12128],{"type":40,"value":2480},{"type":30,"tag":1046,"props":12130,"children":12131},{"style":1138},[12132],{"type":40,"value":11352},{"type":30,"tag":1046,"props":12134,"children":12135},{"style":1070},[12136],{"type":40,"value":1146},{"type":30,"tag":1046,"props":12138,"children":12139},{"style":1675},[12140],{"type":40,"value":12120},{"type":30,"tag":1046,"props":12142,"children":12143},{"style":1070},[12144],{"type":40,"value":2891},{"type":30,"tag":1046,"props":12146,"children":12147},{"style":6886},[12148],{"type":40,"value":12149}," 1500.0",{"type":30,"tag":1046,"props":12151,"children":12152},{"style":1070},[12153],{"type":40,"value":4457},{"type":30,"tag":1046,"props":12155,"children":12156},{"class":1048,"line":1210},[12157,12161,12165,12169,12173,12178,12182,12186,12190,12194,12198,12202,12207],{"type":30,"tag":1046,"props":12158,"children":12159},{"style":1105},[12160],{"type":40,"value":12103},{"type":30,"tag":1046,"props":12162,"children":12163},{"style":1070},[12164],{"type":40,"value":1179},{"type":30,"tag":1046,"props":12166,"children":12167},{"style":1138},[12168],{"type":40,"value":3418},{"type":30,"tag":1046,"props":12170,"children":12171},{"style":1070},[12172],{"type":40,"value":1146},{"type":30,"tag":1046,"props":12174,"children":12175},{"style":1675},[12176],{"type":40,"value":12177},"\"456\"",{"type":30,"tag":1046,"props":12179,"children":12180},{"style":1070},[12181],{"type":40,"value":2891},{"type":30,"tag":1046,"props":12183,"children":12184},{"style":1053},[12185],{"type":40,"value":2480},{"type":30,"tag":1046,"props":12187,"children":12188},{"style":1138},[12189],{"type":40,"value":11352},{"type":30,"tag":1046,"props":12191,"children":12192},{"style":1070},[12193],{"type":40,"value":1146},{"type":30,"tag":1046,"props":12195,"children":12196},{"style":1675},[12197],{"type":40,"value":12177},{"type":30,"tag":1046,"props":12199,"children":12200},{"style":1070},[12201],{"type":40,"value":2891},{"type":30,"tag":1046,"props":12203,"children":12204},{"style":6886},[12205],{"type":40,"value":12206}," 2500.0",{"type":30,"tag":1046,"props":12208,"children":12209},{"style":1070},[12210],{"type":40,"value":4457},{"type":30,"tag":1046,"props":12212,"children":12213},{"class":1048,"line":1218},[12214],{"type":30,"tag":1046,"props":12215,"children":12216},{"style":1070},[12217],{"type":40,"value":1207},{"type":30,"tag":1046,"props":12219,"children":12220},{"class":1048,"line":1255},[12221],{"type":30,"tag":1046,"props":12222,"children":12223},{"emptyLinePlaceholder":13},[12224],{"type":40,"value":1121},{"type":30,"tag":1046,"props":12226,"children":12227},{"class":1048,"line":1284},[12228,12232],{"type":30,"tag":1046,"props":12229,"children":12230},{"style":1647},[12231],{"type":40,"value":1828},{"type":30,"tag":1046,"props":12233,"children":12234},{"style":1653},[12235],{"type":40,"value":3258},{"type":30,"tag":1046,"props":12237,"children":12238},{"class":1048,"line":1292},[12239,12243,12247,12251,12255,12259,12263,12267],{"type":30,"tag":1046,"props":12240,"children":12241},{"style":1053},[12242],{"type":40,"value":1130},{"type":30,"tag":1046,"props":12244,"children":12245},{"style":1084},[12246],{"type":40,"value":11352},{"type":30,"tag":1046,"props":12248,"children":12249},{"style":1138},[12250],{"type":40,"value":11617},{"type":30,"tag":1046,"props":12252,"children":12253},{"style":1070},[12254],{"type":40,"value":1146},{"type":30,"tag":1046,"props":12256,"children":12257},{"style":1084},[12258],{"type":40,"value":2882},{"type":30,"tag":1046,"props":12260,"children":12261},{"style":1153},[12262],{"type":40,"value":6811},{"type":30,"tag":1046,"props":12264,"children":12265},{"style":1070},[12266],{"type":40,"value":1161},{"type":30,"tag":1046,"props":12268,"children":12269},{"style":1070},[12270],{"type":40,"value":1073},{"type":30,"tag":1046,"props":12272,"children":12273},{"class":1048,"line":1300},[12274,12278,12282,12286,12290,12294,12298],{"type":30,"tag":1046,"props":12275,"children":12276},{"style":1053},[12277],{"type":40,"value":1333},{"type":30,"tag":1046,"props":12279,"children":12280},{"style":1105},[12281],{"type":40,"value":12041},{"type":30,"tag":1046,"props":12283,"children":12284},{"style":1070},[12285],{"type":40,"value":1179},{"type":30,"tag":1046,"props":12287,"children":12288},{"style":1138},[12289],{"type":40,"value":5147},{"type":30,"tag":1046,"props":12291,"children":12292},{"style":1070},[12293],{"type":40,"value":1146},{"type":30,"tag":1046,"props":12295,"children":12296},{"style":1105},[12297],{"type":40,"value":6861},{"type":30,"tag":1046,"props":12299,"children":12300},{"style":1070},[12301],{"type":40,"value":1198},{"type":30,"tag":1046,"props":12303,"children":12304},{"class":1048,"line":1327},[12305],{"type":30,"tag":1046,"props":12306,"children":12307},{"style":1070},[12308],{"type":40,"value":1207},{"type":30,"tag":1046,"props":12310,"children":12311},{"class":1048,"line":1354},[12312],{"type":30,"tag":1046,"props":12313,"children":12314},{"style":1070},[12315],{"type":40,"value":1423},{"type":30,"tag":43,"props":12317,"children":12318},{},[12319,12324],{"type":30,"tag":36,"props":12320,"children":12321},{},[12322],{"type":40,"value":12323},"Application principale (Main)",{"type":40,"value":6296},{"type":30,"tag":1035,"props":12326,"children":12328},{"className":1039,"code":12327,"language":1038,"meta":8,"style":8},"public class Main {\n    public static void main(String[] args) {\n        CompteAdapter compteAdapter = new CompteAdapter();\n        ServiceBancaire serviceBancaire = new ServiceBancaire(compteAdapter);\n\n        String idCompte = \"123\";\n        double solde = serviceBancaire.consulterSolde(idCompte);\n\n        System.out.println(\"Le solde du compte \" + idCompte + \" est de \" + solde + \" €.\");\n    }\n}\n",[12329],{"type":30,"tag":1042,"props":12330,"children":12331},{"__ignoreMap":8},[12332,12352,12399,12428,12466,12473,12499,12541,12548,12622,12629],{"type":30,"tag":1046,"props":12333,"children":12334},{"class":1048,"line":1049},[12335,12339,12343,12348],{"type":30,"tag":1046,"props":12336,"children":12337},{"style":1053},[12338],{"type":40,"value":1056},{"type":30,"tag":1046,"props":12340,"children":12341},{"style":1053},[12342],{"type":40,"value":1061},{"type":30,"tag":1046,"props":12344,"children":12345},{"style":1064},[12346],{"type":40,"value":12347}," Main",{"type":30,"tag":1046,"props":12349,"children":12350},{"style":1070},[12351],{"type":40,"value":1073},{"type":30,"tag":1046,"props":12353,"children":12354},{"class":1048,"line":675},[12355,12359,12364,12368,12373,12377,12381,12386,12391,12395],{"type":30,"tag":1046,"props":12356,"children":12357},{"style":1053},[12358],{"type":40,"value":1130},{"type":30,"tag":1046,"props":12360,"children":12361},{"style":1053},[12362],{"type":40,"value":12363}," static",{"type":30,"tag":1046,"props":12365,"children":12366},{"style":1053},[12367],{"type":40,"value":1135},{"type":30,"tag":1046,"props":12369,"children":12370},{"style":1138},[12371],{"type":40,"value":12372}," main",{"type":30,"tag":1046,"props":12374,"children":12375},{"style":1070},[12376],{"type":40,"value":1146},{"type":30,"tag":1046,"props":12378,"children":12379},{"style":1053},[12380],{"type":40,"value":2882},{"type":30,"tag":1046,"props":12382,"children":12383},{"style":1070},[12384],{"type":40,"value":12385},"[]",{"type":30,"tag":1046,"props":12387,"children":12388},{"style":1153},[12389],{"type":40,"value":12390}," args",{"type":30,"tag":1046,"props":12392,"children":12393},{"style":1070},[12394],{"type":40,"value":1161},{"type":30,"tag":1046,"props":12396,"children":12397},{"style":1070},[12398],{"type":40,"value":1073},{"type":30,"tag":1046,"props":12400,"children":12401},{"class":1048,"line":681},[12402,12407,12412,12416,12420,12424],{"type":30,"tag":1046,"props":12403,"children":12404},{"style":1084},[12405],{"type":40,"value":12406},"        CompteAdapter",{"type":30,"tag":1046,"props":12408,"children":12409},{"style":1105},[12410],{"type":40,"value":12411}," compteAdapter ",{"type":30,"tag":1046,"props":12413,"children":12414},{"style":1795},[12415],{"type":40,"value":1798},{"type":30,"tag":1046,"props":12417,"children":12418},{"style":1053},[12419],{"type":40,"value":2480},{"type":30,"tag":1046,"props":12421,"children":12422},{"style":1138},[12423],{"type":40,"value":11993},{"type":30,"tag":1046,"props":12425,"children":12426},{"style":1070},[12427],{"type":40,"value":1406},{"type":30,"tag":1046,"props":12429,"children":12430},{"class":1048,"line":1124},[12431,12436,12441,12445,12449,12453,12457,12462],{"type":30,"tag":1046,"props":12432,"children":12433},{"style":1084},[12434],{"type":40,"value":12435},"        ServiceBancaire",{"type":30,"tag":1046,"props":12437,"children":12438},{"style":1105},[12439],{"type":40,"value":12440}," serviceBancaire ",{"type":30,"tag":1046,"props":12442,"children":12443},{"style":1795},[12444],{"type":40,"value":1798},{"type":30,"tag":1046,"props":12446,"children":12447},{"style":1053},[12448],{"type":40,"value":2480},{"type":30,"tag":1046,"props":12450,"children":12451},{"style":1138},[12452],{"type":40,"value":11663},{"type":30,"tag":1046,"props":12454,"children":12455},{"style":1070},[12456],{"type":40,"value":1146},{"type":30,"tag":1046,"props":12458,"children":12459},{"style":1105},[12460],{"type":40,"value":12461},"compteAdapter",{"type":30,"tag":1046,"props":12463,"children":12464},{"style":1070},[12465],{"type":40,"value":1198},{"type":30,"tag":1046,"props":12467,"children":12468},{"class":1048,"line":1168},[12469],{"type":30,"tag":1046,"props":12470,"children":12471},{"emptyLinePlaceholder":13},[12472],{"type":40,"value":1121},{"type":30,"tag":1046,"props":12474,"children":12475},{"class":1048,"line":1201},[12476,12481,12486,12490,12495],{"type":30,"tag":1046,"props":12477,"children":12478},{"style":1084},[12479],{"type":40,"value":12480},"        String",{"type":30,"tag":1046,"props":12482,"children":12483},{"style":1105},[12484],{"type":40,"value":12485}," idCompte ",{"type":30,"tag":1046,"props":12487,"children":12488},{"style":1795},[12489],{"type":40,"value":1798},{"type":30,"tag":1046,"props":12491,"children":12492},{"style":1675},[12493],{"type":40,"value":12494}," \"123\"",{"type":30,"tag":1046,"props":12496,"children":12497},{"style":1070},[12498],{"type":40,"value":1113},{"type":30,"tag":1046,"props":12500,"children":12501},{"class":1048,"line":1210},[12502,12506,12511,12515,12520,12524,12529,12533,12537],{"type":30,"tag":1046,"props":12503,"children":12504},{"style":1053},[12505],{"type":40,"value":5933},{"type":30,"tag":1046,"props":12507,"children":12508},{"style":1105},[12509],{"type":40,"value":12510}," solde ",{"type":30,"tag":1046,"props":12512,"children":12513},{"style":1795},[12514],{"type":40,"value":1798},{"type":30,"tag":1046,"props":12516,"children":12517},{"style":1105},[12518],{"type":40,"value":12519}," serviceBancaire",{"type":30,"tag":1046,"props":12521,"children":12522},{"style":1070},[12523],{"type":40,"value":1179},{"type":30,"tag":1046,"props":12525,"children":12526},{"style":1138},[12527],{"type":40,"value":12528},"consulterSolde",{"type":30,"tag":1046,"props":12530,"children":12531},{"style":1070},[12532],{"type":40,"value":1146},{"type":30,"tag":1046,"props":12534,"children":12535},{"style":1105},[12536],{"type":40,"value":11844},{"type":30,"tag":1046,"props":12538,"children":12539},{"style":1070},[12540],{"type":40,"value":1198},{"type":30,"tag":1046,"props":12542,"children":12543},{"class":1048,"line":1218},[12544],{"type":30,"tag":1046,"props":12545,"children":12546},{"emptyLinePlaceholder":13},[12547],{"type":40,"value":1121},{"type":30,"tag":1046,"props":12549,"children":12550},{"class":1048,"line":1255},[12551,12556,12560,12565,12569,12574,12578,12583,12587,12591,12596,12601,12605,12609,12613,12618],{"type":30,"tag":1046,"props":12552,"children":12553},{"style":1105},[12554],{"type":40,"value":12555},"        System",{"type":30,"tag":1046,"props":12557,"children":12558},{"style":1070},[12559],{"type":40,"value":1179},{"type":30,"tag":1046,"props":12561,"children":12562},{"style":1105},[12563],{"type":40,"value":12564},"out",{"type":30,"tag":1046,"props":12566,"children":12567},{"style":1070},[12568],{"type":40,"value":1179},{"type":30,"tag":1046,"props":12570,"children":12571},{"style":1138},[12572],{"type":40,"value":12573},"println",{"type":30,"tag":1046,"props":12575,"children":12576},{"style":1070},[12577],{"type":40,"value":1146},{"type":30,"tag":1046,"props":12579,"children":12580},{"style":1675},[12581],{"type":40,"value":12582},"\"Le solde du compte \"",{"type":30,"tag":1046,"props":12584,"children":12585},{"style":1795},[12586],{"type":40,"value":7261},{"type":30,"tag":1046,"props":12588,"children":12589},{"style":1105},[12590],{"type":40,"value":12485},{"type":30,"tag":1046,"props":12592,"children":12593},{"style":1795},[12594],{"type":40,"value":12595},"+",{"type":30,"tag":1046,"props":12597,"children":12598},{"style":1675},[12599],{"type":40,"value":12600}," \" est de \"",{"type":30,"tag":1046,"props":12602,"children":12603},{"style":1795},[12604],{"type":40,"value":7261},{"type":30,"tag":1046,"props":12606,"children":12607},{"style":1105},[12608],{"type":40,"value":12510},{"type":30,"tag":1046,"props":12610,"children":12611},{"style":1795},[12612],{"type":40,"value":12595},{"type":30,"tag":1046,"props":12614,"children":12615},{"style":1675},[12616],{"type":40,"value":12617}," \" €.\"",{"type":30,"tag":1046,"props":12619,"children":12620},{"style":1070},[12621],{"type":40,"value":1198},{"type":30,"tag":1046,"props":12623,"children":12624},{"class":1048,"line":1284},[12625],{"type":30,"tag":1046,"props":12626,"children":12627},{"style":1070},[12628],{"type":40,"value":1207},{"type":30,"tag":1046,"props":12630,"children":12631},{"class":1048,"line":1292},[12632],{"type":30,"tag":1046,"props":12633,"children":12634},{"style":1070},[12635],{"type":40,"value":1423},{"type":30,"tag":964,"props":12637,"children":12638},{},[12639],{"type":30,"tag":43,"props":12640,"children":12641},{},[12642,12647,12649,12653],{"type":30,"tag":36,"props":12643,"children":12644},{},[12645],{"type":40,"value":12646},"ALERT :",{"type":40,"value":12648}," N'oubliez pas que les ",{"type":30,"tag":36,"props":12650,"children":12651},{},[12652],{"type":40,"value":11274},{"type":40,"value":12654}," sont des abstractions du domaine métier. Ils doivent rester indépendants des technologies utilisées dans les adapters (comme une base de données). Cela vous évite de lier votre domaine métier à une technologie particulière.",{"type":30,"tag":84,"props":12656,"children":12657},{},[],{"type":30,"tag":211,"props":12659,"children":12661},{"cta":213,"href":214,"title":12660,"type":216},"Votre code se transforme en spaghetti à chaque nouvelle fonctionnalité ?",[12662,12667],{"type":30,"tag":43,"props":12663,"children":12664},{},[12665],{"type":40,"value":12666},"Vos tests unitaires sont impossibles à écrire, chaque modification crée des régressions en cascade, et votre équipe passe plus de temps à déboguer qu'à livrer de la valeur ? C'est souvent le signe d'une architecture qui ne protège pas assez le domaine métier.",{"type":30,"tag":43,"props":12668,"children":12669},{},[12670],{"type":40,"value":12671},"Réservons 30 minutes ensemble pour identifier les couches qui freinent votre équipe et tracer un plan d'action concret.",{"type":30,"tag":31,"props":12673,"children":12675},{"id":12674},"avantages-de-larchitecture-hexagonale",[12676],{"type":30,"tag":36,"props":12677,"children":12678},{},[12679],{"type":40,"value":12680},"Avantages de l'architecture hexagonale",{"type":30,"tag":43,"props":12682,"children":12683},{},[12684],{"type":40,"value":12685},"Voici quelques-uns des avantages principaux que vous obtiendrez en adoptant l’architecture hexagonale.",{"type":30,"tag":116,"props":12687,"children":12689},{"id":12688},"_1-modularité-et-testabilité",[12690,12691],{"type":40,"value":242},{"type":30,"tag":36,"props":12692,"children":12693},{},[12694],{"type":40,"value":12695},"Modularité et testabilité",{"type":30,"tag":43,"props":12697,"children":12698},{},[12699,12701,12706,12708,12713],{"type":40,"value":12700},"En isolant la logique métier des détails techniques, vous obtenez un code beaucoup plus ",{"type":30,"tag":36,"props":12702,"children":12703},{},[12704],{"type":40,"value":12705},"modulaire",{"type":40,"value":12707},". Vous pouvez remplacer les adaptateurs (comme la base de données) sans toucher à la logique métier. Cela facilite également les tests : vous pouvez ",{"type":30,"tag":36,"props":12709,"children":12710},{},[12711],{"type":40,"value":12712},"mock",{"type":40,"value":12714}," les adaptateurs pour tester votre domaine métier sans avoir besoin d'une vraie base de données.",{"type":30,"tag":964,"props":12716,"children":12717},{},[12718],{"type":30,"tag":43,"props":12719,"children":12720},{},[12721,12725],{"type":30,"tag":36,"props":12722,"children":12723},{},[12724],{"type":40,"value":11304},{"type":40,"value":12726}," Utiliser des mocks pour simuler vos adapters dans les tests est une excellente pratique. Cela vous permet de tester votre logique métier indépendamment de la configuration des systèmes externes comme les bases de données ou les services tiers.",{"type":30,"tag":116,"props":12728,"children":12730},{"id":12729},"_2-adaptabilité-et-flexibilité",[12731,12732],{"type":40,"value":268},{"type":30,"tag":36,"props":12733,"children":12734},{},[12735],{"type":40,"value":12736},"Adaptabilité et flexibilité",{"type":30,"tag":43,"props":12738,"children":12739},{},[12740],{"type":40,"value":12741},"L’architecture hexagonale vous permet d'ajouter ou de modifier facilement des composants. Si vous décidez d’ajouter une nouvelle interface utilisateur, par exemple une API REST, il suffit d’ajouter un nouvel adapter pour transformer les requêtes HTTP en appels au domaine.",{"type":30,"tag":116,"props":12743,"children":12745},{"id":12744},"_3-simplicité-des-changements-dans-linfrastructure",[12746,12747],{"type":40,"value":293},{"type":30,"tag":36,"props":12748,"children":12749},{},[12750],{"type":40,"value":12751},"Simplicité des changements dans l'infrastructure",{"type":30,"tag":43,"props":12753,"children":12754},{},[12755],{"type":40,"value":12756},"Un autre grand avantage est la possibilité de changer l’infrastructure sans impacter le domaine. Si vous devez changer de base de données ou d'outil de communication, le domaine reste intact, et seuls les adaptateurs doivent être modifiés.",{"type":30,"tag":84,"props":12758,"children":12759},{},[],{"type":30,"tag":31,"props":12761,"children":12763},{"id":12762},"bonnes-pratiques-et-pièges-à-éviter",[12764],{"type":30,"tag":36,"props":12765,"children":12766},{},[12767],{"type":40,"value":12768},"Bonnes pratiques et pièges à éviter",{"type":30,"tag":43,"props":12770,"children":12771},{},[12772],{"type":40,"value":12773},"L’architecture hexagonale a de nombreux avantages, mais il est essentiel de l’adopter correctement. Voici quelques bonnes pratiques.",{"type":30,"tag":116,"props":12775,"children":12777},{"id":12776},"_1-ne-pas-sur-ingénier-le-projet",[12778,12779],{"type":40,"value":242},{"type":30,"tag":36,"props":12780,"children":12781},{},[12782],{"type":40,"value":12783},"Ne pas sur-ingénier le projet",{"type":30,"tag":43,"props":12785,"children":12786},{},[12787,12789,12794,12795,12800],{"type":40,"value":12788},"N’essayez pas de rendre votre projet inutilement complexe. Si vous commencez à ajouter trop d’interfaces et de couches abstraites, vous risquez de rendre votre code plus difficile à comprendre et à maintenir. Gardez-le ",{"type":30,"tag":36,"props":12790,"children":12791},{},[12792],{"type":40,"value":12793},"simple",{"type":40,"value":8328},{"type":30,"tag":36,"props":12796,"children":12797},{},[12798],{"type":40,"value":12799},"pragmatique",{"type":40,"value":1179},{"type":30,"tag":964,"props":12802,"children":12803},{},[12804],{"type":30,"tag":43,"props":12805,"children":12806},{},[12807,12811],{"type":30,"tag":36,"props":12808,"children":12809},{},[12810],{"type":40,"value":12646},{"type":40,"value":12812}," Ne tombez pas dans le piège de la sur-ingénierie. Si vous avez un projet simple, n'ajoutez pas de couches abstraites inutiles. L'architecture hexagonale doit vous aider, pas vous compliquer la vie.",{"type":30,"tag":116,"props":12814,"children":12816},{"id":12815},"_2-respecter-les-principes-solid",[12817,12818],{"type":40,"value":268},{"type":30,"tag":36,"props":12819,"children":12820},{},[12821],{"type":40,"value":12822},"Respecter les principes SOLID",{"type":30,"tag":43,"props":12824,"children":12825},{},[12826,12828,12834,12836,12841,12842,12847,12849,12854],{"type":40,"value":12827},"L’architecture hexagonale s’intègre parfaitement dans les ",{"type":30,"tag":75,"props":12829,"children":12831},{"href":12830},"/fr/architecture-craft/principes-solid-java-exemples",[12832],{"type":40,"value":12833},"principes SOLID",{"type":40,"value":12835},", notamment en respectant le principe de ",{"type":30,"tag":36,"props":12837,"children":12838},{},[12839],{"type":40,"value":12840},"responsabilité unique",{"type":40,"value":779},{"type":30,"tag":36,"props":12843,"children":12844},{},[12845],{"type":40,"value":12846},"inversion des dépendances",{"type":40,"value":12848},". Assurez-vous que chaque composant a une responsabilité bien définie et que le domaine ne dépend jamais directement de l’infrastructure. Pour aller plus loin sur la règle de dépendance et la direction des flèches dans l’architecture, les ",{"type":30,"tag":75,"props":12850,"children":12851},{"href":2274},[12852],{"type":40,"value":12853},"3 règles de la Clean Architecture",{"type":40,"value":12855}," sont complémentaires.",{"type":30,"tag":116,"props":12857,"children":12859},{"id":12858},"_3-kiss-keep-it-simple-stupid",[12860,12861],{"type":40,"value":293},{"type":30,"tag":36,"props":12862,"children":12863},{},[12864],{"type":40,"value":12865},"KISS : Keep It Simple, Stupid",{"type":30,"tag":43,"props":12867,"children":12868},{},[12869,12871,12876],{"type":40,"value":12870},"Restez simple. L’objectif est de ",{"type":30,"tag":36,"props":12872,"children":12873},{},[12874],{"type":40,"value":12875},"simplifier",{"type":40,"value":12877}," la maintenance et les changements dans le projet, pas de compliquer inutilement les choses. Si votre projet est petit, ne vous forcez pas à utiliser l’architecture hexagonale partout. Elle doit apporter une valeur ajoutée.",{"type":30,"tag":964,"props":12879,"children":12880},{},[12881],{"type":30,"tag":43,"props":12882,"children":12883},{},[12884,12888],{"type":30,"tag":36,"props":12885,"children":12886},{},[12887],{"type":40,"value":11304},{"type":40,"value":12889}," Adoptez le principe KISS. L’architecture hexagonale est puissante, mais elle doit rester un outil au service de la simplicité et de la maintenabilité, et non un fardeau architectural.",{"type":30,"tag":84,"props":12891,"children":12892},{},[],{"type":30,"tag":31,"props":12894,"children":12896},{"id":12895},"faq-sur-larchitecture-hexagonale",[12897],{"type":30,"tag":36,"props":12898,"children":12899},{},[12900],{"type":40,"value":12901},"FAQ sur l’architecture hexagonale",{"type":30,"tag":530,"props":12903,"children":12904},{},[12905,12910],{"type":30,"tag":534,"props":12906,"children":12907},{},[12908],{"type":40,"value":12909},"1. L’architecture hexagonale est-elle adaptée à tous les projets ?",{"type":30,"tag":43,"props":12911,"children":12912},{},[12913],{"type":40,"value":12914},"Pas nécessairement. Pour les petits projets ou les prototypes simples, elle peut être surdimensionnée. Cependant, elle devient très utile pour des projets plus complexes, ou ceux qui nécessitent de fréquents changements de technologie.",{"type":30,"tag":530,"props":12916,"children":12917},{},[12918,12923],{"type":30,"tag":534,"props":12919,"children":12920},{},[12921],{"type":40,"value":12922},"2. Comment commencer dans un projet existant ?",{"type":30,"tag":43,"props":12924,"children":12925},{},[12926],{"type":40,"value":12927},"Vous pouvez commencer progressivement en appliquant les principes hexagonaux à de nouvelles fonctionnalités ou modules, tout en refactorisant doucement l’existant. Cela évite de tout casser d’un coup.",{"type":30,"tag":530,"props":12929,"children":12930},{},[12931,12936],{"type":30,"tag":534,"props":12932,"children":12933},{},[12934],{"type":40,"value":12935},"3. Est-ce que ça complique trop les petites applications ?",{"type":30,"tag":43,"props":12937,"children":12938},{},[12939],{"type":40,"value":12940},"Cela dépend de l’application. Si vous prévoyez des évolutions futures importantes, l’architecture hexagonale peut aider dès le début. Pour des projets très simples, une architecture en couches peut parfois suffire.",{"type":30,"tag":530,"props":12942,"children":12943},{},[12944,12949],{"type":30,"tag":534,"props":12945,"children":12946},{},[12947],{"type":40,"value":12948},"4. Quels outils Java facilitent la mise en œuvre ?",{"type":30,"tag":43,"props":12950,"children":12951},{},[12952,12954,12959,12961,12966,12967,12972],{"type":40,"value":12953},"Java propose de nombreux frameworks qui s’intègrent bien avec cette architecture. ",{"type":30,"tag":36,"props":12955,"children":12956},{},[12957],{"type":40,"value":12958},"Spring",{"type":40,"value":12960}," est souvent utilisé pour implémenter les ports et adaptateurs, en particulier avec sa gestion des dépendances. Les tests peuvent être facilement gérés avec ",{"type":30,"tag":36,"props":12962,"children":12963},{},[12964],{"type":40,"value":12965},"JUnit",{"type":40,"value":8328},{"type":30,"tag":36,"props":12968,"children":12969},{},[12970],{"type":40,"value":12971},"Mockito",{"type":40,"value":1179},{"type":30,"tag":211,"props":12974,"children":12977},{"cta":12975,"href":639,"title":12976,"type":641},"Accéder à l'assessment gratuit →","Ressource gratuite : Votre équipe livre-t-elle aussi vite qu'elle le pourrait ?",[12978],{"type":30,"tag":43,"props":12979,"children":12980},{},[12981],{"type":40,"value":12982},"30 questions, 5 dimensions, score sur 100. Mesurez la maturité engineering de votre équipe avec le benchmark utilisé dans des DSI de 50 à 800+ développeurs — et identifiez vos 3 chantiers prioritaires.",{"type":30,"tag":6456,"props":12984,"children":12985},{},[12986],{"type":40,"value":6460},{"title":8,"searchDepth":675,"depth":675,"links":12988},[12989,12990,12995,13003,13011],{"id":11178,"depth":675,"text":11184},{"id":11210,"depth":675,"text":11216,"children":12991},[12992,12993,12994],{"id":11238,"depth":681,"text":11244},{"id":11252,"depth":681,"text":11258},{"id":11309,"depth":681,"text":11315},{"id":12674,"depth":675,"text":12680,"children":12996},[12997,12999,13001],{"id":12688,"depth":681,"text":12998},"1. Modularité et testabilité",{"id":12729,"depth":681,"text":13000},"2. Adaptabilité et flexibilité",{"id":12744,"depth":681,"text":13002},"3. Simplicité des changements dans l'infrastructure",{"id":12762,"depth":675,"text":12768,"children":13004},[13005,13007,13009],{"id":12776,"depth":681,"text":13006},"1. Ne pas sur-ingénier le projet",{"id":12815,"depth":681,"text":13008},"2. Respecter les principes SOLID",{"id":12858,"depth":681,"text":13010},"3. KISS : Keep It Simple, Stupid",{"id":12895,"depth":675,"text":12901},"content:fr:architecture-craft:architecture-hexagonale-java-exemples-bonnes-pratiques.md","fr/architecture-craft/architecture-hexagonale-java-exemples-bonnes-pratiques.md","fr/architecture-craft/architecture-hexagonale-java-exemples-bonnes-pratiques",{"_path":13016,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":13017,"description":13018,"id":10384,"date":13019,"listed":13,"nocomments":7,"hidden":7,"categories":13020,"tags":13021,"--cover":13023,"readingTime":13024,"body":13029,"_type":709,"_id":16746,"_source":711,"_file":16747,"_stem":16748,"_extension":714},"/fr/dette-technique/principe-kiss-bonnes-pratiques-java","Appliquer le principe KISS en développement logiciel, Bonnes pratiques et exemples Java","Découvrez comment appliquer le principe KISS (Keep It Simple, Stupid) pour écrire du code simple et de qualité. Apprenez des bonnes pratiques de Software Craftsmanship...","2024-08-06",[6],[13022,726],"Clean code","covers/articles/principe-kiss.jpg",{"text":13025,"minutes":13026,"time":13027,"words":13028},"12 min read",11.355,681300,2271,{"type":27,"children":13030,"toc":16725},[13031,13037,13042,13060,13084,13087,13093,13098,13109,13115,13120,13125,13131,13142,13147,13150,13159,13165,13182,13193,13199,13204,13212,13662,13674,13680,13685,13691,13710,13718,13875,13881,13900,13906,13917,13920,13926,13937,13943,13948,14308,14319,14629,14634,14640,14645,14883,14888,15013,15018,15024,15029,15402,15413,15597,15602,15608,15613,16011,16022,16576,16581,16584,16590,16609,16628,16641,16660,16673,16692,16695,16712,16721],{"type":30,"tag":31,"props":13032,"children":13034},{"id":13033},"appliquer-le-principe-kiss-en-développement-logiciel-bonnes-pratiques-et-exemples-java",[13035],{"type":40,"value":13036},"Appliquer le principe KISS en développement logiciel : Bonnes pratiques et exemples Java",{"type":30,"tag":43,"props":13038,"children":13039},{},[13040],{"type":40,"value":13041},"Si vous avez déjà travaillé sur un projet de développement qui, au départ, semblait simple mais qui est rapidement devenu un cauchemar à maintenir, vous n’êtes pas seul. De nombreux développeurs se retrouvent dans cette situation : la complexité du code s'accumule et tout devient un labyrinthe. Les erreurs sont plus difficiles à identifier, les bugs se multiplient, et chaque nouvelle fonctionnalité à ajouter devient un vrai casse-tête.",{"type":30,"tag":43,"props":13043,"children":13044},{},[13045,13047,13052,13054,13058],{"type":40,"value":13046},"C’est là que le principe ",{"type":30,"tag":36,"props":13048,"children":13049},{},[13050],{"type":40,"value":13051},"KISS",{"type":40,"value":13053}," intervient. ",{"type":30,"tag":36,"props":13055,"children":13056},{},[13057],{"type":40,"value":13051},{"type":40,"value":13059},", qui signifie \"Keep It Simple, Stupid\" (ou \"Gardez-le simple, imbécile\" en français), est un principe clé dans le développement logiciel qui nous rappelle que la simplicité est souvent la meilleure approche. Mais ne vous y trompez pas : il ne s’agit pas de simplifier à outrance et de sacrifier la performance ou la qualité. Il s’agit plutôt de garder un code clair, facile à comprendre, à maintenir et à faire évoluer.",{"type":30,"tag":43,"props":13061,"children":13062},{},[13063,13065,13069,13071,13076,13078,13082],{"type":40,"value":13064},"En tant que développeur, j’ai fait l’erreur, plus d’une fois, de rendre mes projets plus compliqués qu’ils ne devaient l’être. Je vais vous montrer comment j’ai appris à appliquer ",{"type":30,"tag":36,"props":13066,"children":13067},{},[13068],{"type":40,"value":13051},{"type":40,"value":13070}," pour écrire du code de meilleure qualité, en m’appuyant sur les principes de Robert C. Martin formalisés dans ",{"type":30,"tag":872,"props":13072,"children":13073},{},[13074],{"type":40,"value":13075},"Clean Code",{"type":40,"value":13077},". Vous trouverez aussi quelques bonnes pratiques de ",{"type":30,"tag":36,"props":13079,"children":13080},{},[13081],{"type":40,"value":80},{"type":40,"value":13083},", et des exemples concrets en Java pour vous aider à simplifier votre code sans compromettre son efficacité. Dans mes missions chez des grandes DSI, ce point est systématiquement sous-estimé : la complexité inutile se traduit concrètement par des onboardings rallongés, des bugs en cascade et des coûts de maintenance qui explosent.",{"type":30,"tag":84,"props":13085,"children":13086},{},[],{"type":30,"tag":31,"props":13088,"children":13090},{"id":13089},"pourquoi-la-simplicité-ne-signifie-pas-médiocrité",[13091],{"type":40,"value":13092},"Pourquoi la simplicité ne signifie pas médiocrité",{"type":30,"tag":43,"props":13094,"children":13095},{},[13096],{"type":40,"value":13097},"Beaucoup de développeurs associent parfois la simplicité à de la médiocrité ou à un manque de sophistication. Pourtant, écrire du code simple ne signifie en aucun cas qu'il est moins performant ou moins réfléchi. En fait, il est souvent plus difficile d'écrire un code simple que d'ajouter une couche de complexité inutile. Pourquoi ? Parce que la simplicité demande une réflexion plus approfondie et une meilleure compréhension du problème que vous essayez de résoudre.",{"type":30,"tag":43,"props":13099,"children":13100},{},[13101,13103,13107],{"type":40,"value":13102},"L'idée derrière ",{"type":30,"tag":36,"props":13104,"children":13105},{},[13106],{"type":40,"value":13051},{"type":40,"value":13108}," est de toujours se demander : \"Comment puis-je résoudre ce problème de la manière la plus directe possible ?\" Bien sûr, il y a des moments où une certaine complexité est justifiée. Par exemple, lorsque vous travaillez avec des algorithmes de performance ou des systèmes distribués, la simplicité peut ne pas être immédiate. Mais même dans ces cas-là, chercher à éliminer les éléments superflus dans votre code peut vous éviter bien des ennuis par la suite.",{"type":30,"tag":116,"props":13110,"children":13112},{"id":13111},"léquilibre-entre-simplicité-et-performance",[13113],{"type":40,"value":13114},"L'équilibre entre simplicité et performance",{"type":30,"tag":43,"props":13116,"children":13117},{},[13118],{"type":40,"value":13119},"Vous vous demandez peut-être : \"D'accord, mais la simplicité ne risque-t-elle pas de rendre mon code moins performant ?\" Pas forcément. En réalité, un code simple est souvent plus performant à long terme, car il sera plus facile à maintenir, à optimiser et à déboguer.",{"type":30,"tag":43,"props":13121,"children":13122},{},[13123],{"type":40,"value":13124},"Prenons un exemple concret en Java : imaginez que vous avez écrit un système avec plusieurs classes qui interagissent entre elles. Cela peut sembler être une bonne approche en raison de la séparation des responsabilités, mais si ces classes ne sont pas vraiment nécessaires, vous compliquez inutilement votre code. En appliquant KISS, vous pourriez fusionner certaines de ces classes ou réduire le nombre d’interactions, ce qui simplifierait le code tout en le rendant plus facile à optimiser et à tester.",{"type":30,"tag":116,"props":13126,"children":13128},{"id":13127},"cas-où-la-complexité-est-justifiée",[13129],{"type":40,"value":13130},"Cas où la complexité est justifiée",{"type":30,"tag":43,"props":13132,"children":13133},{},[13134,13136,13140],{"type":40,"value":13135},"Il y aura des moments où la complexité sera inévitable. Par exemple, si vous devez implémenter un algorithme avancé ou gérer des systèmes interconnectés, une certaine complexité sera nécessaire. Cependant, même dans ces cas, vous pouvez appliquer ",{"type":30,"tag":36,"props":13137,"children":13138},{},[13139],{"type":40,"value":13051},{"type":40,"value":13141}," pour vous assurer que chaque morceau de code complexe est justifié et ne contient pas de logique superflue.",{"type":30,"tag":43,"props":13143,"children":13144},{},[13145],{"type":40,"value":13146},"Une astuce consiste à diviser la complexité en plusieurs petites parties simples et compréhensibles. Ainsi, chaque partie reste gérable, même si l’ensemble du projet reste complexe dans son ensemble.",{"type":30,"tag":84,"props":13148,"children":13149},{},[],{"type":30,"tag":211,"props":13151,"children":13153},{"cta":213,"href":214,"title":13152,"type":216},"Votre équipe sur-ingénière et ralentit tout le monde ?",[13154],{"type":30,"tag":43,"props":13155,"children":13156},{},[13157],{"type":40,"value":13158},"L’architecture est si complexe que les nouvelles recrues mettent des semaines à être opérationnelles, et chaque décision technique crée plus de frictions que de valeur. Réservons 30 minutes pour identifier les sources de complexité inutile et retrouver la fluidité de livraison.",{"type":30,"tag":31,"props":13160,"children":13162},{"id":13161},"les-bonnes-pratiques-du-software-craftsmanship",[13163],{"type":40,"value":13164},"Les bonnes pratiques du Software Craftsmanship",{"type":30,"tag":43,"props":13166,"children":13167},{},[13168,13169,13174,13176,13180],{"type":40,"value":143},{"type":30,"tag":36,"props":13170,"children":13171},{},[13172],{"type":40,"value":13173},"Software Craftsmanship",{"type":40,"value":13175}," est une approche qui valorise la qualité et l'excellence dans l'écriture de logiciels. Il ne s'agit pas simplement de faire fonctionner un programme, mais de créer du code robuste, maintenable et évolutif. Le principe ",{"type":30,"tag":36,"props":13177,"children":13178},{},[13179],{"type":40,"value":13051},{"type":40,"value":13181}," s'intègre parfaitement dans cette démarche, car un code simple est souvent synonyme de qualité et de longévité.",{"type":30,"tag":43,"props":13183,"children":13184},{},[13185,13187,13191],{"type":40,"value":13186},"Voici quelques bonnes pratiques du ",{"type":30,"tag":36,"props":13188,"children":13189},{},[13190],{"type":40,"value":13173},{"type":40,"value":13192}," qui vous aideront à écrire du code de meilleure qualité, tout en respectant le principe KISS.",{"type":30,"tag":116,"props":13194,"children":13196},{"id":13195},"_1-respecter-la-lisibilité",[13197],{"type":40,"value":13198},"1. Respecter la lisibilité",{"type":30,"tag":43,"props":13200,"children":13201},{},[13202],{"type":40,"value":13203},"Un code lisible est un code que d'autres développeurs (et vous-même) peuvent facilement comprendre. La lisibilité ne se limite pas à bien nommer vos variables et méthodes, elle concerne également la structure du code, la manière dont vous organisez vos blocs logiques et la simplicité de votre logique.",{"type":30,"tag":43,"props":13205,"children":13206},{},[13207],{"type":30,"tag":36,"props":13208,"children":13209},{},[13210],{"type":40,"value":13211},"Exemple en Java :",{"type":30,"tag":1035,"props":13213,"children":13215},{"className":1039,"code":13214,"language":1038,"meta":8,"style":8},"// Code moins lisible\npublic void processData(String data) {\n    for (int i = 0; i \u003C data.length(); i++) {\n        if (data.charAt(i) == 'A') {\n            // ...\n        }\n    }\n}\n\n// Code plus lisible en appliquant KISS\npublic void processData(String data) {\n    for (char character : data.toCharArray()) {\n        if (isCharacterValid(character)) {\n            // ...\n        }\n    }\n}\n\nprivate boolean isCharacterValid(char character) {\n    return character == 'A';\n}\n",[13216],{"type":30,"tag":1042,"props":13217,"children":13218},{"__ignoreMap":8},[13219,13227,13264,13343,13399,13407,13414,13421,13428,13435,13443,13478,13525,13558,13565,13572,13579,13586,13593,13632,13655],{"type":30,"tag":1046,"props":13220,"children":13221},{"class":1048,"line":1049},[13222],{"type":30,"tag":1046,"props":13223,"children":13224},{"style":3961},[13225],{"type":40,"value":13226},"// Code moins lisible\n",{"type":30,"tag":1046,"props":13228,"children":13229},{"class":1048,"line":675},[13230,13234,13238,13243,13247,13251,13256,13260],{"type":30,"tag":1046,"props":13231,"children":13232},{"style":1053},[13233],{"type":40,"value":1056},{"type":30,"tag":1046,"props":13235,"children":13236},{"style":1053},[13237],{"type":40,"value":1135},{"type":30,"tag":1046,"props":13239,"children":13240},{"style":1138},[13241],{"type":40,"value":13242}," processData",{"type":30,"tag":1046,"props":13244,"children":13245},{"style":1070},[13246],{"type":40,"value":1146},{"type":30,"tag":1046,"props":13248,"children":13249},{"style":1084},[13250],{"type":40,"value":2882},{"type":30,"tag":1046,"props":13252,"children":13253},{"style":1105},[13254],{"type":40,"value":13255}," data",{"type":30,"tag":1046,"props":13257,"children":13258},{"style":1070},[13259],{"type":40,"value":1161},{"type":30,"tag":1046,"props":13261,"children":13262},{"style":1070},[13263],{"type":40,"value":1073},{"type":30,"tag":1046,"props":13265,"children":13266},{"class":1048,"line":681},[13267,13272,13276,13280,13285,13289,13294,13299,13303,13307,13311,13315,13320,13325,13330,13335,13339],{"type":30,"tag":1046,"props":13268,"children":13269},{"style":1053},[13270],{"type":40,"value":13271},"    for",{"type":30,"tag":1046,"props":13273,"children":13274},{"style":1070},[13275],{"type":40,"value":11861},{"type":30,"tag":1046,"props":13277,"children":13278},{"style":1053},[13279],{"type":40,"value":10323},{"type":30,"tag":1046,"props":13281,"children":13282},{"style":1105},[13283],{"type":40,"value":13284}," i ",{"type":30,"tag":1046,"props":13286,"children":13287},{"style":1795},[13288],{"type":40,"value":1798},{"type":30,"tag":1046,"props":13290,"children":13291},{"style":6886},[13292],{"type":40,"value":13293}," 0",{"type":30,"tag":1046,"props":13295,"children":13296},{"style":1070},[13297],{"type":40,"value":13298},";",{"type":30,"tag":1046,"props":13300,"children":13301},{"style":1105},[13302],{"type":40,"value":13284},{"type":30,"tag":1046,"props":13304,"children":13305},{"style":1795},[13306],{"type":40,"value":1092},{"type":30,"tag":1046,"props":13308,"children":13309},{"style":1105},[13310],{"type":40,"value":13255},{"type":30,"tag":1046,"props":13312,"children":13313},{"style":1070},[13314],{"type":40,"value":1179},{"type":30,"tag":1046,"props":13316,"children":13317},{"style":1138},[13318],{"type":40,"value":13319},"length",{"type":30,"tag":1046,"props":13321,"children":13322},{"style":1070},[13323],{"type":40,"value":13324},"();",{"type":30,"tag":1046,"props":13326,"children":13327},{"style":1105},[13328],{"type":40,"value":13329}," i",{"type":30,"tag":1046,"props":13331,"children":13332},{"style":1795},[13333],{"type":40,"value":13334},"++",{"type":30,"tag":1046,"props":13336,"children":13337},{"style":1070},[13338],{"type":40,"value":1161},{"type":30,"tag":1046,"props":13340,"children":13341},{"style":1070},[13342],{"type":40,"value":1073},{"type":30,"tag":1046,"props":13344,"children":13345},{"class":1048,"line":1124},[13346,13350,13354,13359,13363,13368,13372,13377,13381,13386,13391,13395],{"type":30,"tag":1046,"props":13347,"children":13348},{"style":1053},[13349],{"type":40,"value":11856},{"type":30,"tag":1046,"props":13351,"children":13352},{"style":1070},[13353],{"type":40,"value":11861},{"type":30,"tag":1046,"props":13355,"children":13356},{"style":1105},[13357],{"type":40,"value":13358},"data",{"type":30,"tag":1046,"props":13360,"children":13361},{"style":1070},[13362],{"type":40,"value":1179},{"type":30,"tag":1046,"props":13364,"children":13365},{"style":1138},[13366],{"type":40,"value":13367},"charAt",{"type":30,"tag":1046,"props":13369,"children":13370},{"style":1070},[13371],{"type":40,"value":1146},{"type":30,"tag":1046,"props":13373,"children":13374},{"style":1105},[13375],{"type":40,"value":13376},"i",{"type":30,"tag":1046,"props":13378,"children":13379},{"style":1070},[13380],{"type":40,"value":1161},{"type":30,"tag":1046,"props":13382,"children":13383},{"style":1795},[13384],{"type":40,"value":13385}," ==",{"type":30,"tag":1046,"props":13387,"children":13388},{"style":1675},[13389],{"type":40,"value":13390}," 'A'",{"type":30,"tag":1046,"props":13392,"children":13393},{"style":1070},[13394],{"type":40,"value":1161},{"type":30,"tag":1046,"props":13396,"children":13397},{"style":1070},[13398],{"type":40,"value":1073},{"type":30,"tag":1046,"props":13400,"children":13401},{"class":1048,"line":1168},[13402],{"type":30,"tag":1046,"props":13403,"children":13404},{"style":3961},[13405],{"type":40,"value":13406},"            // ...\n",{"type":30,"tag":1046,"props":13408,"children":13409},{"class":1048,"line":1201},[13410],{"type":30,"tag":1046,"props":13411,"children":13412},{"style":1070},[13413],{"type":40,"value":11922},{"type":30,"tag":1046,"props":13415,"children":13416},{"class":1048,"line":1210},[13417],{"type":30,"tag":1046,"props":13418,"children":13419},{"style":1070},[13420],{"type":40,"value":1207},{"type":30,"tag":1046,"props":13422,"children":13423},{"class":1048,"line":1218},[13424],{"type":30,"tag":1046,"props":13425,"children":13426},{"style":1070},[13427],{"type":40,"value":1423},{"type":30,"tag":1046,"props":13429,"children":13430},{"class":1048,"line":1255},[13431],{"type":30,"tag":1046,"props":13432,"children":13433},{"emptyLinePlaceholder":13},[13434],{"type":40,"value":1121},{"type":30,"tag":1046,"props":13436,"children":13437},{"class":1048,"line":1284},[13438],{"type":30,"tag":1046,"props":13439,"children":13440},{"style":3961},[13441],{"type":40,"value":13442},"// Code plus lisible en appliquant KISS\n",{"type":30,"tag":1046,"props":13444,"children":13445},{"class":1048,"line":1292},[13446,13450,13454,13458,13462,13466,13470,13474],{"type":30,"tag":1046,"props":13447,"children":13448},{"style":1053},[13449],{"type":40,"value":1056},{"type":30,"tag":1046,"props":13451,"children":13452},{"style":1053},[13453],{"type":40,"value":1135},{"type":30,"tag":1046,"props":13455,"children":13456},{"style":1138},[13457],{"type":40,"value":13242},{"type":30,"tag":1046,"props":13459,"children":13460},{"style":1070},[13461],{"type":40,"value":1146},{"type":30,"tag":1046,"props":13463,"children":13464},{"style":1084},[13465],{"type":40,"value":2882},{"type":30,"tag":1046,"props":13467,"children":13468},{"style":1105},[13469],{"type":40,"value":13255},{"type":30,"tag":1046,"props":13471,"children":13472},{"style":1070},[13473],{"type":40,"value":1161},{"type":30,"tag":1046,"props":13475,"children":13476},{"style":1070},[13477],{"type":40,"value":1073},{"type":30,"tag":1046,"props":13479,"children":13480},{"class":1048,"line":1300},[13481,13485,13489,13494,13499,13503,13507,13511,13516,13521],{"type":30,"tag":1046,"props":13482,"children":13483},{"style":1053},[13484],{"type":40,"value":13271},{"type":30,"tag":1046,"props":13486,"children":13487},{"style":1070},[13488],{"type":40,"value":11861},{"type":30,"tag":1046,"props":13490,"children":13491},{"style":1053},[13492],{"type":40,"value":13493},"char",{"type":30,"tag":1046,"props":13495,"children":13496},{"style":1105},[13497],{"type":40,"value":13498}," character ",{"type":30,"tag":1046,"props":13500,"children":13501},{"style":1053},[13502],{"type":40,"value":8498},{"type":30,"tag":1046,"props":13504,"children":13505},{"style":1105},[13506],{"type":40,"value":13255},{"type":30,"tag":1046,"props":13508,"children":13509},{"style":1070},[13510],{"type":40,"value":1179},{"type":30,"tag":1046,"props":13512,"children":13513},{"style":1138},[13514],{"type":40,"value":13515},"toCharArray",{"type":30,"tag":1046,"props":13517,"children":13518},{"style":1070},[13519],{"type":40,"value":13520},"())",{"type":30,"tag":1046,"props":13522,"children":13523},{"style":1070},[13524],{"type":40,"value":1073},{"type":30,"tag":1046,"props":13526,"children":13527},{"class":1048,"line":1327},[13528,13532,13536,13541,13545,13550,13554],{"type":30,"tag":1046,"props":13529,"children":13530},{"style":1053},[13531],{"type":40,"value":11856},{"type":30,"tag":1046,"props":13533,"children":13534},{"style":1070},[13535],{"type":40,"value":11861},{"type":30,"tag":1046,"props":13537,"children":13538},{"style":1138},[13539],{"type":40,"value":13540},"isCharacterValid",{"type":30,"tag":1046,"props":13542,"children":13543},{"style":1070},[13544],{"type":40,"value":1146},{"type":30,"tag":1046,"props":13546,"children":13547},{"style":1105},[13548],{"type":40,"value":13549},"character",{"type":30,"tag":1046,"props":13551,"children":13552},{"style":1070},[13553],{"type":40,"value":9913},{"type":30,"tag":1046,"props":13555,"children":13556},{"style":1070},[13557],{"type":40,"value":1073},{"type":30,"tag":1046,"props":13559,"children":13560},{"class":1048,"line":1354},[13561],{"type":30,"tag":1046,"props":13562,"children":13563},{"style":3961},[13564],{"type":40,"value":13406},{"type":30,"tag":1046,"props":13566,"children":13567},{"class":1048,"line":1391},[13568],{"type":30,"tag":1046,"props":13569,"children":13570},{"style":1070},[13571],{"type":40,"value":11922},{"type":30,"tag":1046,"props":13573,"children":13574},{"class":1048,"line":1409},[13575],{"type":30,"tag":1046,"props":13576,"children":13577},{"style":1070},[13578],{"type":40,"value":1207},{"type":30,"tag":1046,"props":13580,"children":13581},{"class":1048,"line":1417},[13582],{"type":30,"tag":1046,"props":13583,"children":13584},{"style":1070},[13585],{"type":40,"value":1423},{"type":30,"tag":1046,"props":13587,"children":13588},{"class":1048,"line":2023},[13589],{"type":30,"tag":1046,"props":13590,"children":13591},{"emptyLinePlaceholder":13},[13592],{"type":40,"value":1121},{"type":30,"tag":1046,"props":13594,"children":13595},{"class":1048,"line":2083},[13596,13601,13606,13611,13615,13619,13624,13628],{"type":30,"tag":1046,"props":13597,"children":13598},{"style":1053},[13599],{"type":40,"value":13600},"private",{"type":30,"tag":1046,"props":13602,"children":13603},{"style":1053},[13604],{"type":40,"value":13605}," boolean",{"type":30,"tag":1046,"props":13607,"children":13608},{"style":1138},[13609],{"type":40,"value":13610}," isCharacterValid",{"type":30,"tag":1046,"props":13612,"children":13613},{"style":1070},[13614],{"type":40,"value":1146},{"type":30,"tag":1046,"props":13616,"children":13617},{"style":1053},[13618],{"type":40,"value":13493},{"type":30,"tag":1046,"props":13620,"children":13621},{"style":1105},[13622],{"type":40,"value":13623}," character",{"type":30,"tag":1046,"props":13625,"children":13626},{"style":1070},[13627],{"type":40,"value":1161},{"type":30,"tag":1046,"props":13629,"children":13630},{"style":1070},[13631],{"type":40,"value":1073},{"type":30,"tag":1046,"props":13633,"children":13634},{"class":1048,"line":2126},[13635,13639,13643,13647,13651],{"type":30,"tag":1046,"props":13636,"children":13637},{"style":1053},[13638],{"type":40,"value":7894},{"type":30,"tag":1046,"props":13640,"children":13641},{"style":1105},[13642],{"type":40,"value":13498},{"type":30,"tag":1046,"props":13644,"children":13645},{"style":1795},[13646],{"type":40,"value":11871},{"type":30,"tag":1046,"props":13648,"children":13649},{"style":1675},[13650],{"type":40,"value":13390},{"type":30,"tag":1046,"props":13652,"children":13653},{"style":1070},[13654],{"type":40,"value":1113},{"type":30,"tag":1046,"props":13656,"children":13657},{"class":1048,"line":2159},[13658],{"type":30,"tag":1046,"props":13659,"children":13660},{"style":1070},[13661],{"type":40,"value":1423},{"type":30,"tag":43,"props":13663,"children":13664},{},[13665,13667,13672],{"type":40,"value":13666},"Dans cet exemple, le second morceau de code est plus lisible et respectueux du principe KISS. La logique est déléguée à une méthode claire et descriptive (",{"type":30,"tag":1042,"props":13668,"children":13670},{"className":13669},[],[13671],{"type":40,"value":13540},{"type":40,"value":13673},"), rendant l'ensemble du processus plus facile à comprendre et à maintenir.",{"type":30,"tag":116,"props":13675,"children":13677},{"id":13676},"_2-minimiser-les-dépendances",[13678],{"type":40,"value":13679},"2. Minimiser les dépendances",{"type":30,"tag":43,"props":13681,"children":13682},{},[13683],{"type":40,"value":13684},"Plus votre code dépend de bibliothèques ou de modules externes, plus il devient complexe à maintenir. Il est souvent préférable de limiter ces dépendances, surtout lorsqu'elles ne sont pas absolument nécessaires. Cela permet également de réduire le risque de conflits de version ou d'incompatibilités dans le futur.",{"type":30,"tag":116,"props":13686,"children":13688},{"id":13687},"_3-écrire-des-tests-automatisés",[13689],{"type":40,"value":13690},"3. Écrire des tests automatisés",{"type":30,"tag":43,"props":13692,"children":13693},{},[13694,13696,13702,13704,13708],{"type":40,"value":13695},"Les ",{"type":30,"tag":75,"props":13697,"children":13699},{"href":13698},"/fr/dette-technique/tests-integration-legacy-pieges",[13700],{"type":40,"value":13701},"tests unitaires et d'intégration",{"type":40,"value":13703}," font partie intégrante du ",{"type":30,"tag":36,"props":13705,"children":13706},{},[13707],{"type":40,"value":13173},{"type":40,"value":13709},". Un bon test est aussi simple que le code qu'il teste. Le principe KISS s'applique également ici : écrivez des tests qui sont faciles à comprendre et à maintenir.",{"type":30,"tag":43,"props":13711,"children":13712},{},[13713],{"type":30,"tag":36,"props":13714,"children":13715},{},[13716],{"type":40,"value":13717},"Exemple de test simple en Java avec JUnit :",{"type":30,"tag":1035,"props":13719,"children":13721},{"className":1039,"code":13720,"language":1038,"meta":8,"style":8},"@Test\npublic void shouldReturnTrueWhenCharacterIsValid() {\n    assertTrue(isCharacterValid('A'));\n}\n\n@Test\npublic void shouldReturnFalseWhenCharacterIsInvalid() {\n    assertFalse(isCharacterValid('B'));\n}\n",[13722],{"type":30,"tag":1042,"props":13723,"children":13724},{"__ignoreMap":8},[13725,13737,13761,13790,13797,13804,13815,13839,13868],{"type":30,"tag":1046,"props":13726,"children":13727},{"class":1048,"line":1049},[13728,13732],{"type":30,"tag":1046,"props":13729,"children":13730},{"style":1647},[13731],{"type":40,"value":1650},{"type":30,"tag":1046,"props":13733,"children":13734},{"style":1653},[13735],{"type":40,"value":13736},"Test\n",{"type":30,"tag":1046,"props":13738,"children":13739},{"class":1048,"line":675},[13740,13744,13748,13753,13757],{"type":30,"tag":1046,"props":13741,"children":13742},{"style":1053},[13743],{"type":40,"value":1056},{"type":30,"tag":1046,"props":13745,"children":13746},{"style":1053},[13747],{"type":40,"value":1135},{"type":30,"tag":1046,"props":13749,"children":13750},{"style":1138},[13751],{"type":40,"value":13752}," shouldReturnTrueWhenCharacterIsValid",{"type":30,"tag":1046,"props":13754,"children":13755},{"style":1070},[13756],{"type":40,"value":1320},{"type":30,"tag":1046,"props":13758,"children":13759},{"style":1070},[13760],{"type":40,"value":1073},{"type":30,"tag":1046,"props":13762,"children":13763},{"class":1048,"line":681},[13764,13769,13773,13777,13781,13786],{"type":30,"tag":1046,"props":13765,"children":13766},{"style":1138},[13767],{"type":40,"value":13768},"    assertTrue",{"type":30,"tag":1046,"props":13770,"children":13771},{"style":1070},[13772],{"type":40,"value":1146},{"type":30,"tag":1046,"props":13774,"children":13775},{"style":1138},[13776],{"type":40,"value":13540},{"type":30,"tag":1046,"props":13778,"children":13779},{"style":1070},[13780],{"type":40,"value":1146},{"type":30,"tag":1046,"props":13782,"children":13783},{"style":1675},[13784],{"type":40,"value":13785},"'A'",{"type":30,"tag":1046,"props":13787,"children":13788},{"style":1070},[13789],{"type":40,"value":4457},{"type":30,"tag":1046,"props":13791,"children":13792},{"class":1048,"line":1124},[13793],{"type":30,"tag":1046,"props":13794,"children":13795},{"style":1070},[13796],{"type":40,"value":1423},{"type":30,"tag":1046,"props":13798,"children":13799},{"class":1048,"line":1168},[13800],{"type":30,"tag":1046,"props":13801,"children":13802},{"emptyLinePlaceholder":13},[13803],{"type":40,"value":1121},{"type":30,"tag":1046,"props":13805,"children":13806},{"class":1048,"line":1201},[13807,13811],{"type":30,"tag":1046,"props":13808,"children":13809},{"style":1647},[13810],{"type":40,"value":1650},{"type":30,"tag":1046,"props":13812,"children":13813},{"style":1653},[13814],{"type":40,"value":13736},{"type":30,"tag":1046,"props":13816,"children":13817},{"class":1048,"line":1210},[13818,13822,13826,13831,13835],{"type":30,"tag":1046,"props":13819,"children":13820},{"style":1053},[13821],{"type":40,"value":1056},{"type":30,"tag":1046,"props":13823,"children":13824},{"style":1053},[13825],{"type":40,"value":1135},{"type":30,"tag":1046,"props":13827,"children":13828},{"style":1138},[13829],{"type":40,"value":13830}," shouldReturnFalseWhenCharacterIsInvalid",{"type":30,"tag":1046,"props":13832,"children":13833},{"style":1070},[13834],{"type":40,"value":1320},{"type":30,"tag":1046,"props":13836,"children":13837},{"style":1070},[13838],{"type":40,"value":1073},{"type":30,"tag":1046,"props":13840,"children":13841},{"class":1048,"line":1218},[13842,13847,13851,13855,13859,13864],{"type":30,"tag":1046,"props":13843,"children":13844},{"style":1138},[13845],{"type":40,"value":13846},"    assertFalse",{"type":30,"tag":1046,"props":13848,"children":13849},{"style":1070},[13850],{"type":40,"value":1146},{"type":30,"tag":1046,"props":13852,"children":13853},{"style":1138},[13854],{"type":40,"value":13540},{"type":30,"tag":1046,"props":13856,"children":13857},{"style":1070},[13858],{"type":40,"value":1146},{"type":30,"tag":1046,"props":13860,"children":13861},{"style":1675},[13862],{"type":40,"value":13863},"'B'",{"type":30,"tag":1046,"props":13865,"children":13866},{"style":1070},[13867],{"type":40,"value":4457},{"type":30,"tag":1046,"props":13869,"children":13870},{"class":1048,"line":1255},[13871],{"type":30,"tag":1046,"props":13872,"children":13873},{"style":1070},[13874],{"type":40,"value":1423},{"type":30,"tag":116,"props":13876,"children":13878},{"id":13877},"_4-refactoriser-régulièrement",[13879],{"type":40,"value":13880},"4. Refactoriser régulièrement",{"type":30,"tag":43,"props":13882,"children":13883},{},[13884,13886,13890,13892,13898],{"type":40,"value":13885},"L'un des piliers du ",{"type":30,"tag":36,"props":13887,"children":13888},{},[13889],{"type":40,"value":13173},{"type":40,"value":13891}," est la ",{"type":30,"tag":75,"props":13893,"children":13895},{"href":13894},"/fr/dette-technique/programme-refactoring-approuve-business",[13896],{"type":40,"value":13897},"refactorisation régulière",{"type":40,"value":13899}," du code. Je vous recommande de prendre le temps de revoir et d'améliorer le code existant pour le simplifier et le rendre plus efficace. Cela inclut la suppression des redondances, l'élimination des classes inutiles et la simplification des méthodes.",{"type":30,"tag":116,"props":13901,"children":13903},{"id":13902},"_5-utiliser-des-patrons-de-conception-quand-ils-sont-nécessaires",[13904],{"type":40,"value":13905},"5. Utiliser des patrons de conception quand ils sont nécessaires",{"type":30,"tag":43,"props":13907,"children":13908},{},[13909,13910,13915],{"type":40,"value":13695},{"type":30,"tag":36,"props":13911,"children":13912},{},[13913],{"type":40,"value":13914},"patrons de conception",{"type":40,"value":13916}," (design patterns) peuvent être des outils puissants pour organiser le code. Cependant, je vous recommande de ne pas les utiliser de manière excessive ou là où ils ne sont pas nécessaires. En appliquant KISS, demandez-vous toujours si un patron de conception ajoute réellement de la valeur ou s'il complique inutilement le code.",{"type":30,"tag":84,"props":13918,"children":13919},{},[],{"type":30,"tag":31,"props":13921,"children":13923},{"id":13922},"exemples-pratiques-de-kiss-en-java",[13924],{"type":40,"value":13925},"Exemples pratiques de KISS en Java",{"type":30,"tag":43,"props":13927,"children":13928},{},[13929,13931,13935],{"type":40,"value":13930},"Appliquer ",{"type":30,"tag":36,"props":13932,"children":13933},{},[13934],{"type":40,"value":13051},{"type":40,"value":13936}," dans le développement logiciel ne signifie pas seulement écrire du code simple. Il s'agit d'éliminer la complexité inutile, de rendre le code plus lisible et plus maintenable tout en restant fonctionnel et performant. Voici quelques exemples pratiques en Java qui montrent comment simplifier le code tout en maintenant sa robustesse.",{"type":30,"tag":116,"props":13938,"children":13940},{"id":13939},"exemple-1-simplifier-une-logique-conditionnelle-complexe",[13941],{"type":40,"value":13942},"Exemple 1 : Simplifier une logique conditionnelle complexe",{"type":30,"tag":43,"props":13944,"children":13945},{},[13946],{"type":40,"value":13947},"Prenons une méthode qui valide plusieurs conditions dans un formulaire de saisie d'utilisateur. Voici une version complexe :",{"type":30,"tag":1035,"props":13949,"children":13951},{"className":1039,"code":13950,"language":1038,"meta":8,"style":8},"// Version complexe\npublic boolean isFormValid(UserForm form) {\n    if (form != null) {\n        if (form.getName() != null && !form.getName().isEmpty()) {\n            if (form.getAge() >= 18) {\n                if (form.getEmail() != null && form.getEmail().contains(\"@\")) {\n                    return true;\n                }\n            }\n        }\n    }\n    return false;\n}\n",[13952],{"type":30,"tag":1042,"props":13953,"children":13954},{"__ignoreMap":8},[13955,13963,14001,14035,14112,14159,14238,14255,14263,14271,14278,14285,14301],{"type":30,"tag":1046,"props":13956,"children":13957},{"class":1048,"line":1049},[13958],{"type":30,"tag":1046,"props":13959,"children":13960},{"style":3961},[13961],{"type":40,"value":13962},"// Version complexe\n",{"type":30,"tag":1046,"props":13964,"children":13965},{"class":1048,"line":675},[13966,13970,13974,13979,13983,13988,13993,13997],{"type":30,"tag":1046,"props":13967,"children":13968},{"style":1053},[13969],{"type":40,"value":1056},{"type":30,"tag":1046,"props":13971,"children":13972},{"style":1053},[13973],{"type":40,"value":13605},{"type":30,"tag":1046,"props":13975,"children":13976},{"style":1138},[13977],{"type":40,"value":13978}," isFormValid",{"type":30,"tag":1046,"props":13980,"children":13981},{"style":1070},[13982],{"type":40,"value":1146},{"type":30,"tag":1046,"props":13984,"children":13985},{"style":1084},[13986],{"type":40,"value":13987},"UserForm",{"type":30,"tag":1046,"props":13989,"children":13990},{"style":1105},[13991],{"type":40,"value":13992}," form",{"type":30,"tag":1046,"props":13994,"children":13995},{"style":1070},[13996],{"type":40,"value":1161},{"type":30,"tag":1046,"props":13998,"children":13999},{"style":1070},[14000],{"type":40,"value":1073},{"type":30,"tag":1046,"props":14002,"children":14003},{"class":1048,"line":681},[14004,14009,14013,14018,14023,14027,14031],{"type":30,"tag":1046,"props":14005,"children":14006},{"style":1053},[14007],{"type":40,"value":14008},"    if",{"type":30,"tag":1046,"props":14010,"children":14011},{"style":1070},[14012],{"type":40,"value":11861},{"type":30,"tag":1046,"props":14014,"children":14015},{"style":1105},[14016],{"type":40,"value":14017},"form ",{"type":30,"tag":1046,"props":14019,"children":14020},{"style":1795},[14021],{"type":40,"value":14022},"!=",{"type":30,"tag":1046,"props":14024,"children":14025},{"style":1780},[14026],{"type":40,"value":11876},{"type":30,"tag":1046,"props":14028,"children":14029},{"style":1070},[14030],{"type":40,"value":1161},{"type":30,"tag":1046,"props":14032,"children":14033},{"style":1070},[14034],{"type":40,"value":1073},{"type":30,"tag":1046,"props":14036,"children":14037},{"class":1048,"line":1124},[14038,14042,14046,14051,14055,14059,14063,14068,14072,14077,14082,14086,14090,14094,14099,14104,14108],{"type":30,"tag":1046,"props":14039,"children":14040},{"style":1053},[14041],{"type":40,"value":11856},{"type":30,"tag":1046,"props":14043,"children":14044},{"style":1070},[14045],{"type":40,"value":11861},{"type":30,"tag":1046,"props":14047,"children":14048},{"style":1105},[14049],{"type":40,"value":14050},"form",{"type":30,"tag":1046,"props":14052,"children":14053},{"style":1070},[14054],{"type":40,"value":1179},{"type":30,"tag":1046,"props":14056,"children":14057},{"style":1138},[14058],{"type":40,"value":7392},{"type":30,"tag":1046,"props":14060,"children":14061},{"style":1070},[14062],{"type":40,"value":1320},{"type":30,"tag":1046,"props":14064,"children":14065},{"style":1795},[14066],{"type":40,"value":14067}," !=",{"type":30,"tag":1046,"props":14069,"children":14070},{"style":1780},[14071],{"type":40,"value":11876},{"type":30,"tag":1046,"props":14073,"children":14074},{"style":1795},[14075],{"type":40,"value":14076}," &&",{"type":30,"tag":1046,"props":14078,"children":14079},{"style":1795},[14080],{"type":40,"value":14081}," !",{"type":30,"tag":1046,"props":14083,"children":14084},{"style":1105},[14085],{"type":40,"value":14050},{"type":30,"tag":1046,"props":14087,"children":14088},{"style":1070},[14089],{"type":40,"value":1179},{"type":30,"tag":1046,"props":14091,"children":14092},{"style":1138},[14093],{"type":40,"value":7392},{"type":30,"tag":1046,"props":14095,"children":14096},{"style":1070},[14097],{"type":40,"value":14098},"().",{"type":30,"tag":1046,"props":14100,"children":14101},{"style":1138},[14102],{"type":40,"value":14103},"isEmpty",{"type":30,"tag":1046,"props":14105,"children":14106},{"style":1070},[14107],{"type":40,"value":13520},{"type":30,"tag":1046,"props":14109,"children":14110},{"style":1070},[14111],{"type":40,"value":1073},{"type":30,"tag":1046,"props":14113,"children":14114},{"class":1048,"line":1168},[14115,14120,14124,14128,14132,14137,14141,14146,14151,14155],{"type":30,"tag":1046,"props":14116,"children":14117},{"style":1053},[14118],{"type":40,"value":14119},"            if",{"type":30,"tag":1046,"props":14121,"children":14122},{"style":1070},[14123],{"type":40,"value":11861},{"type":30,"tag":1046,"props":14125,"children":14126},{"style":1105},[14127],{"type":40,"value":14050},{"type":30,"tag":1046,"props":14129,"children":14130},{"style":1070},[14131],{"type":40,"value":1179},{"type":30,"tag":1046,"props":14133,"children":14134},{"style":1138},[14135],{"type":40,"value":14136},"getAge",{"type":30,"tag":1046,"props":14138,"children":14139},{"style":1070},[14140],{"type":40,"value":1320},{"type":30,"tag":1046,"props":14142,"children":14143},{"style":1795},[14144],{"type":40,"value":14145}," >=",{"type":30,"tag":1046,"props":14147,"children":14148},{"style":6886},[14149],{"type":40,"value":14150}," 18",{"type":30,"tag":1046,"props":14152,"children":14153},{"style":1070},[14154],{"type":40,"value":1161},{"type":30,"tag":1046,"props":14156,"children":14157},{"style":1070},[14158],{"type":40,"value":1073},{"type":30,"tag":1046,"props":14160,"children":14161},{"class":1048,"line":1201},[14162,14167,14171,14175,14179,14184,14188,14192,14196,14200,14204,14208,14212,14216,14221,14225,14230,14234],{"type":30,"tag":1046,"props":14163,"children":14164},{"style":1053},[14165],{"type":40,"value":14166},"                if",{"type":30,"tag":1046,"props":14168,"children":14169},{"style":1070},[14170],{"type":40,"value":11861},{"type":30,"tag":1046,"props":14172,"children":14173},{"style":1105},[14174],{"type":40,"value":14050},{"type":30,"tag":1046,"props":14176,"children":14177},{"style":1070},[14178],{"type":40,"value":1179},{"type":30,"tag":1046,"props":14180,"children":14181},{"style":1138},[14182],{"type":40,"value":14183},"getEmail",{"type":30,"tag":1046,"props":14185,"children":14186},{"style":1070},[14187],{"type":40,"value":1320},{"type":30,"tag":1046,"props":14189,"children":14190},{"style":1795},[14191],{"type":40,"value":14067},{"type":30,"tag":1046,"props":14193,"children":14194},{"style":1780},[14195],{"type":40,"value":11876},{"type":30,"tag":1046,"props":14197,"children":14198},{"style":1795},[14199],{"type":40,"value":14076},{"type":30,"tag":1046,"props":14201,"children":14202},{"style":1105},[14203],{"type":40,"value":13992},{"type":30,"tag":1046,"props":14205,"children":14206},{"style":1070},[14207],{"type":40,"value":1179},{"type":30,"tag":1046,"props":14209,"children":14210},{"style":1138},[14211],{"type":40,"value":14183},{"type":30,"tag":1046,"props":14213,"children":14214},{"style":1070},[14215],{"type":40,"value":14098},{"type":30,"tag":1046,"props":14217,"children":14218},{"style":1138},[14219],{"type":40,"value":14220},"contains",{"type":30,"tag":1046,"props":14222,"children":14223},{"style":1070},[14224],{"type":40,"value":1146},{"type":30,"tag":1046,"props":14226,"children":14227},{"style":1675},[14228],{"type":40,"value":14229},"\"@\"",{"type":30,"tag":1046,"props":14231,"children":14232},{"style":1070},[14233],{"type":40,"value":9913},{"type":30,"tag":1046,"props":14235,"children":14236},{"style":1070},[14237],{"type":40,"value":1073},{"type":30,"tag":1046,"props":14239,"children":14240},{"class":1048,"line":1210},[14241,14246,14251],{"type":30,"tag":1046,"props":14242,"children":14243},{"style":1053},[14244],{"type":40,"value":14245},"                    return",{"type":30,"tag":1046,"props":14247,"children":14248},{"style":1780},[14249],{"type":40,"value":14250}," true",{"type":30,"tag":1046,"props":14252,"children":14253},{"style":1070},[14254],{"type":40,"value":1113},{"type":30,"tag":1046,"props":14256,"children":14257},{"class":1048,"line":1218},[14258],{"type":30,"tag":1046,"props":14259,"children":14260},{"style":1070},[14261],{"type":40,"value":14262},"                }\n",{"type":30,"tag":1046,"props":14264,"children":14265},{"class":1048,"line":1255},[14266],{"type":30,"tag":1046,"props":14267,"children":14268},{"style":1070},[14269],{"type":40,"value":14270},"            }\n",{"type":30,"tag":1046,"props":14272,"children":14273},{"class":1048,"line":1284},[14274],{"type":30,"tag":1046,"props":14275,"children":14276},{"style":1070},[14277],{"type":40,"value":11922},{"type":30,"tag":1046,"props":14279,"children":14280},{"class":1048,"line":1292},[14281],{"type":30,"tag":1046,"props":14282,"children":14283},{"style":1070},[14284],{"type":40,"value":1207},{"type":30,"tag":1046,"props":14286,"children":14287},{"class":1048,"line":1300},[14288,14292,14297],{"type":30,"tag":1046,"props":14289,"children":14290},{"style":1053},[14291],{"type":40,"value":7894},{"type":30,"tag":1046,"props":14293,"children":14294},{"style":1780},[14295],{"type":40,"value":14296}," false",{"type":30,"tag":1046,"props":14298,"children":14299},{"style":1070},[14300],{"type":40,"value":1113},{"type":30,"tag":1046,"props":14302,"children":14303},{"class":1048,"line":1327},[14304],{"type":30,"tag":1046,"props":14305,"children":14306},{"style":1070},[14307],{"type":40,"value":1423},{"type":30,"tag":43,"props":14309,"children":14310},{},[14311,14313,14317],{"type":40,"value":14312},"Cette méthode devient rapidement difficile à lire à cause des multiples niveaux d'imbrication. En appliquant ",{"type":30,"tag":36,"props":14314,"children":14315},{},[14316],{"type":40,"value":13051},{"type":40,"value":14318},", vous pouvez simplifier cela en éliminant les imbrications inutiles et en rendant le code plus lisible :",{"type":30,"tag":1035,"props":14320,"children":14322},{"className":1039,"code":14321,"language":1038,"meta":8,"style":8},"// Version simplifiée avec KISS\npublic boolean isFormValid(UserForm form) {\n    if (form == null || form.getName() == null || form.getName().isEmpty()) {\n        return false;\n    }\n\n    if (form.getAge() \u003C 18) {\n        return false;\n    }\n\n    return form.getEmail() != null && form.getEmail().contains(\"@\");\n}\n",[14323],{"type":30,"tag":1042,"props":14324,"children":14325},{"__ignoreMap":8},[14326,14334,14369,14453,14468,14475,14482,14526,14541,14548,14555,14622],{"type":30,"tag":1046,"props":14327,"children":14328},{"class":1048,"line":1049},[14329],{"type":30,"tag":1046,"props":14330,"children":14331},{"style":3961},[14332],{"type":40,"value":14333},"// Version simplifiée avec KISS\n",{"type":30,"tag":1046,"props":14335,"children":14336},{"class":1048,"line":675},[14337,14341,14345,14349,14353,14357,14361,14365],{"type":30,"tag":1046,"props":14338,"children":14339},{"style":1053},[14340],{"type":40,"value":1056},{"type":30,"tag":1046,"props":14342,"children":14343},{"style":1053},[14344],{"type":40,"value":13605},{"type":30,"tag":1046,"props":14346,"children":14347},{"style":1138},[14348],{"type":40,"value":13978},{"type":30,"tag":1046,"props":14350,"children":14351},{"style":1070},[14352],{"type":40,"value":1146},{"type":30,"tag":1046,"props":14354,"children":14355},{"style":1084},[14356],{"type":40,"value":13987},{"type":30,"tag":1046,"props":14358,"children":14359},{"style":1105},[14360],{"type":40,"value":13992},{"type":30,"tag":1046,"props":14362,"children":14363},{"style":1070},[14364],{"type":40,"value":1161},{"type":30,"tag":1046,"props":14366,"children":14367},{"style":1070},[14368],{"type":40,"value":1073},{"type":30,"tag":1046,"props":14370,"children":14371},{"class":1048,"line":681},[14372,14376,14380,14384,14388,14392,14397,14401,14405,14409,14413,14417,14421,14425,14429,14433,14437,14441,14445,14449],{"type":30,"tag":1046,"props":14373,"children":14374},{"style":1053},[14375],{"type":40,"value":14008},{"type":30,"tag":1046,"props":14377,"children":14378},{"style":1070},[14379],{"type":40,"value":11861},{"type":30,"tag":1046,"props":14381,"children":14382},{"style":1105},[14383],{"type":40,"value":14017},{"type":30,"tag":1046,"props":14385,"children":14386},{"style":1795},[14387],{"type":40,"value":11871},{"type":30,"tag":1046,"props":14389,"children":14390},{"style":1780},[14391],{"type":40,"value":11876},{"type":30,"tag":1046,"props":14393,"children":14394},{"style":1795},[14395],{"type":40,"value":14396}," ||",{"type":30,"tag":1046,"props":14398,"children":14399},{"style":1105},[14400],{"type":40,"value":13992},{"type":30,"tag":1046,"props":14402,"children":14403},{"style":1070},[14404],{"type":40,"value":1179},{"type":30,"tag":1046,"props":14406,"children":14407},{"style":1138},[14408],{"type":40,"value":7392},{"type":30,"tag":1046,"props":14410,"children":14411},{"style":1070},[14412],{"type":40,"value":1320},{"type":30,"tag":1046,"props":14414,"children":14415},{"style":1795},[14416],{"type":40,"value":13385},{"type":30,"tag":1046,"props":14418,"children":14419},{"style":1780},[14420],{"type":40,"value":11876},{"type":30,"tag":1046,"props":14422,"children":14423},{"style":1795},[14424],{"type":40,"value":14396},{"type":30,"tag":1046,"props":14426,"children":14427},{"style":1105},[14428],{"type":40,"value":13992},{"type":30,"tag":1046,"props":14430,"children":14431},{"style":1070},[14432],{"type":40,"value":1179},{"type":30,"tag":1046,"props":14434,"children":14435},{"style":1138},[14436],{"type":40,"value":7392},{"type":30,"tag":1046,"props":14438,"children":14439},{"style":1070},[14440],{"type":40,"value":14098},{"type":30,"tag":1046,"props":14442,"children":14443},{"style":1138},[14444],{"type":40,"value":14103},{"type":30,"tag":1046,"props":14446,"children":14447},{"style":1070},[14448],{"type":40,"value":13520},{"type":30,"tag":1046,"props":14450,"children":14451},{"style":1070},[14452],{"type":40,"value":1073},{"type":30,"tag":1046,"props":14454,"children":14455},{"class":1048,"line":1124},[14456,14460,14464],{"type":30,"tag":1046,"props":14457,"children":14458},{"style":1053},[14459],{"type":40,"value":1333},{"type":30,"tag":1046,"props":14461,"children":14462},{"style":1780},[14463],{"type":40,"value":14296},{"type":30,"tag":1046,"props":14465,"children":14466},{"style":1070},[14467],{"type":40,"value":1113},{"type":30,"tag":1046,"props":14469,"children":14470},{"class":1048,"line":1168},[14471],{"type":30,"tag":1046,"props":14472,"children":14473},{"style":1070},[14474],{"type":40,"value":1207},{"type":30,"tag":1046,"props":14476,"children":14477},{"class":1048,"line":1201},[14478],{"type":30,"tag":1046,"props":14479,"children":14480},{"emptyLinePlaceholder":13},[14481],{"type":40,"value":1121},{"type":30,"tag":1046,"props":14483,"children":14484},{"class":1048,"line":1210},[14485,14489,14493,14497,14501,14505,14509,14514,14518,14522],{"type":30,"tag":1046,"props":14486,"children":14487},{"style":1053},[14488],{"type":40,"value":14008},{"type":30,"tag":1046,"props":14490,"children":14491},{"style":1070},[14492],{"type":40,"value":11861},{"type":30,"tag":1046,"props":14494,"children":14495},{"style":1105},[14496],{"type":40,"value":14050},{"type":30,"tag":1046,"props":14498,"children":14499},{"style":1070},[14500],{"type":40,"value":1179},{"type":30,"tag":1046,"props":14502,"children":14503},{"style":1138},[14504],{"type":40,"value":14136},{"type":30,"tag":1046,"props":14506,"children":14507},{"style":1070},[14508],{"type":40,"value":1320},{"type":30,"tag":1046,"props":14510,"children":14511},{"style":1795},[14512],{"type":40,"value":14513}," \u003C",{"type":30,"tag":1046,"props":14515,"children":14516},{"style":6886},[14517],{"type":40,"value":14150},{"type":30,"tag":1046,"props":14519,"children":14520},{"style":1070},[14521],{"type":40,"value":1161},{"type":30,"tag":1046,"props":14523,"children":14524},{"style":1070},[14525],{"type":40,"value":1073},{"type":30,"tag":1046,"props":14527,"children":14528},{"class":1048,"line":1218},[14529,14533,14537],{"type":30,"tag":1046,"props":14530,"children":14531},{"style":1053},[14532],{"type":40,"value":1333},{"type":30,"tag":1046,"props":14534,"children":14535},{"style":1780},[14536],{"type":40,"value":14296},{"type":30,"tag":1046,"props":14538,"children":14539},{"style":1070},[14540],{"type":40,"value":1113},{"type":30,"tag":1046,"props":14542,"children":14543},{"class":1048,"line":1255},[14544],{"type":30,"tag":1046,"props":14545,"children":14546},{"style":1070},[14547],{"type":40,"value":1207},{"type":30,"tag":1046,"props":14549,"children":14550},{"class":1048,"line":1284},[14551],{"type":30,"tag":1046,"props":14552,"children":14553},{"emptyLinePlaceholder":13},[14554],{"type":40,"value":1121},{"type":30,"tag":1046,"props":14556,"children":14557},{"class":1048,"line":1292},[14558,14562,14566,14570,14574,14578,14582,14586,14590,14594,14598,14602,14606,14610,14614,14618],{"type":30,"tag":1046,"props":14559,"children":14560},{"style":1053},[14561],{"type":40,"value":7894},{"type":30,"tag":1046,"props":14563,"children":14564},{"style":1105},[14565],{"type":40,"value":13992},{"type":30,"tag":1046,"props":14567,"children":14568},{"style":1070},[14569],{"type":40,"value":1179},{"type":30,"tag":1046,"props":14571,"children":14572},{"style":1138},[14573],{"type":40,"value":14183},{"type":30,"tag":1046,"props":14575,"children":14576},{"style":1070},[14577],{"type":40,"value":1320},{"type":30,"tag":1046,"props":14579,"children":14580},{"style":1795},[14581],{"type":40,"value":14067},{"type":30,"tag":1046,"props":14583,"children":14584},{"style":1780},[14585],{"type":40,"value":11876},{"type":30,"tag":1046,"props":14587,"children":14588},{"style":1795},[14589],{"type":40,"value":14076},{"type":30,"tag":1046,"props":14591,"children":14592},{"style":1105},[14593],{"type":40,"value":13992},{"type":30,"tag":1046,"props":14595,"children":14596},{"style":1070},[14597],{"type":40,"value":1179},{"type":30,"tag":1046,"props":14599,"children":14600},{"style":1138},[14601],{"type":40,"value":14183},{"type":30,"tag":1046,"props":14603,"children":14604},{"style":1070},[14605],{"type":40,"value":14098},{"type":30,"tag":1046,"props":14607,"children":14608},{"style":1138},[14609],{"type":40,"value":14220},{"type":30,"tag":1046,"props":14611,"children":14612},{"style":1070},[14613],{"type":40,"value":1146},{"type":30,"tag":1046,"props":14615,"children":14616},{"style":1675},[14617],{"type":40,"value":14229},{"type":30,"tag":1046,"props":14619,"children":14620},{"style":1070},[14621],{"type":40,"value":1198},{"type":30,"tag":1046,"props":14623,"children":14624},{"class":1048,"line":1300},[14625],{"type":30,"tag":1046,"props":14626,"children":14627},{"style":1070},[14628],{"type":40,"value":1423},{"type":30,"tag":43,"props":14630,"children":14631},{},[14632],{"type":40,"value":14633},"Le code est maintenant plus linéaire et plus facile à comprendre. En évitant les imbrications excessives, il est plus clair ce qui est validé et dans quel ordre.",{"type":30,"tag":116,"props":14635,"children":14637},{"id":14636},"exemple-2-réduction-du-code-répétitif",[14638],{"type":40,"value":14639},"Exemple 2 : Réduction du code répétitif",{"type":30,"tag":43,"props":14641,"children":14642},{},[14643],{"type":40,"value":14644},"Voici un exemple où une méthode contient plusieurs lignes de code répétitives pour calculer la somme de nombres d'une liste.",{"type":30,"tag":1035,"props":14646,"children":14648},{"className":1039,"code":14647,"language":1038,"meta":8,"style":8},"// Code répétitif\npublic int sum(List\u003CInteger> numbers) {\n    int sum = 0;\n    for (int i = 0; i \u003C numbers.size();\n\n i++) {\n        sum += numbers.get(i);\n    }\n    return sum;\n}\n",[14649],{"type":30,"tag":1042,"props":14650,"children":14651},{"__ignoreMap":8},[14652,14660,14710,14735,14791,14798,14817,14854,14861,14876],{"type":30,"tag":1046,"props":14653,"children":14654},{"class":1048,"line":1049},[14655],{"type":30,"tag":1046,"props":14656,"children":14657},{"style":3961},[14658],{"type":40,"value":14659},"// Code répétitif\n",{"type":30,"tag":1046,"props":14661,"children":14662},{"class":1048,"line":675},[14663,14667,14671,14676,14680,14684,14688,14693,14697,14702,14706],{"type":30,"tag":1046,"props":14664,"children":14665},{"style":1053},[14666],{"type":40,"value":1056},{"type":30,"tag":1046,"props":14668,"children":14669},{"style":1053},[14670],{"type":40,"value":10265},{"type":30,"tag":1046,"props":14672,"children":14673},{"style":1138},[14674],{"type":40,"value":14675}," sum",{"type":30,"tag":1046,"props":14677,"children":14678},{"style":1070},[14679],{"type":40,"value":1146},{"type":30,"tag":1046,"props":14681,"children":14682},{"style":1084},[14683],{"type":40,"value":9627},{"type":30,"tag":1046,"props":14685,"children":14686},{"style":1795},[14687],{"type":40,"value":1092},{"type":30,"tag":1046,"props":14689,"children":14690},{"style":1105},[14691],{"type":40,"value":14692},"Integer",{"type":30,"tag":1046,"props":14694,"children":14695},{"style":1795},[14696],{"type":40,"value":1102},{"type":30,"tag":1046,"props":14698,"children":14699},{"style":1105},[14700],{"type":40,"value":14701}," numbers",{"type":30,"tag":1046,"props":14703,"children":14704},{"style":1070},[14705],{"type":40,"value":1161},{"type":30,"tag":1046,"props":14707,"children":14708},{"style":1070},[14709],{"type":40,"value":1073},{"type":30,"tag":1046,"props":14711,"children":14712},{"class":1048,"line":681},[14713,14718,14723,14727,14731],{"type":30,"tag":1046,"props":14714,"children":14715},{"style":1053},[14716],{"type":40,"value":14717},"    int",{"type":30,"tag":1046,"props":14719,"children":14720},{"style":1105},[14721],{"type":40,"value":14722}," sum ",{"type":30,"tag":1046,"props":14724,"children":14725},{"style":1795},[14726],{"type":40,"value":1798},{"type":30,"tag":1046,"props":14728,"children":14729},{"style":6886},[14730],{"type":40,"value":13293},{"type":30,"tag":1046,"props":14732,"children":14733},{"style":1070},[14734],{"type":40,"value":1113},{"type":30,"tag":1046,"props":14736,"children":14737},{"class":1048,"line":1124},[14738,14742,14746,14750,14754,14758,14762,14766,14770,14774,14778,14782,14787],{"type":30,"tag":1046,"props":14739,"children":14740},{"style":1053},[14741],{"type":40,"value":13271},{"type":30,"tag":1046,"props":14743,"children":14744},{"style":1070},[14745],{"type":40,"value":11861},{"type":30,"tag":1046,"props":14747,"children":14748},{"style":1053},[14749],{"type":40,"value":10323},{"type":30,"tag":1046,"props":14751,"children":14752},{"style":1105},[14753],{"type":40,"value":13284},{"type":30,"tag":1046,"props":14755,"children":14756},{"style":1795},[14757],{"type":40,"value":1798},{"type":30,"tag":1046,"props":14759,"children":14760},{"style":6886},[14761],{"type":40,"value":13293},{"type":30,"tag":1046,"props":14763,"children":14764},{"style":1070},[14765],{"type":40,"value":13298},{"type":30,"tag":1046,"props":14767,"children":14768},{"style":1105},[14769],{"type":40,"value":13284},{"type":30,"tag":1046,"props":14771,"children":14772},{"style":1795},[14773],{"type":40,"value":1092},{"type":30,"tag":1046,"props":14775,"children":14776},{"style":1105},[14777],{"type":40,"value":14701},{"type":30,"tag":1046,"props":14779,"children":14780},{"style":1070},[14781],{"type":40,"value":1179},{"type":30,"tag":1046,"props":14783,"children":14784},{"style":1138},[14785],{"type":40,"value":14786},"size",{"type":30,"tag":1046,"props":14788,"children":14789},{"style":1070},[14790],{"type":40,"value":1406},{"type":30,"tag":1046,"props":14792,"children":14793},{"class":1048,"line":1168},[14794],{"type":30,"tag":1046,"props":14795,"children":14796},{"emptyLinePlaceholder":13},[14797],{"type":40,"value":1121},{"type":30,"tag":1046,"props":14799,"children":14800},{"class":1048,"line":1201},[14801,14805,14809,14813],{"type":30,"tag":1046,"props":14802,"children":14803},{"style":1105},[14804],{"type":40,"value":13329},{"type":30,"tag":1046,"props":14806,"children":14807},{"style":1795},[14808],{"type":40,"value":13334},{"type":30,"tag":1046,"props":14810,"children":14811},{"style":1070},[14812],{"type":40,"value":1161},{"type":30,"tag":1046,"props":14814,"children":14815},{"style":1070},[14816],{"type":40,"value":1073},{"type":30,"tag":1046,"props":14818,"children":14819},{"class":1048,"line":1210},[14820,14825,14830,14834,14838,14842,14846,14850],{"type":30,"tag":1046,"props":14821,"children":14822},{"style":1105},[14823],{"type":40,"value":14824},"        sum ",{"type":30,"tag":1046,"props":14826,"children":14827},{"style":1795},[14828],{"type":40,"value":14829},"+=",{"type":30,"tag":1046,"props":14831,"children":14832},{"style":1105},[14833],{"type":40,"value":14701},{"type":30,"tag":1046,"props":14835,"children":14836},{"style":1070},[14837],{"type":40,"value":1179},{"type":30,"tag":1046,"props":14839,"children":14840},{"style":1138},[14841],{"type":40,"value":5147},{"type":30,"tag":1046,"props":14843,"children":14844},{"style":1070},[14845],{"type":40,"value":1146},{"type":30,"tag":1046,"props":14847,"children":14848},{"style":1105},[14849],{"type":40,"value":13376},{"type":30,"tag":1046,"props":14851,"children":14852},{"style":1070},[14853],{"type":40,"value":1198},{"type":30,"tag":1046,"props":14855,"children":14856},{"class":1048,"line":1218},[14857],{"type":30,"tag":1046,"props":14858,"children":14859},{"style":1070},[14860],{"type":40,"value":1207},{"type":30,"tag":1046,"props":14862,"children":14863},{"class":1048,"line":1255},[14864,14868,14872],{"type":30,"tag":1046,"props":14865,"children":14866},{"style":1053},[14867],{"type":40,"value":7894},{"type":30,"tag":1046,"props":14869,"children":14870},{"style":1105},[14871],{"type":40,"value":14675},{"type":30,"tag":1046,"props":14873,"children":14874},{"style":1070},[14875],{"type":40,"value":1113},{"type":30,"tag":1046,"props":14877,"children":14878},{"class":1048,"line":1284},[14879],{"type":30,"tag":1046,"props":14880,"children":14881},{"style":1070},[14882],{"type":40,"value":1423},{"type":30,"tag":43,"props":14884,"children":14885},{},[14886],{"type":40,"value":14887},"On peut simplifier ce code en utilisant une méthode plus concise, telle que les streams de Java 8 :",{"type":30,"tag":1035,"props":14889,"children":14891},{"className":1039,"code":14890,"language":1038,"meta":8,"style":8},"// Version simplifiée avec KISS\npublic int sum(List\u003CInteger> numbers) {\n    return numbers.stream().mapToInt(Integer::intValue).sum();\n}\n",[14892],{"type":30,"tag":1042,"props":14893,"children":14894},{"__ignoreMap":8},[14895,14902,14949,15006],{"type":30,"tag":1046,"props":14896,"children":14897},{"class":1048,"line":1049},[14898],{"type":30,"tag":1046,"props":14899,"children":14900},{"style":3961},[14901],{"type":40,"value":14333},{"type":30,"tag":1046,"props":14903,"children":14904},{"class":1048,"line":675},[14905,14909,14913,14917,14921,14925,14929,14933,14937,14941,14945],{"type":30,"tag":1046,"props":14906,"children":14907},{"style":1053},[14908],{"type":40,"value":1056},{"type":30,"tag":1046,"props":14910,"children":14911},{"style":1053},[14912],{"type":40,"value":10265},{"type":30,"tag":1046,"props":14914,"children":14915},{"style":1138},[14916],{"type":40,"value":14675},{"type":30,"tag":1046,"props":14918,"children":14919},{"style":1070},[14920],{"type":40,"value":1146},{"type":30,"tag":1046,"props":14922,"children":14923},{"style":1084},[14924],{"type":40,"value":9627},{"type":30,"tag":1046,"props":14926,"children":14927},{"style":1795},[14928],{"type":40,"value":1092},{"type":30,"tag":1046,"props":14930,"children":14931},{"style":1105},[14932],{"type":40,"value":14692},{"type":30,"tag":1046,"props":14934,"children":14935},{"style":1795},[14936],{"type":40,"value":1102},{"type":30,"tag":1046,"props":14938,"children":14939},{"style":1105},[14940],{"type":40,"value":14701},{"type":30,"tag":1046,"props":14942,"children":14943},{"style":1070},[14944],{"type":40,"value":1161},{"type":30,"tag":1046,"props":14946,"children":14947},{"style":1070},[14948],{"type":40,"value":1073},{"type":30,"tag":1046,"props":14950,"children":14951},{"class":1048,"line":681},[14952,14956,14960,14964,14968,14972,14977,14981,14985,14989,14994,14998,15002],{"type":30,"tag":1046,"props":14953,"children":14954},{"style":1053},[14955],{"type":40,"value":7894},{"type":30,"tag":1046,"props":14957,"children":14958},{"style":1105},[14959],{"type":40,"value":14701},{"type":30,"tag":1046,"props":14961,"children":14962},{"style":1070},[14963],{"type":40,"value":1179},{"type":30,"tag":1046,"props":14965,"children":14966},{"style":1138},[14967],{"type":40,"value":1346},{"type":30,"tag":1046,"props":14969,"children":14970},{"style":1070},[14971],{"type":40,"value":14098},{"type":30,"tag":1046,"props":14973,"children":14974},{"style":1138},[14975],{"type":40,"value":14976},"mapToInt",{"type":30,"tag":1046,"props":14978,"children":14979},{"style":1070},[14980],{"type":40,"value":1146},{"type":30,"tag":1046,"props":14982,"children":14983},{"style":1105},[14984],{"type":40,"value":14692},{"type":30,"tag":1046,"props":14986,"children":14987},{"style":1053},[14988],{"type":40,"value":1378},{"type":30,"tag":1046,"props":14990,"children":14991},{"style":1105},[14992],{"type":40,"value":14993},"intValue",{"type":30,"tag":1046,"props":14995,"children":14996},{"style":1070},[14997],{"type":40,"value":6392},{"type":30,"tag":1046,"props":14999,"children":15000},{"style":1138},[15001],{"type":40,"value":1401},{"type":30,"tag":1046,"props":15003,"children":15004},{"style":1070},[15005],{"type":40,"value":1406},{"type":30,"tag":1046,"props":15007,"children":15008},{"class":1048,"line":1124},[15009],{"type":30,"tag":1046,"props":15010,"children":15011},{"style":1070},[15012],{"type":40,"value":1423},{"type":30,"tag":43,"props":15014,"children":15015},{},[15016],{"type":40,"value":15017},"Non seulement ce code est plus simple et plus lisible, mais il est aussi plus performant car il tire parti des fonctionnalités de Java 8 pour traiter les collections de manière efficace.",{"type":30,"tag":116,"props":15019,"children":15021},{"id":15020},"exemple-3-utilisation-de-classes-inutiles",[15022],{"type":40,"value":15023},"Exemple 3 : Utilisation de classes inutiles",{"type":30,"tag":43,"props":15025,"children":15026},{},[15027],{"type":40,"value":15028},"Il est fréquent de voir des projets où des classes ou des abstractions sont ajoutées sans réelle justification. Par exemple, imaginons que vous ayez deux classes pour gérer l'affichage d'un utilisateur dans un système.",{"type":30,"tag":1035,"props":15030,"children":15032},{"className":1039,"code":15031,"language":1038,"meta":8,"style":8},"// Complexité inutile\npublic class UserDisplayService {\n    public void displayUserInfo(User user) {\n        System.out.println(\"Name: \" + user.getName());\n        System.out.println(\"Email: \" + user.getEmail());\n    }\n}\n\npublic class AdminDisplayService {\n    public void displayAdminInfo(Admin admin) {\n        System.out.println(\"Admin Name: \" + admin.getName());\n        System.out.println(\"Admin Email: \" + admin.getEmail());\n    }\n}\n",[15033],{"type":30,"tag":1042,"props":15034,"children":15035},{"__ignoreMap":8},[15036,15044,15064,15101,15153,15205,15212,15219,15226,15246,15284,15336,15388,15395],{"type":30,"tag":1046,"props":15037,"children":15038},{"class":1048,"line":1049},[15039],{"type":30,"tag":1046,"props":15040,"children":15041},{"style":3961},[15042],{"type":40,"value":15043},"// Complexité inutile\n",{"type":30,"tag":1046,"props":15045,"children":15046},{"class":1048,"line":675},[15047,15051,15055,15060],{"type":30,"tag":1046,"props":15048,"children":15049},{"style":1053},[15050],{"type":40,"value":1056},{"type":30,"tag":1046,"props":15052,"children":15053},{"style":1053},[15054],{"type":40,"value":1061},{"type":30,"tag":1046,"props":15056,"children":15057},{"style":1064},[15058],{"type":40,"value":15059}," UserDisplayService",{"type":30,"tag":1046,"props":15061,"children":15062},{"style":1070},[15063],{"type":40,"value":1073},{"type":30,"tag":1046,"props":15065,"children":15066},{"class":1048,"line":681},[15067,15071,15075,15080,15084,15088,15093,15097],{"type":30,"tag":1046,"props":15068,"children":15069},{"style":1053},[15070],{"type":40,"value":1130},{"type":30,"tag":1046,"props":15072,"children":15073},{"style":1053},[15074],{"type":40,"value":1135},{"type":30,"tag":1046,"props":15076,"children":15077},{"style":1138},[15078],{"type":40,"value":15079}," displayUserInfo",{"type":30,"tag":1046,"props":15081,"children":15082},{"style":1070},[15083],{"type":40,"value":1146},{"type":30,"tag":1046,"props":15085,"children":15086},{"style":1084},[15087],{"type":40,"value":10100},{"type":30,"tag":1046,"props":15089,"children":15090},{"style":1153},[15091],{"type":40,"value":15092}," user",{"type":30,"tag":1046,"props":15094,"children":15095},{"style":1070},[15096],{"type":40,"value":1161},{"type":30,"tag":1046,"props":15098,"children":15099},{"style":1070},[15100],{"type":40,"value":1073},{"type":30,"tag":1046,"props":15102,"children":15103},{"class":1048,"line":1124},[15104,15108,15112,15116,15120,15124,15128,15133,15137,15141,15145,15149],{"type":30,"tag":1046,"props":15105,"children":15106},{"style":1105},[15107],{"type":40,"value":12555},{"type":30,"tag":1046,"props":15109,"children":15110},{"style":1070},[15111],{"type":40,"value":1179},{"type":30,"tag":1046,"props":15113,"children":15114},{"style":1105},[15115],{"type":40,"value":12564},{"type":30,"tag":1046,"props":15117,"children":15118},{"style":1070},[15119],{"type":40,"value":1179},{"type":30,"tag":1046,"props":15121,"children":15122},{"style":1138},[15123],{"type":40,"value":12573},{"type":30,"tag":1046,"props":15125,"children":15126},{"style":1070},[15127],{"type":40,"value":1146},{"type":30,"tag":1046,"props":15129,"children":15130},{"style":1675},[15131],{"type":40,"value":15132},"\"Name: \"",{"type":30,"tag":1046,"props":15134,"children":15135},{"style":1795},[15136],{"type":40,"value":7261},{"type":30,"tag":1046,"props":15138,"children":15139},{"style":1105},[15140],{"type":40,"value":15092},{"type":30,"tag":1046,"props":15142,"children":15143},{"style":1070},[15144],{"type":40,"value":1179},{"type":30,"tag":1046,"props":15146,"children":15147},{"style":1138},[15148],{"type":40,"value":7392},{"type":30,"tag":1046,"props":15150,"children":15151},{"style":1070},[15152],{"type":40,"value":3340},{"type":30,"tag":1046,"props":15154,"children":15155},{"class":1048,"line":1168},[15156,15160,15164,15168,15172,15176,15180,15185,15189,15193,15197,15201],{"type":30,"tag":1046,"props":15157,"children":15158},{"style":1105},[15159],{"type":40,"value":12555},{"type":30,"tag":1046,"props":15161,"children":15162},{"style":1070},[15163],{"type":40,"value":1179},{"type":30,"tag":1046,"props":15165,"children":15166},{"style":1105},[15167],{"type":40,"value":12564},{"type":30,"tag":1046,"props":15169,"children":15170},{"style":1070},[15171],{"type":40,"value":1179},{"type":30,"tag":1046,"props":15173,"children":15174},{"style":1138},[15175],{"type":40,"value":12573},{"type":30,"tag":1046,"props":15177,"children":15178},{"style":1070},[15179],{"type":40,"value":1146},{"type":30,"tag":1046,"props":15181,"children":15182},{"style":1675},[15183],{"type":40,"value":15184},"\"Email: \"",{"type":30,"tag":1046,"props":15186,"children":15187},{"style":1795},[15188],{"type":40,"value":7261},{"type":30,"tag":1046,"props":15190,"children":15191},{"style":1105},[15192],{"type":40,"value":15092},{"type":30,"tag":1046,"props":15194,"children":15195},{"style":1070},[15196],{"type":40,"value":1179},{"type":30,"tag":1046,"props":15198,"children":15199},{"style":1138},[15200],{"type":40,"value":14183},{"type":30,"tag":1046,"props":15202,"children":15203},{"style":1070},[15204],{"type":40,"value":3340},{"type":30,"tag":1046,"props":15206,"children":15207},{"class":1048,"line":1201},[15208],{"type":30,"tag":1046,"props":15209,"children":15210},{"style":1070},[15211],{"type":40,"value":1207},{"type":30,"tag":1046,"props":15213,"children":15214},{"class":1048,"line":1210},[15215],{"type":30,"tag":1046,"props":15216,"children":15217},{"style":1070},[15218],{"type":40,"value":1423},{"type":30,"tag":1046,"props":15220,"children":15221},{"class":1048,"line":1218},[15222],{"type":30,"tag":1046,"props":15223,"children":15224},{"emptyLinePlaceholder":13},[15225],{"type":40,"value":1121},{"type":30,"tag":1046,"props":15227,"children":15228},{"class":1048,"line":1255},[15229,15233,15237,15242],{"type":30,"tag":1046,"props":15230,"children":15231},{"style":1053},[15232],{"type":40,"value":1056},{"type":30,"tag":1046,"props":15234,"children":15235},{"style":1053},[15236],{"type":40,"value":1061},{"type":30,"tag":1046,"props":15238,"children":15239},{"style":1064},[15240],{"type":40,"value":15241}," AdminDisplayService",{"type":30,"tag":1046,"props":15243,"children":15244},{"style":1070},[15245],{"type":40,"value":1073},{"type":30,"tag":1046,"props":15247,"children":15248},{"class":1048,"line":1284},[15249,15253,15257,15262,15266,15271,15276,15280],{"type":30,"tag":1046,"props":15250,"children":15251},{"style":1053},[15252],{"type":40,"value":1130},{"type":30,"tag":1046,"props":15254,"children":15255},{"style":1053},[15256],{"type":40,"value":1135},{"type":30,"tag":1046,"props":15258,"children":15259},{"style":1138},[15260],{"type":40,"value":15261}," displayAdminInfo",{"type":30,"tag":1046,"props":15263,"children":15264},{"style":1070},[15265],{"type":40,"value":1146},{"type":30,"tag":1046,"props":15267,"children":15268},{"style":1084},[15269],{"type":40,"value":15270},"Admin",{"type":30,"tag":1046,"props":15272,"children":15273},{"style":1153},[15274],{"type":40,"value":15275}," admin",{"type":30,"tag":1046,"props":15277,"children":15278},{"style":1070},[15279],{"type":40,"value":1161},{"type":30,"tag":1046,"props":15281,"children":15282},{"style":1070},[15283],{"type":40,"value":1073},{"type":30,"tag":1046,"props":15285,"children":15286},{"class":1048,"line":1292},[15287,15291,15295,15299,15303,15307,15311,15316,15320,15324,15328,15332],{"type":30,"tag":1046,"props":15288,"children":15289},{"style":1105},[15290],{"type":40,"value":12555},{"type":30,"tag":1046,"props":15292,"children":15293},{"style":1070},[15294],{"type":40,"value":1179},{"type":30,"tag":1046,"props":15296,"children":15297},{"style":1105},[15298],{"type":40,"value":12564},{"type":30,"tag":1046,"props":15300,"children":15301},{"style":1070},[15302],{"type":40,"value":1179},{"type":30,"tag":1046,"props":15304,"children":15305},{"style":1138},[15306],{"type":40,"value":12573},{"type":30,"tag":1046,"props":15308,"children":15309},{"style":1070},[15310],{"type":40,"value":1146},{"type":30,"tag":1046,"props":15312,"children":15313},{"style":1675},[15314],{"type":40,"value":15315},"\"Admin Name: \"",{"type":30,"tag":1046,"props":15317,"children":15318},{"style":1795},[15319],{"type":40,"value":7261},{"type":30,"tag":1046,"props":15321,"children":15322},{"style":1105},[15323],{"type":40,"value":15275},{"type":30,"tag":1046,"props":15325,"children":15326},{"style":1070},[15327],{"type":40,"value":1179},{"type":30,"tag":1046,"props":15329,"children":15330},{"style":1138},[15331],{"type":40,"value":7392},{"type":30,"tag":1046,"props":15333,"children":15334},{"style":1070},[15335],{"type":40,"value":3340},{"type":30,"tag":1046,"props":15337,"children":15338},{"class":1048,"line":1300},[15339,15343,15347,15351,15355,15359,15363,15368,15372,15376,15380,15384],{"type":30,"tag":1046,"props":15340,"children":15341},{"style":1105},[15342],{"type":40,"value":12555},{"type":30,"tag":1046,"props":15344,"children":15345},{"style":1070},[15346],{"type":40,"value":1179},{"type":30,"tag":1046,"props":15348,"children":15349},{"style":1105},[15350],{"type":40,"value":12564},{"type":30,"tag":1046,"props":15352,"children":15353},{"style":1070},[15354],{"type":40,"value":1179},{"type":30,"tag":1046,"props":15356,"children":15357},{"style":1138},[15358],{"type":40,"value":12573},{"type":30,"tag":1046,"props":15360,"children":15361},{"style":1070},[15362],{"type":40,"value":1146},{"type":30,"tag":1046,"props":15364,"children":15365},{"style":1675},[15366],{"type":40,"value":15367},"\"Admin Email: \"",{"type":30,"tag":1046,"props":15369,"children":15370},{"style":1795},[15371],{"type":40,"value":7261},{"type":30,"tag":1046,"props":15373,"children":15374},{"style":1105},[15375],{"type":40,"value":15275},{"type":30,"tag":1046,"props":15377,"children":15378},{"style":1070},[15379],{"type":40,"value":1179},{"type":30,"tag":1046,"props":15381,"children":15382},{"style":1138},[15383],{"type":40,"value":14183},{"type":30,"tag":1046,"props":15385,"children":15386},{"style":1070},[15387],{"type":40,"value":3340},{"type":30,"tag":1046,"props":15389,"children":15390},{"class":1048,"line":1327},[15391],{"type":30,"tag":1046,"props":15392,"children":15393},{"style":1070},[15394],{"type":40,"value":1207},{"type":30,"tag":1046,"props":15396,"children":15397},{"class":1048,"line":1354},[15398],{"type":30,"tag":1046,"props":15399,"children":15400},{"style":1070},[15401],{"type":40,"value":1423},{"type":30,"tag":43,"props":15403,"children":15404},{},[15405,15407,15411],{"type":40,"value":15406},"Dans cet exemple, ces deux classes ont des fonctionnalités presque identiques. Appliquer ",{"type":30,"tag":36,"props":15408,"children":15409},{},[15410],{"type":40,"value":13051},{"type":40,"value":15412}," signifie que nous pouvons simplifier cette logique en utilisant une seule méthode générique.",{"type":30,"tag":1035,"props":15414,"children":15416},{"className":1039,"code":15415,"language":1038,"meta":8,"style":8},"// Version simplifiée avec KISS\npublic class UserDisplayService {\n    public void displayUserInfo(User user) {\n        System.out.println(\"Name: \" + user.getName());\n        System.out.println(\"Email: \" + user.getEmail());\n    }\n}\n",[15417],{"type":30,"tag":1042,"props":15418,"children":15419},{"__ignoreMap":8},[15420,15427,15446,15481,15532,15583,15590],{"type":30,"tag":1046,"props":15421,"children":15422},{"class":1048,"line":1049},[15423],{"type":30,"tag":1046,"props":15424,"children":15425},{"style":3961},[15426],{"type":40,"value":14333},{"type":30,"tag":1046,"props":15428,"children":15429},{"class":1048,"line":675},[15430,15434,15438,15442],{"type":30,"tag":1046,"props":15431,"children":15432},{"style":1053},[15433],{"type":40,"value":1056},{"type":30,"tag":1046,"props":15435,"children":15436},{"style":1053},[15437],{"type":40,"value":1061},{"type":30,"tag":1046,"props":15439,"children":15440},{"style":1064},[15441],{"type":40,"value":15059},{"type":30,"tag":1046,"props":15443,"children":15444},{"style":1070},[15445],{"type":40,"value":1073},{"type":30,"tag":1046,"props":15447,"children":15448},{"class":1048,"line":681},[15449,15453,15457,15461,15465,15469,15473,15477],{"type":30,"tag":1046,"props":15450,"children":15451},{"style":1053},[15452],{"type":40,"value":1130},{"type":30,"tag":1046,"props":15454,"children":15455},{"style":1053},[15456],{"type":40,"value":1135},{"type":30,"tag":1046,"props":15458,"children":15459},{"style":1138},[15460],{"type":40,"value":15079},{"type":30,"tag":1046,"props":15462,"children":15463},{"style":1070},[15464],{"type":40,"value":1146},{"type":30,"tag":1046,"props":15466,"children":15467},{"style":1084},[15468],{"type":40,"value":10100},{"type":30,"tag":1046,"props":15470,"children":15471},{"style":1153},[15472],{"type":40,"value":15092},{"type":30,"tag":1046,"props":15474,"children":15475},{"style":1070},[15476],{"type":40,"value":1161},{"type":30,"tag":1046,"props":15478,"children":15479},{"style":1070},[15480],{"type":40,"value":1073},{"type":30,"tag":1046,"props":15482,"children":15483},{"class":1048,"line":1124},[15484,15488,15492,15496,15500,15504,15508,15512,15516,15520,15524,15528],{"type":30,"tag":1046,"props":15485,"children":15486},{"style":1105},[15487],{"type":40,"value":12555},{"type":30,"tag":1046,"props":15489,"children":15490},{"style":1070},[15491],{"type":40,"value":1179},{"type":30,"tag":1046,"props":15493,"children":15494},{"style":1105},[15495],{"type":40,"value":12564},{"type":30,"tag":1046,"props":15497,"children":15498},{"style":1070},[15499],{"type":40,"value":1179},{"type":30,"tag":1046,"props":15501,"children":15502},{"style":1138},[15503],{"type":40,"value":12573},{"type":30,"tag":1046,"props":15505,"children":15506},{"style":1070},[15507],{"type":40,"value":1146},{"type":30,"tag":1046,"props":15509,"children":15510},{"style":1675},[15511],{"type":40,"value":15132},{"type":30,"tag":1046,"props":15513,"children":15514},{"style":1795},[15515],{"type":40,"value":7261},{"type":30,"tag":1046,"props":15517,"children":15518},{"style":1105},[15519],{"type":40,"value":15092},{"type":30,"tag":1046,"props":15521,"children":15522},{"style":1070},[15523],{"type":40,"value":1179},{"type":30,"tag":1046,"props":15525,"children":15526},{"style":1138},[15527],{"type":40,"value":7392},{"type":30,"tag":1046,"props":15529,"children":15530},{"style":1070},[15531],{"type":40,"value":3340},{"type":30,"tag":1046,"props":15533,"children":15534},{"class":1048,"line":1168},[15535,15539,15543,15547,15551,15555,15559,15563,15567,15571,15575,15579],{"type":30,"tag":1046,"props":15536,"children":15537},{"style":1105},[15538],{"type":40,"value":12555},{"type":30,"tag":1046,"props":15540,"children":15541},{"style":1070},[15542],{"type":40,"value":1179},{"type":30,"tag":1046,"props":15544,"children":15545},{"style":1105},[15546],{"type":40,"value":12564},{"type":30,"tag":1046,"props":15548,"children":15549},{"style":1070},[15550],{"type":40,"value":1179},{"type":30,"tag":1046,"props":15552,"children":15553},{"style":1138},[15554],{"type":40,"value":12573},{"type":30,"tag":1046,"props":15556,"children":15557},{"style":1070},[15558],{"type":40,"value":1146},{"type":30,"tag":1046,"props":15560,"children":15561},{"style":1675},[15562],{"type":40,"value":15184},{"type":30,"tag":1046,"props":15564,"children":15565},{"style":1795},[15566],{"type":40,"value":7261},{"type":30,"tag":1046,"props":15568,"children":15569},{"style":1105},[15570],{"type":40,"value":15092},{"type":30,"tag":1046,"props":15572,"children":15573},{"style":1070},[15574],{"type":40,"value":1179},{"type":30,"tag":1046,"props":15576,"children":15577},{"style":1138},[15578],{"type":40,"value":14183},{"type":30,"tag":1046,"props":15580,"children":15581},{"style":1070},[15582],{"type":40,"value":3340},{"type":30,"tag":1046,"props":15584,"children":15585},{"class":1048,"line":1201},[15586],{"type":30,"tag":1046,"props":15587,"children":15588},{"style":1070},[15589],{"type":40,"value":1207},{"type":30,"tag":1046,"props":15591,"children":15592},{"class":1048,"line":1210},[15593],{"type":30,"tag":1046,"props":15594,"children":15595},{"style":1070},[15596],{"type":40,"value":1423},{"type":30,"tag":43,"props":15598,"children":15599},{},[15600],{"type":40,"value":15601},"Au lieu de dupliquer le code pour les utilisateurs normaux et les administrateurs, nous réutilisons une seule méthode qui accomplit la même tâche. Cela rend le code plus maintenable.",{"type":30,"tag":116,"props":15603,"children":15605},{"id":15604},"exemple-4-refactorisation-de-méthodes-longues",[15606],{"type":40,"value":15607},"Exemple 4 : Refactorisation de méthodes longues",{"type":30,"tag":43,"props":15609,"children":15610},{},[15611],{"type":40,"value":15612},"Voici un exemple d’une méthode qui fait beaucoup trop de choses à la fois, rendant le code difficile à comprendre et à maintenir :",{"type":30,"tag":1035,"props":15614,"children":15616},{"className":1039,"code":15615,"language":1038,"meta":8,"style":8},"// Méthode longue et complexe\npublic void processOrder(Order order) {\n    // Valider la commande\n    if (order.isValid()) {\n        // Calculer le total\n        double total = 0;\n        for (OrderItem item : order.getItems()) {\n            total += item.getPrice() * item.getQuantity();\n        }\n\n        // Appliquer une réduction\n        if (order.getDiscountCode() != null) {\n            total -= calculateDiscount(total, order.getDiscountCode());\n        }\n\n        // Envoi de la commande\n        sendOrder(order, total);\n    }\n}\n",[15617],{"type":30,"tag":1042,"props":15618,"children":15619},{"__ignoreMap":8},[15620,15628,15666,15674,15707,15715,15738,15785,15835,15842,15849,15857,15901,15946,15953,15960,15968,15997,16004],{"type":30,"tag":1046,"props":15621,"children":15622},{"class":1048,"line":1049},[15623],{"type":30,"tag":1046,"props":15624,"children":15625},{"style":3961},[15626],{"type":40,"value":15627},"// Méthode longue et complexe\n",{"type":30,"tag":1046,"props":15629,"children":15630},{"class":1048,"line":675},[15631,15635,15639,15644,15648,15653,15658,15662],{"type":30,"tag":1046,"props":15632,"children":15633},{"style":1053},[15634],{"type":40,"value":1056},{"type":30,"tag":1046,"props":15636,"children":15637},{"style":1053},[15638],{"type":40,"value":1135},{"type":30,"tag":1046,"props":15640,"children":15641},{"style":1138},[15642],{"type":40,"value":15643}," processOrder",{"type":30,"tag":1046,"props":15645,"children":15646},{"style":1070},[15647],{"type":40,"value":1146},{"type":30,"tag":1046,"props":15649,"children":15650},{"style":1084},[15651],{"type":40,"value":15652},"Order",{"type":30,"tag":1046,"props":15654,"children":15655},{"style":1105},[15656],{"type":40,"value":15657}," order",{"type":30,"tag":1046,"props":15659,"children":15660},{"style":1070},[15661],{"type":40,"value":1161},{"type":30,"tag":1046,"props":15663,"children":15664},{"style":1070},[15665],{"type":40,"value":1073},{"type":30,"tag":1046,"props":15667,"children":15668},{"class":1048,"line":681},[15669],{"type":30,"tag":1046,"props":15670,"children":15671},{"style":3961},[15672],{"type":40,"value":15673},"    // Valider la commande\n",{"type":30,"tag":1046,"props":15675,"children":15676},{"class":1048,"line":1124},[15677,15681,15685,15690,15694,15699,15703],{"type":30,"tag":1046,"props":15678,"children":15679},{"style":1053},[15680],{"type":40,"value":14008},{"type":30,"tag":1046,"props":15682,"children":15683},{"style":1070},[15684],{"type":40,"value":11861},{"type":30,"tag":1046,"props":15686,"children":15687},{"style":1105},[15688],{"type":40,"value":15689},"order",{"type":30,"tag":1046,"props":15691,"children":15692},{"style":1070},[15693],{"type":40,"value":1179},{"type":30,"tag":1046,"props":15695,"children":15696},{"style":1138},[15697],{"type":40,"value":15698},"isValid",{"type":30,"tag":1046,"props":15700,"children":15701},{"style":1070},[15702],{"type":40,"value":13520},{"type":30,"tag":1046,"props":15704,"children":15705},{"style":1070},[15706],{"type":40,"value":1073},{"type":30,"tag":1046,"props":15708,"children":15709},{"class":1048,"line":1168},[15710],{"type":30,"tag":1046,"props":15711,"children":15712},{"style":3961},[15713],{"type":40,"value":15714},"        // Calculer le total\n",{"type":30,"tag":1046,"props":15716,"children":15717},{"class":1048,"line":1201},[15718,15722,15726,15730,15734],{"type":30,"tag":1046,"props":15719,"children":15720},{"style":1053},[15721],{"type":40,"value":5933},{"type":30,"tag":1046,"props":15723,"children":15724},{"style":1105},[15725],{"type":40,"value":5938},{"type":30,"tag":1046,"props":15727,"children":15728},{"style":1795},[15729],{"type":40,"value":1798},{"type":30,"tag":1046,"props":15731,"children":15732},{"style":6886},[15733],{"type":40,"value":13293},{"type":30,"tag":1046,"props":15735,"children":15736},{"style":1070},[15737],{"type":40,"value":1113},{"type":30,"tag":1046,"props":15739,"children":15740},{"class":1048,"line":1210},[15741,15746,15750,15755,15760,15764,15768,15772,15777,15781],{"type":30,"tag":1046,"props":15742,"children":15743},{"style":1053},[15744],{"type":40,"value":15745},"        for",{"type":30,"tag":1046,"props":15747,"children":15748},{"style":1070},[15749],{"type":40,"value":11861},{"type":30,"tag":1046,"props":15751,"children":15752},{"style":1084},[15753],{"type":40,"value":15754},"OrderItem",{"type":30,"tag":1046,"props":15756,"children":15757},{"style":1105},[15758],{"type":40,"value":15759}," item ",{"type":30,"tag":1046,"props":15761,"children":15762},{"style":1053},[15763],{"type":40,"value":8498},{"type":30,"tag":1046,"props":15765,"children":15766},{"style":1105},[15767],{"type":40,"value":15657},{"type":30,"tag":1046,"props":15769,"children":15770},{"style":1070},[15771],{"type":40,"value":1179},{"type":30,"tag":1046,"props":15773,"children":15774},{"style":1138},[15775],{"type":40,"value":15776},"getItems",{"type":30,"tag":1046,"props":15778,"children":15779},{"style":1070},[15780],{"type":40,"value":13520},{"type":30,"tag":1046,"props":15782,"children":15783},{"style":1070},[15784],{"type":40,"value":1073},{"type":30,"tag":1046,"props":15786,"children":15787},{"class":1048,"line":1218},[15788,15793,15797,15801,15805,15809,15813,15818,15822,15826,15831],{"type":30,"tag":1046,"props":15789,"children":15790},{"style":1105},[15791],{"type":40,"value":15792},"            total ",{"type":30,"tag":1046,"props":15794,"children":15795},{"style":1795},[15796],{"type":40,"value":14829},{"type":30,"tag":1046,"props":15798,"children":15799},{"style":1105},[15800],{"type":40,"value":1156},{"type":30,"tag":1046,"props":15802,"children":15803},{"style":1070},[15804],{"type":40,"value":1179},{"type":30,"tag":1046,"props":15806,"children":15807},{"style":1138},[15808],{"type":40,"value":1383},{"type":30,"tag":1046,"props":15810,"children":15811},{"style":1070},[15812],{"type":40,"value":1320},{"type":30,"tag":1046,"props":15814,"children":15815},{"style":1795},[15816],{"type":40,"value":15817}," *",{"type":30,"tag":1046,"props":15819,"children":15820},{"style":1105},[15821],{"type":40,"value":1156},{"type":30,"tag":1046,"props":15823,"children":15824},{"style":1070},[15825],{"type":40,"value":1179},{"type":30,"tag":1046,"props":15827,"children":15828},{"style":1138},[15829],{"type":40,"value":15830},"getQuantity",{"type":30,"tag":1046,"props":15832,"children":15833},{"style":1070},[15834],{"type":40,"value":1406},{"type":30,"tag":1046,"props":15836,"children":15837},{"class":1048,"line":1255},[15838],{"type":30,"tag":1046,"props":15839,"children":15840},{"style":1070},[15841],{"type":40,"value":11922},{"type":30,"tag":1046,"props":15843,"children":15844},{"class":1048,"line":1284},[15845],{"type":30,"tag":1046,"props":15846,"children":15847},{"emptyLinePlaceholder":13},[15848],{"type":40,"value":1121},{"type":30,"tag":1046,"props":15850,"children":15851},{"class":1048,"line":1292},[15852],{"type":30,"tag":1046,"props":15853,"children":15854},{"style":3961},[15855],{"type":40,"value":15856},"        // Appliquer une réduction\n",{"type":30,"tag":1046,"props":15858,"children":15859},{"class":1048,"line":1300},[15860,15864,15868,15872,15876,15881,15885,15889,15893,15897],{"type":30,"tag":1046,"props":15861,"children":15862},{"style":1053},[15863],{"type":40,"value":11856},{"type":30,"tag":1046,"props":15865,"children":15866},{"style":1070},[15867],{"type":40,"value":11861},{"type":30,"tag":1046,"props":15869,"children":15870},{"style":1105},[15871],{"type":40,"value":15689},{"type":30,"tag":1046,"props":15873,"children":15874},{"style":1070},[15875],{"type":40,"value":1179},{"type":30,"tag":1046,"props":15877,"children":15878},{"style":1138},[15879],{"type":40,"value":15880},"getDiscountCode",{"type":30,"tag":1046,"props":15882,"children":15883},{"style":1070},[15884],{"type":40,"value":1320},{"type":30,"tag":1046,"props":15886,"children":15887},{"style":1795},[15888],{"type":40,"value":14067},{"type":30,"tag":1046,"props":15890,"children":15891},{"style":1780},[15892],{"type":40,"value":11876},{"type":30,"tag":1046,"props":15894,"children":15895},{"style":1070},[15896],{"type":40,"value":1161},{"type":30,"tag":1046,"props":15898,"children":15899},{"style":1070},[15900],{"type":40,"value":1073},{"type":30,"tag":1046,"props":15902,"children":15903},{"class":1048,"line":1327},[15904,15908,15913,15918,15922,15926,15930,15934,15938,15942],{"type":30,"tag":1046,"props":15905,"children":15906},{"style":1105},[15907],{"type":40,"value":15792},{"type":30,"tag":1046,"props":15909,"children":15910},{"style":1795},[15911],{"type":40,"value":15912},"-=",{"type":30,"tag":1046,"props":15914,"children":15915},{"style":1138},[15916],{"type":40,"value":15917}," calculateDiscount",{"type":30,"tag":1046,"props":15919,"children":15920},{"style":1070},[15921],{"type":40,"value":1146},{"type":30,"tag":1046,"props":15923,"children":15924},{"style":1105},[15925],{"type":40,"value":5995},{"type":30,"tag":1046,"props":15927,"children":15928},{"style":1070},[15929],{"type":40,"value":2891},{"type":30,"tag":1046,"props":15931,"children":15932},{"style":1105},[15933],{"type":40,"value":15657},{"type":30,"tag":1046,"props":15935,"children":15936},{"style":1070},[15937],{"type":40,"value":1179},{"type":30,"tag":1046,"props":15939,"children":15940},{"style":1138},[15941],{"type":40,"value":15880},{"type":30,"tag":1046,"props":15943,"children":15944},{"style":1070},[15945],{"type":40,"value":3340},{"type":30,"tag":1046,"props":15947,"children":15948},{"class":1048,"line":1354},[15949],{"type":30,"tag":1046,"props":15950,"children":15951},{"style":1070},[15952],{"type":40,"value":11922},{"type":30,"tag":1046,"props":15954,"children":15955},{"class":1048,"line":1391},[15956],{"type":30,"tag":1046,"props":15957,"children":15958},{"emptyLinePlaceholder":13},[15959],{"type":40,"value":1121},{"type":30,"tag":1046,"props":15961,"children":15962},{"class":1048,"line":1409},[15963],{"type":30,"tag":1046,"props":15964,"children":15965},{"style":3961},[15966],{"type":40,"value":15967},"        // Envoi de la commande\n",{"type":30,"tag":1046,"props":15969,"children":15970},{"class":1048,"line":1417},[15971,15976,15980,15984,15988,15993],{"type":30,"tag":1046,"props":15972,"children":15973},{"style":1138},[15974],{"type":40,"value":15975},"        sendOrder",{"type":30,"tag":1046,"props":15977,"children":15978},{"style":1070},[15979],{"type":40,"value":1146},{"type":30,"tag":1046,"props":15981,"children":15982},{"style":1105},[15983],{"type":40,"value":15689},{"type":30,"tag":1046,"props":15985,"children":15986},{"style":1070},[15987],{"type":40,"value":2891},{"type":30,"tag":1046,"props":15989,"children":15990},{"style":1105},[15991],{"type":40,"value":15992}," total",{"type":30,"tag":1046,"props":15994,"children":15995},{"style":1070},[15996],{"type":40,"value":1198},{"type":30,"tag":1046,"props":15998,"children":15999},{"class":1048,"line":2023},[16000],{"type":30,"tag":1046,"props":16001,"children":16002},{"style":1070},[16003],{"type":40,"value":1207},{"type":30,"tag":1046,"props":16005,"children":16006},{"class":1048,"line":2083},[16007],{"type":30,"tag":1046,"props":16008,"children":16009},{"style":1070},[16010],{"type":40,"value":1423},{"type":30,"tag":43,"props":16012,"children":16013},{},[16014,16016,16020],{"type":40,"value":16015},"En appliquant ",{"type":30,"tag":36,"props":16017,"children":16018},{},[16019],{"type":40,"value":13051},{"type":40,"value":16021},", nous pouvons décomposer cette méthode en plusieurs petites méthodes avec des responsabilités claires :",{"type":30,"tag":1035,"props":16023,"children":16025},{"className":1039,"code":16024,"language":1038,"meta":8,"style":8},"// Version simplifiée avec KISS\npublic void processOrder(Order order) {\n    if (!order.isValid()) {\n        return;\n    }\n    \n    double total = calculateTotal(order);\n    total = applyDiscount(order, total);\n    \n    sendOrder(order, total);\n}\n\nprivate double calculateTotal(Order order) {\n    return order.getItems().stream()\n        .mapToDouble(item -> item.getPrice() * item.getQuantity())\n        .sum();\n}\n\nprivate double applyDiscount(Order order, double total) {\n    if (order.getDiscountCode() != null) {\n        return total - calculateDiscount(total, order.getDiscountCode());\n    }\n    return total;\n}\n",[16026],{"type":30,"tag":1042,"props":16027,"children":16028},{"__ignoreMap":8},[16029,16036,16071,16107,16118,16125,16133,16165,16202,16209,16237,16244,16251,16286,16317,16380,16395,16402,16409,16456,16499,16547,16554,16569],{"type":30,"tag":1046,"props":16030,"children":16031},{"class":1048,"line":1049},[16032],{"type":30,"tag":1046,"props":16033,"children":16034},{"style":3961},[16035],{"type":40,"value":14333},{"type":30,"tag":1046,"props":16037,"children":16038},{"class":1048,"line":675},[16039,16043,16047,16051,16055,16059,16063,16067],{"type":30,"tag":1046,"props":16040,"children":16041},{"style":1053},[16042],{"type":40,"value":1056},{"type":30,"tag":1046,"props":16044,"children":16045},{"style":1053},[16046],{"type":40,"value":1135},{"type":30,"tag":1046,"props":16048,"children":16049},{"style":1138},[16050],{"type":40,"value":15643},{"type":30,"tag":1046,"props":16052,"children":16053},{"style":1070},[16054],{"type":40,"value":1146},{"type":30,"tag":1046,"props":16056,"children":16057},{"style":1084},[16058],{"type":40,"value":15652},{"type":30,"tag":1046,"props":16060,"children":16061},{"style":1105},[16062],{"type":40,"value":15657},{"type":30,"tag":1046,"props":16064,"children":16065},{"style":1070},[16066],{"type":40,"value":1161},{"type":30,"tag":1046,"props":16068,"children":16069},{"style":1070},[16070],{"type":40,"value":1073},{"type":30,"tag":1046,"props":16072,"children":16073},{"class":1048,"line":681},[16074,16078,16082,16087,16091,16095,16099,16103],{"type":30,"tag":1046,"props":16075,"children":16076},{"style":1053},[16077],{"type":40,"value":14008},{"type":30,"tag":1046,"props":16079,"children":16080},{"style":1070},[16081],{"type":40,"value":11861},{"type":30,"tag":1046,"props":16083,"children":16084},{"style":1795},[16085],{"type":40,"value":16086},"!",{"type":30,"tag":1046,"props":16088,"children":16089},{"style":1105},[16090],{"type":40,"value":15689},{"type":30,"tag":1046,"props":16092,"children":16093},{"style":1070},[16094],{"type":40,"value":1179},{"type":30,"tag":1046,"props":16096,"children":16097},{"style":1138},[16098],{"type":40,"value":15698},{"type":30,"tag":1046,"props":16100,"children":16101},{"style":1070},[16102],{"type":40,"value":13520},{"type":30,"tag":1046,"props":16104,"children":16105},{"style":1070},[16106],{"type":40,"value":1073},{"type":30,"tag":1046,"props":16108,"children":16109},{"class":1048,"line":1124},[16110,16114],{"type":30,"tag":1046,"props":16111,"children":16112},{"style":1053},[16113],{"type":40,"value":1333},{"type":30,"tag":1046,"props":16115,"children":16116},{"style":1070},[16117],{"type":40,"value":1113},{"type":30,"tag":1046,"props":16119,"children":16120},{"class":1048,"line":1168},[16121],{"type":30,"tag":1046,"props":16122,"children":16123},{"style":1070},[16124],{"type":40,"value":1207},{"type":30,"tag":1046,"props":16126,"children":16127},{"class":1048,"line":1201},[16128],{"type":30,"tag":1046,"props":16129,"children":16130},{"style":1105},[16131],{"type":40,"value":16132},"    \n",{"type":30,"tag":1046,"props":16134,"children":16135},{"class":1048,"line":1210},[16136,16141,16145,16149,16153,16157,16161],{"type":30,"tag":1046,"props":16137,"children":16138},{"style":1053},[16139],{"type":40,"value":16140},"    double",{"type":30,"tag":1046,"props":16142,"children":16143},{"style":1105},[16144],{"type":40,"value":5938},{"type":30,"tag":1046,"props":16146,"children":16147},{"style":1795},[16148],{"type":40,"value":1798},{"type":30,"tag":1046,"props":16150,"children":16151},{"style":1138},[16152],{"type":40,"value":1315},{"type":30,"tag":1046,"props":16154,"children":16155},{"style":1070},[16156],{"type":40,"value":1146},{"type":30,"tag":1046,"props":16158,"children":16159},{"style":1105},[16160],{"type":40,"value":15689},{"type":30,"tag":1046,"props":16162,"children":16163},{"style":1070},[16164],{"type":40,"value":1198},{"type":30,"tag":1046,"props":16166,"children":16167},{"class":1048,"line":1218},[16168,16173,16177,16182,16186,16190,16194,16198],{"type":30,"tag":1046,"props":16169,"children":16170},{"style":1105},[16171],{"type":40,"value":16172},"    total ",{"type":30,"tag":1046,"props":16174,"children":16175},{"style":1795},[16176],{"type":40,"value":1798},{"type":30,"tag":1046,"props":16178,"children":16179},{"style":1138},[16180],{"type":40,"value":16181}," applyDiscount",{"type":30,"tag":1046,"props":16183,"children":16184},{"style":1070},[16185],{"type":40,"value":1146},{"type":30,"tag":1046,"props":16187,"children":16188},{"style":1105},[16189],{"type":40,"value":15689},{"type":30,"tag":1046,"props":16191,"children":16192},{"style":1070},[16193],{"type":40,"value":2891},{"type":30,"tag":1046,"props":16195,"children":16196},{"style":1105},[16197],{"type":40,"value":15992},{"type":30,"tag":1046,"props":16199,"children":16200},{"style":1070},[16201],{"type":40,"value":1198},{"type":30,"tag":1046,"props":16203,"children":16204},{"class":1048,"line":1255},[16205],{"type":30,"tag":1046,"props":16206,"children":16207},{"style":1105},[16208],{"type":40,"value":16132},{"type":30,"tag":1046,"props":16210,"children":16211},{"class":1048,"line":1284},[16212,16217,16221,16225,16229,16233],{"type":30,"tag":1046,"props":16213,"children":16214},{"style":1138},[16215],{"type":40,"value":16216},"    sendOrder",{"type":30,"tag":1046,"props":16218,"children":16219},{"style":1070},[16220],{"type":40,"value":1146},{"type":30,"tag":1046,"props":16222,"children":16223},{"style":1105},[16224],{"type":40,"value":15689},{"type":30,"tag":1046,"props":16226,"children":16227},{"style":1070},[16228],{"type":40,"value":2891},{"type":30,"tag":1046,"props":16230,"children":16231},{"style":1105},[16232],{"type":40,"value":15992},{"type":30,"tag":1046,"props":16234,"children":16235},{"style":1070},[16236],{"type":40,"value":1198},{"type":30,"tag":1046,"props":16238,"children":16239},{"class":1048,"line":1292},[16240],{"type":30,"tag":1046,"props":16241,"children":16242},{"style":1070},[16243],{"type":40,"value":1423},{"type":30,"tag":1046,"props":16245,"children":16246},{"class":1048,"line":1300},[16247],{"type":30,"tag":1046,"props":16248,"children":16249},{"emptyLinePlaceholder":13},[16250],{"type":40,"value":1121},{"type":30,"tag":1046,"props":16252,"children":16253},{"class":1048,"line":1327},[16254,16258,16262,16266,16270,16274,16278,16282],{"type":30,"tag":1046,"props":16255,"children":16256},{"style":1053},[16257],{"type":40,"value":13600},{"type":30,"tag":1046,"props":16259,"children":16260},{"style":1053},[16261],{"type":40,"value":1310},{"type":30,"tag":1046,"props":16263,"children":16264},{"style":1138},[16265],{"type":40,"value":1315},{"type":30,"tag":1046,"props":16267,"children":16268},{"style":1070},[16269],{"type":40,"value":1146},{"type":30,"tag":1046,"props":16271,"children":16272},{"style":1084},[16273],{"type":40,"value":15652},{"type":30,"tag":1046,"props":16275,"children":16276},{"style":1105},[16277],{"type":40,"value":15657},{"type":30,"tag":1046,"props":16279,"children":16280},{"style":1070},[16281],{"type":40,"value":1161},{"type":30,"tag":1046,"props":16283,"children":16284},{"style":1070},[16285],{"type":40,"value":1073},{"type":30,"tag":1046,"props":16287,"children":16288},{"class":1048,"line":1354},[16289,16293,16297,16301,16305,16309,16313],{"type":30,"tag":1046,"props":16290,"children":16291},{"style":1053},[16292],{"type":40,"value":7894},{"type":30,"tag":1046,"props":16294,"children":16295},{"style":1105},[16296],{"type":40,"value":15657},{"type":30,"tag":1046,"props":16298,"children":16299},{"style":1070},[16300],{"type":40,"value":1179},{"type":30,"tag":1046,"props":16302,"children":16303},{"style":1138},[16304],{"type":40,"value":15776},{"type":30,"tag":1046,"props":16306,"children":16307},{"style":1070},[16308],{"type":40,"value":14098},{"type":30,"tag":1046,"props":16310,"children":16311},{"style":1138},[16312],{"type":40,"value":1346},{"type":30,"tag":1046,"props":16314,"children":16315},{"style":1070},[16316],{"type":40,"value":1351},{"type":30,"tag":1046,"props":16318,"children":16319},{"class":1048,"line":1391},[16320,16325,16329,16333,16338,16343,16347,16351,16355,16359,16363,16367,16371,16375],{"type":30,"tag":1046,"props":16321,"children":16322},{"style":1070},[16323],{"type":40,"value":16324},"        .",{"type":30,"tag":1046,"props":16326,"children":16327},{"style":1138},[16328],{"type":40,"value":1365},{"type":30,"tag":1046,"props":16330,"children":16331},{"style":1070},[16332],{"type":40,"value":1146},{"type":30,"tag":1046,"props":16334,"children":16335},{"style":1105},[16336],{"type":40,"value":16337},"item ",{"type":30,"tag":1046,"props":16339,"children":16340},{"style":1053},[16341],{"type":40,"value":16342},"->",{"type":30,"tag":1046,"props":16344,"children":16345},{"style":1105},[16346],{"type":40,"value":1156},{"type":30,"tag":1046,"props":16348,"children":16349},{"style":1070},[16350],{"type":40,"value":1179},{"type":30,"tag":1046,"props":16352,"children":16353},{"style":1138},[16354],{"type":40,"value":1383},{"type":30,"tag":1046,"props":16356,"children":16357},{"style":1070},[16358],{"type":40,"value":1320},{"type":30,"tag":1046,"props":16360,"children":16361},{"style":1795},[16362],{"type":40,"value":15817},{"type":30,"tag":1046,"props":16364,"children":16365},{"style":1105},[16366],{"type":40,"value":1156},{"type":30,"tag":1046,"props":16368,"children":16369},{"style":1070},[16370],{"type":40,"value":1179},{"type":30,"tag":1046,"props":16372,"children":16373},{"style":1138},[16374],{"type":40,"value":15830},{"type":30,"tag":1046,"props":16376,"children":16377},{"style":1070},[16378],{"type":40,"value":16379},"())\n",{"type":30,"tag":1046,"props":16381,"children":16382},{"class":1048,"line":1409},[16383,16387,16391],{"type":30,"tag":1046,"props":16384,"children":16385},{"style":1070},[16386],{"type":40,"value":16324},{"type":30,"tag":1046,"props":16388,"children":16389},{"style":1138},[16390],{"type":40,"value":1401},{"type":30,"tag":1046,"props":16392,"children":16393},{"style":1070},[16394],{"type":40,"value":1406},{"type":30,"tag":1046,"props":16396,"children":16397},{"class":1048,"line":1417},[16398],{"type":30,"tag":1046,"props":16399,"children":16400},{"style":1070},[16401],{"type":40,"value":1423},{"type":30,"tag":1046,"props":16403,"children":16404},{"class":1048,"line":2023},[16405],{"type":30,"tag":1046,"props":16406,"children":16407},{"emptyLinePlaceholder":13},[16408],{"type":40,"value":1121},{"type":30,"tag":1046,"props":16410,"children":16411},{"class":1048,"line":2083},[16412,16416,16420,16424,16428,16432,16436,16440,16444,16448,16452],{"type":30,"tag":1046,"props":16413,"children":16414},{"style":1053},[16415],{"type":40,"value":13600},{"type":30,"tag":1046,"props":16417,"children":16418},{"style":1053},[16419],{"type":40,"value":1310},{"type":30,"tag":1046,"props":16421,"children":16422},{"style":1138},[16423],{"type":40,"value":16181},{"type":30,"tag":1046,"props":16425,"children":16426},{"style":1070},[16427],{"type":40,"value":1146},{"type":30,"tag":1046,"props":16429,"children":16430},{"style":1084},[16431],{"type":40,"value":15652},{"type":30,"tag":1046,"props":16433,"children":16434},{"style":1105},[16435],{"type":40,"value":15657},{"type":30,"tag":1046,"props":16437,"children":16438},{"style":1070},[16439],{"type":40,"value":2891},{"type":30,"tag":1046,"props":16441,"children":16442},{"style":1053},[16443],{"type":40,"value":1310},{"type":30,"tag":1046,"props":16445,"children":16446},{"style":1105},[16447],{"type":40,"value":15992},{"type":30,"tag":1046,"props":16449,"children":16450},{"style":1070},[16451],{"type":40,"value":1161},{"type":30,"tag":1046,"props":16453,"children":16454},{"style":1070},[16455],{"type":40,"value":1073},{"type":30,"tag":1046,"props":16457,"children":16458},{"class":1048,"line":2126},[16459,16463,16467,16471,16475,16479,16483,16487,16491,16495],{"type":30,"tag":1046,"props":16460,"children":16461},{"style":1053},[16462],{"type":40,"value":14008},{"type":30,"tag":1046,"props":16464,"children":16465},{"style":1070},[16466],{"type":40,"value":11861},{"type":30,"tag":1046,"props":16468,"children":16469},{"style":1105},[16470],{"type":40,"value":15689},{"type":30,"tag":1046,"props":16472,"children":16473},{"style":1070},[16474],{"type":40,"value":1179},{"type":30,"tag":1046,"props":16476,"children":16477},{"style":1138},[16478],{"type":40,"value":15880},{"type":30,"tag":1046,"props":16480,"children":16481},{"style":1070},[16482],{"type":40,"value":1320},{"type":30,"tag":1046,"props":16484,"children":16485},{"style":1795},[16486],{"type":40,"value":14067},{"type":30,"tag":1046,"props":16488,"children":16489},{"style":1780},[16490],{"type":40,"value":11876},{"type":30,"tag":1046,"props":16492,"children":16493},{"style":1070},[16494],{"type":40,"value":1161},{"type":30,"tag":1046,"props":16496,"children":16497},{"style":1070},[16498],{"type":40,"value":1073},{"type":30,"tag":1046,"props":16500,"children":16501},{"class":1048,"line":2159},[16502,16506,16510,16515,16519,16523,16527,16531,16535,16539,16543],{"type":30,"tag":1046,"props":16503,"children":16504},{"style":1053},[16505],{"type":40,"value":1333},{"type":30,"tag":1046,"props":16507,"children":16508},{"style":1105},[16509],{"type":40,"value":5938},{"type":30,"tag":1046,"props":16511,"children":16512},{"style":1795},[16513],{"type":40,"value":16514},"-",{"type":30,"tag":1046,"props":16516,"children":16517},{"style":1138},[16518],{"type":40,"value":15917},{"type":30,"tag":1046,"props":16520,"children":16521},{"style":1070},[16522],{"type":40,"value":1146},{"type":30,"tag":1046,"props":16524,"children":16525},{"style":1105},[16526],{"type":40,"value":5995},{"type":30,"tag":1046,"props":16528,"children":16529},{"style":1070},[16530],{"type":40,"value":2891},{"type":30,"tag":1046,"props":16532,"children":16533},{"style":1105},[16534],{"type":40,"value":15657},{"type":30,"tag":1046,"props":16536,"children":16537},{"style":1070},[16538],{"type":40,"value":1179},{"type":30,"tag":1046,"props":16540,"children":16541},{"style":1138},[16542],{"type":40,"value":15880},{"type":30,"tag":1046,"props":16544,"children":16545},{"style":1070},[16546],{"type":40,"value":3340},{"type":30,"tag":1046,"props":16548,"children":16549},{"class":1048,"line":2167},[16550],{"type":30,"tag":1046,"props":16551,"children":16552},{"style":1070},[16553],{"type":40,"value":1207},{"type":30,"tag":1046,"props":16555,"children":16556},{"class":1048,"line":4537},[16557,16561,16565],{"type":30,"tag":1046,"props":16558,"children":16559},{"style":1053},[16560],{"type":40,"value":7894},{"type":30,"tag":1046,"props":16562,"children":16563},{"style":1105},[16564],{"type":40,"value":15992},{"type":30,"tag":1046,"props":16566,"children":16567},{"style":1070},[16568],{"type":40,"value":1113},{"type":30,"tag":1046,"props":16570,"children":16571},{"class":1048,"line":4545},[16572],{"type":30,"tag":1046,"props":16573,"children":16574},{"style":1070},[16575],{"type":40,"value":1423},{"type":30,"tag":43,"props":16577,"children":16578},{},[16579],{"type":40,"value":16580},"Ce code est désormais plus simple, plus lisible, et plus facile à tester, car chaque méthode a une responsabilité unique.",{"type":30,"tag":84,"props":16582,"children":16583},{},[],{"type":30,"tag":31,"props":16585,"children":16587},{"id":16586},"faq-réponses-aux-questions-courantes-sur-kiss",[16588],{"type":40,"value":16589},"FAQ : Réponses aux questions courantes sur KISS",{"type":30,"tag":530,"props":16591,"children":16592},{},[16593,16598],{"type":30,"tag":534,"props":16594,"children":16595},{},[16596],{"type":40,"value":16597},"1. Comment éviter la sur-simplification ?",{"type":30,"tag":43,"props":16599,"children":16600},{},[16601,16603,16607],{"type":40,"value":16602},"La sur-simplification peut être un piège si elle mène à des solutions incomplètes ou inefficaces. Pour éviter cela, assurez-vous que le code résout tous les cas d’utilisation nécessaires tout en restant simple. Appliquer ",{"type":30,"tag":36,"props":16604,"children":16605},{},[16606],{"type":40,"value":13051},{"type":40,"value":16608}," ne signifie pas ignorer les fonctionnalités importantes, mais plutôt éliminer ce qui est inutile. Une bonne pratique consiste à toujours se demander : \"Est-ce que cette abstraction ou cette complexité ajoute vraiment de la valeur ?\"",{"type":30,"tag":530,"props":16610,"children":16611},{},[16612,16617],{"type":30,"tag":534,"props":16613,"children":16614},{},[16615],{"type":40,"value":16616},"2. Comment convaincre mon équipe d’adopter KISS ?",{"type":30,"tag":43,"props":16618,"children":16619},{},[16620,16622,16626],{"type":40,"value":16621},"La meilleure façon de convaincre votre équipe est de montrer les avantages tangibles. Présentez des exemples concrets où un code simplifié a permis une meilleure maintenabilité, une réduction des bugs ou une plus grande clarté pour les nouveaux développeurs. Vous pouvez également introduire progressivement ",{"type":30,"tag":36,"props":16623,"children":16624},{},[16625],{"type":40,"value":13051},{"type":40,"value":16627}," dans les revues de code, en expliquant les raisons derrière les simplifications que vous proposez.",{"type":30,"tag":530,"props":16629,"children":16630},{},[16631,16636],{"type":30,"tag":534,"props":16632,"children":16633},{},[16634],{"type":40,"value":16635},"3. La simplicité réduit-elle la performance ?",{"type":30,"tag":43,"props":16637,"children":16638},{},[16639],{"type":40,"value":16640},"Pas forcément. La simplicité peut souvent améliorer la performance, car un code simple a tendance à faire moins de choses inutiles et est plus facile à optimiser. Cela dit, il y a des situations où la performance nécessite une certaine complexité, par exemple dans des algorithmes avancés. L’idée est de toujours chercher un équilibre et d’introduire la complexité seulement lorsque cela est absolument nécessaire.",{"type":30,"tag":530,"props":16642,"children":16643},{},[16644,16649],{"type":30,"tag":534,"props":16645,"children":16646},{},[16647],{"type":40,"value":16648},"4. Est-il toujours possible d’appliquer KISS ?",{"type":30,"tag":43,"props":16650,"children":16651},{},[16652,16654,16658],{"type":40,"value":16653},"Non, il y a des cas où une certaine complexité est inévitable. Par exemple, dans des systèmes distribués ou des applications critiques, certaines architectures peuvent nécessiter des niveaux d’abstraction élevés. Toutefois, même dans ces contextes, vous pouvez appliquer ",{"type":30,"tag":36,"props":16655,"children":16656},{},[16657],{"type":40,"value":13051},{"type":40,"value":16659}," en rendant chaque composant aussi simple que possible et en minimisant la complexité là où c’est possible.",{"type":30,"tag":530,"props":16661,"children":16662},{},[16663,16668],{"type":30,"tag":534,"props":16664,"children":16665},{},[16666],{"type":40,"value":16667},"5. Quels sont les avantages à long terme de KISS ?",{"type":30,"tag":43,"props":16669,"children":16670},{},[16671],{"type":40,"value":16672},"Le principal avantage est la maintenabilité. Un code simple est plus facile à lire, à comprendre et à mettre à jour, ce qui réduit les coûts à long terme. Il est également moins sujet aux bugs, car il est plus facile de raisonner sur un code simple. Enfin, en gardant votre code simple, vous facilitez également l’intégration de nouveaux développeurs dans votre projet, car ils comprendront plus rapidement le fonctionnement de votre application.",{"type":30,"tag":530,"props":16674,"children":16675},{},[16676,16681],{"type":30,"tag":534,"props":16677,"children":16678},{},[16679],{"type":40,"value":16680},"6. Que faire si mon code devient trop complexe avec le temps ?",{"type":30,"tag":43,"props":16682,"children":16683},{},[16684,16686,16690],{"type":40,"value":16685},"La complexité peut s’accumuler au fil du temps, surtout dans les grands projets. Je vous recommande de prévoir des phases de refactorisation régulières pour réduire cette complexité. Prenez le temps de revoir votre code existant, identifiez les parties trop complexes et appliquez ",{"type":30,"tag":36,"props":16687,"children":16688},{},[16689],{"type":40,"value":13051},{"type":40,"value":16691}," pour les simplifier. Une bonne règle est de toujours chercher à simplifier le code lorsque vous y revenez pour ajouter des fonctionnalités ou corriger des bugs.",{"type":30,"tag":84,"props":16693,"children":16694},{},[],{"type":30,"tag":43,"props":16696,"children":16697},{},[16698,16700,16704,16706,16710],{"type":40,"value":16699},"Le principe ",{"type":30,"tag":36,"props":16701,"children":16702},{},[16703],{"type":40,"value":13051},{"type":40,"value":16705},", les bonnes pratiques de ",{"type":30,"tag":36,"props":16707,"children":16708},{},[16709],{"type":40,"value":13173},{"type":40,"value":16711}," et les exemples Java que vous avez parcourus ici forment un ensemble cohérent. En les appliquant, vous pouvez rendre votre code plus simple, plus lisible et plus maintenable, tout en préservant ses performances et sa robustesse.",{"type":30,"tag":211,"props":16713,"children":16715},{"cta":11121,"href":639,"title":16714,"type":641},"Ressource gratuite : Faites votre propre audit engineering en 2 heures",[16716],{"type":30,"tag":43,"props":16717,"children":16718},{},[16719],{"type":40,"value":16720},"Le template Notion utilisé dans 15+ audits professionnels. 6 sections, 40 questions guidées, scoring visuel automatique — format décisionnel prêt à présenter à votre direction.",{"type":30,"tag":6456,"props":16722,"children":16723},{},[16724],{"type":40,"value":6460},{"title":8,"searchDepth":675,"depth":675,"links":16726},[16727,16728,16732,16739,16745],{"id":13033,"depth":675,"text":13036},{"id":13089,"depth":675,"text":13092,"children":16729},[16730,16731],{"id":13111,"depth":681,"text":13114},{"id":13127,"depth":681,"text":13130},{"id":13161,"depth":675,"text":13164,"children":16733},[16734,16735,16736,16737,16738],{"id":13195,"depth":681,"text":13198},{"id":13676,"depth":681,"text":13679},{"id":13687,"depth":681,"text":13690},{"id":13877,"depth":681,"text":13880},{"id":13902,"depth":681,"text":13905},{"id":13922,"depth":675,"text":13925,"children":16740},[16741,16742,16743,16744],{"id":13939,"depth":681,"text":13942},{"id":14636,"depth":681,"text":14639},{"id":15020,"depth":681,"text":15023},{"id":15604,"depth":681,"text":15607},{"id":16586,"depth":675,"text":16589},"content:fr:dette-technique:principe-kiss-bonnes-pratiques-java.md","fr/dette-technique/principe-kiss-bonnes-pratiques-java.md","fr/dette-technique/principe-kiss-bonnes-pratiques-java",{"_path":16750,"_dir":717,"_draft":7,"_partial":7,"_locale":8,"title":16751,"description":719,"id":10674,"date":16752,"listed":13,"nocomments":7,"hidden":7,"categories":16753,"tags":16754,"--cover":16755,"readingTime":16756,"body":16761,"_type":709,"_id":19399,"_source":711,"_file":19400,"_stem":19401,"_extension":714},"/fr/architecture-craft/decouvrir-domain-driven-design-ddd-avantages-exemples-java","Découvrir le Domain-Driven Design (DDD), Avantages, Bonnes Pratiques et Exemples en Java","2024-07-23",[723],[725,726],"covers/articles/domain-driven-design.jpg",{"text":16757,"minutes":16758,"time":16759,"words":16760},"9 min read",8.37,502200,1674,{"type":27,"children":16762,"toc":19368},[16763,16769,16780,16785,16790,16793,16799,16811,16822,16828,16860,16865,16868,16882,16888,16893,16903,16915,16920,17241,17250,17260,17272,17277,17964,17973,17983,18001,18006,18414,18424,18434,18445,18450,18579,18588,18598,18609,18614,18705,18714,18717,18723,18728,18738,18749,18759,18764,18774,18779,18785,18793,18803,18808,18818,18831,18837,19245,19254,19257,19263,19276,19289,19302,19315,19328,19341,19354,19364],{"type":30,"tag":31,"props":16764,"children":16766},{"id":16765},"introduction-au-domain-driven-design-ddd",[16767],{"type":40,"value":16768},"Introduction au Domain-Driven Design (DDD)",{"type":30,"tag":43,"props":16770,"children":16771},{},[16772,16774,16778],{"type":40,"value":16773},"Vous êtes devant votre écran, à boire votre troisième café de la matinée, et vous vous demandez pourquoi votre code vous paraît aussi compliqué. La logique métier est partout, mélangée avec des détails techniques. C’est là que le ",{"type":30,"tag":36,"props":16775,"children":16776},{},[16777],{"type":40,"value":770},{"type":40,"value":16779}," entre en jeu.",{"type":30,"tag":43,"props":16781,"children":16782},{},[16783],{"type":40,"value":16784},"Imaginez un monde où votre code reflète parfaitement la réalité métier de votre projet. Où chaque entité, chaque service, fait exactement ce qu’il est censé faire, sans confusion ni redondance. Où ajouter de nouvelles fonctionnalités devient simple, et où le risque de tout casser à chaque modification est réduit. C’est possible, et j’en ai été convaincu après avoir accompagné des équipes dans des transformations de ce type, notamment chez des clients dans le secteur bancaire et assurantiel.",{"type":30,"tag":43,"props":16786,"children":16787},{},[16788],{"type":40,"value":16789},"Dans cet article, vous allez découvrir ce qu’est vraiment le DDD, pourquoi il peut transformer la manière dont vous construisez vos logiciels, et comment vous pouvez l’appliquer en Java avec des explications claires et des exemples concrets. Eric Evans a formalisé cette approche dans son ouvrage \"Domain-Driven Design\" (2003), qui reste la référence incontournable sur le sujet.",{"type":30,"tag":84,"props":16791,"children":16792},{},[],{"type":30,"tag":31,"props":16794,"children":16796},{"id":16795},"pourquoi-le-domain-driven-design-ddd-est-il-important-dans-la-conception-logicielle",[16797],{"type":40,"value":16798},"Pourquoi le Domain-Driven Design (DDD) est-il important dans la conception logicielle ?",{"type":30,"tag":43,"props":16800,"children":16801},{},[16802,16804,16809],{"type":40,"value":16803},"Alors, pourquoi tout ce battage autour du DDD ? Simplement parce que, dans un projet logiciel complexe, ",{"type":30,"tag":36,"props":16805,"children":16806},{},[16807],{"type":40,"value":16808},"la logique métier",{"type":40,"value":16810}," (ce que votre application est censée faire) finit souvent noyée dans des considérations techniques. Vous vous retrouvez à jongler avec du code qui traite plus de \"comment\" que de \"quoi\" et \"pourquoi\". Résultat ? Des bugs, des incompréhensions, et surtout, un code difficile à maintenir. J’ai observé ce problème dans des dizaines d’équipes : chaque fois, les coûts de maintenance explosent précisément parce que la logique métier est dispersée dans tout le code.",{"type":30,"tag":43,"props":16812,"children":16813},{},[16814,16816,16820],{"type":40,"value":16815},"Le DDD vient à la rescousse en proposant une approche qui met le ",{"type":30,"tag":36,"props":16817,"children":16818},{},[16819],{"type":40,"value":11233},{"type":40,"value":16821}," au centre de votre conception. Autrement dit, le DDD vous pousse à structurer votre code autour des règles et concepts spécifiques à votre domaine, et pas autour des technologies que vous utilisez. Dans mes missions chez des grandes DSI, ce point est systématiquement sous-estimé : on modélise les tables de base de données avant de modéliser le domaine, et on le regrette des mois plus tard.",{"type":30,"tag":116,"props":16823,"children":16825},{"id":16824},"un-exemple-concret-la-gestion-dune-bibliothèque",[16826],{"type":40,"value":16827},"Un exemple concret : La gestion d'une bibliothèque",{"type":30,"tag":43,"props":16829,"children":16830},{},[16831,16833,16838,16840,16845,16846,16851,16853,16858],{"type":40,"value":16832},"Prenons un exemple. Imaginons que vous développiez un système pour une bibliothèque. Vous avez des ",{"type":30,"tag":36,"props":16834,"children":16835},{},[16836],{"type":40,"value":16837},"livres",{"type":40,"value":16839},", des ",{"type":30,"tag":36,"props":16841,"children":16842},{},[16843],{"type":40,"value":16844},"emprunts",{"type":40,"value":16839},{"type":30,"tag":36,"props":16847,"children":16848},{},[16849],{"type":40,"value":16850},"abonnés",{"type":40,"value":16852},", et des ",{"type":30,"tag":36,"props":16854,"children":16855},{},[16856],{"type":40,"value":16857},"règles métier",{"type":40,"value":16859}," comme \"un abonné ne peut pas emprunter plus de 5 livres\". Si vous n'y prenez pas garde, vous risquez de mélanger tout ça avec des détails techniques (comme la gestion des bases de données) et de finir avec une application où la règle des 5 livres est enterrée quelque part entre les classes de gestion de base de données et les classes de validation.",{"type":30,"tag":43,"props":16861,"children":16862},{},[16863],{"type":40,"value":16864},"Le DDD vous demande de modéliser ces concepts (livres, abonnés, emprunts) de manière claire et de créer des objets métier qui représentent ces réalités. Résultat : votre code devient plus facile à lire, à maintenir et à faire évoluer. Les règles sont où elles doivent être : dans le domaine métier, et non dispersées dans tout le projet. Ce qui se traduit concrètement par des cycles de livraison plus courts et un risque réduit d'erreurs métier en production.",{"type":30,"tag":84,"props":16866,"children":16867},{},[],{"type":30,"tag":211,"props":16869,"children":16871},{"cta":213,"href":214,"title":16870,"type":216},"Vos développeurs et vos experts métier parlent-ils vraiment le même langage ?",[16872,16877],{"type":30,"tag":43,"props":16873,"children":16874},{},[16875],{"type":40,"value":16876},"La logique business est éparpillée dans tout le code, personne ne sait vraiment où elle se trouve, et chaque nouvelle fonctionnalité demande un archéologue pour comprendre les règles existantes ? C'est souvent le symptôme d'un manque de modélisation métier claire.",{"type":30,"tag":43,"props":16878,"children":16879},{},[16880],{"type":40,"value":16881},"Réservons 30 minutes pour diagnostiquer comment aligner votre code sur la réalité de votre domaine et réduire la dette métier qui plombe votre vélocité.",{"type":30,"tag":31,"props":16883,"children":16885},{"id":16884},"les-concepts-clés-du-domain-driven-design-ddd",[16886],{"type":40,"value":16887},"Les concepts clés du Domain-Driven Design (DDD)",{"type":30,"tag":43,"props":16889,"children":16890},{},[16891],{"type":40,"value":16892},"Le DDD, ce n’est pas juste une nouvelle façon de coder. Avant de maîtriser ces approches, voici les concepts de base à comprendre, avec des explications simples et des exemples en Java pour illustrer le tout.",{"type":30,"tag":116,"props":16894,"children":16896},{"id":16895},"_1-entité",[16897,16898],{"type":40,"value":242},{"type":30,"tag":36,"props":16899,"children":16900},{},[16901],{"type":40,"value":16902},"Entité",{"type":30,"tag":43,"props":16904,"children":16905},{},[16906,16908,16913],{"type":40,"value":16907},"Une ",{"type":30,"tag":36,"props":16909,"children":16910},{},[16911],{"type":40,"value":16912},"entité",{"type":40,"value":16914}," est un objet qui possède une identité unique qui le distingue des autres, même si ses attributs peuvent changer. Autrement dit, deux objets avec les mêmes données peuvent être considérés comme différents s'ils ont des identités distinctes.",{"type":30,"tag":2339,"props":16916,"children":16918},{"id":16917},"exemple-en-java",[16919],{"type":40,"value":13211},{"type":30,"tag":1035,"props":16921,"children":16923},{"code":16922,"language":1038,"meta":8,"className":1039,"style":8},"public class Abonne {\n    private final String id;  // Identité unique\n    private String nom;\n    private String adresse;\n\n    public Abonne(String id, String nom, String adresse) {\n        this.id = id;\n        this.nom = nom;\n        this.adresse = adresse;\n    }\n\n    public String getId() {\n        return id;\n    }\n\n    // getters et setters...\n}\n",[16924],{"type":30,"tag":1042,"props":16925,"children":16926},{"__ignoreMap":8},[16927,16947,16975,16995,17015,17022,17077,17104,17132,17160,17167,17174,17197,17212,17219,17226,17234],{"type":30,"tag":1046,"props":16928,"children":16929},{"class":1048,"line":1049},[16930,16934,16938,16943],{"type":30,"tag":1046,"props":16931,"children":16932},{"style":1053},[16933],{"type":40,"value":1056},{"type":30,"tag":1046,"props":16935,"children":16936},{"style":1053},[16937],{"type":40,"value":1061},{"type":30,"tag":1046,"props":16939,"children":16940},{"style":1064},[16941],{"type":40,"value":16942}," Abonne",{"type":30,"tag":1046,"props":16944,"children":16945},{"style":1070},[16946],{"type":40,"value":1073},{"type":30,"tag":1046,"props":16948,"children":16949},{"class":1048,"line":675},[16950,16954,16958,16962,16966,16970],{"type":30,"tag":1046,"props":16951,"children":16952},{"style":1053},[16953],{"type":40,"value":1081},{"type":30,"tag":1046,"props":16955,"children":16956},{"style":1053},[16957],{"type":40,"value":1721},{"type":30,"tag":1046,"props":16959,"children":16960},{"style":1084},[16961],{"type":40,"value":2067},{"type":30,"tag":1046,"props":16963,"children":16964},{"style":1105},[16965],{"type":40,"value":6811},{"type":30,"tag":1046,"props":16967,"children":16968},{"style":1070},[16969],{"type":40,"value":13298},{"type":30,"tag":1046,"props":16971,"children":16972},{"style":3961},[16973],{"type":40,"value":16974},"  // Identité unique\n",{"type":30,"tag":1046,"props":16976,"children":16977},{"class":1048,"line":681},[16978,16982,16986,16991],{"type":30,"tag":1046,"props":16979,"children":16980},{"style":1053},[16981],{"type":40,"value":1081},{"type":30,"tag":1046,"props":16983,"children":16984},{"style":1084},[16985],{"type":40,"value":2067},{"type":30,"tag":1046,"props":16987,"children":16988},{"style":1105},[16989],{"type":40,"value":16990}," nom",{"type":30,"tag":1046,"props":16992,"children":16993},{"style":1070},[16994],{"type":40,"value":1113},{"type":30,"tag":1046,"props":16996,"children":16997},{"class":1048,"line":1124},[16998,17002,17006,17011],{"type":30,"tag":1046,"props":16999,"children":17000},{"style":1053},[17001],{"type":40,"value":1081},{"type":30,"tag":1046,"props":17003,"children":17004},{"style":1084},[17005],{"type":40,"value":2067},{"type":30,"tag":1046,"props":17007,"children":17008},{"style":1105},[17009],{"type":40,"value":17010}," adresse",{"type":30,"tag":1046,"props":17012,"children":17013},{"style":1070},[17014],{"type":40,"value":1113},{"type":30,"tag":1046,"props":17016,"children":17017},{"class":1048,"line":1168},[17018],{"type":30,"tag":1046,"props":17019,"children":17020},{"emptyLinePlaceholder":13},[17021],{"type":40,"value":1121},{"type":30,"tag":1046,"props":17023,"children":17024},{"class":1048,"line":1201},[17025,17029,17033,17037,17041,17045,17049,17053,17057,17061,17065,17069,17073],{"type":30,"tag":1046,"props":17026,"children":17027},{"style":1053},[17028],{"type":40,"value":1130},{"type":30,"tag":1046,"props":17030,"children":17031},{"style":1138},[17032],{"type":40,"value":16942},{"type":30,"tag":1046,"props":17034,"children":17035},{"style":1070},[17036],{"type":40,"value":1146},{"type":30,"tag":1046,"props":17038,"children":17039},{"style":1084},[17040],{"type":40,"value":2882},{"type":30,"tag":1046,"props":17042,"children":17043},{"style":1153},[17044],{"type":40,"value":6811},{"type":30,"tag":1046,"props":17046,"children":17047},{"style":1070},[17048],{"type":40,"value":2891},{"type":30,"tag":1046,"props":17050,"children":17051},{"style":1084},[17052],{"type":40,"value":2067},{"type":30,"tag":1046,"props":17054,"children":17055},{"style":1153},[17056],{"type":40,"value":16990},{"type":30,"tag":1046,"props":17058,"children":17059},{"style":1070},[17060],{"type":40,"value":2891},{"type":30,"tag":1046,"props":17062,"children":17063},{"style":1084},[17064],{"type":40,"value":2067},{"type":30,"tag":1046,"props":17066,"children":17067},{"style":1153},[17068],{"type":40,"value":17010},{"type":30,"tag":1046,"props":17070,"children":17071},{"style":1070},[17072],{"type":40,"value":1161},{"type":30,"tag":1046,"props":17074,"children":17075},{"style":1070},[17076],{"type":40,"value":1073},{"type":30,"tag":1046,"props":17078,"children":17079},{"class":1048,"line":1210},[17080,17084,17088,17092,17096,17100],{"type":30,"tag":1046,"props":17081,"children":17082},{"style":1780},[17083],{"type":40,"value":1783},{"type":30,"tag":1046,"props":17085,"children":17086},{"style":1070},[17087],{"type":40,"value":1179},{"type":30,"tag":1046,"props":17089,"children":17090},{"style":1105},[17091],{"type":40,"value":10364},{"type":30,"tag":1046,"props":17093,"children":17094},{"style":1795},[17095],{"type":40,"value":1798},{"type":30,"tag":1046,"props":17097,"children":17098},{"style":1105},[17099],{"type":40,"value":6811},{"type":30,"tag":1046,"props":17101,"children":17102},{"style":1070},[17103],{"type":40,"value":1113},{"type":30,"tag":1046,"props":17105,"children":17106},{"class":1048,"line":1218},[17107,17111,17115,17120,17124,17128],{"type":30,"tag":1046,"props":17108,"children":17109},{"style":1780},[17110],{"type":40,"value":1783},{"type":30,"tag":1046,"props":17112,"children":17113},{"style":1070},[17114],{"type":40,"value":1179},{"type":30,"tag":1046,"props":17116,"children":17117},{"style":1105},[17118],{"type":40,"value":17119},"nom ",{"type":30,"tag":1046,"props":17121,"children":17122},{"style":1795},[17123],{"type":40,"value":1798},{"type":30,"tag":1046,"props":17125,"children":17126},{"style":1105},[17127],{"type":40,"value":16990},{"type":30,"tag":1046,"props":17129,"children":17130},{"style":1070},[17131],{"type":40,"value":1113},{"type":30,"tag":1046,"props":17133,"children":17134},{"class":1048,"line":1255},[17135,17139,17143,17148,17152,17156],{"type":30,"tag":1046,"props":17136,"children":17137},{"style":1780},[17138],{"type":40,"value":1783},{"type":30,"tag":1046,"props":17140,"children":17141},{"style":1070},[17142],{"type":40,"value":1179},{"type":30,"tag":1046,"props":17144,"children":17145},{"style":1105},[17146],{"type":40,"value":17147},"adresse ",{"type":30,"tag":1046,"props":17149,"children":17150},{"style":1795},[17151],{"type":40,"value":1798},{"type":30,"tag":1046,"props":17153,"children":17154},{"style":1105},[17155],{"type":40,"value":17010},{"type":30,"tag":1046,"props":17157,"children":17158},{"style":1070},[17159],{"type":40,"value":1113},{"type":30,"tag":1046,"props":17161,"children":17162},{"class":1048,"line":1284},[17163],{"type":30,"tag":1046,"props":17164,"children":17165},{"style":1070},[17166],{"type":40,"value":1207},{"type":30,"tag":1046,"props":17168,"children":17169},{"class":1048,"line":1292},[17170],{"type":30,"tag":1046,"props":17171,"children":17172},{"emptyLinePlaceholder":13},[17173],{"type":40,"value":1121},{"type":30,"tag":1046,"props":17175,"children":17176},{"class":1048,"line":1300},[17177,17181,17185,17189,17193],{"type":30,"tag":1046,"props":17178,"children":17179},{"style":1053},[17180],{"type":40,"value":1130},{"type":30,"tag":1046,"props":17182,"children":17183},{"style":1084},[17184],{"type":40,"value":2067},{"type":30,"tag":1046,"props":17186,"children":17187},{"style":1138},[17188],{"type":40,"value":10460},{"type":30,"tag":1046,"props":17190,"children":17191},{"style":1070},[17192],{"type":40,"value":1320},{"type":30,"tag":1046,"props":17194,"children":17195},{"style":1070},[17196],{"type":40,"value":1073},{"type":30,"tag":1046,"props":17198,"children":17199},{"class":1048,"line":1327},[17200,17204,17208],{"type":30,"tag":1046,"props":17201,"children":17202},{"style":1053},[17203],{"type":40,"value":1333},{"type":30,"tag":1046,"props":17205,"children":17206},{"style":1105},[17207],{"type":40,"value":6811},{"type":30,"tag":1046,"props":17209,"children":17210},{"style":1070},[17211],{"type":40,"value":1113},{"type":30,"tag":1046,"props":17213,"children":17214},{"class":1048,"line":1354},[17215],{"type":30,"tag":1046,"props":17216,"children":17217},{"style":1070},[17218],{"type":40,"value":1207},{"type":30,"tag":1046,"props":17220,"children":17221},{"class":1048,"line":1391},[17222],{"type":30,"tag":1046,"props":17223,"children":17224},{"emptyLinePlaceholder":13},[17225],{"type":40,"value":1121},{"type":30,"tag":1046,"props":17227,"children":17228},{"class":1048,"line":1409},[17229],{"type":30,"tag":1046,"props":17230,"children":17231},{"style":3961},[17232],{"type":40,"value":17233},"    // getters et setters...\n",{"type":30,"tag":1046,"props":17235,"children":17236},{"class":1048,"line":1417},[17237],{"type":30,"tag":1046,"props":17238,"children":17239},{"style":1070},[17240],{"type":40,"value":1423},{"type":30,"tag":43,"props":17242,"children":17243},{},[17244,17248],{"type":30,"tag":36,"props":17245,"children":17246},{},[17247],{"type":40,"value":8011},{"type":40,"value":17249}," Les entités doivent avoir une identité claire. Je vous recommande d'utiliser un identifiant unique (comme un UUID) pour chaque entité afin de les différencier facilement dans votre domaine.",{"type":30,"tag":116,"props":17251,"children":17253},{"id":17252},"_2-objet-de-valeur-value-object",[17254,17255],{"type":40,"value":268},{"type":30,"tag":36,"props":17256,"children":17257},{},[17258],{"type":40,"value":17259},"Objet de valeur (Value Object)",{"type":30,"tag":43,"props":17261,"children":17262},{},[17263,17265,17270],{"type":40,"value":17264},"Un ",{"type":30,"tag":36,"props":17266,"children":17267},{},[17268],{"type":40,"value":17269},"objet de valeur",{"type":40,"value":17271}," est un objet qui n'a pas d'identité propre. Il est défini uniquement par ses attributs. Si deux objets ont les mêmes attributs, ils sont considérés comme identiques.",{"type":30,"tag":2339,"props":17273,"children":17275},{"id":17274},"exemple-en-java-1",[17276],{"type":40,"value":13211},{"type":30,"tag":1035,"props":17278,"children":17280},{"code":17279,"language":1038,"meta":8,"className":1039,"style":8},"public class Adresse {\n    private String rue;\n    private String ville;\n    private String codePostal;\n\n    public Adresse(String rue, String ville, String codePostal) {\n        this.rue = rue;\n        this.ville = ville;\n        this.codePostal = codePostal;\n    }\n\n    @Override\n    public boolean equals(Object o) {\n        if (this == o) return true;\n        if (o == null || getClass() != o.getClass()) return false;\n        Adresse adresse = (Adresse) o;\n        return rue.equals(adresse.rue) && ville.equals(adresse.ville) && codePostal.equals(adresse.codePostal);\n    }\n\n    @Override\n    public int hashCode() {\n        return Objects.hash(rue, ville, codePostal);\n    }\n\n    // getters et setters...\n}\n",[17281],{"type":30,"tag":1042,"props":17282,"children":17283},{"__ignoreMap":8},[17284,17304,17324,17344,17364,17371,17426,17454,17482,17510,17517,17524,17535,17573,17614,17684,17722,17838,17845,17852,17863,17887,17936,17943,17950,17957],{"type":30,"tag":1046,"props":17285,"children":17286},{"class":1048,"line":1049},[17287,17291,17295,17300],{"type":30,"tag":1046,"props":17288,"children":17289},{"style":1053},[17290],{"type":40,"value":1056},{"type":30,"tag":1046,"props":17292,"children":17293},{"style":1053},[17294],{"type":40,"value":1061},{"type":30,"tag":1046,"props":17296,"children":17297},{"style":1064},[17298],{"type":40,"value":17299}," Adresse",{"type":30,"tag":1046,"props":17301,"children":17302},{"style":1070},[17303],{"type":40,"value":1073},{"type":30,"tag":1046,"props":17305,"children":17306},{"class":1048,"line":675},[17307,17311,17315,17320],{"type":30,"tag":1046,"props":17308,"children":17309},{"style":1053},[17310],{"type":40,"value":1081},{"type":30,"tag":1046,"props":17312,"children":17313},{"style":1084},[17314],{"type":40,"value":2067},{"type":30,"tag":1046,"props":17316,"children":17317},{"style":1105},[17318],{"type":40,"value":17319}," rue",{"type":30,"tag":1046,"props":17321,"children":17322},{"style":1070},[17323],{"type":40,"value":1113},{"type":30,"tag":1046,"props":17325,"children":17326},{"class":1048,"line":681},[17327,17331,17335,17340],{"type":30,"tag":1046,"props":17328,"children":17329},{"style":1053},[17330],{"type":40,"value":1081},{"type":30,"tag":1046,"props":17332,"children":17333},{"style":1084},[17334],{"type":40,"value":2067},{"type":30,"tag":1046,"props":17336,"children":17337},{"style":1105},[17338],{"type":40,"value":17339}," ville",{"type":30,"tag":1046,"props":17341,"children":17342},{"style":1070},[17343],{"type":40,"value":1113},{"type":30,"tag":1046,"props":17345,"children":17346},{"class":1048,"line":1124},[17347,17351,17355,17360],{"type":30,"tag":1046,"props":17348,"children":17349},{"style":1053},[17350],{"type":40,"value":1081},{"type":30,"tag":1046,"props":17352,"children":17353},{"style":1084},[17354],{"type":40,"value":2067},{"type":30,"tag":1046,"props":17356,"children":17357},{"style":1105},[17358],{"type":40,"value":17359}," codePostal",{"type":30,"tag":1046,"props":17361,"children":17362},{"style":1070},[17363],{"type":40,"value":1113},{"type":30,"tag":1046,"props":17365,"children":17366},{"class":1048,"line":1168},[17367],{"type":30,"tag":1046,"props":17368,"children":17369},{"emptyLinePlaceholder":13},[17370],{"type":40,"value":1121},{"type":30,"tag":1046,"props":17372,"children":17373},{"class":1048,"line":1201},[17374,17378,17382,17386,17390,17394,17398,17402,17406,17410,17414,17418,17422],{"type":30,"tag":1046,"props":17375,"children":17376},{"style":1053},[17377],{"type":40,"value":1130},{"type":30,"tag":1046,"props":17379,"children":17380},{"style":1138},[17381],{"type":40,"value":17299},{"type":30,"tag":1046,"props":17383,"children":17384},{"style":1070},[17385],{"type":40,"value":1146},{"type":30,"tag":1046,"props":17387,"children":17388},{"style":1084},[17389],{"type":40,"value":2882},{"type":30,"tag":1046,"props":17391,"children":17392},{"style":1153},[17393],{"type":40,"value":17319},{"type":30,"tag":1046,"props":17395,"children":17396},{"style":1070},[17397],{"type":40,"value":2891},{"type":30,"tag":1046,"props":17399,"children":17400},{"style":1084},[17401],{"type":40,"value":2067},{"type":30,"tag":1046,"props":17403,"children":17404},{"style":1153},[17405],{"type":40,"value":17339},{"type":30,"tag":1046,"props":17407,"children":17408},{"style":1070},[17409],{"type":40,"value":2891},{"type":30,"tag":1046,"props":17411,"children":17412},{"style":1084},[17413],{"type":40,"value":2067},{"type":30,"tag":1046,"props":17415,"children":17416},{"style":1153},[17417],{"type":40,"value":17359},{"type":30,"tag":1046,"props":17419,"children":17420},{"style":1070},[17421],{"type":40,"value":1161},{"type":30,"tag":1046,"props":17423,"children":17424},{"style":1070},[17425],{"type":40,"value":1073},{"type":30,"tag":1046,"props":17427,"children":17428},{"class":1048,"line":1210},[17429,17433,17437,17442,17446,17450],{"type":30,"tag":1046,"props":17430,"children":17431},{"style":1780},[17432],{"type":40,"value":1783},{"type":30,"tag":1046,"props":17434,"children":17435},{"style":1070},[17436],{"type":40,"value":1179},{"type":30,"tag":1046,"props":17438,"children":17439},{"style":1105},[17440],{"type":40,"value":17441},"rue ",{"type":30,"tag":1046,"props":17443,"children":17444},{"style":1795},[17445],{"type":40,"value":1798},{"type":30,"tag":1046,"props":17447,"children":17448},{"style":1105},[17449],{"type":40,"value":17319},{"type":30,"tag":1046,"props":17451,"children":17452},{"style":1070},[17453],{"type":40,"value":1113},{"type":30,"tag":1046,"props":17455,"children":17456},{"class":1048,"line":1218},[17457,17461,17465,17470,17474,17478],{"type":30,"tag":1046,"props":17458,"children":17459},{"style":1780},[17460],{"type":40,"value":1783},{"type":30,"tag":1046,"props":17462,"children":17463},{"style":1070},[17464],{"type":40,"value":1179},{"type":30,"tag":1046,"props":17466,"children":17467},{"style":1105},[17468],{"type":40,"value":17469},"ville ",{"type":30,"tag":1046,"props":17471,"children":17472},{"style":1795},[17473],{"type":40,"value":1798},{"type":30,"tag":1046,"props":17475,"children":17476},{"style":1105},[17477],{"type":40,"value":17339},{"type":30,"tag":1046,"props":17479,"children":17480},{"style":1070},[17481],{"type":40,"value":1113},{"type":30,"tag":1046,"props":17483,"children":17484},{"class":1048,"line":1255},[17485,17489,17493,17498,17502,17506],{"type":30,"tag":1046,"props":17486,"children":17487},{"style":1780},[17488],{"type":40,"value":1783},{"type":30,"tag":1046,"props":17490,"children":17491},{"style":1070},[17492],{"type":40,"value":1179},{"type":30,"tag":1046,"props":17494,"children":17495},{"style":1105},[17496],{"type":40,"value":17497},"codePostal ",{"type":30,"tag":1046,"props":17499,"children":17500},{"style":1795},[17501],{"type":40,"value":1798},{"type":30,"tag":1046,"props":17503,"children":17504},{"style":1105},[17505],{"type":40,"value":17359},{"type":30,"tag":1046,"props":17507,"children":17508},{"style":1070},[17509],{"type":40,"value":1113},{"type":30,"tag":1046,"props":17511,"children":17512},{"class":1048,"line":1284},[17513],{"type":30,"tag":1046,"props":17514,"children":17515},{"style":1070},[17516],{"type":40,"value":1207},{"type":30,"tag":1046,"props":17518,"children":17519},{"class":1048,"line":1292},[17520],{"type":30,"tag":1046,"props":17521,"children":17522},{"emptyLinePlaceholder":13},[17523],{"type":40,"value":1121},{"type":30,"tag":1046,"props":17525,"children":17526},{"class":1048,"line":1300},[17527,17531],{"type":30,"tag":1046,"props":17528,"children":17529},{"style":1647},[17530],{"type":40,"value":1828},{"type":30,"tag":1046,"props":17532,"children":17533},{"style":1653},[17534],{"type":40,"value":3258},{"type":30,"tag":1046,"props":17536,"children":17537},{"class":1048,"line":1327},[17538,17542,17546,17551,17555,17560,17565,17569],{"type":30,"tag":1046,"props":17539,"children":17540},{"style":1053},[17541],{"type":40,"value":1130},{"type":30,"tag":1046,"props":17543,"children":17544},{"style":1053},[17545],{"type":40,"value":13605},{"type":30,"tag":1046,"props":17547,"children":17548},{"style":1138},[17549],{"type":40,"value":17550}," equals",{"type":30,"tag":1046,"props":17552,"children":17553},{"style":1070},[17554],{"type":40,"value":1146},{"type":30,"tag":1046,"props":17556,"children":17557},{"style":1084},[17558],{"type":40,"value":17559},"Object",{"type":30,"tag":1046,"props":17561,"children":17562},{"style":1153},[17563],{"type":40,"value":17564}," o",{"type":30,"tag":1046,"props":17566,"children":17567},{"style":1070},[17568],{"type":40,"value":1161},{"type":30,"tag":1046,"props":17570,"children":17571},{"style":1070},[17572],{"type":40,"value":1073},{"type":30,"tag":1046,"props":17574,"children":17575},{"class":1048,"line":1354},[17576,17580,17584,17589,17593,17597,17601,17606,17610],{"type":30,"tag":1046,"props":17577,"children":17578},{"style":1053},[17579],{"type":40,"value":11856},{"type":30,"tag":1046,"props":17581,"children":17582},{"style":1070},[17583],{"type":40,"value":11861},{"type":30,"tag":1046,"props":17585,"children":17586},{"style":1780},[17587],{"type":40,"value":17588},"this",{"type":30,"tag":1046,"props":17590,"children":17591},{"style":1795},[17592],{"type":40,"value":13385},{"type":30,"tag":1046,"props":17594,"children":17595},{"style":1105},[17596],{"type":40,"value":17564},{"type":30,"tag":1046,"props":17598,"children":17599},{"style":1070},[17600],{"type":40,"value":1161},{"type":30,"tag":1046,"props":17602,"children":17603},{"style":1053},[17604],{"type":40,"value":17605}," return",{"type":30,"tag":1046,"props":17607,"children":17608},{"style":1780},[17609],{"type":40,"value":14250},{"type":30,"tag":1046,"props":17611,"children":17612},{"style":1070},[17613],{"type":40,"value":1113},{"type":30,"tag":1046,"props":17615,"children":17616},{"class":1048,"line":1391},[17617,17621,17625,17630,17634,17638,17642,17647,17651,17655,17659,17663,17668,17672,17676,17680],{"type":30,"tag":1046,"props":17618,"children":17619},{"style":1053},[17620],{"type":40,"value":11856},{"type":30,"tag":1046,"props":17622,"children":17623},{"style":1070},[17624],{"type":40,"value":11861},{"type":30,"tag":1046,"props":17626,"children":17627},{"style":1105},[17628],{"type":40,"value":17629},"o ",{"type":30,"tag":1046,"props":17631,"children":17632},{"style":1795},[17633],{"type":40,"value":11871},{"type":30,"tag":1046,"props":17635,"children":17636},{"style":1780},[17637],{"type":40,"value":11876},{"type":30,"tag":1046,"props":17639,"children":17640},{"style":1795},[17641],{"type":40,"value":14396},{"type":30,"tag":1046,"props":17643,"children":17644},{"style":1138},[17645],{"type":40,"value":17646}," getClass",{"type":30,"tag":1046,"props":17648,"children":17649},{"style":1070},[17650],{"type":40,"value":1320},{"type":30,"tag":1046,"props":17652,"children":17653},{"style":1795},[17654],{"type":40,"value":14067},{"type":30,"tag":1046,"props":17656,"children":17657},{"style":1105},[17658],{"type":40,"value":17564},{"type":30,"tag":1046,"props":17660,"children":17661},{"style":1070},[17662],{"type":40,"value":1179},{"type":30,"tag":1046,"props":17664,"children":17665},{"style":1138},[17666],{"type":40,"value":17667},"getClass",{"type":30,"tag":1046,"props":17669,"children":17670},{"style":1070},[17671],{"type":40,"value":13520},{"type":30,"tag":1046,"props":17673,"children":17674},{"style":1053},[17675],{"type":40,"value":17605},{"type":30,"tag":1046,"props":17677,"children":17678},{"style":1780},[17679],{"type":40,"value":14296},{"type":30,"tag":1046,"props":17681,"children":17682},{"style":1070},[17683],{"type":40,"value":1113},{"type":30,"tag":1046,"props":17685,"children":17686},{"class":1048,"line":1409},[17687,17692,17697,17701,17705,17710,17714,17718],{"type":30,"tag":1046,"props":17688,"children":17689},{"style":1084},[17690],{"type":40,"value":17691},"        Adresse",{"type":30,"tag":1046,"props":17693,"children":17694},{"style":1105},[17695],{"type":40,"value":17696}," adresse ",{"type":30,"tag":1046,"props":17698,"children":17699},{"style":1795},[17700],{"type":40,"value":1798},{"type":30,"tag":1046,"props":17702,"children":17703},{"style":1070},[17704],{"type":40,"value":11861},{"type":30,"tag":1046,"props":17706,"children":17707},{"style":1105},[17708],{"type":40,"value":17709},"Adresse",{"type":30,"tag":1046,"props":17711,"children":17712},{"style":1070},[17713],{"type":40,"value":1161},{"type":30,"tag":1046,"props":17715,"children":17716},{"style":1105},[17717],{"type":40,"value":17564},{"type":30,"tag":1046,"props":17719,"children":17720},{"style":1070},[17721],{"type":40,"value":1113},{"type":30,"tag":1046,"props":17723,"children":17724},{"class":1048,"line":1417},[17725,17729,17733,17737,17742,17746,17751,17755,17760,17764,17768,17772,17776,17780,17784,17788,17792,17797,17801,17805,17809,17813,17817,17821,17825,17829,17834],{"type":30,"tag":1046,"props":17726,"children":17727},{"style":1053},[17728],{"type":40,"value":1333},{"type":30,"tag":1046,"props":17730,"children":17731},{"style":1105},[17732],{"type":40,"value":17319},{"type":30,"tag":1046,"props":17734,"children":17735},{"style":1070},[17736],{"type":40,"value":1179},{"type":30,"tag":1046,"props":17738,"children":17739},{"style":1138},[17740],{"type":40,"value":17741},"equals",{"type":30,"tag":1046,"props":17743,"children":17744},{"style":1070},[17745],{"type":40,"value":1146},{"type":30,"tag":1046,"props":17747,"children":17748},{"style":1105},[17749],{"type":40,"value":17750},"adresse",{"type":30,"tag":1046,"props":17752,"children":17753},{"style":1070},[17754],{"type":40,"value":1179},{"type":30,"tag":1046,"props":17756,"children":17757},{"style":1105},[17758],{"type":40,"value":17759},"rue",{"type":30,"tag":1046,"props":17761,"children":17762},{"style":1070},[17763],{"type":40,"value":1161},{"type":30,"tag":1046,"props":17765,"children":17766},{"style":1795},[17767],{"type":40,"value":14076},{"type":30,"tag":1046,"props":17769,"children":17770},{"style":1105},[17771],{"type":40,"value":17339},{"type":30,"tag":1046,"props":17773,"children":17774},{"style":1070},[17775],{"type":40,"value":1179},{"type":30,"tag":1046,"props":17777,"children":17778},{"style":1138},[17779],{"type":40,"value":17741},{"type":30,"tag":1046,"props":17781,"children":17782},{"style":1070},[17783],{"type":40,"value":1146},{"type":30,"tag":1046,"props":17785,"children":17786},{"style":1105},[17787],{"type":40,"value":17750},{"type":30,"tag":1046,"props":17789,"children":17790},{"style":1070},[17791],{"type":40,"value":1179},{"type":30,"tag":1046,"props":17793,"children":17794},{"style":1105},[17795],{"type":40,"value":17796},"ville",{"type":30,"tag":1046,"props":17798,"children":17799},{"style":1070},[17800],{"type":40,"value":1161},{"type":30,"tag":1046,"props":17802,"children":17803},{"style":1795},[17804],{"type":40,"value":14076},{"type":30,"tag":1046,"props":17806,"children":17807},{"style":1105},[17808],{"type":40,"value":17359},{"type":30,"tag":1046,"props":17810,"children":17811},{"style":1070},[17812],{"type":40,"value":1179},{"type":30,"tag":1046,"props":17814,"children":17815},{"style":1138},[17816],{"type":40,"value":17741},{"type":30,"tag":1046,"props":17818,"children":17819},{"style":1070},[17820],{"type":40,"value":1146},{"type":30,"tag":1046,"props":17822,"children":17823},{"style":1105},[17824],{"type":40,"value":17750},{"type":30,"tag":1046,"props":17826,"children":17827},{"style":1070},[17828],{"type":40,"value":1179},{"type":30,"tag":1046,"props":17830,"children":17831},{"style":1105},[17832],{"type":40,"value":17833},"codePostal",{"type":30,"tag":1046,"props":17835,"children":17836},{"style":1070},[17837],{"type":40,"value":1198},{"type":30,"tag":1046,"props":17839,"children":17840},{"class":1048,"line":2023},[17841],{"type":30,"tag":1046,"props":17842,"children":17843},{"style":1070},[17844],{"type":40,"value":1207},{"type":30,"tag":1046,"props":17846,"children":17847},{"class":1048,"line":2083},[17848],{"type":30,"tag":1046,"props":17849,"children":17850},{"emptyLinePlaceholder":13},[17851],{"type":40,"value":1121},{"type":30,"tag":1046,"props":17853,"children":17854},{"class":1048,"line":2126},[17855,17859],{"type":30,"tag":1046,"props":17856,"children":17857},{"style":1647},[17858],{"type":40,"value":1828},{"type":30,"tag":1046,"props":17860,"children":17861},{"style":1653},[17862],{"type":40,"value":3258},{"type":30,"tag":1046,"props":17864,"children":17865},{"class":1048,"line":2159},[17866,17870,17874,17879,17883],{"type":30,"tag":1046,"props":17867,"children":17868},{"style":1053},[17869],{"type":40,"value":1130},{"type":30,"tag":1046,"props":17871,"children":17872},{"style":1053},[17873],{"type":40,"value":10265},{"type":30,"tag":1046,"props":17875,"children":17876},{"style":1138},[17877],{"type":40,"value":17878}," hashCode",{"type":30,"tag":1046,"props":17880,"children":17881},{"style":1070},[17882],{"type":40,"value":1320},{"type":30,"tag":1046,"props":17884,"children":17885},{"style":1070},[17886],{"type":40,"value":1073},{"type":30,"tag":1046,"props":17888,"children":17889},{"class":1048,"line":2167},[17890,17894,17899,17903,17908,17912,17916,17920,17924,17928,17932],{"type":30,"tag":1046,"props":17891,"children":17892},{"style":1053},[17893],{"type":40,"value":1333},{"type":30,"tag":1046,"props":17895,"children":17896},{"style":1105},[17897],{"type":40,"value":17898}," Objects",{"type":30,"tag":1046,"props":17900,"children":17901},{"style":1070},[17902],{"type":40,"value":1179},{"type":30,"tag":1046,"props":17904,"children":17905},{"style":1138},[17906],{"type":40,"value":17907},"hash",{"type":30,"tag":1046,"props":17909,"children":17910},{"style":1070},[17911],{"type":40,"value":1146},{"type":30,"tag":1046,"props":17913,"children":17914},{"style":1105},[17915],{"type":40,"value":17759},{"type":30,"tag":1046,"props":17917,"children":17918},{"style":1070},[17919],{"type":40,"value":2891},{"type":30,"tag":1046,"props":17921,"children":17922},{"style":1105},[17923],{"type":40,"value":17339},{"type":30,"tag":1046,"props":17925,"children":17926},{"style":1070},[17927],{"type":40,"value":2891},{"type":30,"tag":1046,"props":17929,"children":17930},{"style":1105},[17931],{"type":40,"value":17359},{"type":30,"tag":1046,"props":17933,"children":17934},{"style":1070},[17935],{"type":40,"value":1198},{"type":30,"tag":1046,"props":17937,"children":17938},{"class":1048,"line":4537},[17939],{"type":30,"tag":1046,"props":17940,"children":17941},{"style":1070},[17942],{"type":40,"value":1207},{"type":30,"tag":1046,"props":17944,"children":17945},{"class":1048,"line":4545},[17946],{"type":30,"tag":1046,"props":17947,"children":17948},{"emptyLinePlaceholder":13},[17949],{"type":40,"value":1121},{"type":30,"tag":1046,"props":17951,"children":17952},{"class":1048,"line":4582},[17953],{"type":30,"tag":1046,"props":17954,"children":17955},{"style":3961},[17956],{"type":40,"value":17233},{"type":30,"tag":1046,"props":17958,"children":17959},{"class":1048,"line":4622},[17960],{"type":30,"tag":1046,"props":17961,"children":17962},{"style":1070},[17963],{"type":40,"value":1423},{"type":30,"tag":43,"props":17965,"children":17966},{},[17967,17971],{"type":30,"tag":36,"props":17968,"children":17969},{},[17970],{"type":40,"value":8011},{"type":40,"value":17972}," Les objets de valeur sont parfaits pour modéliser des concepts immuables, comme des adresses ou des coordonnées. Ils doivent être comparés par valeur, pas par référence.",{"type":30,"tag":116,"props":17974,"children":17976},{"id":17975},"_3-agrégat",[17977,17978],{"type":40,"value":293},{"type":30,"tag":36,"props":17979,"children":17980},{},[17981],{"type":40,"value":17982},"Agrégat",{"type":30,"tag":43,"props":17984,"children":17985},{},[17986,17987,17992,17994,17999],{"type":40,"value":17264},{"type":30,"tag":36,"props":17988,"children":17989},{},[17990],{"type":40,"value":17991},"agrégat",{"type":40,"value":17993}," est un groupe d’entités et d’objets de valeur qui forment un ensemble cohérent. Il a une ",{"type":30,"tag":36,"props":17995,"children":17996},{},[17997],{"type":40,"value":17998},"racine d'agrégat",{"type":40,"value":18000},", qui est l’entité principale, responsable de l’intégrité de l'ensemble.",{"type":30,"tag":2339,"props":18002,"children":18004},{"id":18003},"exemple-en-java-2",[18005],{"type":40,"value":13211},{"type":30,"tag":1035,"props":18007,"children":18009},{"code":18008,"language":1038,"meta":8,"className":1039,"style":8},"public class Emprunt {\n    private final String id;\n    private Abonne abonne;\n    private List\u003CLivre> livresEmpruntes = new ArrayList\u003C>();\n\n    public Emprunt(String id, Abonne abonne) {\n        this.id = id;\n        this.abonne = abonne;\n    }\n\n    public void ajouterLivre(Livre livre) {\n        if (livresEmpruntes.size() >= 5) {\n            throw new RuntimeException(\"Un abonné ne peut pas emprunter plus de 5 livres.\");\n        }\n        livresEmpruntes.add(livre);\n    }\n\n    // getters et setters...\n}\n",[18010],{"type":30,"tag":1042,"props":18011,"children":18012},{"__ignoreMap":8},[18013,18033,18056,18076,18121,18128,18171,18198,18226,18233,18240,18277,18322,18350,18357,18386,18393,18400,18407],{"type":30,"tag":1046,"props":18014,"children":18015},{"class":1048,"line":1049},[18016,18020,18024,18029],{"type":30,"tag":1046,"props":18017,"children":18018},{"style":1053},[18019],{"type":40,"value":1056},{"type":30,"tag":1046,"props":18021,"children":18022},{"style":1053},[18023],{"type":40,"value":1061},{"type":30,"tag":1046,"props":18025,"children":18026},{"style":1064},[18027],{"type":40,"value":18028}," Emprunt",{"type":30,"tag":1046,"props":18030,"children":18031},{"style":1070},[18032],{"type":40,"value":1073},{"type":30,"tag":1046,"props":18034,"children":18035},{"class":1048,"line":675},[18036,18040,18044,18048,18052],{"type":30,"tag":1046,"props":18037,"children":18038},{"style":1053},[18039],{"type":40,"value":1081},{"type":30,"tag":1046,"props":18041,"children":18042},{"style":1053},[18043],{"type":40,"value":1721},{"type":30,"tag":1046,"props":18045,"children":18046},{"style":1084},[18047],{"type":40,"value":2067},{"type":30,"tag":1046,"props":18049,"children":18050},{"style":1105},[18051],{"type":40,"value":6811},{"type":30,"tag":1046,"props":18053,"children":18054},{"style":1070},[18055],{"type":40,"value":1113},{"type":30,"tag":1046,"props":18057,"children":18058},{"class":1048,"line":681},[18059,18063,18067,18072],{"type":30,"tag":1046,"props":18060,"children":18061},{"style":1053},[18062],{"type":40,"value":1081},{"type":30,"tag":1046,"props":18064,"children":18065},{"style":1084},[18066],{"type":40,"value":16942},{"type":30,"tag":1046,"props":18068,"children":18069},{"style":1105},[18070],{"type":40,"value":18071}," abonne",{"type":30,"tag":1046,"props":18073,"children":18074},{"style":1070},[18075],{"type":40,"value":1113},{"type":30,"tag":1046,"props":18077,"children":18078},{"class":1048,"line":1124},[18079,18083,18087,18091,18096,18100,18105,18109,18113,18117],{"type":30,"tag":1046,"props":18080,"children":18081},{"style":1053},[18082],{"type":40,"value":1081},{"type":30,"tag":1046,"props":18084,"children":18085},{"style":1084},[18086],{"type":40,"value":1087},{"type":30,"tag":1046,"props":18088,"children":18089},{"style":1070},[18090],{"type":40,"value":1092},{"type":30,"tag":1046,"props":18092,"children":18093},{"style":1053},[18094],{"type":40,"value":18095},"Livre",{"type":30,"tag":1046,"props":18097,"children":18098},{"style":1070},[18099],{"type":40,"value":1102},{"type":30,"tag":1046,"props":18101,"children":18102},{"style":1105},[18103],{"type":40,"value":18104}," livresEmpruntes ",{"type":30,"tag":1046,"props":18106,"children":18107},{"style":1795},[18108],{"type":40,"value":1798},{"type":30,"tag":1046,"props":18110,"children":18111},{"style":1053},[18112],{"type":40,"value":2480},{"type":30,"tag":1046,"props":18114,"children":18115},{"style":1084},[18116],{"type":40,"value":2485},{"type":30,"tag":1046,"props":18118,"children":18119},{"style":1070},[18120],{"type":40,"value":2490},{"type":30,"tag":1046,"props":18122,"children":18123},{"class":1048,"line":1168},[18124],{"type":30,"tag":1046,"props":18125,"children":18126},{"emptyLinePlaceholder":13},[18127],{"type":40,"value":1121},{"type":30,"tag":1046,"props":18129,"children":18130},{"class":1048,"line":1201},[18131,18135,18139,18143,18147,18151,18155,18159,18163,18167],{"type":30,"tag":1046,"props":18132,"children":18133},{"style":1053},[18134],{"type":40,"value":1130},{"type":30,"tag":1046,"props":18136,"children":18137},{"style":1138},[18138],{"type":40,"value":18028},{"type":30,"tag":1046,"props":18140,"children":18141},{"style":1070},[18142],{"type":40,"value":1146},{"type":30,"tag":1046,"props":18144,"children":18145},{"style":1084},[18146],{"type":40,"value":2882},{"type":30,"tag":1046,"props":18148,"children":18149},{"style":1153},[18150],{"type":40,"value":6811},{"type":30,"tag":1046,"props":18152,"children":18153},{"style":1070},[18154],{"type":40,"value":2891},{"type":30,"tag":1046,"props":18156,"children":18157},{"style":1084},[18158],{"type":40,"value":16942},{"type":30,"tag":1046,"props":18160,"children":18161},{"style":1153},[18162],{"type":40,"value":18071},{"type":30,"tag":1046,"props":18164,"children":18165},{"style":1070},[18166],{"type":40,"value":1161},{"type":30,"tag":1046,"props":18168,"children":18169},{"style":1070},[18170],{"type":40,"value":1073},{"type":30,"tag":1046,"props":18172,"children":18173},{"class":1048,"line":1210},[18174,18178,18182,18186,18190,18194],{"type":30,"tag":1046,"props":18175,"children":18176},{"style":1780},[18177],{"type":40,"value":1783},{"type":30,"tag":1046,"props":18179,"children":18180},{"style":1070},[18181],{"type":40,"value":1179},{"type":30,"tag":1046,"props":18183,"children":18184},{"style":1105},[18185],{"type":40,"value":10364},{"type":30,"tag":1046,"props":18187,"children":18188},{"style":1795},[18189],{"type":40,"value":1798},{"type":30,"tag":1046,"props":18191,"children":18192},{"style":1105},[18193],{"type":40,"value":6811},{"type":30,"tag":1046,"props":18195,"children":18196},{"style":1070},[18197],{"type":40,"value":1113},{"type":30,"tag":1046,"props":18199,"children":18200},{"class":1048,"line":1218},[18201,18205,18209,18214,18218,18222],{"type":30,"tag":1046,"props":18202,"children":18203},{"style":1780},[18204],{"type":40,"value":1783},{"type":30,"tag":1046,"props":18206,"children":18207},{"style":1070},[18208],{"type":40,"value":1179},{"type":30,"tag":1046,"props":18210,"children":18211},{"style":1105},[18212],{"type":40,"value":18213},"abonne ",{"type":30,"tag":1046,"props":18215,"children":18216},{"style":1795},[18217],{"type":40,"value":1798},{"type":30,"tag":1046,"props":18219,"children":18220},{"style":1105},[18221],{"type":40,"value":18071},{"type":30,"tag":1046,"props":18223,"children":18224},{"style":1070},[18225],{"type":40,"value":1113},{"type":30,"tag":1046,"props":18227,"children":18228},{"class":1048,"line":1255},[18229],{"type":30,"tag":1046,"props":18230,"children":18231},{"style":1070},[18232],{"type":40,"value":1207},{"type":30,"tag":1046,"props":18234,"children":18235},{"class":1048,"line":1284},[18236],{"type":30,"tag":1046,"props":18237,"children":18238},{"emptyLinePlaceholder":13},[18239],{"type":40,"value":1121},{"type":30,"tag":1046,"props":18241,"children":18242},{"class":1048,"line":1292},[18243,18247,18251,18256,18260,18264,18269,18273],{"type":30,"tag":1046,"props":18244,"children":18245},{"style":1053},[18246],{"type":40,"value":1130},{"type":30,"tag":1046,"props":18248,"children":18249},{"style":1053},[18250],{"type":40,"value":1135},{"type":30,"tag":1046,"props":18252,"children":18253},{"style":1138},[18254],{"type":40,"value":18255}," ajouterLivre",{"type":30,"tag":1046,"props":18257,"children":18258},{"style":1070},[18259],{"type":40,"value":1146},{"type":30,"tag":1046,"props":18261,"children":18262},{"style":1084},[18263],{"type":40,"value":18095},{"type":30,"tag":1046,"props":18265,"children":18266},{"style":1153},[18267],{"type":40,"value":18268}," livre",{"type":30,"tag":1046,"props":18270,"children":18271},{"style":1070},[18272],{"type":40,"value":1161},{"type":30,"tag":1046,"props":18274,"children":18275},{"style":1070},[18276],{"type":40,"value":1073},{"type":30,"tag":1046,"props":18278,"children":18279},{"class":1048,"line":1300},[18280,18284,18288,18293,18297,18301,18305,18309,18314,18318],{"type":30,"tag":1046,"props":18281,"children":18282},{"style":1053},[18283],{"type":40,"value":11856},{"type":30,"tag":1046,"props":18285,"children":18286},{"style":1070},[18287],{"type":40,"value":11861},{"type":30,"tag":1046,"props":18289,"children":18290},{"style":1105},[18291],{"type":40,"value":18292},"livresEmpruntes",{"type":30,"tag":1046,"props":18294,"children":18295},{"style":1070},[18296],{"type":40,"value":1179},{"type":30,"tag":1046,"props":18298,"children":18299},{"style":1138},[18300],{"type":40,"value":14786},{"type":30,"tag":1046,"props":18302,"children":18303},{"style":1070},[18304],{"type":40,"value":1320},{"type":30,"tag":1046,"props":18306,"children":18307},{"style":1795},[18308],{"type":40,"value":14145},{"type":30,"tag":1046,"props":18310,"children":18311},{"style":6886},[18312],{"type":40,"value":18313}," 5",{"type":30,"tag":1046,"props":18315,"children":18316},{"style":1070},[18317],{"type":40,"value":1161},{"type":30,"tag":1046,"props":18319,"children":18320},{"style":1070},[18321],{"type":40,"value":1073},{"type":30,"tag":1046,"props":18323,"children":18324},{"class":1048,"line":1327},[18325,18329,18333,18337,18341,18346],{"type":30,"tag":1046,"props":18326,"children":18327},{"style":1053},[18328],{"type":40,"value":11892},{"type":30,"tag":1046,"props":18330,"children":18331},{"style":1053},[18332],{"type":40,"value":2480},{"type":30,"tag":1046,"props":18334,"children":18335},{"style":1138},[18336],{"type":40,"value":11901},{"type":30,"tag":1046,"props":18338,"children":18339},{"style":1070},[18340],{"type":40,"value":1146},{"type":30,"tag":1046,"props":18342,"children":18343},{"style":1675},[18344],{"type":40,"value":18345},"\"Un abonné ne peut pas emprunter plus de 5 livres.\"",{"type":30,"tag":1046,"props":18347,"children":18348},{"style":1070},[18349],{"type":40,"value":1198},{"type":30,"tag":1046,"props":18351,"children":18352},{"class":1048,"line":1354},[18353],{"type":30,"tag":1046,"props":18354,"children":18355},{"style":1070},[18356],{"type":40,"value":11922},{"type":30,"tag":1046,"props":18358,"children":18359},{"class":1048,"line":1391},[18360,18365,18369,18373,18377,18382],{"type":30,"tag":1046,"props":18361,"children":18362},{"style":1105},[18363],{"type":40,"value":18364},"        livresEmpruntes",{"type":30,"tag":1046,"props":18366,"children":18367},{"style":1070},[18368],{"type":40,"value":1179},{"type":30,"tag":1046,"props":18370,"children":18371},{"style":1138},[18372],{"type":40,"value":1184},{"type":30,"tag":1046,"props":18374,"children":18375},{"style":1070},[18376],{"type":40,"value":1146},{"type":30,"tag":1046,"props":18378,"children":18379},{"style":1105},[18380],{"type":40,"value":18381},"livre",{"type":30,"tag":1046,"props":18383,"children":18384},{"style":1070},[18385],{"type":40,"value":1198},{"type":30,"tag":1046,"props":18387,"children":18388},{"class":1048,"line":1409},[18389],{"type":30,"tag":1046,"props":18390,"children":18391},{"style":1070},[18392],{"type":40,"value":1207},{"type":30,"tag":1046,"props":18394,"children":18395},{"class":1048,"line":1417},[18396],{"type":30,"tag":1046,"props":18397,"children":18398},{"emptyLinePlaceholder":13},[18399],{"type":40,"value":1121},{"type":30,"tag":1046,"props":18401,"children":18402},{"class":1048,"line":2023},[18403],{"type":30,"tag":1046,"props":18404,"children":18405},{"style":3961},[18406],{"type":40,"value":17233},{"type":30,"tag":1046,"props":18408,"children":18409},{"class":1048,"line":2083},[18410],{"type":30,"tag":1046,"props":18411,"children":18412},{"style":1070},[18413],{"type":40,"value":1423},{"type":30,"tag":43,"props":18415,"children":18416},{},[18417,18422],{"type":30,"tag":36,"props":18418,"children":18419},{},[18420],{"type":40,"value":18421},"Alerte :",{"type":40,"value":18423}," Faites attention à ne pas créer des agrégats trop grands ou complexes. Ils doivent rester simples et gérables. Un agrégat ne doit pas avoir trop de dépendances. C'est exactement ce que j'ai observé dans une équipe que j'accompagnais chez un client dans le secteur bancaire : un agrégat \"Contrat\" regroupait une vingtaine d'entités et devenait impossible à tester.",{"type":30,"tag":116,"props":18425,"children":18427},{"id":18426},"_4-service-de-domaine",[18428,18429],{"type":40,"value":318},{"type":30,"tag":36,"props":18430,"children":18431},{},[18432],{"type":40,"value":18433},"Service de domaine",{"type":30,"tag":43,"props":18435,"children":18436},{},[18437,18438,18443],{"type":40,"value":17264},{"type":30,"tag":36,"props":18439,"children":18440},{},[18441],{"type":40,"value":18442},"service de domaine",{"type":40,"value":18444}," encapsule la logique métier qui concerne plusieurs entités à la fois, mais ne possède pas de données propres.",{"type":30,"tag":2339,"props":18446,"children":18448},{"id":18447},"exemple-en-java-3",[18449],{"type":40,"value":13211},{"type":30,"tag":1035,"props":18451,"children":18453},{"code":18452,"language":1038,"meta":8,"className":1039,"style":8},"public class ServiceBibliotheque {\n    public void enregistrerEmprunt(Emprunt emprunt, Livre livre) {\n        emprunt.ajouterLivre(livre);\n        // Logique supplémentaire, comme la mise à jour des stocks de livres...\n    }\n}\n",[18454],{"type":30,"tag":1042,"props":18455,"children":18456},{"__ignoreMap":8},[18457,18477,18528,18557,18565,18572],{"type":30,"tag":1046,"props":18458,"children":18459},{"class":1048,"line":1049},[18460,18464,18468,18473],{"type":30,"tag":1046,"props":18461,"children":18462},{"style":1053},[18463],{"type":40,"value":1056},{"type":30,"tag":1046,"props":18465,"children":18466},{"style":1053},[18467],{"type":40,"value":1061},{"type":30,"tag":1046,"props":18469,"children":18470},{"style":1064},[18471],{"type":40,"value":18472}," ServiceBibliotheque",{"type":30,"tag":1046,"props":18474,"children":18475},{"style":1070},[18476],{"type":40,"value":1073},{"type":30,"tag":1046,"props":18478,"children":18479},{"class":1048,"line":675},[18480,18484,18488,18493,18497,18502,18507,18511,18516,18520,18524],{"type":30,"tag":1046,"props":18481,"children":18482},{"style":1053},[18483],{"type":40,"value":1130},{"type":30,"tag":1046,"props":18485,"children":18486},{"style":1053},[18487],{"type":40,"value":1135},{"type":30,"tag":1046,"props":18489,"children":18490},{"style":1138},[18491],{"type":40,"value":18492}," enregistrerEmprunt",{"type":30,"tag":1046,"props":18494,"children":18495},{"style":1070},[18496],{"type":40,"value":1146},{"type":30,"tag":1046,"props":18498,"children":18499},{"style":1084},[18500],{"type":40,"value":18501},"Emprunt",{"type":30,"tag":1046,"props":18503,"children":18504},{"style":1153},[18505],{"type":40,"value":18506}," emprunt",{"type":30,"tag":1046,"props":18508,"children":18509},{"style":1070},[18510],{"type":40,"value":2891},{"type":30,"tag":1046,"props":18512,"children":18513},{"style":1084},[18514],{"type":40,"value":18515}," Livre",{"type":30,"tag":1046,"props":18517,"children":18518},{"style":1153},[18519],{"type":40,"value":18268},{"type":30,"tag":1046,"props":18521,"children":18522},{"style":1070},[18523],{"type":40,"value":1161},{"type":30,"tag":1046,"props":18525,"children":18526},{"style":1070},[18527],{"type":40,"value":1073},{"type":30,"tag":1046,"props":18529,"children":18530},{"class":1048,"line":681},[18531,18536,18540,18545,18549,18553],{"type":30,"tag":1046,"props":18532,"children":18533},{"style":1105},[18534],{"type":40,"value":18535},"        emprunt",{"type":30,"tag":1046,"props":18537,"children":18538},{"style":1070},[18539],{"type":40,"value":1179},{"type":30,"tag":1046,"props":18541,"children":18542},{"style":1138},[18543],{"type":40,"value":18544},"ajouterLivre",{"type":30,"tag":1046,"props":18546,"children":18547},{"style":1070},[18548],{"type":40,"value":1146},{"type":30,"tag":1046,"props":18550,"children":18551},{"style":1105},[18552],{"type":40,"value":18381},{"type":30,"tag":1046,"props":18554,"children":18555},{"style":1070},[18556],{"type":40,"value":1198},{"type":30,"tag":1046,"props":18558,"children":18559},{"class":1048,"line":1124},[18560],{"type":30,"tag":1046,"props":18561,"children":18562},{"style":3961},[18563],{"type":40,"value":18564},"        // Logique supplémentaire, comme la mise à jour des stocks de livres...\n",{"type":30,"tag":1046,"props":18566,"children":18567},{"class":1048,"line":1168},[18568],{"type":30,"tag":1046,"props":18569,"children":18570},{"style":1070},[18571],{"type":40,"value":1207},{"type":30,"tag":1046,"props":18573,"children":18574},{"class":1048,"line":1201},[18575],{"type":30,"tag":1046,"props":18576,"children":18577},{"style":1070},[18578],{"type":40,"value":1423},{"type":30,"tag":43,"props":18580,"children":18581},{},[18582,18586],{"type":30,"tag":36,"props":18583,"children":18584},{},[18585],{"type":40,"value":8011},{"type":40,"value":18587}," Un service de domaine doit rester simple et concentré sur une tâche spécifique qui ne peut pas être facilement modélisée dans une entité ou un objet de valeur.",{"type":30,"tag":116,"props":18589,"children":18591},{"id":18590},"_5-référentiel-repository",[18592,18593],{"type":40,"value":360},{"type":30,"tag":36,"props":18594,"children":18595},{},[18596],{"type":40,"value":18597},"Référentiel (Repository)",{"type":30,"tag":43,"props":18599,"children":18600},{},[18601,18602,18607],{"type":40,"value":13695},{"type":30,"tag":36,"props":18603,"children":18604},{},[18605],{"type":40,"value":18606},"référentiels",{"type":40,"value":18608}," sont chargés de la persistance des agrégats. Ils fournissent des méthodes pour récupérer et stocker des agrégats, tout en masquant les détails techniques de la persistance.",{"type":30,"tag":2339,"props":18610,"children":18612},{"id":18611},"exemple-en-java-4",[18613],{"type":40,"value":13211},{"type":30,"tag":1035,"props":18615,"children":18617},{"code":18616,"language":1038,"meta":8,"className":1039,"style":8},"public interface EmpruntRepository {\n    Emprunt trouverParId(String id);\n    void sauvegarder(Emprunt emprunt);\n}\n",[18618],{"type":30,"tag":1042,"props":18619,"children":18620},{"__ignoreMap":8},[18621,18641,18670,18698],{"type":30,"tag":1046,"props":18622,"children":18623},{"class":1048,"line":1049},[18624,18628,18632,18637],{"type":30,"tag":1046,"props":18625,"children":18626},{"style":1053},[18627],{"type":40,"value":1056},{"type":30,"tag":1046,"props":18629,"children":18630},{"style":1053},[18631],{"type":40,"value":4852},{"type":30,"tag":1046,"props":18633,"children":18634},{"style":1064},[18635],{"type":40,"value":18636}," EmpruntRepository",{"type":30,"tag":1046,"props":18638,"children":18639},{"style":1070},[18640],{"type":40,"value":1073},{"type":30,"tag":1046,"props":18642,"children":18643},{"class":1048,"line":675},[18644,18649,18654,18658,18662,18666],{"type":30,"tag":1046,"props":18645,"children":18646},{"style":1084},[18647],{"type":40,"value":18648},"    Emprunt",{"type":30,"tag":1046,"props":18650,"children":18651},{"style":1138},[18652],{"type":40,"value":18653}," trouverParId",{"type":30,"tag":1046,"props":18655,"children":18656},{"style":1070},[18657],{"type":40,"value":1146},{"type":30,"tag":1046,"props":18659,"children":18660},{"style":1084},[18661],{"type":40,"value":2882},{"type":30,"tag":1046,"props":18663,"children":18664},{"style":1153},[18665],{"type":40,"value":6811},{"type":30,"tag":1046,"props":18667,"children":18668},{"style":1070},[18669],{"type":40,"value":1198},{"type":30,"tag":1046,"props":18671,"children":18672},{"class":1048,"line":681},[18673,18677,18682,18686,18690,18694],{"type":30,"tag":1046,"props":18674,"children":18675},{"style":1053},[18676],{"type":40,"value":4908},{"type":30,"tag":1046,"props":18678,"children":18679},{"style":1138},[18680],{"type":40,"value":18681}," sauvegarder",{"type":30,"tag":1046,"props":18683,"children":18684},{"style":1070},[18685],{"type":40,"value":1146},{"type":30,"tag":1046,"props":18687,"children":18688},{"style":1084},[18689],{"type":40,"value":18501},{"type":30,"tag":1046,"props":18691,"children":18692},{"style":1153},[18693],{"type":40,"value":18506},{"type":30,"tag":1046,"props":18695,"children":18696},{"style":1070},[18697],{"type":40,"value":1198},{"type":30,"tag":1046,"props":18699,"children":18700},{"class":1048,"line":1124},[18701],{"type":30,"tag":1046,"props":18702,"children":18703},{"style":1070},[18704],{"type":40,"value":1423},{"type":30,"tag":43,"props":18706,"children":18707},{},[18708,18712],{"type":30,"tag":36,"props":18709,"children":18710},{},[18711],{"type":40,"value":18421},{"type":40,"value":18713}," Ne mettez pas de logique métier dans les référentiels. Ils doivent se limiter à la persistance des agrégats, sans interférer avec le domaine.",{"type":30,"tag":84,"props":18715,"children":18716},{},[],{"type":30,"tag":31,"props":18718,"children":18720},{"id":18719},"les-meilleures-pratiques-pour-implémenter-ddd",[18721],{"type":40,"value":18722},"Les meilleures pratiques pour implémenter DDD",{"type":30,"tag":43,"props":18724,"children":18725},{},[18726],{"type":40,"value":18727},"Voici quelques conseils pour implémenter DDD de manière efficace dans vos projets Java.",{"type":30,"tag":116,"props":18729,"children":18731},{"id":18730},"_1-commencez-par-le-domaine-pas-par-la-technologie",[18732,18733],{"type":40,"value":242},{"type":30,"tag":36,"props":18734,"children":18735},{},[18736],{"type":40,"value":18737},"Commencez par le domaine, pas par la technologie",{"type":30,"tag":43,"props":18739,"children":18740},{},[18741,18743,18747],{"type":40,"value":18742},"Avant de vous plonger dans les frameworks ou les bases de données, assurez-vous de bien comprendre le domaine métier. Prenez le temps de discuter avec les experts du domaine pour modéliser les concepts clés de manière claire. L'",{"type":30,"tag":75,"props":18744,"children":18745},{"href":888},[18746],{"type":40,"value":891},{"type":40,"value":18748}," est la méthode la plus efficace pour aligner développeurs et experts métier en quelques heures et identifier les Bounded Contexts.",{"type":30,"tag":116,"props":18750,"children":18752},{"id":18751},"_2-utilisez-des-schémas-pour-visualiser-les-agrégats",[18753,18754],{"type":40,"value":268},{"type":30,"tag":36,"props":18755,"children":18756},{},[18757],{"type":40,"value":18758},"Utilisez des schémas pour visualiser les agrégats",{"type":30,"tag":43,"props":18760,"children":18761},{},[18762],{"type":40,"value":18763},"Les agrégats sont le cœur de votre modèle métier. Utilisez des schémas pour représenter les entités et objets de valeur qui les composent et leurs relations.",{"type":30,"tag":116,"props":18765,"children":18767},{"id":18766},"_3-adoptez-une-approche-modulaire",[18768,18769],{"type":40,"value":293},{"type":30,"tag":36,"props":18770,"children":18771},{},[18772],{"type":40,"value":18773},"Adoptez une approche modulaire",{"type":30,"tag":43,"props":18775,"children":18776},{},[18777],{"type":40,"value":18778},"Organisez votre application en modules correspondant aux sous-domaines. Cela vous permet de garder une structure claire et maintenable.",{"type":30,"tag":2339,"props":18780,"children":18782},{"id":18781},"exemple-de-structure-en-java",[18783],{"type":40,"value":18784},"Exemple de structure en Java :",{"type":30,"tag":1035,"props":18786,"children":18788},{"code":18787},"\n\nsrc/\n└── main/\n    └── java/\n        └── com/\n            └── ma_bibliotheque/\n                ├── emprunts/\n                ├── abonnés/\n                └── livres/\n",[18789],{"type":30,"tag":1042,"props":18790,"children":18791},{"__ignoreMap":8},[18792],{"type":40,"value":18787},{"type":30,"tag":116,"props":18794,"children":18796},{"id":18795},"_4-gardez-vos-services-de-domaine-fins-et-spécifiques",[18797,18798],{"type":40,"value":318},{"type":30,"tag":36,"props":18799,"children":18800},{},[18801],{"type":40,"value":18802},"Gardez vos services de domaine fins et spécifiques",{"type":30,"tag":43,"props":18804,"children":18805},{},[18806],{"type":40,"value":18807},"Chaque service de domaine doit être responsable d’une seule tâche métier spécifique. Cela vous aidera à garder une architecture claire et flexible.",{"type":30,"tag":116,"props":18809,"children":18811},{"id":18810},"_5-testez-vos-domaines-métiers-de-manière-exhaustive",[18812,18813],{"type":40,"value":360},{"type":30,"tag":36,"props":18814,"children":18815},{},[18816],{"type":40,"value":18817},"Testez vos domaines métiers de manière exhaustive",{"type":30,"tag":43,"props":18819,"children":18820},{},[18821,18823,18829],{"type":40,"value":18822},"Les tests unitaires sont essentiels pour vous assurer que votre logique métier fonctionne correctement. Je vous recommande de tester chaque agrégat et service de manière isolée. Pour que ces tests soient rapides et sans infrastructure, le ",{"type":30,"tag":75,"props":18824,"children":18826},{"href":18825},"/fr/architecture-craft/dependency-inversion-pratique",[18827],{"type":40,"value":18828},"Dependency Inversion Principle",{"type":40,"value":18830}," est indispensable : le domaine ne doit pas dépendre directement des implémentations concrètes.",{"type":30,"tag":2339,"props":18832,"children":18834},{"id":18833},"exemple-en-java-avec-junit",[18835],{"type":40,"value":18836},"Exemple en Java avec JUnit :",{"type":30,"tag":1035,"props":18838,"children":18840},{"code":18839,"language":1038,"meta":8,"className":1039,"style":8},"public class EmpruntTest {\n    \n    @Test\n    public void ne_peut_pas_emprunter_plus_de_5_livres() {\n        Abonne abonne = new Abonne(\"123\", \"Jean Dupont\", \"1 Rue de Paris\");\n        Emprunt emprunt = new Emprunt(\"emprunt1\", abonne);\n        \n        for (int i = 0; i \u003C 5; i++) {\n            emprunt.ajouterLivre(new Livre(\"Livre \" + i));\n        }\n        \n        assertThrows(RuntimeException.class, () -> {\n            emprunt.ajouterLivre(new Livre(\"Livre 6\"));\n        });\n    }\n}\n",[18841],{"type":30,"tag":1042,"props":18842,"children":18843},{"__ignoreMap":8},[18844,18864,18871,18882,18906,18961,19007,19015,19078,19127,19134,19141,19183,19223,19231,19238],{"type":30,"tag":1046,"props":18845,"children":18846},{"class":1048,"line":1049},[18847,18851,18855,18860],{"type":30,"tag":1046,"props":18848,"children":18849},{"style":1053},[18850],{"type":40,"value":1056},{"type":30,"tag":1046,"props":18852,"children":18853},{"style":1053},[18854],{"type":40,"value":1061},{"type":30,"tag":1046,"props":18856,"children":18857},{"style":1064},[18858],{"type":40,"value":18859}," EmpruntTest",{"type":30,"tag":1046,"props":18861,"children":18862},{"style":1070},[18863],{"type":40,"value":1073},{"type":30,"tag":1046,"props":18865,"children":18866},{"class":1048,"line":675},[18867],{"type":30,"tag":1046,"props":18868,"children":18869},{"style":1105},[18870],{"type":40,"value":16132},{"type":30,"tag":1046,"props":18872,"children":18873},{"class":1048,"line":681},[18874,18878],{"type":30,"tag":1046,"props":18875,"children":18876},{"style":1647},[18877],{"type":40,"value":1828},{"type":30,"tag":1046,"props":18879,"children":18880},{"style":1653},[18881],{"type":40,"value":13736},{"type":30,"tag":1046,"props":18883,"children":18884},{"class":1048,"line":1124},[18885,18889,18893,18898,18902],{"type":30,"tag":1046,"props":18886,"children":18887},{"style":1053},[18888],{"type":40,"value":1130},{"type":30,"tag":1046,"props":18890,"children":18891},{"style":1053},[18892],{"type":40,"value":1135},{"type":30,"tag":1046,"props":18894,"children":18895},{"style":1138},[18896],{"type":40,"value":18897}," ne_peut_pas_emprunter_plus_de_5_livres",{"type":30,"tag":1046,"props":18899,"children":18900},{"style":1070},[18901],{"type":40,"value":1320},{"type":30,"tag":1046,"props":18903,"children":18904},{"style":1070},[18905],{"type":40,"value":1073},{"type":30,"tag":1046,"props":18907,"children":18908},{"class":1048,"line":1168},[18909,18914,18919,18923,18927,18931,18935,18939,18943,18948,18952,18957],{"type":30,"tag":1046,"props":18910,"children":18911},{"style":1084},[18912],{"type":40,"value":18913},"        Abonne",{"type":30,"tag":1046,"props":18915,"children":18916},{"style":1105},[18917],{"type":40,"value":18918}," abonne ",{"type":30,"tag":1046,"props":18920,"children":18921},{"style":1795},[18922],{"type":40,"value":1798},{"type":30,"tag":1046,"props":18924,"children":18925},{"style":1053},[18926],{"type":40,"value":2480},{"type":30,"tag":1046,"props":18928,"children":18929},{"style":1138},[18930],{"type":40,"value":16942},{"type":30,"tag":1046,"props":18932,"children":18933},{"style":1070},[18934],{"type":40,"value":1146},{"type":30,"tag":1046,"props":18936,"children":18937},{"style":1675},[18938],{"type":40,"value":12120},{"type":30,"tag":1046,"props":18940,"children":18941},{"style":1070},[18942],{"type":40,"value":2891},{"type":30,"tag":1046,"props":18944,"children":18945},{"style":1675},[18946],{"type":40,"value":18947}," \"Jean Dupont\"",{"type":30,"tag":1046,"props":18949,"children":18950},{"style":1070},[18951],{"type":40,"value":2891},{"type":30,"tag":1046,"props":18953,"children":18954},{"style":1675},[18955],{"type":40,"value":18956}," \"1 Rue de Paris\"",{"type":30,"tag":1046,"props":18958,"children":18959},{"style":1070},[18960],{"type":40,"value":1198},{"type":30,"tag":1046,"props":18962,"children":18963},{"class":1048,"line":1201},[18964,18969,18974,18978,18982,18986,18990,18995,18999,19003],{"type":30,"tag":1046,"props":18965,"children":18966},{"style":1084},[18967],{"type":40,"value":18968},"        Emprunt",{"type":30,"tag":1046,"props":18970,"children":18971},{"style":1105},[18972],{"type":40,"value":18973}," emprunt ",{"type":30,"tag":1046,"props":18975,"children":18976},{"style":1795},[18977],{"type":40,"value":1798},{"type":30,"tag":1046,"props":18979,"children":18980},{"style":1053},[18981],{"type":40,"value":2480},{"type":30,"tag":1046,"props":18983,"children":18984},{"style":1138},[18985],{"type":40,"value":18028},{"type":30,"tag":1046,"props":18987,"children":18988},{"style":1070},[18989],{"type":40,"value":1146},{"type":30,"tag":1046,"props":18991,"children":18992},{"style":1675},[18993],{"type":40,"value":18994},"\"emprunt1\"",{"type":30,"tag":1046,"props":18996,"children":18997},{"style":1070},[18998],{"type":40,"value":2891},{"type":30,"tag":1046,"props":19000,"children":19001},{"style":1105},[19002],{"type":40,"value":18071},{"type":30,"tag":1046,"props":19004,"children":19005},{"style":1070},[19006],{"type":40,"value":1198},{"type":30,"tag":1046,"props":19008,"children":19009},{"class":1048,"line":1210},[19010],{"type":30,"tag":1046,"props":19011,"children":19012},{"style":1105},[19013],{"type":40,"value":19014},"        \n",{"type":30,"tag":1046,"props":19016,"children":19017},{"class":1048,"line":1218},[19018,19022,19026,19030,19034,19038,19042,19046,19050,19054,19058,19062,19066,19070,19074],{"type":30,"tag":1046,"props":19019,"children":19020},{"style":1053},[19021],{"type":40,"value":15745},{"type":30,"tag":1046,"props":19023,"children":19024},{"style":1070},[19025],{"type":40,"value":11861},{"type":30,"tag":1046,"props":19027,"children":19028},{"style":1053},[19029],{"type":40,"value":10323},{"type":30,"tag":1046,"props":19031,"children":19032},{"style":1105},[19033],{"type":40,"value":13284},{"type":30,"tag":1046,"props":19035,"children":19036},{"style":1795},[19037],{"type":40,"value":1798},{"type":30,"tag":1046,"props":19039,"children":19040},{"style":6886},[19041],{"type":40,"value":13293},{"type":30,"tag":1046,"props":19043,"children":19044},{"style":1070},[19045],{"type":40,"value":13298},{"type":30,"tag":1046,"props":19047,"children":19048},{"style":1105},[19049],{"type":40,"value":13284},{"type":30,"tag":1046,"props":19051,"children":19052},{"style":1795},[19053],{"type":40,"value":1092},{"type":30,"tag":1046,"props":19055,"children":19056},{"style":6886},[19057],{"type":40,"value":18313},{"type":30,"tag":1046,"props":19059,"children":19060},{"style":1070},[19061],{"type":40,"value":13298},{"type":30,"tag":1046,"props":19063,"children":19064},{"style":1105},[19065],{"type":40,"value":13329},{"type":30,"tag":1046,"props":19067,"children":19068},{"style":1795},[19069],{"type":40,"value":13334},{"type":30,"tag":1046,"props":19071,"children":19072},{"style":1070},[19073],{"type":40,"value":1161},{"type":30,"tag":1046,"props":19075,"children":19076},{"style":1070},[19077],{"type":40,"value":1073},{"type":30,"tag":1046,"props":19079,"children":19080},{"class":1048,"line":1255},[19081,19086,19090,19094,19098,19102,19106,19110,19115,19119,19123],{"type":30,"tag":1046,"props":19082,"children":19083},{"style":1105},[19084],{"type":40,"value":19085},"            emprunt",{"type":30,"tag":1046,"props":19087,"children":19088},{"style":1070},[19089],{"type":40,"value":1179},{"type":30,"tag":1046,"props":19091,"children":19092},{"style":1138},[19093],{"type":40,"value":18544},{"type":30,"tag":1046,"props":19095,"children":19096},{"style":1070},[19097],{"type":40,"value":1146},{"type":30,"tag":1046,"props":19099,"children":19100},{"style":1053},[19101],{"type":40,"value":4234},{"type":30,"tag":1046,"props":19103,"children":19104},{"style":1138},[19105],{"type":40,"value":18515},{"type":30,"tag":1046,"props":19107,"children":19108},{"style":1070},[19109],{"type":40,"value":1146},{"type":30,"tag":1046,"props":19111,"children":19112},{"style":1675},[19113],{"type":40,"value":19114},"\"Livre \"",{"type":30,"tag":1046,"props":19116,"children":19117},{"style":1795},[19118],{"type":40,"value":7261},{"type":30,"tag":1046,"props":19120,"children":19121},{"style":1105},[19122],{"type":40,"value":13329},{"type":30,"tag":1046,"props":19124,"children":19125},{"style":1070},[19126],{"type":40,"value":4457},{"type":30,"tag":1046,"props":19128,"children":19129},{"class":1048,"line":1284},[19130],{"type":30,"tag":1046,"props":19131,"children":19132},{"style":1070},[19133],{"type":40,"value":11922},{"type":30,"tag":1046,"props":19135,"children":19136},{"class":1048,"line":1292},[19137],{"type":30,"tag":1046,"props":19138,"children":19139},{"style":1105},[19140],{"type":40,"value":19014},{"type":30,"tag":1046,"props":19142,"children":19143},{"class":1048,"line":1300},[19144,19149,19153,19158,19162,19166,19170,19175,19179],{"type":30,"tag":1046,"props":19145,"children":19146},{"style":1138},[19147],{"type":40,"value":19148},"        assertThrows",{"type":30,"tag":1046,"props":19150,"children":19151},{"style":1070},[19152],{"type":40,"value":1146},{"type":30,"tag":1046,"props":19154,"children":19155},{"style":1105},[19156],{"type":40,"value":19157},"RuntimeException",{"type":30,"tag":1046,"props":19159,"children":19160},{"style":1070},[19161],{"type":40,"value":1179},{"type":30,"tag":1046,"props":19163,"children":19164},{"style":1105},[19165],{"type":40,"value":7282},{"type":30,"tag":1046,"props":19167,"children":19168},{"style":1070},[19169],{"type":40,"value":2891},{"type":30,"tag":1046,"props":19171,"children":19172},{"style":1070},[19173],{"type":40,"value":19174}," ()",{"type":30,"tag":1046,"props":19176,"children":19177},{"style":1053},[19178],{"type":40,"value":4434},{"type":30,"tag":1046,"props":19180,"children":19181},{"style":1070},[19182],{"type":40,"value":1073},{"type":30,"tag":1046,"props":19184,"children":19185},{"class":1048,"line":1327},[19186,19190,19194,19198,19202,19206,19210,19214,19219],{"type":30,"tag":1046,"props":19187,"children":19188},{"style":1105},[19189],{"type":40,"value":19085},{"type":30,"tag":1046,"props":19191,"children":19192},{"style":1070},[19193],{"type":40,"value":1179},{"type":30,"tag":1046,"props":19195,"children":19196},{"style":1138},[19197],{"type":40,"value":18544},{"type":30,"tag":1046,"props":19199,"children":19200},{"style":1070},[19201],{"type":40,"value":1146},{"type":30,"tag":1046,"props":19203,"children":19204},{"style":1053},[19205],{"type":40,"value":4234},{"type":30,"tag":1046,"props":19207,"children":19208},{"style":1138},[19209],{"type":40,"value":18515},{"type":30,"tag":1046,"props":19211,"children":19212},{"style":1070},[19213],{"type":40,"value":1146},{"type":30,"tag":1046,"props":19215,"children":19216},{"style":1675},[19217],{"type":40,"value":19218},"\"Livre 6\"",{"type":30,"tag":1046,"props":19220,"children":19221},{"style":1070},[19222],{"type":40,"value":4457},{"type":30,"tag":1046,"props":19224,"children":19225},{"class":1048,"line":1354},[19226],{"type":30,"tag":1046,"props":19227,"children":19228},{"style":1070},[19229],{"type":40,"value":19230},"        });\n",{"type":30,"tag":1046,"props":19232,"children":19233},{"class":1048,"line":1391},[19234],{"type":30,"tag":1046,"props":19235,"children":19236},{"style":1070},[19237],{"type":40,"value":1207},{"type":30,"tag":1046,"props":19239,"children":19240},{"class":1048,"line":1409},[19241],{"type":30,"tag":1046,"props":19242,"children":19243},{"style":1070},[19244],{"type":40,"value":1423},{"type":30,"tag":43,"props":19246,"children":19247},{},[19248,19252],{"type":30,"tag":36,"props":19249,"children":19250},{},[19251],{"type":40,"value":8011},{"type":40,"value":19253}," Les tests doivent couvrir toutes les règles métier importantes. Ils vous aideront à repérer rapidement les régressions lorsque vous faites des modifications dans votre code.",{"type":30,"tag":84,"props":19255,"children":19256},{},[],{"type":30,"tag":31,"props":19258,"children":19260},{"id":19259},"faq-sur-le-domain-driven-design-ddd",[19261],{"type":40,"value":19262},"FAQ sur le Domain-Driven Design (DDD)",{"type":30,"tag":530,"props":19264,"children":19265},{},[19266,19271],{"type":30,"tag":534,"props":19267,"children":19268},{},[19269],{"type":40,"value":19270},"1. Est-ce que le DDD est trop complexe pour les petits projets ?",{"type":30,"tag":43,"props":19272,"children":19273},{},[19274],{"type":40,"value":19275},"Pas nécessairement. Le DDD est plus adapté aux projets complexes, mais certains de ses principes peuvent être utiles même dans de plus petits projets pour organiser votre code.",{"type":30,"tag":530,"props":19277,"children":19278},{},[19279,19284],{"type":30,"tag":534,"props":19280,"children":19281},{},[19282],{"type":40,"value":19283},"2. Dois-je utiliser tous les concepts du DDD dès le début ?",{"type":30,"tag":43,"props":19285,"children":19286},{},[19287],{"type":40,"value":19288},"Non, vous pouvez les introduire progressivement en fonction de vos besoins.",{"type":30,"tag":530,"props":19290,"children":19291},{},[19292,19297],{"type":30,"tag":534,"props":19293,"children":19294},{},[19295],{"type":40,"value":19296},"3. Est-ce que je dois utiliser un framework spécifique pour appliquer DDD en Java ?",{"type":30,"tag":43,"props":19298,"children":19299},{},[19300],{"type":40,"value":19301},"Non. Vous pouvez utiliser des bibliothèques comme Spring ou Hibernate tout en organisant votre code selon les principes de DDD.",{"type":30,"tag":530,"props":19303,"children":19304},{},[19305,19310],{"type":30,"tag":534,"props":19306,"children":19307},{},[19308],{"type":40,"value":19309},"4. Comment savoir si j’ai correctement modélisé mon domaine ?",{"type":30,"tag":43,"props":19311,"children":19312},{},[19313],{"type":40,"value":19314},"Si un expert métier peut comprendre votre modèle sans difficultés, c’est un bon signe.",{"type":30,"tag":530,"props":19316,"children":19317},{},[19318,19323],{"type":30,"tag":534,"props":19319,"children":19320},{},[19321],{"type":40,"value":19322},"5. Comment éviter que les agrégats deviennent trop gros ?",{"type":30,"tag":43,"props":19324,"children":19325},{},[19326],{"type":40,"value":19327},"Divisez-les si nécessaire. Un agrégat doit rester cohérent et ne contenir que les entités nécessaires à son bon fonctionnement.",{"type":30,"tag":530,"props":19329,"children":19330},{},[19331,19336],{"type":30,"tag":534,"props":19332,"children":19333},{},[19334],{"type":40,"value":19335},"6. Et si l’équipe métier change souvent d’avis ?",{"type":30,"tag":43,"props":19337,"children":19338},{},[19339],{"type":40,"value":19340},"DDD permet de mieux gérer les changements car la logique métier est bien isolée dans le code, ce qui facilite les modifications.",{"type":30,"tag":530,"props":19342,"children":19343},{},[19344,19349],{"type":30,"tag":534,"props":19345,"children":19346},{},[19347],{"type":40,"value":19348},"7. Combien de temps faut-il pour maîtriser le DDD ?",{"type":30,"tag":43,"props":19350,"children":19351},{},[19352],{"type":40,"value":19353},"Cela dépend de votre expérience, mais en commençant avec les bases, vous pouvez progresser rapidement.",{"type":30,"tag":211,"props":19355,"children":19358},{"cta":19356,"href":639,"title":19357,"type":641},"Télécharger le diagnostic gratuit →","Ressource gratuite : 10 signaux que votre équipe tech est en danger",[19359],{"type":30,"tag":43,"props":19360,"children":19361},{},[19362],{"type":40,"value":19363},"10 signaux d'alarme pour identifier les problèmes systémiques cachés dans votre équipe avant qu'ils deviennent critiques. Auto-diagnostic inclus : 5 minutes pour savoir où vous en êtes.",{"type":30,"tag":6456,"props":19365,"children":19366},{},[19367],{"type":40,"value":6460},{"title":8,"searchDepth":675,"depth":675,"links":19369},[19370,19371,19374,19386,19398],{"id":16765,"depth":675,"text":16768},{"id":16795,"depth":675,"text":16798,"children":19372},[19373],{"id":16824,"depth":681,"text":16827},{"id":16884,"depth":675,"text":16887,"children":19375},[19376,19378,19380,19382,19384],{"id":16895,"depth":681,"text":19377},"1. Entité",{"id":17252,"depth":681,"text":19379},"2. Objet de valeur (Value Object)",{"id":17975,"depth":681,"text":19381},"3. Agrégat",{"id":18426,"depth":681,"text":19383},"4. Service de domaine",{"id":18590,"depth":681,"text":19385},"5. Référentiel (Repository)",{"id":18719,"depth":675,"text":18722,"children":19387},[19388,19390,19392,19394,19396],{"id":18730,"depth":681,"text":19389},"1. Commencez par le domaine, pas par la technologie",{"id":18751,"depth":681,"text":19391},"2. Utilisez des schémas pour visualiser les agrégats",{"id":18766,"depth":681,"text":19393},"3. Adoptez une approche modulaire",{"id":18795,"depth":681,"text":19395},"4. Gardez vos services de domaine fins et spécifiques",{"id":18810,"depth":681,"text":19397},"5. Testez vos domaines métiers de manière exhaustive",{"id":19259,"depth":675,"text":19262},"content:fr:architecture-craft:decouvrir-domain-driven-design-ddd-avantages-exemples-java.md","fr/architecture-craft/decouvrir-domain-driven-design-ddd-avantages-exemples-java.md","fr/architecture-craft/decouvrir-domain-driven-design-ddd-avantages-exemples-java",{"_path":19403,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":19404,"description":19405,"id":10503,"date":19406,"listed":13,"nocomments":7,"hidden":7,"categories":19407,"tags":19408,"--cover":19409,"readingTime":19410,"body":19415,"_type":709,"_id":24076,"_source":711,"_file":24077,"_stem":24078,"_extension":714},"/fr/dette-technique/clean-code-software-craftsmanship-principes-java","Découvrir le Clean Code en Software Craftsmanship, Les Bonnes Pratiques en Java","Découvrez les principes du Clean Code et comment écrire du code propre et maintenable avec des exemples concrets en Java. Astuces, FAQ et bonnes pratiques pour...","2024-07-17",[6],[13022,726],"covers/articles/principe-clean-code.jpg",{"text":19411,"minutes":19412,"time":19413,"words":19414},"16 min read",15.43,925800,3086,{"type":27,"children":19416,"toc":24046},[19417,19426,19435,19440,19471,19480,19490,19499,19516,19519,19528,19539,19548,19566,19573,19651,19672,19682,19691,19703,19710,20497,20510,20518,20521,20530,20539,20557,20564,20862,20867,20870,20879,20896,20905,20916,20923,21001,21022,21056,21059,21068,21073,21080,21554,21559,21567,21570,21579,21584,21591,21934,21939,21955,21958,21967,21977,21986,21997,22004,22398,22403,22411,22414,22423,22428,22435,22906,22911,22919,22922,22931,22946,22953,23264,23276,23284,23287,23296,23307,23316,23336,23343,23640,23653,23661,23664,23673,23684,23695,23728,23736,23739,23748,23764,23772,23805,23819,23822,23831,23849,23867,23886,23956,23975,23994,24013,24016,24025,24035,24042],{"type":30,"tag":31,"props":19418,"children":19420},{"id":19419},"découvrir-le-clean-code-en-software-craftsmanship-les-bonnes-pratiques-en-java",[19421],{"type":30,"tag":36,"props":19422,"children":19423},{},[19424],{"type":40,"value":19425},"Découvrir le Clean Code en Software Craftsmanship : Les Bonnes Pratiques en Java",{"type":30,"tag":116,"props":19427,"children":19429},{"id":19428},"introduction-au-clean-code-pourquoi-écrire-du-code-propre-est-essentiel",[19430],{"type":30,"tag":36,"props":19431,"children":19432},{},[19433],{"type":40,"value":19434},"Introduction au Clean Code : Pourquoi écrire du code propre est essentiel",{"type":30,"tag":43,"props":19436,"children":19437},{},[19438],{"type":40,"value":19439},"Imaginez cette situation : vous revenez sur un projet sur lequel vous avez travaillé il y a six mois. À l’époque, vous aviez tout bouclé en vitesse pour respecter les délais. Mais aujourd’hui, en rouvrant ce code, c’est un véritable casse-tête. Des noms de variables incompréhensibles, des fonctions interminables... et maintenant, vous devez y ajouter une nouvelle fonctionnalité. Résultat ? Vous passez plus de temps à comprendre votre propre code qu’à le modifier.",{"type":30,"tag":43,"props":19441,"children":19442},{},[19443,19445,19449,19451,19456,19458,19463,19464,19469],{"type":40,"value":19444},"J’ai vu cette situation se répéter dans des dizaines d’équipes que j’ai accompagnées, notamment dans des DSI bancaires comme BNP Paribas CIB ou Agirc-Arrco. C’est là que le ",{"type":30,"tag":36,"props":19446,"children":19447},{},[19448],{"type":40,"value":13075},{"type":40,"value":19450}," entre en jeu. Plus qu’une simple méthodologie, c’est une philosophie de développement qui vise à rendre le code non seulement fonctionnel, mais aussi ",{"type":30,"tag":36,"props":19452,"children":19453},{},[19454],{"type":40,"value":19455},"clair",{"type":40,"value":19457},", ",{"type":30,"tag":36,"props":19459,"children":19460},{},[19461],{"type":40,"value":19462},"lisible",{"type":40,"value":8328},{"type":30,"tag":36,"props":19465,"children":19466},{},[19467],{"type":40,"value":19468},"facilement maintenable",{"type":40,"value":19470},". En d’autres termes, un code que vous (ou quelqu’un d’autre) pourrez modifier sereinement dans six mois, ou même dans un an.",{"type":30,"tag":116,"props":19472,"children":19474},{"id":19473},"pourquoi-vous-devez-vous-en-soucier",[19475],{"type":30,"tag":36,"props":19476,"children":19477},{},[19478],{"type":40,"value":19479},"Pourquoi vous devez vous en soucier ?",{"type":30,"tag":43,"props":19481,"children":19482},{},[19483,19484,19488],{"type":40,"value":143},{"type":30,"tag":36,"props":19485,"children":19486},{},[19487],{"type":40,"value":13075},{"type":40,"value":19489},", ce n’est pas juste une question d’esthétique. C’est un moyen de garantir que votre code reste robuste, compréhensible et prêt à évoluer. En adoptant ces principes, vous allez réduire les bugs, faciliter la maintenance, et surtout, économiser énormément de temps sur le long terme. Ce qui se traduit concrètement par des cycles de livraison plus courts et un coût de maintenance réduit.",{"type":30,"tag":116,"props":19491,"children":19493},{"id":19492},"ce-que-vous-allez-apprendre-ici",[19494],{"type":30,"tag":36,"props":19495,"children":19496},{},[19497],{"type":40,"value":19498},"Ce que vous allez apprendre ici",{"type":30,"tag":43,"props":19500,"children":19501},{},[19502,19504,19508,19510,19514],{"type":40,"value":19503},"Vous allez découvrir les principes fondamentaux du ",{"type":30,"tag":36,"props":19505,"children":19506},{},[19507],{"type":40,"value":13075},{"type":40,"value":19509},", tels que les définit Robert C. Martin dans son ouvrage de référence, avec des exemples pratiques en ",{"type":30,"tag":36,"props":19511,"children":19512},{},[19513],{"type":40,"value":845},{"type":40,"value":19515}," pour intégrer ces bonnes pratiques dans votre travail quotidien. Je vous donnerai aussi des astuces simples à appliquer, même lorsque vous êtes sous pression pour livrer rapidement.",{"type":30,"tag":84,"props":19517,"children":19518},{},[],{"type":30,"tag":31,"props":19520,"children":19522},{"id":19521},"les-principes-fondamentaux-du-clean-code",[19523],{"type":30,"tag":36,"props":19524,"children":19525},{},[19526],{"type":40,"value":19527},"Les principes fondamentaux du Clean Code",{"type":30,"tag":43,"props":19529,"children":19530},{},[19531,19533,19537],{"type":40,"value":19532},"Maintenant que vous comprenez pourquoi le ",{"type":30,"tag":36,"props":19534,"children":19535},{},[19536],{"type":40,"value":13075},{"type":40,"value":19538}," est si important, plongeons dans les principes clés qui vous permettront de l'appliquer efficacement dans votre code. Ces principes vous guideront pour écrire un code qui n'est pas seulement fonctionnel, mais aussi agréable à lire et à maintenir.",{"type":30,"tag":116,"props":19540,"children":19542},{"id":19541},"_1-des-noms-de-variables-et-de-fonctions-explicites",[19543],{"type":30,"tag":36,"props":19544,"children":19545},{},[19546],{"type":40,"value":19547},"1. Des noms de variables et de fonctions explicites",{"type":30,"tag":43,"props":19549,"children":19550},{},[19551,19553,19558,19559,19564],{"type":40,"value":19552},"L'un des premiers pas vers un code propre est de choisir des noms ",{"type":30,"tag":36,"props":19554,"children":19555},{},[19556],{"type":40,"value":19557},"clairs",{"type":40,"value":8328},{"type":30,"tag":36,"props":19560,"children":19561},{},[19562],{"type":40,"value":19563},"significatifs",{"type":40,"value":19565}," pour vos variables, vos fonctions et vos classes. Si quelqu'un peut comprendre ce qu'une variable fait rien qu'en lisant son nom, alors vous êtes sur la bonne voie.",{"type":30,"tag":43,"props":19567,"children":19568},{},[19569],{"type":30,"tag":36,"props":19570,"children":19571},{},[19572],{"type":40,"value":13211},{"type":30,"tag":1035,"props":19574,"children":19576},{"className":1039,"code":19575,"language":1038,"meta":8,"style":8},"// Mauvais exemple\nint a = 5;\n\n// Meilleur exemple\nint nombreDeJours = 5;\n",[19577],{"type":30,"tag":1042,"props":19578,"children":19579},{"__ignoreMap":8},[19580,19588,19612,19619,19627],{"type":30,"tag":1046,"props":19581,"children":19582},{"class":1048,"line":1049},[19583],{"type":30,"tag":1046,"props":19584,"children":19585},{"style":3961},[19586],{"type":40,"value":19587},"// Mauvais exemple\n",{"type":30,"tag":1046,"props":19589,"children":19590},{"class":1048,"line":675},[19591,19595,19600,19604,19608],{"type":30,"tag":1046,"props":19592,"children":19593},{"style":1053},[19594],{"type":40,"value":10323},{"type":30,"tag":1046,"props":19596,"children":19597},{"style":1105},[19598],{"type":40,"value":19599}," a ",{"type":30,"tag":1046,"props":19601,"children":19602},{"style":1795},[19603],{"type":40,"value":1798},{"type":30,"tag":1046,"props":19605,"children":19606},{"style":6886},[19607],{"type":40,"value":18313},{"type":30,"tag":1046,"props":19609,"children":19610},{"style":1070},[19611],{"type":40,"value":1113},{"type":30,"tag":1046,"props":19613,"children":19614},{"class":1048,"line":681},[19615],{"type":30,"tag":1046,"props":19616,"children":19617},{"emptyLinePlaceholder":13},[19618],{"type":40,"value":1121},{"type":30,"tag":1046,"props":19620,"children":19621},{"class":1048,"line":1124},[19622],{"type":30,"tag":1046,"props":19623,"children":19624},{"style":3961},[19625],{"type":40,"value":19626},"// Meilleur exemple\n",{"type":30,"tag":1046,"props":19628,"children":19629},{"class":1048,"line":1168},[19630,19634,19639,19643,19647],{"type":30,"tag":1046,"props":19631,"children":19632},{"style":1053},[19633],{"type":40,"value":10323},{"type":30,"tag":1046,"props":19635,"children":19636},{"style":1105},[19637],{"type":40,"value":19638}," nombreDeJours ",{"type":30,"tag":1046,"props":19640,"children":19641},{"style":1795},[19642],{"type":40,"value":1798},{"type":30,"tag":1046,"props":19644,"children":19645},{"style":6886},[19646],{"type":40,"value":18313},{"type":30,"tag":1046,"props":19648,"children":19649},{"style":1070},[19650],{"type":40,"value":1113},{"type":30,"tag":43,"props":19652,"children":19653},{},[19654,19656,19662,19664,19670],{"type":40,"value":19655},"En nommant la variable ",{"type":30,"tag":1042,"props":19657,"children":19659},{"className":19658},[],[19660],{"type":40,"value":19661},"nombreDeJours",{"type":40,"value":19663},", on rend immédiatement évident ce que représente cette donnée, sans avoir besoin de commentaires ou de devinettes. De plus, évitez les abréviations trop courtes ou ambiguës comme ",{"type":30,"tag":1042,"props":19665,"children":19667},{"className":19666},[],[19668],{"type":40,"value":19669},"nbr",{"type":40,"value":19671},", qui peuvent prêter à confusion.",{"type":30,"tag":19673,"props":19674,"children":19676},"alert",{"type":19675},"TIP",[19677],{"type":30,"tag":43,"props":19678,"children":19679},{},[19680],{"type":40,"value":19681},"Pensez à vos noms de variables et fonctions comme à une conversation. Si vous deviez expliquer ce que fait votre code à un collègue, utiliseriez-vous ces noms ? Si la réponse est non, il est probablement temps de les améliorer.",{"type":30,"tag":116,"props":19683,"children":19685},{"id":19684},"_2-la-règle-des-fonctions-courtes",[19686],{"type":30,"tag":36,"props":19687,"children":19688},{},[19689],{"type":40,"value":19690},"2. La règle des fonctions courtes",{"type":30,"tag":43,"props":19692,"children":19693},{},[19694,19696,19701],{"type":40,"value":19695},"Une bonne fonction ne doit faire ",{"type":30,"tag":36,"props":19697,"children":19698},{},[19699],{"type":40,"value":19700},"qu'une seule chose",{"type":40,"value":19702}," et bien la faire. Si une fonction devient trop longue, il y a de fortes chances qu'elle fasse trop de choses à la fois. Un bon indicateur : si vous pouvez résumer ce que fait votre fonction en une seule phrase claire, elle est probablement assez concise.",{"type":30,"tag":43,"props":19704,"children":19705},{},[19706],{"type":30,"tag":36,"props":19707,"children":19708},{},[19709],{"type":40,"value":13211},{"type":30,"tag":1035,"props":19711,"children":19713},{"className":1039,"code":19712,"language":1038,"meta":8,"style":8},"// Mauvais exemple - Trop de responsabilités dans une seule fonction\npublic void processOrder(Order order) {\n    // Valider la commande\n    if (order.isValid()) {\n        // Calculer le total\n        double total = order.getAmount() + calculateTax(order);\n\n        // Traiter le paiement\n        processPayment(order, total);\n\n        // Envoyer une confirmation\n        sendConfirmationEmail(order);\n    } else {\n        System.out.println(\"Commande invalide\");\n    }\n}\n\n// Meilleur exemple - Chaque fonction a une responsabilité unique\npublic void processOrder(Order order) {\n    if (order.isValid()) {\n        double total = calculateTotal(order);\n        processPayment(order, total);\n        sendConfirmation(order);\n    } else {\n        handleInvalidOrder();\n    }\n}\n\nprivate double calculateTotal(Order order) {\n    return order.getAmount() + calculateTax(order);\n}\n\nprivate void processPayment(Order order, double total) {\n    // Code pour traiter le paiement\n}\n\nprivate void sendConfirmation(Order order) {\n    // Code pour envoyer l'email de confirmation\n}\n\nprivate void handleInvalidOrder() {\n    System.out.println(\"Commande invalide\");\n}\n",[19714],{"type":30,"tag":1042,"props":19715,"children":19716},{"__ignoreMap":8},[19717,19725,19760,19767,19798,19805,19858,19865,19873,19901,19908,19916,19936,19953,19989,19996,20003,20010,20018,20053,20084,20115,20142,20162,20177,20189,20196,20203,20210,20245,20288,20295,20302,20350,20358,20365,20372,20408,20416,20423,20430,20454,20490],{"type":30,"tag":1046,"props":19718,"children":19719},{"class":1048,"line":1049},[19720],{"type":30,"tag":1046,"props":19721,"children":19722},{"style":3961},[19723],{"type":40,"value":19724},"// Mauvais exemple - Trop de responsabilités dans une seule fonction\n",{"type":30,"tag":1046,"props":19726,"children":19727},{"class":1048,"line":675},[19728,19732,19736,19740,19744,19748,19752,19756],{"type":30,"tag":1046,"props":19729,"children":19730},{"style":1053},[19731],{"type":40,"value":1056},{"type":30,"tag":1046,"props":19733,"children":19734},{"style":1053},[19735],{"type":40,"value":1135},{"type":30,"tag":1046,"props":19737,"children":19738},{"style":1138},[19739],{"type":40,"value":15643},{"type":30,"tag":1046,"props":19741,"children":19742},{"style":1070},[19743],{"type":40,"value":1146},{"type":30,"tag":1046,"props":19745,"children":19746},{"style":1084},[19747],{"type":40,"value":15652},{"type":30,"tag":1046,"props":19749,"children":19750},{"style":1105},[19751],{"type":40,"value":15657},{"type":30,"tag":1046,"props":19753,"children":19754},{"style":1070},[19755],{"type":40,"value":1161},{"type":30,"tag":1046,"props":19757,"children":19758},{"style":1070},[19759],{"type":40,"value":1073},{"type":30,"tag":1046,"props":19761,"children":19762},{"class":1048,"line":681},[19763],{"type":30,"tag":1046,"props":19764,"children":19765},{"style":3961},[19766],{"type":40,"value":15673},{"type":30,"tag":1046,"props":19768,"children":19769},{"class":1048,"line":1124},[19770,19774,19778,19782,19786,19790,19794],{"type":30,"tag":1046,"props":19771,"children":19772},{"style":1053},[19773],{"type":40,"value":14008},{"type":30,"tag":1046,"props":19775,"children":19776},{"style":1070},[19777],{"type":40,"value":11861},{"type":30,"tag":1046,"props":19779,"children":19780},{"style":1105},[19781],{"type":40,"value":15689},{"type":30,"tag":1046,"props":19783,"children":19784},{"style":1070},[19785],{"type":40,"value":1179},{"type":30,"tag":1046,"props":19787,"children":19788},{"style":1138},[19789],{"type":40,"value":15698},{"type":30,"tag":1046,"props":19791,"children":19792},{"style":1070},[19793],{"type":40,"value":13520},{"type":30,"tag":1046,"props":19795,"children":19796},{"style":1070},[19797],{"type":40,"value":1073},{"type":30,"tag":1046,"props":19799,"children":19800},{"class":1048,"line":1168},[19801],{"type":30,"tag":1046,"props":19802,"children":19803},{"style":3961},[19804],{"type":40,"value":15714},{"type":30,"tag":1046,"props":19806,"children":19807},{"class":1048,"line":1201},[19808,19812,19816,19820,19824,19828,19833,19837,19841,19846,19850,19854],{"type":30,"tag":1046,"props":19809,"children":19810},{"style":1053},[19811],{"type":40,"value":5933},{"type":30,"tag":1046,"props":19813,"children":19814},{"style":1105},[19815],{"type":40,"value":5938},{"type":30,"tag":1046,"props":19817,"children":19818},{"style":1795},[19819],{"type":40,"value":1798},{"type":30,"tag":1046,"props":19821,"children":19822},{"style":1105},[19823],{"type":40,"value":15657},{"type":30,"tag":1046,"props":19825,"children":19826},{"style":1070},[19827],{"type":40,"value":1179},{"type":30,"tag":1046,"props":19829,"children":19830},{"style":1138},[19831],{"type":40,"value":19832},"getAmount",{"type":30,"tag":1046,"props":19834,"children":19835},{"style":1070},[19836],{"type":40,"value":1320},{"type":30,"tag":1046,"props":19838,"children":19839},{"style":1795},[19840],{"type":40,"value":7261},{"type":30,"tag":1046,"props":19842,"children":19843},{"style":1138},[19844],{"type":40,"value":19845}," calculateTax",{"type":30,"tag":1046,"props":19847,"children":19848},{"style":1070},[19849],{"type":40,"value":1146},{"type":30,"tag":1046,"props":19851,"children":19852},{"style":1105},[19853],{"type":40,"value":15689},{"type":30,"tag":1046,"props":19855,"children":19856},{"style":1070},[19857],{"type":40,"value":1198},{"type":30,"tag":1046,"props":19859,"children":19860},{"class":1048,"line":1210},[19861],{"type":30,"tag":1046,"props":19862,"children":19863},{"emptyLinePlaceholder":13},[19864],{"type":40,"value":1121},{"type":30,"tag":1046,"props":19866,"children":19867},{"class":1048,"line":1218},[19868],{"type":30,"tag":1046,"props":19869,"children":19870},{"style":3961},[19871],{"type":40,"value":19872},"        // Traiter le paiement\n",{"type":30,"tag":1046,"props":19874,"children":19875},{"class":1048,"line":1255},[19876,19881,19885,19889,19893,19897],{"type":30,"tag":1046,"props":19877,"children":19878},{"style":1138},[19879],{"type":40,"value":19880},"        processPayment",{"type":30,"tag":1046,"props":19882,"children":19883},{"style":1070},[19884],{"type":40,"value":1146},{"type":30,"tag":1046,"props":19886,"children":19887},{"style":1105},[19888],{"type":40,"value":15689},{"type":30,"tag":1046,"props":19890,"children":19891},{"style":1070},[19892],{"type":40,"value":2891},{"type":30,"tag":1046,"props":19894,"children":19895},{"style":1105},[19896],{"type":40,"value":15992},{"type":30,"tag":1046,"props":19898,"children":19899},{"style":1070},[19900],{"type":40,"value":1198},{"type":30,"tag":1046,"props":19902,"children":19903},{"class":1048,"line":1284},[19904],{"type":30,"tag":1046,"props":19905,"children":19906},{"emptyLinePlaceholder":13},[19907],{"type":40,"value":1121},{"type":30,"tag":1046,"props":19909,"children":19910},{"class":1048,"line":1292},[19911],{"type":30,"tag":1046,"props":19912,"children":19913},{"style":3961},[19914],{"type":40,"value":19915},"        // Envoyer une confirmation\n",{"type":30,"tag":1046,"props":19917,"children":19918},{"class":1048,"line":1300},[19919,19924,19928,19932],{"type":30,"tag":1046,"props":19920,"children":19921},{"style":1138},[19922],{"type":40,"value":19923},"        sendConfirmationEmail",{"type":30,"tag":1046,"props":19925,"children":19926},{"style":1070},[19927],{"type":40,"value":1146},{"type":30,"tag":1046,"props":19929,"children":19930},{"style":1105},[19931],{"type":40,"value":15689},{"type":30,"tag":1046,"props":19933,"children":19934},{"style":1070},[19935],{"type":40,"value":1198},{"type":30,"tag":1046,"props":19937,"children":19938},{"class":1048,"line":1327},[19939,19944,19949],{"type":30,"tag":1046,"props":19940,"children":19941},{"style":1070},[19942],{"type":40,"value":19943},"    }",{"type":30,"tag":1046,"props":19945,"children":19946},{"style":1053},[19947],{"type":40,"value":19948}," else",{"type":30,"tag":1046,"props":19950,"children":19951},{"style":1070},[19952],{"type":40,"value":1073},{"type":30,"tag":1046,"props":19954,"children":19955},{"class":1048,"line":1354},[19956,19960,19964,19968,19972,19976,19980,19985],{"type":30,"tag":1046,"props":19957,"children":19958},{"style":1105},[19959],{"type":40,"value":12555},{"type":30,"tag":1046,"props":19961,"children":19962},{"style":1070},[19963],{"type":40,"value":1179},{"type":30,"tag":1046,"props":19965,"children":19966},{"style":1105},[19967],{"type":40,"value":12564},{"type":30,"tag":1046,"props":19969,"children":19970},{"style":1070},[19971],{"type":40,"value":1179},{"type":30,"tag":1046,"props":19973,"children":19974},{"style":1138},[19975],{"type":40,"value":12573},{"type":30,"tag":1046,"props":19977,"children":19978},{"style":1070},[19979],{"type":40,"value":1146},{"type":30,"tag":1046,"props":19981,"children":19982},{"style":1675},[19983],{"type":40,"value":19984},"\"Commande invalide\"",{"type":30,"tag":1046,"props":19986,"children":19987},{"style":1070},[19988],{"type":40,"value":1198},{"type":30,"tag":1046,"props":19990,"children":19991},{"class":1048,"line":1391},[19992],{"type":30,"tag":1046,"props":19993,"children":19994},{"style":1070},[19995],{"type":40,"value":1207},{"type":30,"tag":1046,"props":19997,"children":19998},{"class":1048,"line":1409},[19999],{"type":30,"tag":1046,"props":20000,"children":20001},{"style":1070},[20002],{"type":40,"value":1423},{"type":30,"tag":1046,"props":20004,"children":20005},{"class":1048,"line":1417},[20006],{"type":30,"tag":1046,"props":20007,"children":20008},{"emptyLinePlaceholder":13},[20009],{"type":40,"value":1121},{"type":30,"tag":1046,"props":20011,"children":20012},{"class":1048,"line":2023},[20013],{"type":30,"tag":1046,"props":20014,"children":20015},{"style":3961},[20016],{"type":40,"value":20017},"// Meilleur exemple - Chaque fonction a une responsabilité unique\n",{"type":30,"tag":1046,"props":20019,"children":20020},{"class":1048,"line":2083},[20021,20025,20029,20033,20037,20041,20045,20049],{"type":30,"tag":1046,"props":20022,"children":20023},{"style":1053},[20024],{"type":40,"value":1056},{"type":30,"tag":1046,"props":20026,"children":20027},{"style":1053},[20028],{"type":40,"value":1135},{"type":30,"tag":1046,"props":20030,"children":20031},{"style":1138},[20032],{"type":40,"value":15643},{"type":30,"tag":1046,"props":20034,"children":20035},{"style":1070},[20036],{"type":40,"value":1146},{"type":30,"tag":1046,"props":20038,"children":20039},{"style":1084},[20040],{"type":40,"value":15652},{"type":30,"tag":1046,"props":20042,"children":20043},{"style":1105},[20044],{"type":40,"value":15657},{"type":30,"tag":1046,"props":20046,"children":20047},{"style":1070},[20048],{"type":40,"value":1161},{"type":30,"tag":1046,"props":20050,"children":20051},{"style":1070},[20052],{"type":40,"value":1073},{"type":30,"tag":1046,"props":20054,"children":20055},{"class":1048,"line":2126},[20056,20060,20064,20068,20072,20076,20080],{"type":30,"tag":1046,"props":20057,"children":20058},{"style":1053},[20059],{"type":40,"value":14008},{"type":30,"tag":1046,"props":20061,"children":20062},{"style":1070},[20063],{"type":40,"value":11861},{"type":30,"tag":1046,"props":20065,"children":20066},{"style":1105},[20067],{"type":40,"value":15689},{"type":30,"tag":1046,"props":20069,"children":20070},{"style":1070},[20071],{"type":40,"value":1179},{"type":30,"tag":1046,"props":20073,"children":20074},{"style":1138},[20075],{"type":40,"value":15698},{"type":30,"tag":1046,"props":20077,"children":20078},{"style":1070},[20079],{"type":40,"value":13520},{"type":30,"tag":1046,"props":20081,"children":20082},{"style":1070},[20083],{"type":40,"value":1073},{"type":30,"tag":1046,"props":20085,"children":20086},{"class":1048,"line":2159},[20087,20091,20095,20099,20103,20107,20111],{"type":30,"tag":1046,"props":20088,"children":20089},{"style":1053},[20090],{"type":40,"value":5933},{"type":30,"tag":1046,"props":20092,"children":20093},{"style":1105},[20094],{"type":40,"value":5938},{"type":30,"tag":1046,"props":20096,"children":20097},{"style":1795},[20098],{"type":40,"value":1798},{"type":30,"tag":1046,"props":20100,"children":20101},{"style":1138},[20102],{"type":40,"value":1315},{"type":30,"tag":1046,"props":20104,"children":20105},{"style":1070},[20106],{"type":40,"value":1146},{"type":30,"tag":1046,"props":20108,"children":20109},{"style":1105},[20110],{"type":40,"value":15689},{"type":30,"tag":1046,"props":20112,"children":20113},{"style":1070},[20114],{"type":40,"value":1198},{"type":30,"tag":1046,"props":20116,"children":20117},{"class":1048,"line":2167},[20118,20122,20126,20130,20134,20138],{"type":30,"tag":1046,"props":20119,"children":20120},{"style":1138},[20121],{"type":40,"value":19880},{"type":30,"tag":1046,"props":20123,"children":20124},{"style":1070},[20125],{"type":40,"value":1146},{"type":30,"tag":1046,"props":20127,"children":20128},{"style":1105},[20129],{"type":40,"value":15689},{"type":30,"tag":1046,"props":20131,"children":20132},{"style":1070},[20133],{"type":40,"value":2891},{"type":30,"tag":1046,"props":20135,"children":20136},{"style":1105},[20137],{"type":40,"value":15992},{"type":30,"tag":1046,"props":20139,"children":20140},{"style":1070},[20141],{"type":40,"value":1198},{"type":30,"tag":1046,"props":20143,"children":20144},{"class":1048,"line":4537},[20145,20150,20154,20158],{"type":30,"tag":1046,"props":20146,"children":20147},{"style":1138},[20148],{"type":40,"value":20149},"        sendConfirmation",{"type":30,"tag":1046,"props":20151,"children":20152},{"style":1070},[20153],{"type":40,"value":1146},{"type":30,"tag":1046,"props":20155,"children":20156},{"style":1105},[20157],{"type":40,"value":15689},{"type":30,"tag":1046,"props":20159,"children":20160},{"style":1070},[20161],{"type":40,"value":1198},{"type":30,"tag":1046,"props":20163,"children":20164},{"class":1048,"line":4545},[20165,20169,20173],{"type":30,"tag":1046,"props":20166,"children":20167},{"style":1070},[20168],{"type":40,"value":19943},{"type":30,"tag":1046,"props":20170,"children":20171},{"style":1053},[20172],{"type":40,"value":19948},{"type":30,"tag":1046,"props":20174,"children":20175},{"style":1070},[20176],{"type":40,"value":1073},{"type":30,"tag":1046,"props":20178,"children":20179},{"class":1048,"line":4582},[20180,20185],{"type":30,"tag":1046,"props":20181,"children":20182},{"style":1138},[20183],{"type":40,"value":20184},"        handleInvalidOrder",{"type":30,"tag":1046,"props":20186,"children":20187},{"style":1070},[20188],{"type":40,"value":1406},{"type":30,"tag":1046,"props":20190,"children":20191},{"class":1048,"line":4622},[20192],{"type":30,"tag":1046,"props":20193,"children":20194},{"style":1070},[20195],{"type":40,"value":1207},{"type":30,"tag":1046,"props":20197,"children":20198},{"class":1048,"line":4662},[20199],{"type":30,"tag":1046,"props":20200,"children":20201},{"style":1070},[20202],{"type":40,"value":1423},{"type":30,"tag":1046,"props":20204,"children":20205},{"class":1048,"line":4687},[20206],{"type":30,"tag":1046,"props":20207,"children":20208},{"emptyLinePlaceholder":13},[20209],{"type":40,"value":1121},{"type":30,"tag":1046,"props":20211,"children":20212},{"class":1048,"line":4695},[20213,20217,20221,20225,20229,20233,20237,20241],{"type":30,"tag":1046,"props":20214,"children":20215},{"style":1053},[20216],{"type":40,"value":13600},{"type":30,"tag":1046,"props":20218,"children":20219},{"style":1053},[20220],{"type":40,"value":1310},{"type":30,"tag":1046,"props":20222,"children":20223},{"style":1138},[20224],{"type":40,"value":1315},{"type":30,"tag":1046,"props":20226,"children":20227},{"style":1070},[20228],{"type":40,"value":1146},{"type":30,"tag":1046,"props":20230,"children":20231},{"style":1084},[20232],{"type":40,"value":15652},{"type":30,"tag":1046,"props":20234,"children":20235},{"style":1105},[20236],{"type":40,"value":15657},{"type":30,"tag":1046,"props":20238,"children":20239},{"style":1070},[20240],{"type":40,"value":1161},{"type":30,"tag":1046,"props":20242,"children":20243},{"style":1070},[20244],{"type":40,"value":1073},{"type":30,"tag":1046,"props":20246,"children":20247},{"class":1048,"line":4703},[20248,20252,20256,20260,20264,20268,20272,20276,20280,20284],{"type":30,"tag":1046,"props":20249,"children":20250},{"style":1053},[20251],{"type":40,"value":7894},{"type":30,"tag":1046,"props":20253,"children":20254},{"style":1105},[20255],{"type":40,"value":15657},{"type":30,"tag":1046,"props":20257,"children":20258},{"style":1070},[20259],{"type":40,"value":1179},{"type":30,"tag":1046,"props":20261,"children":20262},{"style":1138},[20263],{"type":40,"value":19832},{"type":30,"tag":1046,"props":20265,"children":20266},{"style":1070},[20267],{"type":40,"value":1320},{"type":30,"tag":1046,"props":20269,"children":20270},{"style":1795},[20271],{"type":40,"value":7261},{"type":30,"tag":1046,"props":20273,"children":20274},{"style":1138},[20275],{"type":40,"value":19845},{"type":30,"tag":1046,"props":20277,"children":20278},{"style":1070},[20279],{"type":40,"value":1146},{"type":30,"tag":1046,"props":20281,"children":20282},{"style":1105},[20283],{"type":40,"value":15689},{"type":30,"tag":1046,"props":20285,"children":20286},{"style":1070},[20287],{"type":40,"value":1198},{"type":30,"tag":1046,"props":20289,"children":20290},{"class":1048,"line":4739},[20291],{"type":30,"tag":1046,"props":20292,"children":20293},{"style":1070},[20294],{"type":40,"value":1423},{"type":30,"tag":1046,"props":20296,"children":20297},{"class":1048,"line":4771},[20298],{"type":30,"tag":1046,"props":20299,"children":20300},{"emptyLinePlaceholder":13},[20301],{"type":40,"value":1121},{"type":30,"tag":1046,"props":20303,"children":20304},{"class":1048,"line":4811},[20305,20309,20313,20318,20322,20326,20330,20334,20338,20342,20346],{"type":30,"tag":1046,"props":20306,"children":20307},{"style":1053},[20308],{"type":40,"value":13600},{"type":30,"tag":1046,"props":20310,"children":20311},{"style":1053},[20312],{"type":40,"value":1135},{"type":30,"tag":1046,"props":20314,"children":20315},{"style":1138},[20316],{"type":40,"value":20317}," processPayment",{"type":30,"tag":1046,"props":20319,"children":20320},{"style":1070},[20321],{"type":40,"value":1146},{"type":30,"tag":1046,"props":20323,"children":20324},{"style":1084},[20325],{"type":40,"value":15652},{"type":30,"tag":1046,"props":20327,"children":20328},{"style":1105},[20329],{"type":40,"value":15657},{"type":30,"tag":1046,"props":20331,"children":20332},{"style":1070},[20333],{"type":40,"value":2891},{"type":30,"tag":1046,"props":20335,"children":20336},{"style":1053},[20337],{"type":40,"value":1310},{"type":30,"tag":1046,"props":20339,"children":20340},{"style":1105},[20341],{"type":40,"value":15992},{"type":30,"tag":1046,"props":20343,"children":20344},{"style":1070},[20345],{"type":40,"value":1161},{"type":30,"tag":1046,"props":20347,"children":20348},{"style":1070},[20349],{"type":40,"value":1073},{"type":30,"tag":1046,"props":20351,"children":20352},{"class":1048,"line":4819},[20353],{"type":30,"tag":1046,"props":20354,"children":20355},{"style":3961},[20356],{"type":40,"value":20357},"    // Code pour traiter le paiement\n",{"type":30,"tag":1046,"props":20359,"children":20360},{"class":1048,"line":10276},[20361],{"type":30,"tag":1046,"props":20362,"children":20363},{"style":1070},[20364],{"type":40,"value":1423},{"type":30,"tag":1046,"props":20366,"children":20367},{"class":1048,"line":10297},[20368],{"type":30,"tag":1046,"props":20369,"children":20370},{"emptyLinePlaceholder":13},[20371],{"type":40,"value":1121},{"type":30,"tag":1046,"props":20373,"children":20374},{"class":1048,"line":10305},[20375,20379,20383,20388,20392,20396,20400,20404],{"type":30,"tag":1046,"props":20376,"children":20377},{"style":1053},[20378],{"type":40,"value":13600},{"type":30,"tag":1046,"props":20380,"children":20381},{"style":1053},[20382],{"type":40,"value":1135},{"type":30,"tag":1046,"props":20384,"children":20385},{"style":1138},[20386],{"type":40,"value":20387}," sendConfirmation",{"type":30,"tag":1046,"props":20389,"children":20390},{"style":1070},[20391],{"type":40,"value":1146},{"type":30,"tag":1046,"props":20393,"children":20394},{"style":1084},[20395],{"type":40,"value":15652},{"type":30,"tag":1046,"props":20397,"children":20398},{"style":1105},[20399],{"type":40,"value":15657},{"type":30,"tag":1046,"props":20401,"children":20402},{"style":1070},[20403],{"type":40,"value":1161},{"type":30,"tag":1046,"props":20405,"children":20406},{"style":1070},[20407],{"type":40,"value":1073},{"type":30,"tag":1046,"props":20409,"children":20410},{"class":1048,"line":10350},[20411],{"type":30,"tag":1046,"props":20412,"children":20413},{"style":3961},[20414],{"type":40,"value":20415},"    // Code pour envoyer l'email de confirmation\n",{"type":30,"tag":1046,"props":20417,"children":20418},{"class":1048,"line":10376},[20419],{"type":30,"tag":1046,"props":20420,"children":20421},{"style":1070},[20422],{"type":40,"value":1423},{"type":30,"tag":1046,"props":20424,"children":20425},{"class":1048,"line":10384},[20426],{"type":30,"tag":1046,"props":20427,"children":20428},{"emptyLinePlaceholder":13},[20429],{"type":40,"value":1121},{"type":30,"tag":1046,"props":20431,"children":20432},{"class":1048,"line":10392},[20433,20437,20441,20446,20450],{"type":30,"tag":1046,"props":20434,"children":20435},{"style":1053},[20436],{"type":40,"value":13600},{"type":30,"tag":1046,"props":20438,"children":20439},{"style":1053},[20440],{"type":40,"value":1135},{"type":30,"tag":1046,"props":20442,"children":20443},{"style":1138},[20444],{"type":40,"value":20445}," handleInvalidOrder",{"type":30,"tag":1046,"props":20447,"children":20448},{"style":1070},[20449],{"type":40,"value":1320},{"type":30,"tag":1046,"props":20451,"children":20452},{"style":1070},[20453],{"type":40,"value":1073},{"type":30,"tag":1046,"props":20455,"children":20456},{"class":1048,"line":10421},[20457,20462,20466,20470,20474,20478,20482,20486],{"type":30,"tag":1046,"props":20458,"children":20459},{"style":1105},[20460],{"type":40,"value":20461},"    System",{"type":30,"tag":1046,"props":20463,"children":20464},{"style":1070},[20465],{"type":40,"value":1179},{"type":30,"tag":1046,"props":20467,"children":20468},{"style":1105},[20469],{"type":40,"value":12564},{"type":30,"tag":1046,"props":20471,"children":20472},{"style":1070},[20473],{"type":40,"value":1179},{"type":30,"tag":1046,"props":20475,"children":20476},{"style":1138},[20477],{"type":40,"value":12573},{"type":30,"tag":1046,"props":20479,"children":20480},{"style":1070},[20481],{"type":40,"value":1146},{"type":30,"tag":1046,"props":20483,"children":20484},{"style":1675},[20485],{"type":40,"value":19984},{"type":30,"tag":1046,"props":20487,"children":20488},{"style":1070},[20489],{"type":40,"value":1198},{"type":30,"tag":1046,"props":20491,"children":20492},{"class":1048,"line":10429},[20493],{"type":30,"tag":1046,"props":20494,"children":20495},{"style":1070},[20496],{"type":40,"value":1423},{"type":30,"tag":43,"props":20498,"children":20499},{},[20500,20502,20508],{"type":40,"value":20501},"Dans le second exemple, chaque étape du processus est divisée en fonctions plus petites et spécifiques. La fonction ",{"type":30,"tag":1042,"props":20503,"children":20505},{"className":20504},[],[20506],{"type":40,"value":20507},"processOrder",{"type":40,"value":20509}," ne fait plus qu'orchestrer les étapes, tandis que les détails comme le calcul du total ou l'envoi de l'email de confirmation sont délégués à des fonctions plus courtes et plus ciblées.",{"type":30,"tag":19673,"props":20511,"children":20512},{"type":19675},[20513],{"type":30,"tag":43,"props":20514,"children":20515},{},[20516],{"type":40,"value":20517},"Si vous voyez des commentaires dans votre code pour expliquer ce que fait une fonction, c'est souvent le signe que cette fonction fait trop de choses. Utilisez ce commentaire pour scinder la fonction en plusieurs petites.",{"type":30,"tag":84,"props":20519,"children":20520},{},[],{"type":30,"tag":211,"props":20522,"children":20524},{"cta":213,"href":214,"title":20523,"type":216},"Vous revenez sur du code écrit il y a 6 mois et vous ne comprenez plus rien ?",[20525],{"type":30,"tag":43,"props":20526,"children":20527},{},[20528],{"type":40,"value":20529},"Chaque bug fix prend 3x plus de temps que prévu, les nouvelles recrues mettent des semaines à être productives, et l'équipe passe plus de temps à décrypter qu'à créer. Réservons 30 minutes pour diagnostiquer les vrais blocages de qualité dans votre équipe et définir un plan de redressement.",{"type":30,"tag":116,"props":20531,"children":20533},{"id":20532},"_3-comment-structurer-le-code-pour-le-rendre-lisible",[20534],{"type":30,"tag":36,"props":20535,"children":20536},{},[20537],{"type":40,"value":20538},"3. Comment structurer le code pour le rendre lisible",{"type":30,"tag":43,"props":20540,"children":20541},{},[20542,20544,20548,20550,20555],{"type":40,"value":20543},"La lisibilité du code est essentielle pour un ",{"type":30,"tag":36,"props":20545,"children":20546},{},[20547],{"type":40,"value":13075},{"type":40,"value":20549},". Un code bien structuré est celui qui peut être compris facilement par un autre développeur, même sans explication supplémentaire. Pour cela, je vous recommande de suivre une ",{"type":30,"tag":36,"props":20551,"children":20552},{},[20553],{"type":40,"value":20554},"hiérarchie logique",{"type":40,"value":20556}," et d'éviter les longs blocs de code imbriqués.",{"type":30,"tag":43,"props":20558,"children":20559},{},[20560],{"type":30,"tag":36,"props":20561,"children":20562},{},[20563],{"type":40,"value":13211},{"type":30,"tag":1035,"props":20565,"children":20567},{"className":1039,"code":20566,"language":1038,"meta":8,"style":8},"// Mauvais exemple\nif (isValidUser(user)) {\n    if (hasSufficientBalance(user)) {\n        processPayment();\n    } else {\n        // ...\n    }\n} else {\n    // ...\n}\n\n// Meilleur exemple\nif (!isValidUser(user)) {\n    return;\n}\n\nif (!hasSufficientBalance(user)) {\n    return;\n}\n\nprocessPayment();\n",[20568],{"type":30,"tag":1042,"props":20569,"children":20570},{"__ignoreMap":8},[20571,20578,20612,20644,20655,20670,20678,20685,20701,20709,20716,20723,20730,20765,20776,20783,20790,20825,20836,20843,20850],{"type":30,"tag":1046,"props":20572,"children":20573},{"class":1048,"line":1049},[20574],{"type":30,"tag":1046,"props":20575,"children":20576},{"style":3961},[20577],{"type":40,"value":19587},{"type":30,"tag":1046,"props":20579,"children":20580},{"class":1048,"line":675},[20581,20586,20590,20595,20599,20604,20608],{"type":30,"tag":1046,"props":20582,"children":20583},{"style":1053},[20584],{"type":40,"value":20585},"if",{"type":30,"tag":1046,"props":20587,"children":20588},{"style":1070},[20589],{"type":40,"value":11861},{"type":30,"tag":1046,"props":20591,"children":20592},{"style":1138},[20593],{"type":40,"value":20594},"isValidUser",{"type":30,"tag":1046,"props":20596,"children":20597},{"style":1070},[20598],{"type":40,"value":1146},{"type":30,"tag":1046,"props":20600,"children":20601},{"style":1105},[20602],{"type":40,"value":20603},"user",{"type":30,"tag":1046,"props":20605,"children":20606},{"style":1070},[20607],{"type":40,"value":9913},{"type":30,"tag":1046,"props":20609,"children":20610},{"style":1070},[20611],{"type":40,"value":1073},{"type":30,"tag":1046,"props":20613,"children":20614},{"class":1048,"line":681},[20615,20619,20623,20628,20632,20636,20640],{"type":30,"tag":1046,"props":20616,"children":20617},{"style":1053},[20618],{"type":40,"value":14008},{"type":30,"tag":1046,"props":20620,"children":20621},{"style":1070},[20622],{"type":40,"value":11861},{"type":30,"tag":1046,"props":20624,"children":20625},{"style":1138},[20626],{"type":40,"value":20627},"hasSufficientBalance",{"type":30,"tag":1046,"props":20629,"children":20630},{"style":1070},[20631],{"type":40,"value":1146},{"type":30,"tag":1046,"props":20633,"children":20634},{"style":1105},[20635],{"type":40,"value":20603},{"type":30,"tag":1046,"props":20637,"children":20638},{"style":1070},[20639],{"type":40,"value":9913},{"type":30,"tag":1046,"props":20641,"children":20642},{"style":1070},[20643],{"type":40,"value":1073},{"type":30,"tag":1046,"props":20645,"children":20646},{"class":1048,"line":1124},[20647,20651],{"type":30,"tag":1046,"props":20648,"children":20649},{"style":1138},[20650],{"type":40,"value":19880},{"type":30,"tag":1046,"props":20652,"children":20653},{"style":1070},[20654],{"type":40,"value":1406},{"type":30,"tag":1046,"props":20656,"children":20657},{"class":1048,"line":1168},[20658,20662,20666],{"type":30,"tag":1046,"props":20659,"children":20660},{"style":1070},[20661],{"type":40,"value":19943},{"type":30,"tag":1046,"props":20663,"children":20664},{"style":1053},[20665],{"type":40,"value":19948},{"type":30,"tag":1046,"props":20667,"children":20668},{"style":1070},[20669],{"type":40,"value":1073},{"type":30,"tag":1046,"props":20671,"children":20672},{"class":1048,"line":1201},[20673],{"type":30,"tag":1046,"props":20674,"children":20675},{"style":3961},[20676],{"type":40,"value":20677},"        // ...\n",{"type":30,"tag":1046,"props":20679,"children":20680},{"class":1048,"line":1210},[20681],{"type":30,"tag":1046,"props":20682,"children":20683},{"style":1070},[20684],{"type":40,"value":1207},{"type":30,"tag":1046,"props":20686,"children":20687},{"class":1048,"line":1218},[20688,20693,20697],{"type":30,"tag":1046,"props":20689,"children":20690},{"style":1070},[20691],{"type":40,"value":20692},"}",{"type":30,"tag":1046,"props":20694,"children":20695},{"style":1053},[20696],{"type":40,"value":19948},{"type":30,"tag":1046,"props":20698,"children":20699},{"style":1070},[20700],{"type":40,"value":1073},{"type":30,"tag":1046,"props":20702,"children":20703},{"class":1048,"line":1255},[20704],{"type":30,"tag":1046,"props":20705,"children":20706},{"style":3961},[20707],{"type":40,"value":20708},"    // ...\n",{"type":30,"tag":1046,"props":20710,"children":20711},{"class":1048,"line":1284},[20712],{"type":30,"tag":1046,"props":20713,"children":20714},{"style":1070},[20715],{"type":40,"value":1423},{"type":30,"tag":1046,"props":20717,"children":20718},{"class":1048,"line":1292},[20719],{"type":30,"tag":1046,"props":20720,"children":20721},{"emptyLinePlaceholder":13},[20722],{"type":40,"value":1121},{"type":30,"tag":1046,"props":20724,"children":20725},{"class":1048,"line":1300},[20726],{"type":30,"tag":1046,"props":20727,"children":20728},{"style":3961},[20729],{"type":40,"value":19626},{"type":30,"tag":1046,"props":20731,"children":20732},{"class":1048,"line":1327},[20733,20737,20741,20745,20749,20753,20757,20761],{"type":30,"tag":1046,"props":20734,"children":20735},{"style":1053},[20736],{"type":40,"value":20585},{"type":30,"tag":1046,"props":20738,"children":20739},{"style":1070},[20740],{"type":40,"value":11861},{"type":30,"tag":1046,"props":20742,"children":20743},{"style":1795},[20744],{"type":40,"value":16086},{"type":30,"tag":1046,"props":20746,"children":20747},{"style":1138},[20748],{"type":40,"value":20594},{"type":30,"tag":1046,"props":20750,"children":20751},{"style":1070},[20752],{"type":40,"value":1146},{"type":30,"tag":1046,"props":20754,"children":20755},{"style":1105},[20756],{"type":40,"value":20603},{"type":30,"tag":1046,"props":20758,"children":20759},{"style":1070},[20760],{"type":40,"value":9913},{"type":30,"tag":1046,"props":20762,"children":20763},{"style":1070},[20764],{"type":40,"value":1073},{"type":30,"tag":1046,"props":20766,"children":20767},{"class":1048,"line":1354},[20768,20772],{"type":30,"tag":1046,"props":20769,"children":20770},{"style":1053},[20771],{"type":40,"value":7894},{"type":30,"tag":1046,"props":20773,"children":20774},{"style":1070},[20775],{"type":40,"value":1113},{"type":30,"tag":1046,"props":20777,"children":20778},{"class":1048,"line":1391},[20779],{"type":30,"tag":1046,"props":20780,"children":20781},{"style":1070},[20782],{"type":40,"value":1423},{"type":30,"tag":1046,"props":20784,"children":20785},{"class":1048,"line":1409},[20786],{"type":30,"tag":1046,"props":20787,"children":20788},{"emptyLinePlaceholder":13},[20789],{"type":40,"value":1121},{"type":30,"tag":1046,"props":20791,"children":20792},{"class":1048,"line":1417},[20793,20797,20801,20805,20809,20813,20817,20821],{"type":30,"tag":1046,"props":20794,"children":20795},{"style":1053},[20796],{"type":40,"value":20585},{"type":30,"tag":1046,"props":20798,"children":20799},{"style":1070},[20800],{"type":40,"value":11861},{"type":30,"tag":1046,"props":20802,"children":20803},{"style":1795},[20804],{"type":40,"value":16086},{"type":30,"tag":1046,"props":20806,"children":20807},{"style":1138},[20808],{"type":40,"value":20627},{"type":30,"tag":1046,"props":20810,"children":20811},{"style":1070},[20812],{"type":40,"value":1146},{"type":30,"tag":1046,"props":20814,"children":20815},{"style":1105},[20816],{"type":40,"value":20603},{"type":30,"tag":1046,"props":20818,"children":20819},{"style":1070},[20820],{"type":40,"value":9913},{"type":30,"tag":1046,"props":20822,"children":20823},{"style":1070},[20824],{"type":40,"value":1073},{"type":30,"tag":1046,"props":20826,"children":20827},{"class":1048,"line":2023},[20828,20832],{"type":30,"tag":1046,"props":20829,"children":20830},{"style":1053},[20831],{"type":40,"value":7894},{"type":30,"tag":1046,"props":20833,"children":20834},{"style":1070},[20835],{"type":40,"value":1113},{"type":30,"tag":1046,"props":20837,"children":20838},{"class":1048,"line":2083},[20839],{"type":30,"tag":1046,"props":20840,"children":20841},{"style":1070},[20842],{"type":40,"value":1423},{"type":30,"tag":1046,"props":20844,"children":20845},{"class":1048,"line":2126},[20846],{"type":30,"tag":1046,"props":20847,"children":20848},{"emptyLinePlaceholder":13},[20849],{"type":40,"value":1121},{"type":30,"tag":1046,"props":20851,"children":20852},{"class":1048,"line":2159},[20853,20858],{"type":30,"tag":1046,"props":20854,"children":20855},{"style":1138},[20856],{"type":40,"value":20857},"processPayment",{"type":30,"tag":1046,"props":20859,"children":20860},{"style":1070},[20861],{"type":40,"value":1406},{"type":30,"tag":43,"props":20863,"children":20864},{},[20865],{"type":40,"value":20866},"Dans le deuxième exemple, la structure est plus claire : chaque condition est traitée séparément, et on élimine les cas d'erreur au début. Cela permet à celui qui lit le code de suivre le flux de manière plus fluide.",{"type":30,"tag":84,"props":20868,"children":20869},{},[],{"type":30,"tag":31,"props":20871,"children":20873},{"id":20872},"exemples-de-clean-code-en-java",[20874],{"type":30,"tag":36,"props":20875,"children":20876},{},[20877],{"type":40,"value":20878},"Exemples de Clean Code en Java",{"type":30,"tag":43,"props":20880,"children":20881},{},[20882,20884,20888,20890,20894],{"type":40,"value":20883},"Rien ne vaut des exemples concrets pour mieux comprendre comment appliquer les principes du ",{"type":30,"tag":36,"props":20885,"children":20886},{},[20887],{"type":40,"value":13075},{"type":40,"value":20889},". Voici quelques exemples pratiques en ",{"type":30,"tag":36,"props":20891,"children":20892},{},[20893],{"type":40,"value":845},{"type":40,"value":20895},", basés sur les principes vus précédemment. Ces exemples vous montreront comment améliorer la clarté, la lisibilité et la maintenabilité de votre code.",{"type":30,"tag":116,"props":20897,"children":20899},{"id":20898},"_1-variables-bien-nommées",[20900],{"type":30,"tag":36,"props":20901,"children":20902},{},[20903],{"type":40,"value":20904},"1. Variables bien nommées",{"type":30,"tag":43,"props":20906,"children":20907},{},[20908,20910,20914],{"type":40,"value":20909},"Donner des noms explicites aux variables est l'une des bases du ",{"type":30,"tag":36,"props":20911,"children":20912},{},[20913],{"type":40,"value":13075},{"type":40,"value":20915},". Cela permet de rendre votre code compréhensible sans avoir besoin de commentaires supplémentaires.",{"type":30,"tag":43,"props":20917,"children":20918},{},[20919],{"type":30,"tag":36,"props":20920,"children":20921},{},[20922],{"type":40,"value":13211},{"type":30,"tag":1035,"props":20924,"children":20926},{"className":1039,"code":20925,"language":1038,"meta":8,"style":8},"// Mauvais exemple\ndouble v = getVolume();\n\n// Meilleur exemple\ndouble volumeDeLaBoite = getVolume();\n",[20927],{"type":30,"tag":1042,"props":20928,"children":20929},{"__ignoreMap":8},[20930,20937,20963,20970,20977],{"type":30,"tag":1046,"props":20931,"children":20932},{"class":1048,"line":1049},[20933],{"type":30,"tag":1046,"props":20934,"children":20935},{"style":3961},[20936],{"type":40,"value":19587},{"type":30,"tag":1046,"props":20938,"children":20939},{"class":1048,"line":675},[20940,20945,20950,20954,20959],{"type":30,"tag":1046,"props":20941,"children":20942},{"style":1053},[20943],{"type":40,"value":20944},"double",{"type":30,"tag":1046,"props":20946,"children":20947},{"style":1105},[20948],{"type":40,"value":20949}," v ",{"type":30,"tag":1046,"props":20951,"children":20952},{"style":1795},[20953],{"type":40,"value":1798},{"type":30,"tag":1046,"props":20955,"children":20956},{"style":1138},[20957],{"type":40,"value":20958}," getVolume",{"type":30,"tag":1046,"props":20960,"children":20961},{"style":1070},[20962],{"type":40,"value":1406},{"type":30,"tag":1046,"props":20964,"children":20965},{"class":1048,"line":681},[20966],{"type":30,"tag":1046,"props":20967,"children":20968},{"emptyLinePlaceholder":13},[20969],{"type":40,"value":1121},{"type":30,"tag":1046,"props":20971,"children":20972},{"class":1048,"line":1124},[20973],{"type":30,"tag":1046,"props":20974,"children":20975},{"style":3961},[20976],{"type":40,"value":19626},{"type":30,"tag":1046,"props":20978,"children":20979},{"class":1048,"line":1168},[20980,20984,20989,20993,20997],{"type":30,"tag":1046,"props":20981,"children":20982},{"style":1053},[20983],{"type":40,"value":20944},{"type":30,"tag":1046,"props":20985,"children":20986},{"style":1105},[20987],{"type":40,"value":20988}," volumeDeLaBoite ",{"type":30,"tag":1046,"props":20990,"children":20991},{"style":1795},[20992],{"type":40,"value":1798},{"type":30,"tag":1046,"props":20994,"children":20995},{"style":1138},[20996],{"type":40,"value":20958},{"type":30,"tag":1046,"props":20998,"children":20999},{"style":1070},[21000],{"type":40,"value":1406},{"type":30,"tag":43,"props":21002,"children":21003},{},[21004,21006,21012,21014,21020],{"type":40,"value":21005},"Dans le second exemple, le nom ",{"type":30,"tag":1042,"props":21007,"children":21009},{"className":21008},[],[21010],{"type":40,"value":21011},"volumeDeLaBoite",{"type":40,"value":21013}," explique clairement ce que représente cette donnée, tandis que ",{"type":30,"tag":1042,"props":21015,"children":21017},{"className":21016},[],[21018],{"type":40,"value":21019},"v",{"type":40,"value":21021}," est trop vague. On facilite ainsi la compréhension du code sans avoir besoin de lire toute la logique.",{"type":30,"tag":19673,"props":21023,"children":21024},{"type":19675},[21025],{"type":30,"tag":43,"props":21026,"children":21027},{},[21028,21030,21035,21037,21041,21043,21048,21050,21054],{"type":40,"value":21029},"Un bon nom de variable devrait dire ",{"type":30,"tag":36,"props":21031,"children":21032},{},[21033],{"type":40,"value":21034},"quoi",{"type":40,"value":21036},", pas ",{"type":30,"tag":36,"props":21038,"children":21039},{},[21040],{"type":40,"value":1493},{"type":40,"value":21042},". Par exemple, ",{"type":30,"tag":1042,"props":21044,"children":21046},{"className":21045},[],[21047],{"type":40,"value":21011},{"type":40,"value":21049}," explique ",{"type":30,"tag":36,"props":21051,"children":21052},{},[21053],{"type":40,"value":21034},{"type":40,"value":21055}," mesure cette variable, pas comment elle est calculée.",{"type":30,"tag":84,"props":21057,"children":21058},{},[],{"type":30,"tag":116,"props":21060,"children":21062},{"id":21061},"_2-fonctions-courtes-et-focalisées",[21063],{"type":30,"tag":36,"props":21064,"children":21065},{},[21066],{"type":40,"value":21067},"2. Fonctions courtes et focalisées",{"type":30,"tag":43,"props":21069,"children":21070},{},[21071],{"type":40,"value":21072},"Une bonne fonction doit être courte et se concentrer sur une seule responsabilité. Cela rend votre code plus lisible et plus facile à tester.",{"type":30,"tag":43,"props":21074,"children":21075},{},[21076],{"type":30,"tag":36,"props":21077,"children":21078},{},[21079],{"type":40,"value":13211},{"type":30,"tag":1035,"props":21081,"children":21083},{"className":1039,"code":21082,"language":1038,"meta":8,"style":8},"// Mauvais exemple\npublic void calculerEtEnvoyerFacture(Client client) {\n    // Calcul des montants\n    double montantHT = client.getPrixHT();\n    double taxe = montantHT * 0.2;\n    double montantTotal = montantHT + taxe;\n    \n    // Envoi du mail\n    String message = \"Facture envoyée\";\n    envoyerMail(client.getEmail(), message);\n}\n\n// Meilleur exemple\npublic double calculerMontantTotal(Client client) {\n    double montantHT = client.getPrixHT();\n    double taxe = montantHT * 0.2;\n    return montantHT + taxe;\n}\n\npublic void envoyerFacture(Client client) {\n    envoyerMail(client.getEmail(), \"Facture envoyée\");\n}\n",[21084],{"type":30,"tag":1042,"props":21085,"children":21086},{"__ignoreMap":8},[21087,21094,21132,21140,21173,21207,21240,21247,21255,21281,21320,21327,21334,21341,21377,21408,21439,21462,21469,21476,21512,21547],{"type":30,"tag":1046,"props":21088,"children":21089},{"class":1048,"line":1049},[21090],{"type":30,"tag":1046,"props":21091,"children":21092},{"style":3961},[21093],{"type":40,"value":19587},{"type":30,"tag":1046,"props":21095,"children":21096},{"class":1048,"line":675},[21097,21101,21105,21110,21114,21119,21124,21128],{"type":30,"tag":1046,"props":21098,"children":21099},{"style":1053},[21100],{"type":40,"value":1056},{"type":30,"tag":1046,"props":21102,"children":21103},{"style":1053},[21104],{"type":40,"value":1135},{"type":30,"tag":1046,"props":21106,"children":21107},{"style":1138},[21108],{"type":40,"value":21109}," calculerEtEnvoyerFacture",{"type":30,"tag":1046,"props":21111,"children":21112},{"style":1070},[21113],{"type":40,"value":1146},{"type":30,"tag":1046,"props":21115,"children":21116},{"style":1084},[21117],{"type":40,"value":21118},"Client",{"type":30,"tag":1046,"props":21120,"children":21121},{"style":1105},[21122],{"type":40,"value":21123}," client",{"type":30,"tag":1046,"props":21125,"children":21126},{"style":1070},[21127],{"type":40,"value":1161},{"type":30,"tag":1046,"props":21129,"children":21130},{"style":1070},[21131],{"type":40,"value":1073},{"type":30,"tag":1046,"props":21133,"children":21134},{"class":1048,"line":681},[21135],{"type":30,"tag":1046,"props":21136,"children":21137},{"style":3961},[21138],{"type":40,"value":21139},"    // Calcul des montants\n",{"type":30,"tag":1046,"props":21141,"children":21142},{"class":1048,"line":1124},[21143,21147,21152,21156,21160,21164,21169],{"type":30,"tag":1046,"props":21144,"children":21145},{"style":1053},[21146],{"type":40,"value":16140},{"type":30,"tag":1046,"props":21148,"children":21149},{"style":1105},[21150],{"type":40,"value":21151}," montantHT ",{"type":30,"tag":1046,"props":21153,"children":21154},{"style":1795},[21155],{"type":40,"value":1798},{"type":30,"tag":1046,"props":21157,"children":21158},{"style":1105},[21159],{"type":40,"value":21123},{"type":30,"tag":1046,"props":21161,"children":21162},{"style":1070},[21163],{"type":40,"value":1179},{"type":30,"tag":1046,"props":21165,"children":21166},{"style":1138},[21167],{"type":40,"value":21168},"getPrixHT",{"type":30,"tag":1046,"props":21170,"children":21171},{"style":1070},[21172],{"type":40,"value":1406},{"type":30,"tag":1046,"props":21174,"children":21175},{"class":1048,"line":1168},[21176,21180,21185,21189,21193,21198,21203],{"type":30,"tag":1046,"props":21177,"children":21178},{"style":1053},[21179],{"type":40,"value":16140},{"type":30,"tag":1046,"props":21181,"children":21182},{"style":1105},[21183],{"type":40,"value":21184}," taxe ",{"type":30,"tag":1046,"props":21186,"children":21187},{"style":1795},[21188],{"type":40,"value":1798},{"type":30,"tag":1046,"props":21190,"children":21191},{"style":1105},[21192],{"type":40,"value":21151},{"type":30,"tag":1046,"props":21194,"children":21195},{"style":1795},[21196],{"type":40,"value":21197},"*",{"type":30,"tag":1046,"props":21199,"children":21200},{"style":6886},[21201],{"type":40,"value":21202}," 0.2",{"type":30,"tag":1046,"props":21204,"children":21205},{"style":1070},[21206],{"type":40,"value":1113},{"type":30,"tag":1046,"props":21208,"children":21209},{"class":1048,"line":1201},[21210,21214,21219,21223,21227,21231,21236],{"type":30,"tag":1046,"props":21211,"children":21212},{"style":1053},[21213],{"type":40,"value":16140},{"type":30,"tag":1046,"props":21215,"children":21216},{"style":1105},[21217],{"type":40,"value":21218}," montantTotal ",{"type":30,"tag":1046,"props":21220,"children":21221},{"style":1795},[21222],{"type":40,"value":1798},{"type":30,"tag":1046,"props":21224,"children":21225},{"style":1105},[21226],{"type":40,"value":21151},{"type":30,"tag":1046,"props":21228,"children":21229},{"style":1795},[21230],{"type":40,"value":12595},{"type":30,"tag":1046,"props":21232,"children":21233},{"style":1105},[21234],{"type":40,"value":21235}," taxe",{"type":30,"tag":1046,"props":21237,"children":21238},{"style":1070},[21239],{"type":40,"value":1113},{"type":30,"tag":1046,"props":21241,"children":21242},{"class":1048,"line":1210},[21243],{"type":30,"tag":1046,"props":21244,"children":21245},{"style":1105},[21246],{"type":40,"value":16132},{"type":30,"tag":1046,"props":21248,"children":21249},{"class":1048,"line":1218},[21250],{"type":30,"tag":1046,"props":21251,"children":21252},{"style":3961},[21253],{"type":40,"value":21254},"    // Envoi du mail\n",{"type":30,"tag":1046,"props":21256,"children":21257},{"class":1048,"line":1255},[21258,21263,21268,21272,21277],{"type":30,"tag":1046,"props":21259,"children":21260},{"style":1084},[21261],{"type":40,"value":21262},"    String",{"type":30,"tag":1046,"props":21264,"children":21265},{"style":1105},[21266],{"type":40,"value":21267}," message ",{"type":30,"tag":1046,"props":21269,"children":21270},{"style":1795},[21271],{"type":40,"value":1798},{"type":30,"tag":1046,"props":21273,"children":21274},{"style":1675},[21275],{"type":40,"value":21276}," \"Facture envoyée\"",{"type":30,"tag":1046,"props":21278,"children":21279},{"style":1070},[21280],{"type":40,"value":1113},{"type":30,"tag":1046,"props":21282,"children":21283},{"class":1048,"line":1284},[21284,21289,21293,21298,21302,21306,21311,21316],{"type":30,"tag":1046,"props":21285,"children":21286},{"style":1138},[21287],{"type":40,"value":21288},"    envoyerMail",{"type":30,"tag":1046,"props":21290,"children":21291},{"style":1070},[21292],{"type":40,"value":1146},{"type":30,"tag":1046,"props":21294,"children":21295},{"style":1105},[21296],{"type":40,"value":21297},"client",{"type":30,"tag":1046,"props":21299,"children":21300},{"style":1070},[21301],{"type":40,"value":1179},{"type":30,"tag":1046,"props":21303,"children":21304},{"style":1138},[21305],{"type":40,"value":14183},{"type":30,"tag":1046,"props":21307,"children":21308},{"style":1070},[21309],{"type":40,"value":21310},"(),",{"type":30,"tag":1046,"props":21312,"children":21313},{"style":1105},[21314],{"type":40,"value":21315}," message",{"type":30,"tag":1046,"props":21317,"children":21318},{"style":1070},[21319],{"type":40,"value":1198},{"type":30,"tag":1046,"props":21321,"children":21322},{"class":1048,"line":1292},[21323],{"type":30,"tag":1046,"props":21324,"children":21325},{"style":1070},[21326],{"type":40,"value":1423},{"type":30,"tag":1046,"props":21328,"children":21329},{"class":1048,"line":1300},[21330],{"type":30,"tag":1046,"props":21331,"children":21332},{"emptyLinePlaceholder":13},[21333],{"type":40,"value":1121},{"type":30,"tag":1046,"props":21335,"children":21336},{"class":1048,"line":1327},[21337],{"type":30,"tag":1046,"props":21338,"children":21339},{"style":3961},[21340],{"type":40,"value":19626},{"type":30,"tag":1046,"props":21342,"children":21343},{"class":1048,"line":1354},[21344,21348,21352,21357,21361,21365,21369,21373],{"type":30,"tag":1046,"props":21345,"children":21346},{"style":1053},[21347],{"type":40,"value":1056},{"type":30,"tag":1046,"props":21349,"children":21350},{"style":1053},[21351],{"type":40,"value":1310},{"type":30,"tag":1046,"props":21353,"children":21354},{"style":1138},[21355],{"type":40,"value":21356}," calculerMontantTotal",{"type":30,"tag":1046,"props":21358,"children":21359},{"style":1070},[21360],{"type":40,"value":1146},{"type":30,"tag":1046,"props":21362,"children":21363},{"style":1084},[21364],{"type":40,"value":21118},{"type":30,"tag":1046,"props":21366,"children":21367},{"style":1105},[21368],{"type":40,"value":21123},{"type":30,"tag":1046,"props":21370,"children":21371},{"style":1070},[21372],{"type":40,"value":1161},{"type":30,"tag":1046,"props":21374,"children":21375},{"style":1070},[21376],{"type":40,"value":1073},{"type":30,"tag":1046,"props":21378,"children":21379},{"class":1048,"line":1391},[21380,21384,21388,21392,21396,21400,21404],{"type":30,"tag":1046,"props":21381,"children":21382},{"style":1053},[21383],{"type":40,"value":16140},{"type":30,"tag":1046,"props":21385,"children":21386},{"style":1105},[21387],{"type":40,"value":21151},{"type":30,"tag":1046,"props":21389,"children":21390},{"style":1795},[21391],{"type":40,"value":1798},{"type":30,"tag":1046,"props":21393,"children":21394},{"style":1105},[21395],{"type":40,"value":21123},{"type":30,"tag":1046,"props":21397,"children":21398},{"style":1070},[21399],{"type":40,"value":1179},{"type":30,"tag":1046,"props":21401,"children":21402},{"style":1138},[21403],{"type":40,"value":21168},{"type":30,"tag":1046,"props":21405,"children":21406},{"style":1070},[21407],{"type":40,"value":1406},{"type":30,"tag":1046,"props":21409,"children":21410},{"class":1048,"line":1409},[21411,21415,21419,21423,21427,21431,21435],{"type":30,"tag":1046,"props":21412,"children":21413},{"style":1053},[21414],{"type":40,"value":16140},{"type":30,"tag":1046,"props":21416,"children":21417},{"style":1105},[21418],{"type":40,"value":21184},{"type":30,"tag":1046,"props":21420,"children":21421},{"style":1795},[21422],{"type":40,"value":1798},{"type":30,"tag":1046,"props":21424,"children":21425},{"style":1105},[21426],{"type":40,"value":21151},{"type":30,"tag":1046,"props":21428,"children":21429},{"style":1795},[21430],{"type":40,"value":21197},{"type":30,"tag":1046,"props":21432,"children":21433},{"style":6886},[21434],{"type":40,"value":21202},{"type":30,"tag":1046,"props":21436,"children":21437},{"style":1070},[21438],{"type":40,"value":1113},{"type":30,"tag":1046,"props":21440,"children":21441},{"class":1048,"line":1417},[21442,21446,21450,21454,21458],{"type":30,"tag":1046,"props":21443,"children":21444},{"style":1053},[21445],{"type":40,"value":7894},{"type":30,"tag":1046,"props":21447,"children":21448},{"style":1105},[21449],{"type":40,"value":21151},{"type":30,"tag":1046,"props":21451,"children":21452},{"style":1795},[21453],{"type":40,"value":12595},{"type":30,"tag":1046,"props":21455,"children":21456},{"style":1105},[21457],{"type":40,"value":21235},{"type":30,"tag":1046,"props":21459,"children":21460},{"style":1070},[21461],{"type":40,"value":1113},{"type":30,"tag":1046,"props":21463,"children":21464},{"class":1048,"line":2023},[21465],{"type":30,"tag":1046,"props":21466,"children":21467},{"style":1070},[21468],{"type":40,"value":1423},{"type":30,"tag":1046,"props":21470,"children":21471},{"class":1048,"line":2083},[21472],{"type":30,"tag":1046,"props":21473,"children":21474},{"emptyLinePlaceholder":13},[21475],{"type":40,"value":1121},{"type":30,"tag":1046,"props":21477,"children":21478},{"class":1048,"line":2126},[21479,21483,21487,21492,21496,21500,21504,21508],{"type":30,"tag":1046,"props":21480,"children":21481},{"style":1053},[21482],{"type":40,"value":1056},{"type":30,"tag":1046,"props":21484,"children":21485},{"style":1053},[21486],{"type":40,"value":1135},{"type":30,"tag":1046,"props":21488,"children":21489},{"style":1138},[21490],{"type":40,"value":21491}," envoyerFacture",{"type":30,"tag":1046,"props":21493,"children":21494},{"style":1070},[21495],{"type":40,"value":1146},{"type":30,"tag":1046,"props":21497,"children":21498},{"style":1084},[21499],{"type":40,"value":21118},{"type":30,"tag":1046,"props":21501,"children":21502},{"style":1105},[21503],{"type":40,"value":21123},{"type":30,"tag":1046,"props":21505,"children":21506},{"style":1070},[21507],{"type":40,"value":1161},{"type":30,"tag":1046,"props":21509,"children":21510},{"style":1070},[21511],{"type":40,"value":1073},{"type":30,"tag":1046,"props":21513,"children":21514},{"class":1048,"line":2159},[21515,21519,21523,21527,21531,21535,21539,21543],{"type":30,"tag":1046,"props":21516,"children":21517},{"style":1138},[21518],{"type":40,"value":21288},{"type":30,"tag":1046,"props":21520,"children":21521},{"style":1070},[21522],{"type":40,"value":1146},{"type":30,"tag":1046,"props":21524,"children":21525},{"style":1105},[21526],{"type":40,"value":21297},{"type":30,"tag":1046,"props":21528,"children":21529},{"style":1070},[21530],{"type":40,"value":1179},{"type":30,"tag":1046,"props":21532,"children":21533},{"style":1138},[21534],{"type":40,"value":14183},{"type":30,"tag":1046,"props":21536,"children":21537},{"style":1070},[21538],{"type":40,"value":21310},{"type":30,"tag":1046,"props":21540,"children":21541},{"style":1675},[21542],{"type":40,"value":21276},{"type":30,"tag":1046,"props":21544,"children":21545},{"style":1070},[21546],{"type":40,"value":1198},{"type":30,"tag":1046,"props":21548,"children":21549},{"class":1048,"line":2167},[21550],{"type":30,"tag":1046,"props":21551,"children":21552},{"style":1070},[21553],{"type":40,"value":1423},{"type":30,"tag":43,"props":21555,"children":21556},{},[21557],{"type":40,"value":21558},"Dans le second exemple, la logique de calcul est séparée de la logique d'envoi d'email, ce qui permet une meilleure lisibilité et une plus grande facilité pour tester chaque fonction individuellement.",{"type":30,"tag":19673,"props":21560,"children":21561},{"type":19675},[21562],{"type":30,"tag":43,"props":21563,"children":21564},{},[21565],{"type":40,"value":21566},"Si une fonction fait plus de 20 lignes, demandez-vous s'il est possible de la diviser en plusieurs fonctions plus petites. Cela aidera non seulement à la rendre plus lisible, mais aussi à isoler les responsabilités.",{"type":30,"tag":84,"props":21568,"children":21569},{},[],{"type":30,"tag":116,"props":21571,"children":21573},{"id":21572},"_3-bonne-gestion-des-exceptions",[21574],{"type":30,"tag":36,"props":21575,"children":21576},{},[21577],{"type":40,"value":21578},"3. Bonne gestion des exceptions",{"type":30,"tag":43,"props":21580,"children":21581},{},[21582],{"type":40,"value":21583},"La gestion des erreurs et des exceptions est souvent négligée, mais elle joue un rôle clé dans un code propre. Un bon code doit être capable de traiter les erreurs de manière claire et concise, sans masquer les problèmes.",{"type":30,"tag":43,"props":21585,"children":21586},{},[21587],{"type":30,"tag":36,"props":21588,"children":21589},{},[21590],{"type":40,"value":13211},{"type":30,"tag":1035,"props":21592,"children":21594},{"className":1039,"code":21593,"language":1038,"meta":8,"style":8},"// Mauvais exemple\ntry {\n    processOrder(order);\n} catch (Exception e) {\n    System.out.println(\"Erreur lors du traitement de la commande\");\n}\n\n// Meilleur exemple\ntry {\n    processOrder(order);\n} catch (InvalidOrderException e) {\n    System.out.println(\"Commande invalide : \" + e.getMessage());\n} catch (PaymentFailedException e) {\n    System.out.println(\"Échec du paiement : \" + e.getMessage());\n}\n",[21595],{"type":30,"tag":1042,"props":21596,"children":21597},{"__ignoreMap":8},[21598,21605,21617,21637,21671,21707,21714,21721,21728,21739,21758,21790,21843,21875,21927],{"type":30,"tag":1046,"props":21599,"children":21600},{"class":1048,"line":1049},[21601],{"type":30,"tag":1046,"props":21602,"children":21603},{"style":3961},[21604],{"type":40,"value":19587},{"type":30,"tag":1046,"props":21606,"children":21607},{"class":1048,"line":675},[21608,21613],{"type":30,"tag":1046,"props":21609,"children":21610},{"style":1053},[21611],{"type":40,"value":21612},"try",{"type":30,"tag":1046,"props":21614,"children":21615},{"style":1070},[21616],{"type":40,"value":1073},{"type":30,"tag":1046,"props":21618,"children":21619},{"class":1048,"line":681},[21620,21625,21629,21633],{"type":30,"tag":1046,"props":21621,"children":21622},{"style":1138},[21623],{"type":40,"value":21624},"    processOrder",{"type":30,"tag":1046,"props":21626,"children":21627},{"style":1070},[21628],{"type":40,"value":1146},{"type":30,"tag":1046,"props":21630,"children":21631},{"style":1105},[21632],{"type":40,"value":15689},{"type":30,"tag":1046,"props":21634,"children":21635},{"style":1070},[21636],{"type":40,"value":1198},{"type":30,"tag":1046,"props":21638,"children":21639},{"class":1048,"line":1124},[21640,21644,21649,21653,21658,21663,21667],{"type":30,"tag":1046,"props":21641,"children":21642},{"style":1070},[21643],{"type":40,"value":20692},{"type":30,"tag":1046,"props":21645,"children":21646},{"style":1053},[21647],{"type":40,"value":21648}," catch",{"type":30,"tag":1046,"props":21650,"children":21651},{"style":1070},[21652],{"type":40,"value":11861},{"type":30,"tag":1046,"props":21654,"children":21655},{"style":1084},[21656],{"type":40,"value":21657},"Exception",{"type":30,"tag":1046,"props":21659,"children":21660},{"style":1153},[21661],{"type":40,"value":21662}," e",{"type":30,"tag":1046,"props":21664,"children":21665},{"style":1070},[21666],{"type":40,"value":1161},{"type":30,"tag":1046,"props":21668,"children":21669},{"style":1070},[21670],{"type":40,"value":1073},{"type":30,"tag":1046,"props":21672,"children":21673},{"class":1048,"line":1168},[21674,21678,21682,21686,21690,21694,21698,21703],{"type":30,"tag":1046,"props":21675,"children":21676},{"style":1105},[21677],{"type":40,"value":20461},{"type":30,"tag":1046,"props":21679,"children":21680},{"style":1070},[21681],{"type":40,"value":1179},{"type":30,"tag":1046,"props":21683,"children":21684},{"style":1105},[21685],{"type":40,"value":12564},{"type":30,"tag":1046,"props":21687,"children":21688},{"style":1070},[21689],{"type":40,"value":1179},{"type":30,"tag":1046,"props":21691,"children":21692},{"style":1138},[21693],{"type":40,"value":12573},{"type":30,"tag":1046,"props":21695,"children":21696},{"style":1070},[21697],{"type":40,"value":1146},{"type":30,"tag":1046,"props":21699,"children":21700},{"style":1675},[21701],{"type":40,"value":21702},"\"Erreur lors du traitement de la commande\"",{"type":30,"tag":1046,"props":21704,"children":21705},{"style":1070},[21706],{"type":40,"value":1198},{"type":30,"tag":1046,"props":21708,"children":21709},{"class":1048,"line":1201},[21710],{"type":30,"tag":1046,"props":21711,"children":21712},{"style":1070},[21713],{"type":40,"value":1423},{"type":30,"tag":1046,"props":21715,"children":21716},{"class":1048,"line":1210},[21717],{"type":30,"tag":1046,"props":21718,"children":21719},{"emptyLinePlaceholder":13},[21720],{"type":40,"value":1121},{"type":30,"tag":1046,"props":21722,"children":21723},{"class":1048,"line":1218},[21724],{"type":30,"tag":1046,"props":21725,"children":21726},{"style":3961},[21727],{"type":40,"value":19626},{"type":30,"tag":1046,"props":21729,"children":21730},{"class":1048,"line":1255},[21731,21735],{"type":30,"tag":1046,"props":21732,"children":21733},{"style":1053},[21734],{"type":40,"value":21612},{"type":30,"tag":1046,"props":21736,"children":21737},{"style":1070},[21738],{"type":40,"value":1073},{"type":30,"tag":1046,"props":21740,"children":21741},{"class":1048,"line":1284},[21742,21746,21750,21754],{"type":30,"tag":1046,"props":21743,"children":21744},{"style":1138},[21745],{"type":40,"value":21624},{"type":30,"tag":1046,"props":21747,"children":21748},{"style":1070},[21749],{"type":40,"value":1146},{"type":30,"tag":1046,"props":21751,"children":21752},{"style":1105},[21753],{"type":40,"value":15689},{"type":30,"tag":1046,"props":21755,"children":21756},{"style":1070},[21757],{"type":40,"value":1198},{"type":30,"tag":1046,"props":21759,"children":21760},{"class":1048,"line":1292},[21761,21765,21769,21773,21778,21782,21786],{"type":30,"tag":1046,"props":21762,"children":21763},{"style":1070},[21764],{"type":40,"value":20692},{"type":30,"tag":1046,"props":21766,"children":21767},{"style":1053},[21768],{"type":40,"value":21648},{"type":30,"tag":1046,"props":21770,"children":21771},{"style":1070},[21772],{"type":40,"value":11861},{"type":30,"tag":1046,"props":21774,"children":21775},{"style":1084},[21776],{"type":40,"value":21777},"InvalidOrderException",{"type":30,"tag":1046,"props":21779,"children":21780},{"style":1153},[21781],{"type":40,"value":21662},{"type":30,"tag":1046,"props":21783,"children":21784},{"style":1070},[21785],{"type":40,"value":1161},{"type":30,"tag":1046,"props":21787,"children":21788},{"style":1070},[21789],{"type":40,"value":1073},{"type":30,"tag":1046,"props":21791,"children":21792},{"class":1048,"line":1300},[21793,21797,21801,21805,21809,21813,21817,21822,21826,21830,21834,21839],{"type":30,"tag":1046,"props":21794,"children":21795},{"style":1105},[21796],{"type":40,"value":20461},{"type":30,"tag":1046,"props":21798,"children":21799},{"style":1070},[21800],{"type":40,"value":1179},{"type":30,"tag":1046,"props":21802,"children":21803},{"style":1105},[21804],{"type":40,"value":12564},{"type":30,"tag":1046,"props":21806,"children":21807},{"style":1070},[21808],{"type":40,"value":1179},{"type":30,"tag":1046,"props":21810,"children":21811},{"style":1138},[21812],{"type":40,"value":12573},{"type":30,"tag":1046,"props":21814,"children":21815},{"style":1070},[21816],{"type":40,"value":1146},{"type":30,"tag":1046,"props":21818,"children":21819},{"style":1675},[21820],{"type":40,"value":21821},"\"Commande invalide : \"",{"type":30,"tag":1046,"props":21823,"children":21824},{"style":1795},[21825],{"type":40,"value":7261},{"type":30,"tag":1046,"props":21827,"children":21828},{"style":1105},[21829],{"type":40,"value":21662},{"type":30,"tag":1046,"props":21831,"children":21832},{"style":1070},[21833],{"type":40,"value":1179},{"type":30,"tag":1046,"props":21835,"children":21836},{"style":1138},[21837],{"type":40,"value":21838},"getMessage",{"type":30,"tag":1046,"props":21840,"children":21841},{"style":1070},[21842],{"type":40,"value":3340},{"type":30,"tag":1046,"props":21844,"children":21845},{"class":1048,"line":1327},[21846,21850,21854,21858,21863,21867,21871],{"type":30,"tag":1046,"props":21847,"children":21848},{"style":1070},[21849],{"type":40,"value":20692},{"type":30,"tag":1046,"props":21851,"children":21852},{"style":1053},[21853],{"type":40,"value":21648},{"type":30,"tag":1046,"props":21855,"children":21856},{"style":1070},[21857],{"type":40,"value":11861},{"type":30,"tag":1046,"props":21859,"children":21860},{"style":1084},[21861],{"type":40,"value":21862},"PaymentFailedException",{"type":30,"tag":1046,"props":21864,"children":21865},{"style":1153},[21866],{"type":40,"value":21662},{"type":30,"tag":1046,"props":21868,"children":21869},{"style":1070},[21870],{"type":40,"value":1161},{"type":30,"tag":1046,"props":21872,"children":21873},{"style":1070},[21874],{"type":40,"value":1073},{"type":30,"tag":1046,"props":21876,"children":21877},{"class":1048,"line":1354},[21878,21882,21886,21890,21894,21898,21902,21907,21911,21915,21919,21923],{"type":30,"tag":1046,"props":21879,"children":21880},{"style":1105},[21881],{"type":40,"value":20461},{"type":30,"tag":1046,"props":21883,"children":21884},{"style":1070},[21885],{"type":40,"value":1179},{"type":30,"tag":1046,"props":21887,"children":21888},{"style":1105},[21889],{"type":40,"value":12564},{"type":30,"tag":1046,"props":21891,"children":21892},{"style":1070},[21893],{"type":40,"value":1179},{"type":30,"tag":1046,"props":21895,"children":21896},{"style":1138},[21897],{"type":40,"value":12573},{"type":30,"tag":1046,"props":21899,"children":21900},{"style":1070},[21901],{"type":40,"value":1146},{"type":30,"tag":1046,"props":21903,"children":21904},{"style":1675},[21905],{"type":40,"value":21906},"\"Échec du paiement : \"",{"type":30,"tag":1046,"props":21908,"children":21909},{"style":1795},[21910],{"type":40,"value":7261},{"type":30,"tag":1046,"props":21912,"children":21913},{"style":1105},[21914],{"type":40,"value":21662},{"type":30,"tag":1046,"props":21916,"children":21917},{"style":1070},[21918],{"type":40,"value":1179},{"type":30,"tag":1046,"props":21920,"children":21921},{"style":1138},[21922],{"type":40,"value":21838},{"type":30,"tag":1046,"props":21924,"children":21925},{"style":1070},[21926],{"type":40,"value":3340},{"type":30,"tag":1046,"props":21928,"children":21929},{"class":1048,"line":1391},[21930],{"type":30,"tag":1046,"props":21931,"children":21932},{"style":1070},[21933],{"type":40,"value":1423},{"type":30,"tag":43,"props":21935,"children":21936},{},[21937],{"type":40,"value":21938},"Dans le second exemple, chaque type d'erreur est traité de manière spécifique, ce qui permet de mieux comprendre ce qui ne va pas et de réagir en conséquence.",{"type":30,"tag":19673,"props":21940,"children":21941},{"type":19675},[21942],{"type":30,"tag":43,"props":21943,"children":21944},{},[21945,21947,21953],{"type":40,"value":21946},"Évitez de capturer toutes les exceptions avec un ",{"type":30,"tag":1042,"props":21948,"children":21950},{"className":21949},[],[21951],{"type":40,"value":21952},"catch (Exception e)",{"type":40,"value":21954},". Cela rend le débogage plus difficile et masque les problèmes spécifiques.",{"type":30,"tag":84,"props":21956,"children":21957},{},[],{"type":30,"tag":31,"props":21959,"children":21961},{"id":21960},"les-bonnes-pratiques-pour-écrire-du-code-maintenable",[21962],{"type":30,"tag":36,"props":21963,"children":21964},{},[21965],{"type":40,"value":21966},"Les bonnes pratiques pour écrire du code maintenable",{"type":30,"tag":43,"props":21968,"children":21969},{},[21970,21971,21975],{"type":40,"value":143},{"type":30,"tag":36,"props":21972,"children":21973},{},[21974],{"type":40,"value":13075},{"type":40,"value":21976}," ne se limite pas à écrire du code lisible ; il doit aussi être facilement maintenable et évolutif. Voici quelques bonnes pratiques pour s'assurer que votre code reste propre même après plusieurs itérations.",{"type":30,"tag":116,"props":21978,"children":21980},{"id":21979},"_1-le-principe-de-responsabilité-unique-single-responsibility-principle-srp",[21981],{"type":30,"tag":36,"props":21982,"children":21983},{},[21984],{"type":40,"value":21985},"1. Le principe de responsabilité unique (Single Responsibility Principle - SRP)",{"type":30,"tag":43,"props":21987,"children":21988},{},[21989,21990,21995],{"type":40,"value":143},{"type":30,"tag":36,"props":21991,"children":21992},{},[21993],{"type":40,"value":21994},"principe de responsabilité unique",{"type":40,"value":21996},", formalisé par Robert C. Martin dans \"Clean Code\", stipule qu'une classe ou une fonction ne doit avoir qu'une seule raison de changer, autrement dit, elle ne doit gérer qu'une seule responsabilité. Cela permet de réduire les dépendances et rend votre code plus facile à tester et à maintenir.",{"type":30,"tag":43,"props":21998,"children":21999},{},[22000],{"type":30,"tag":36,"props":22001,"children":22002},{},[22003],{"type":40,"value":13211},{"type":30,"tag":1035,"props":22005,"children":22007},{"className":1039,"code":22006,"language":1038,"meta":8,"style":8},"// Mauvais exemple - Une classe gère trop de responsabilités\npublic class GestionnaireDeCommande {\n    public void creerCommande() {\n        // Crée une commande\n    }\n    \n    public void calculerRemises() {\n        // Calcule les remises\n    }\n\n    public void envoyerEmailConfirmation() {\n        // Envoie un email de confirmation\n    }\n}\n\n// Meilleur exemple - Responsabilités divisées en plusieurs classes\npublic class CommandeService {\n    public void creerCommande() {\n        // Crée une commande\n    }\n}\n\npublic class RemiseService {\n    public void calculerRemises() {\n        // Calcule les remises\n    }\n}\n\npublic class NotificationService {\n    public void envoyerEmailConfirmation() {\n        // Envoie un email de confirmation\n    }\n}\n",[22008],{"type":30,"tag":1042,"props":22009,"children":22010},{"__ignoreMap":8},[22011,22019,22039,22063,22071,22078,22085,22109,22117,22124,22131,22155,22163,22170,22177,22184,22192,22212,22235,22242,22249,22256,22263,22283,22306,22313,22320,22327,22334,22354,22377,22384,22391],{"type":30,"tag":1046,"props":22012,"children":22013},{"class":1048,"line":1049},[22014],{"type":30,"tag":1046,"props":22015,"children":22016},{"style":3961},[22017],{"type":40,"value":22018},"// Mauvais exemple - Une classe gère trop de responsabilités\n",{"type":30,"tag":1046,"props":22020,"children":22021},{"class":1048,"line":675},[22022,22026,22030,22035],{"type":30,"tag":1046,"props":22023,"children":22024},{"style":1053},[22025],{"type":40,"value":1056},{"type":30,"tag":1046,"props":22027,"children":22028},{"style":1053},[22029],{"type":40,"value":1061},{"type":30,"tag":1046,"props":22031,"children":22032},{"style":1064},[22033],{"type":40,"value":22034}," GestionnaireDeCommande",{"type":30,"tag":1046,"props":22036,"children":22037},{"style":1070},[22038],{"type":40,"value":1073},{"type":30,"tag":1046,"props":22040,"children":22041},{"class":1048,"line":681},[22042,22046,22050,22055,22059],{"type":30,"tag":1046,"props":22043,"children":22044},{"style":1053},[22045],{"type":40,"value":1130},{"type":30,"tag":1046,"props":22047,"children":22048},{"style":1053},[22049],{"type":40,"value":1135},{"type":30,"tag":1046,"props":22051,"children":22052},{"style":1138},[22053],{"type":40,"value":22054}," creerCommande",{"type":30,"tag":1046,"props":22056,"children":22057},{"style":1070},[22058],{"type":40,"value":1320},{"type":30,"tag":1046,"props":22060,"children":22061},{"style":1070},[22062],{"type":40,"value":1073},{"type":30,"tag":1046,"props":22064,"children":22065},{"class":1048,"line":1124},[22066],{"type":30,"tag":1046,"props":22067,"children":22068},{"style":3961},[22069],{"type":40,"value":22070},"        // Crée une commande\n",{"type":30,"tag":1046,"props":22072,"children":22073},{"class":1048,"line":1168},[22074],{"type":30,"tag":1046,"props":22075,"children":22076},{"style":1070},[22077],{"type":40,"value":1207},{"type":30,"tag":1046,"props":22079,"children":22080},{"class":1048,"line":1201},[22081],{"type":30,"tag":1046,"props":22082,"children":22083},{"style":1105},[22084],{"type":40,"value":16132},{"type":30,"tag":1046,"props":22086,"children":22087},{"class":1048,"line":1210},[22088,22092,22096,22101,22105],{"type":30,"tag":1046,"props":22089,"children":22090},{"style":1053},[22091],{"type":40,"value":1130},{"type":30,"tag":1046,"props":22093,"children":22094},{"style":1053},[22095],{"type":40,"value":1135},{"type":30,"tag":1046,"props":22097,"children":22098},{"style":1138},[22099],{"type":40,"value":22100}," calculerRemises",{"type":30,"tag":1046,"props":22102,"children":22103},{"style":1070},[22104],{"type":40,"value":1320},{"type":30,"tag":1046,"props":22106,"children":22107},{"style":1070},[22108],{"type":40,"value":1073},{"type":30,"tag":1046,"props":22110,"children":22111},{"class":1048,"line":1218},[22112],{"type":30,"tag":1046,"props":22113,"children":22114},{"style":3961},[22115],{"type":40,"value":22116},"        // Calcule les remises\n",{"type":30,"tag":1046,"props":22118,"children":22119},{"class":1048,"line":1255},[22120],{"type":30,"tag":1046,"props":22121,"children":22122},{"style":1070},[22123],{"type":40,"value":1207},{"type":30,"tag":1046,"props":22125,"children":22126},{"class":1048,"line":1284},[22127],{"type":30,"tag":1046,"props":22128,"children":22129},{"emptyLinePlaceholder":13},[22130],{"type":40,"value":1121},{"type":30,"tag":1046,"props":22132,"children":22133},{"class":1048,"line":1292},[22134,22138,22142,22147,22151],{"type":30,"tag":1046,"props":22135,"children":22136},{"style":1053},[22137],{"type":40,"value":1130},{"type":30,"tag":1046,"props":22139,"children":22140},{"style":1053},[22141],{"type":40,"value":1135},{"type":30,"tag":1046,"props":22143,"children":22144},{"style":1138},[22145],{"type":40,"value":22146}," envoyerEmailConfirmation",{"type":30,"tag":1046,"props":22148,"children":22149},{"style":1070},[22150],{"type":40,"value":1320},{"type":30,"tag":1046,"props":22152,"children":22153},{"style":1070},[22154],{"type":40,"value":1073},{"type":30,"tag":1046,"props":22156,"children":22157},{"class":1048,"line":1300},[22158],{"type":30,"tag":1046,"props":22159,"children":22160},{"style":3961},[22161],{"type":40,"value":22162},"        // Envoie un email de confirmation\n",{"type":30,"tag":1046,"props":22164,"children":22165},{"class":1048,"line":1327},[22166],{"type":30,"tag":1046,"props":22167,"children":22168},{"style":1070},[22169],{"type":40,"value":1207},{"type":30,"tag":1046,"props":22171,"children":22172},{"class":1048,"line":1354},[22173],{"type":30,"tag":1046,"props":22174,"children":22175},{"style":1070},[22176],{"type":40,"value":1423},{"type":30,"tag":1046,"props":22178,"children":22179},{"class":1048,"line":1391},[22180],{"type":30,"tag":1046,"props":22181,"children":22182},{"emptyLinePlaceholder":13},[22183],{"type":40,"value":1121},{"type":30,"tag":1046,"props":22185,"children":22186},{"class":1048,"line":1409},[22187],{"type":30,"tag":1046,"props":22188,"children":22189},{"style":3961},[22190],{"type":40,"value":22191},"// Meilleur exemple - Responsabilités divisées en plusieurs classes\n",{"type":30,"tag":1046,"props":22193,"children":22194},{"class":1048,"line":1417},[22195,22199,22203,22208],{"type":30,"tag":1046,"props":22196,"children":22197},{"style":1053},[22198],{"type":40,"value":1056},{"type":30,"tag":1046,"props":22200,"children":22201},{"style":1053},[22202],{"type":40,"value":1061},{"type":30,"tag":1046,"props":22204,"children":22205},{"style":1064},[22206],{"type":40,"value":22207}," CommandeService",{"type":30,"tag":1046,"props":22209,"children":22210},{"style":1070},[22211],{"type":40,"value":1073},{"type":30,"tag":1046,"props":22213,"children":22214},{"class":1048,"line":2023},[22215,22219,22223,22227,22231],{"type":30,"tag":1046,"props":22216,"children":22217},{"style":1053},[22218],{"type":40,"value":1130},{"type":30,"tag":1046,"props":22220,"children":22221},{"style":1053},[22222],{"type":40,"value":1135},{"type":30,"tag":1046,"props":22224,"children":22225},{"style":1138},[22226],{"type":40,"value":22054},{"type":30,"tag":1046,"props":22228,"children":22229},{"style":1070},[22230],{"type":40,"value":1320},{"type":30,"tag":1046,"props":22232,"children":22233},{"style":1070},[22234],{"type":40,"value":1073},{"type":30,"tag":1046,"props":22236,"children":22237},{"class":1048,"line":2083},[22238],{"type":30,"tag":1046,"props":22239,"children":22240},{"style":3961},[22241],{"type":40,"value":22070},{"type":30,"tag":1046,"props":22243,"children":22244},{"class":1048,"line":2126},[22245],{"type":30,"tag":1046,"props":22246,"children":22247},{"style":1070},[22248],{"type":40,"value":1207},{"type":30,"tag":1046,"props":22250,"children":22251},{"class":1048,"line":2159},[22252],{"type":30,"tag":1046,"props":22253,"children":22254},{"style":1070},[22255],{"type":40,"value":1423},{"type":30,"tag":1046,"props":22257,"children":22258},{"class":1048,"line":2167},[22259],{"type":30,"tag":1046,"props":22260,"children":22261},{"emptyLinePlaceholder":13},[22262],{"type":40,"value":1121},{"type":30,"tag":1046,"props":22264,"children":22265},{"class":1048,"line":4537},[22266,22270,22274,22279],{"type":30,"tag":1046,"props":22267,"children":22268},{"style":1053},[22269],{"type":40,"value":1056},{"type":30,"tag":1046,"props":22271,"children":22272},{"style":1053},[22273],{"type":40,"value":1061},{"type":30,"tag":1046,"props":22275,"children":22276},{"style":1064},[22277],{"type":40,"value":22278}," RemiseService",{"type":30,"tag":1046,"props":22280,"children":22281},{"style":1070},[22282],{"type":40,"value":1073},{"type":30,"tag":1046,"props":22284,"children":22285},{"class":1048,"line":4545},[22286,22290,22294,22298,22302],{"type":30,"tag":1046,"props":22287,"children":22288},{"style":1053},[22289],{"type":40,"value":1130},{"type":30,"tag":1046,"props":22291,"children":22292},{"style":1053},[22293],{"type":40,"value":1135},{"type":30,"tag":1046,"props":22295,"children":22296},{"style":1138},[22297],{"type":40,"value":22100},{"type":30,"tag":1046,"props":22299,"children":22300},{"style":1070},[22301],{"type":40,"value":1320},{"type":30,"tag":1046,"props":22303,"children":22304},{"style":1070},[22305],{"type":40,"value":1073},{"type":30,"tag":1046,"props":22307,"children":22308},{"class":1048,"line":4582},[22309],{"type":30,"tag":1046,"props":22310,"children":22311},{"style":3961},[22312],{"type":40,"value":22116},{"type":30,"tag":1046,"props":22314,"children":22315},{"class":1048,"line":4622},[22316],{"type":30,"tag":1046,"props":22317,"children":22318},{"style":1070},[22319],{"type":40,"value":1207},{"type":30,"tag":1046,"props":22321,"children":22322},{"class":1048,"line":4662},[22323],{"type":30,"tag":1046,"props":22324,"children":22325},{"style":1070},[22326],{"type":40,"value":1423},{"type":30,"tag":1046,"props":22328,"children":22329},{"class":1048,"line":4687},[22330],{"type":30,"tag":1046,"props":22331,"children":22332},{"emptyLinePlaceholder":13},[22333],{"type":40,"value":1121},{"type":30,"tag":1046,"props":22335,"children":22336},{"class":1048,"line":4695},[22337,22341,22345,22350],{"type":30,"tag":1046,"props":22338,"children":22339},{"style":1053},[22340],{"type":40,"value":1056},{"type":30,"tag":1046,"props":22342,"children":22343},{"style":1053},[22344],{"type":40,"value":1061},{"type":30,"tag":1046,"props":22346,"children":22347},{"style":1064},[22348],{"type":40,"value":22349}," NotificationService",{"type":30,"tag":1046,"props":22351,"children":22352},{"style":1070},[22353],{"type":40,"value":1073},{"type":30,"tag":1046,"props":22355,"children":22356},{"class":1048,"line":4703},[22357,22361,22365,22369,22373],{"type":30,"tag":1046,"props":22358,"children":22359},{"style":1053},[22360],{"type":40,"value":1130},{"type":30,"tag":1046,"props":22362,"children":22363},{"style":1053},[22364],{"type":40,"value":1135},{"type":30,"tag":1046,"props":22366,"children":22367},{"style":1138},[22368],{"type":40,"value":22146},{"type":30,"tag":1046,"props":22370,"children":22371},{"style":1070},[22372],{"type":40,"value":1320},{"type":30,"tag":1046,"props":22374,"children":22375},{"style":1070},[22376],{"type":40,"value":1073},{"type":30,"tag":1046,"props":22378,"children":22379},{"class":1048,"line":4739},[22380],{"type":30,"tag":1046,"props":22381,"children":22382},{"style":3961},[22383],{"type":40,"value":22162},{"type":30,"tag":1046,"props":22385,"children":22386},{"class":1048,"line":4771},[22387],{"type":30,"tag":1046,"props":22388,"children":22389},{"style":1070},[22390],{"type":40,"value":1207},{"type":30,"tag":1046,"props":22392,"children":22393},{"class":1048,"line":4811},[22394],{"type":30,"tag":1046,"props":22395,"children":22396},{"style":1070},[22397],{"type":40,"value":1423},{"type":30,"tag":43,"props":22399,"children":22400},{},[22401],{"type":40,"value":22402},"Dans cet exemple, chaque classe a une responsabilité unique. Cela permet d'éviter des classes trop lourdes et facilite leur maintenance. En cas de modification, vous n'aurez qu'à changer une partie spécifique de votre code sans impacter le reste.",{"type":30,"tag":19673,"props":22404,"children":22405},{"type":19675},[22406],{"type":30,"tag":43,"props":22407,"children":22408},{},[22409],{"type":40,"value":22410},"Une bonne règle : si vous avez du mal à expliquer ce que fait une classe ou une fonction en une phrase claire et concise, c'est probablement qu'elle a plusieurs responsabilités et doit être découpée.",{"type":30,"tag":84,"props":22412,"children":22413},{},[],{"type":30,"tag":116,"props":22415,"children":22417},{"id":22416},"_2-éviter-les-duplications-de-code",[22418],{"type":30,"tag":36,"props":22419,"children":22420},{},[22421],{"type":40,"value":22422},"2. Éviter les duplications de code",{"type":30,"tag":43,"props":22424,"children":22425},{},[22426],{"type":40,"value":22427},"Le code dupliqué est un piège fréquent qui complique la maintenance. En éliminant les duplications, vous vous assurez qu'un changement à un endroit du code n'entraîne pas une cascade de modifications à différents endroits.",{"type":30,"tag":43,"props":22429,"children":22430},{},[22431],{"type":30,"tag":36,"props":22432,"children":22433},{},[22434],{"type":40,"value":13211},{"type":30,"tag":1035,"props":22436,"children":22438},{"className":1039,"code":22437,"language":1038,"meta":8,"style":8},"// Mauvais exemple - Duplication de logique\ndouble calculerRemiseClient(double montant) {\n    double remise = 0;\n    if (montant > 1000) {\n        remise = montant * 0.1;\n    }\n    return remise;\n}\n\ndouble calculerRemisePartenaire(double montant) {\n    double remise = 0;\n    if (montant > 1000) {\n        remise = montant * 0.1;\n    }\n    return remise;\n}\n\n// Meilleur exemple - Refactorisation pour éviter la duplication\ndouble calculerRemise(double montant) {\n    double remise = 0;\n    if (montant > 1000) {\n        remise = montant * 0.1;\n    }\n    return remise;\n}\n",[22439],{"type":30,"tag":1042,"props":22440,"children":22441},{"__ignoreMap":8},[22442,22450,22483,22507,22540,22570,22577,22593,22600,22607,22639,22662,22693,22720,22727,22742,22749,22756,22764,22796,22819,22850,22877,22884,22899],{"type":30,"tag":1046,"props":22443,"children":22444},{"class":1048,"line":1049},[22445],{"type":30,"tag":1046,"props":22446,"children":22447},{"style":3961},[22448],{"type":40,"value":22449},"// Mauvais exemple - Duplication de logique\n",{"type":30,"tag":1046,"props":22451,"children":22452},{"class":1048,"line":675},[22453,22457,22462,22466,22470,22475,22479],{"type":30,"tag":1046,"props":22454,"children":22455},{"style":1053},[22456],{"type":40,"value":20944},{"type":30,"tag":1046,"props":22458,"children":22459},{"style":1138},[22460],{"type":40,"value":22461}," calculerRemiseClient",{"type":30,"tag":1046,"props":22463,"children":22464},{"style":1070},[22465],{"type":40,"value":1146},{"type":30,"tag":1046,"props":22467,"children":22468},{"style":1053},[22469],{"type":40,"value":20944},{"type":30,"tag":1046,"props":22471,"children":22472},{"style":1105},[22473],{"type":40,"value":22474}," montant",{"type":30,"tag":1046,"props":22476,"children":22477},{"style":1070},[22478],{"type":40,"value":1161},{"type":30,"tag":1046,"props":22480,"children":22481},{"style":1070},[22482],{"type":40,"value":1073},{"type":30,"tag":1046,"props":22484,"children":22485},{"class":1048,"line":681},[22486,22490,22495,22499,22503],{"type":30,"tag":1046,"props":22487,"children":22488},{"style":1053},[22489],{"type":40,"value":16140},{"type":30,"tag":1046,"props":22491,"children":22492},{"style":1105},[22493],{"type":40,"value":22494}," remise ",{"type":30,"tag":1046,"props":22496,"children":22497},{"style":1795},[22498],{"type":40,"value":1798},{"type":30,"tag":1046,"props":22500,"children":22501},{"style":6886},[22502],{"type":40,"value":13293},{"type":30,"tag":1046,"props":22504,"children":22505},{"style":1070},[22506],{"type":40,"value":1113},{"type":30,"tag":1046,"props":22508,"children":22509},{"class":1048,"line":1124},[22510,22514,22518,22523,22527,22532,22536],{"type":30,"tag":1046,"props":22511,"children":22512},{"style":1053},[22513],{"type":40,"value":14008},{"type":30,"tag":1046,"props":22515,"children":22516},{"style":1070},[22517],{"type":40,"value":11861},{"type":30,"tag":1046,"props":22519,"children":22520},{"style":1105},[22521],{"type":40,"value":22522},"montant ",{"type":30,"tag":1046,"props":22524,"children":22525},{"style":1795},[22526],{"type":40,"value":1102},{"type":30,"tag":1046,"props":22528,"children":22529},{"style":6886},[22530],{"type":40,"value":22531}," 1000",{"type":30,"tag":1046,"props":22533,"children":22534},{"style":1070},[22535],{"type":40,"value":1161},{"type":30,"tag":1046,"props":22537,"children":22538},{"style":1070},[22539],{"type":40,"value":1073},{"type":30,"tag":1046,"props":22541,"children":22542},{"class":1048,"line":1168},[22543,22548,22552,22557,22561,22566],{"type":30,"tag":1046,"props":22544,"children":22545},{"style":1105},[22546],{"type":40,"value":22547},"        remise ",{"type":30,"tag":1046,"props":22549,"children":22550},{"style":1795},[22551],{"type":40,"value":1798},{"type":30,"tag":1046,"props":22553,"children":22554},{"style":1105},[22555],{"type":40,"value":22556}," montant ",{"type":30,"tag":1046,"props":22558,"children":22559},{"style":1795},[22560],{"type":40,"value":21197},{"type":30,"tag":1046,"props":22562,"children":22563},{"style":6886},[22564],{"type":40,"value":22565}," 0.1",{"type":30,"tag":1046,"props":22567,"children":22568},{"style":1070},[22569],{"type":40,"value":1113},{"type":30,"tag":1046,"props":22571,"children":22572},{"class":1048,"line":1201},[22573],{"type":30,"tag":1046,"props":22574,"children":22575},{"style":1070},[22576],{"type":40,"value":1207},{"type":30,"tag":1046,"props":22578,"children":22579},{"class":1048,"line":1210},[22580,22584,22589],{"type":30,"tag":1046,"props":22581,"children":22582},{"style":1053},[22583],{"type":40,"value":7894},{"type":30,"tag":1046,"props":22585,"children":22586},{"style":1105},[22587],{"type":40,"value":22588}," remise",{"type":30,"tag":1046,"props":22590,"children":22591},{"style":1070},[22592],{"type":40,"value":1113},{"type":30,"tag":1046,"props":22594,"children":22595},{"class":1048,"line":1218},[22596],{"type":30,"tag":1046,"props":22597,"children":22598},{"style":1070},[22599],{"type":40,"value":1423},{"type":30,"tag":1046,"props":22601,"children":22602},{"class":1048,"line":1255},[22603],{"type":30,"tag":1046,"props":22604,"children":22605},{"emptyLinePlaceholder":13},[22606],{"type":40,"value":1121},{"type":30,"tag":1046,"props":22608,"children":22609},{"class":1048,"line":1284},[22610,22614,22619,22623,22627,22631,22635],{"type":30,"tag":1046,"props":22611,"children":22612},{"style":1053},[22613],{"type":40,"value":20944},{"type":30,"tag":1046,"props":22615,"children":22616},{"style":1138},[22617],{"type":40,"value":22618}," calculerRemisePartenaire",{"type":30,"tag":1046,"props":22620,"children":22621},{"style":1070},[22622],{"type":40,"value":1146},{"type":30,"tag":1046,"props":22624,"children":22625},{"style":1053},[22626],{"type":40,"value":20944},{"type":30,"tag":1046,"props":22628,"children":22629},{"style":1105},[22630],{"type":40,"value":22474},{"type":30,"tag":1046,"props":22632,"children":22633},{"style":1070},[22634],{"type":40,"value":1161},{"type":30,"tag":1046,"props":22636,"children":22637},{"style":1070},[22638],{"type":40,"value":1073},{"type":30,"tag":1046,"props":22640,"children":22641},{"class":1048,"line":1292},[22642,22646,22650,22654,22658],{"type":30,"tag":1046,"props":22643,"children":22644},{"style":1053},[22645],{"type":40,"value":16140},{"type":30,"tag":1046,"props":22647,"children":22648},{"style":1105},[22649],{"type":40,"value":22494},{"type":30,"tag":1046,"props":22651,"children":22652},{"style":1795},[22653],{"type":40,"value":1798},{"type":30,"tag":1046,"props":22655,"children":22656},{"style":6886},[22657],{"type":40,"value":13293},{"type":30,"tag":1046,"props":22659,"children":22660},{"style":1070},[22661],{"type":40,"value":1113},{"type":30,"tag":1046,"props":22663,"children":22664},{"class":1048,"line":1300},[22665,22669,22673,22677,22681,22685,22689],{"type":30,"tag":1046,"props":22666,"children":22667},{"style":1053},[22668],{"type":40,"value":14008},{"type":30,"tag":1046,"props":22670,"children":22671},{"style":1070},[22672],{"type":40,"value":11861},{"type":30,"tag":1046,"props":22674,"children":22675},{"style":1105},[22676],{"type":40,"value":22522},{"type":30,"tag":1046,"props":22678,"children":22679},{"style":1795},[22680],{"type":40,"value":1102},{"type":30,"tag":1046,"props":22682,"children":22683},{"style":6886},[22684],{"type":40,"value":22531},{"type":30,"tag":1046,"props":22686,"children":22687},{"style":1070},[22688],{"type":40,"value":1161},{"type":30,"tag":1046,"props":22690,"children":22691},{"style":1070},[22692],{"type":40,"value":1073},{"type":30,"tag":1046,"props":22694,"children":22695},{"class":1048,"line":1327},[22696,22700,22704,22708,22712,22716],{"type":30,"tag":1046,"props":22697,"children":22698},{"style":1105},[22699],{"type":40,"value":22547},{"type":30,"tag":1046,"props":22701,"children":22702},{"style":1795},[22703],{"type":40,"value":1798},{"type":30,"tag":1046,"props":22705,"children":22706},{"style":1105},[22707],{"type":40,"value":22556},{"type":30,"tag":1046,"props":22709,"children":22710},{"style":1795},[22711],{"type":40,"value":21197},{"type":30,"tag":1046,"props":22713,"children":22714},{"style":6886},[22715],{"type":40,"value":22565},{"type":30,"tag":1046,"props":22717,"children":22718},{"style":1070},[22719],{"type":40,"value":1113},{"type":30,"tag":1046,"props":22721,"children":22722},{"class":1048,"line":1354},[22723],{"type":30,"tag":1046,"props":22724,"children":22725},{"style":1070},[22726],{"type":40,"value":1207},{"type":30,"tag":1046,"props":22728,"children":22729},{"class":1048,"line":1391},[22730,22734,22738],{"type":30,"tag":1046,"props":22731,"children":22732},{"style":1053},[22733],{"type":40,"value":7894},{"type":30,"tag":1046,"props":22735,"children":22736},{"style":1105},[22737],{"type":40,"value":22588},{"type":30,"tag":1046,"props":22739,"children":22740},{"style":1070},[22741],{"type":40,"value":1113},{"type":30,"tag":1046,"props":22743,"children":22744},{"class":1048,"line":1409},[22745],{"type":30,"tag":1046,"props":22746,"children":22747},{"style":1070},[22748],{"type":40,"value":1423},{"type":30,"tag":1046,"props":22750,"children":22751},{"class":1048,"line":1417},[22752],{"type":30,"tag":1046,"props":22753,"children":22754},{"emptyLinePlaceholder":13},[22755],{"type":40,"value":1121},{"type":30,"tag":1046,"props":22757,"children":22758},{"class":1048,"line":2023},[22759],{"type":30,"tag":1046,"props":22760,"children":22761},{"style":3961},[22762],{"type":40,"value":22763},"// Meilleur exemple - Refactorisation pour éviter la duplication\n",{"type":30,"tag":1046,"props":22765,"children":22766},{"class":1048,"line":2083},[22767,22771,22776,22780,22784,22788,22792],{"type":30,"tag":1046,"props":22768,"children":22769},{"style":1053},[22770],{"type":40,"value":20944},{"type":30,"tag":1046,"props":22772,"children":22773},{"style":1138},[22774],{"type":40,"value":22775}," calculerRemise",{"type":30,"tag":1046,"props":22777,"children":22778},{"style":1070},[22779],{"type":40,"value":1146},{"type":30,"tag":1046,"props":22781,"children":22782},{"style":1053},[22783],{"type":40,"value":20944},{"type":30,"tag":1046,"props":22785,"children":22786},{"style":1105},[22787],{"type":40,"value":22474},{"type":30,"tag":1046,"props":22789,"children":22790},{"style":1070},[22791],{"type":40,"value":1161},{"type":30,"tag":1046,"props":22793,"children":22794},{"style":1070},[22795],{"type":40,"value":1073},{"type":30,"tag":1046,"props":22797,"children":22798},{"class":1048,"line":2126},[22799,22803,22807,22811,22815],{"type":30,"tag":1046,"props":22800,"children":22801},{"style":1053},[22802],{"type":40,"value":16140},{"type":30,"tag":1046,"props":22804,"children":22805},{"style":1105},[22806],{"type":40,"value":22494},{"type":30,"tag":1046,"props":22808,"children":22809},{"style":1795},[22810],{"type":40,"value":1798},{"type":30,"tag":1046,"props":22812,"children":22813},{"style":6886},[22814],{"type":40,"value":13293},{"type":30,"tag":1046,"props":22816,"children":22817},{"style":1070},[22818],{"type":40,"value":1113},{"type":30,"tag":1046,"props":22820,"children":22821},{"class":1048,"line":2159},[22822,22826,22830,22834,22838,22842,22846],{"type":30,"tag":1046,"props":22823,"children":22824},{"style":1053},[22825],{"type":40,"value":14008},{"type":30,"tag":1046,"props":22827,"children":22828},{"style":1070},[22829],{"type":40,"value":11861},{"type":30,"tag":1046,"props":22831,"children":22832},{"style":1105},[22833],{"type":40,"value":22522},{"type":30,"tag":1046,"props":22835,"children":22836},{"style":1795},[22837],{"type":40,"value":1102},{"type":30,"tag":1046,"props":22839,"children":22840},{"style":6886},[22841],{"type":40,"value":22531},{"type":30,"tag":1046,"props":22843,"children":22844},{"style":1070},[22845],{"type":40,"value":1161},{"type":30,"tag":1046,"props":22847,"children":22848},{"style":1070},[22849],{"type":40,"value":1073},{"type":30,"tag":1046,"props":22851,"children":22852},{"class":1048,"line":2167},[22853,22857,22861,22865,22869,22873],{"type":30,"tag":1046,"props":22854,"children":22855},{"style":1105},[22856],{"type":40,"value":22547},{"type":30,"tag":1046,"props":22858,"children":22859},{"style":1795},[22860],{"type":40,"value":1798},{"type":30,"tag":1046,"props":22862,"children":22863},{"style":1105},[22864],{"type":40,"value":22556},{"type":30,"tag":1046,"props":22866,"children":22867},{"style":1795},[22868],{"type":40,"value":21197},{"type":30,"tag":1046,"props":22870,"children":22871},{"style":6886},[22872],{"type":40,"value":22565},{"type":30,"tag":1046,"props":22874,"children":22875},{"style":1070},[22876],{"type":40,"value":1113},{"type":30,"tag":1046,"props":22878,"children":22879},{"class":1048,"line":4537},[22880],{"type":30,"tag":1046,"props":22881,"children":22882},{"style":1070},[22883],{"type":40,"value":1207},{"type":30,"tag":1046,"props":22885,"children":22886},{"class":1048,"line":4545},[22887,22891,22895],{"type":30,"tag":1046,"props":22888,"children":22889},{"style":1053},[22890],{"type":40,"value":7894},{"type":30,"tag":1046,"props":22892,"children":22893},{"style":1105},[22894],{"type":40,"value":22588},{"type":30,"tag":1046,"props":22896,"children":22897},{"style":1070},[22898],{"type":40,"value":1113},{"type":30,"tag":1046,"props":22900,"children":22901},{"class":1048,"line":4582},[22902],{"type":30,"tag":1046,"props":22903,"children":22904},{"style":1070},[22905],{"type":40,"value":1423},{"type":30,"tag":43,"props":22907,"children":22908},{},[22909],{"type":40,"value":22910},"En unifiant la logique de calcul de la remise dans une seule fonction, vous éliminez la duplication et simplifiez la maintenance. Si la logique doit changer (par exemple, le seuil de 1000), vous n'aurez à modifier qu'une seule fonction.",{"type":30,"tag":19673,"props":22912,"children":22913},{"type":19675},[22914],{"type":30,"tag":43,"props":22915,"children":22916},{},[22917],{"type":40,"value":22918},"Cherchez les répétitions dans votre code. Si vous vous retrouvez à écrire la même logique ou presque identique à plusieurs endroits, c'est le signe qu'il est temps de refactoriser.",{"type":30,"tag":84,"props":22920,"children":22921},{},[],{"type":30,"tag":116,"props":22923,"children":22925},{"id":22924},"_3-faciliter-les-tests-unitaires",[22926],{"type":30,"tag":36,"props":22927,"children":22928},{},[22929],{"type":40,"value":22930},"3. Faciliter les tests unitaires",{"type":30,"tag":43,"props":22932,"children":22933},{},[22934,22936,22944],{"type":40,"value":22935},"Un code propre doit être facilement testable. En d'autres termes, il doit être écrit de manière à permettre des ",{"type":30,"tag":36,"props":22937,"children":22938},{},[22939],{"type":30,"tag":75,"props":22940,"children":22941},{"href":13698},[22942],{"type":40,"value":22943},"tests unitaires",{"type":40,"value":22945}," simples et rapides. Cela passe par des fonctions courtes, des classes cohérentes et l'absence de dépendances cachées.",{"type":30,"tag":43,"props":22947,"children":22948},{},[22949],{"type":30,"tag":36,"props":22950,"children":22951},{},[22952],{"type":40,"value":13211},{"type":30,"tag":1035,"props":22954,"children":22956},{"className":1039,"code":22955,"language":1038,"meta":8,"style":8},"// Mauvais exemple - Difficulté à tester en raison des dépendances internes\npublic class CommandeService {\n    public void creerCommande() {\n        Database db = new Database();\n        db.save();\n    }\n}\n\n// Meilleur exemple - Injection de dépendance pour faciliter les tests\npublic class CommandeService {\n    private Database database;\n\n    public CommandeService(Database database) {\n        this.database = database;\n    }\n\n    public void creerCommande() {\n        database.save();\n    }\n}\n",[22957],{"type":30,"tag":1042,"props":22958,"children":22959},{"__ignoreMap":8},[22960,22968,22987,23010,23040,23060,23067,23074,23081,23089,23108,23127,23134,23166,23194,23201,23208,23231,23250,23257],{"type":30,"tag":1046,"props":22961,"children":22962},{"class":1048,"line":1049},[22963],{"type":30,"tag":1046,"props":22964,"children":22965},{"style":3961},[22966],{"type":40,"value":22967},"// Mauvais exemple - Difficulté à tester en raison des dépendances internes\n",{"type":30,"tag":1046,"props":22969,"children":22970},{"class":1048,"line":675},[22971,22975,22979,22983],{"type":30,"tag":1046,"props":22972,"children":22973},{"style":1053},[22974],{"type":40,"value":1056},{"type":30,"tag":1046,"props":22976,"children":22977},{"style":1053},[22978],{"type":40,"value":1061},{"type":30,"tag":1046,"props":22980,"children":22981},{"style":1064},[22982],{"type":40,"value":22207},{"type":30,"tag":1046,"props":22984,"children":22985},{"style":1070},[22986],{"type":40,"value":1073},{"type":30,"tag":1046,"props":22988,"children":22989},{"class":1048,"line":681},[22990,22994,22998,23002,23006],{"type":30,"tag":1046,"props":22991,"children":22992},{"style":1053},[22993],{"type":40,"value":1130},{"type":30,"tag":1046,"props":22995,"children":22996},{"style":1053},[22997],{"type":40,"value":1135},{"type":30,"tag":1046,"props":22999,"children":23000},{"style":1138},[23001],{"type":40,"value":22054},{"type":30,"tag":1046,"props":23003,"children":23004},{"style":1070},[23005],{"type":40,"value":1320},{"type":30,"tag":1046,"props":23007,"children":23008},{"style":1070},[23009],{"type":40,"value":1073},{"type":30,"tag":1046,"props":23011,"children":23012},{"class":1048,"line":1124},[23013,23018,23023,23027,23031,23036],{"type":30,"tag":1046,"props":23014,"children":23015},{"style":1084},[23016],{"type":40,"value":23017},"        Database",{"type":30,"tag":1046,"props":23019,"children":23020},{"style":1105},[23021],{"type":40,"value":23022}," db ",{"type":30,"tag":1046,"props":23024,"children":23025},{"style":1795},[23026],{"type":40,"value":1798},{"type":30,"tag":1046,"props":23028,"children":23029},{"style":1053},[23030],{"type":40,"value":2480},{"type":30,"tag":1046,"props":23032,"children":23033},{"style":1138},[23034],{"type":40,"value":23035}," Database",{"type":30,"tag":1046,"props":23037,"children":23038},{"style":1070},[23039],{"type":40,"value":1406},{"type":30,"tag":1046,"props":23041,"children":23042},{"class":1048,"line":1168},[23043,23048,23052,23056],{"type":30,"tag":1046,"props":23044,"children":23045},{"style":1105},[23046],{"type":40,"value":23047},"        db",{"type":30,"tag":1046,"props":23049,"children":23050},{"style":1070},[23051],{"type":40,"value":1179},{"type":30,"tag":1046,"props":23053,"children":23054},{"style":1138},[23055],{"type":40,"value":2992},{"type":30,"tag":1046,"props":23057,"children":23058},{"style":1070},[23059],{"type":40,"value":1406},{"type":30,"tag":1046,"props":23061,"children":23062},{"class":1048,"line":1201},[23063],{"type":30,"tag":1046,"props":23064,"children":23065},{"style":1070},[23066],{"type":40,"value":1207},{"type":30,"tag":1046,"props":23068,"children":23069},{"class":1048,"line":1210},[23070],{"type":30,"tag":1046,"props":23071,"children":23072},{"style":1070},[23073],{"type":40,"value":1423},{"type":30,"tag":1046,"props":23075,"children":23076},{"class":1048,"line":1218},[23077],{"type":30,"tag":1046,"props":23078,"children":23079},{"emptyLinePlaceholder":13},[23080],{"type":40,"value":1121},{"type":30,"tag":1046,"props":23082,"children":23083},{"class":1048,"line":1255},[23084],{"type":30,"tag":1046,"props":23085,"children":23086},{"style":3961},[23087],{"type":40,"value":23088},"// Meilleur exemple - Injection de dépendance pour faciliter les tests\n",{"type":30,"tag":1046,"props":23090,"children":23091},{"class":1048,"line":1284},[23092,23096,23100,23104],{"type":30,"tag":1046,"props":23093,"children":23094},{"style":1053},[23095],{"type":40,"value":1056},{"type":30,"tag":1046,"props":23097,"children":23098},{"style":1053},[23099],{"type":40,"value":1061},{"type":30,"tag":1046,"props":23101,"children":23102},{"style":1064},[23103],{"type":40,"value":22207},{"type":30,"tag":1046,"props":23105,"children":23106},{"style":1070},[23107],{"type":40,"value":1073},{"type":30,"tag":1046,"props":23109,"children":23110},{"class":1048,"line":1292},[23111,23115,23119,23123],{"type":30,"tag":1046,"props":23112,"children":23113},{"style":1053},[23114],{"type":40,"value":1081},{"type":30,"tag":1046,"props":23116,"children":23117},{"style":1084},[23118],{"type":40,"value":23035},{"type":30,"tag":1046,"props":23120,"children":23121},{"style":1105},[23122],{"type":40,"value":3306},{"type":30,"tag":1046,"props":23124,"children":23125},{"style":1070},[23126],{"type":40,"value":1113},{"type":30,"tag":1046,"props":23128,"children":23129},{"class":1048,"line":1300},[23130],{"type":30,"tag":1046,"props":23131,"children":23132},{"emptyLinePlaceholder":13},[23133],{"type":40,"value":1121},{"type":30,"tag":1046,"props":23135,"children":23136},{"class":1048,"line":1327},[23137,23141,23145,23149,23154,23158,23162],{"type":30,"tag":1046,"props":23138,"children":23139},{"style":1053},[23140],{"type":40,"value":1130},{"type":30,"tag":1046,"props":23142,"children":23143},{"style":1138},[23144],{"type":40,"value":22207},{"type":30,"tag":1046,"props":23146,"children":23147},{"style":1070},[23148],{"type":40,"value":1146},{"type":30,"tag":1046,"props":23150,"children":23151},{"style":1084},[23152],{"type":40,"value":23153},"Database",{"type":30,"tag":1046,"props":23155,"children":23156},{"style":1153},[23157],{"type":40,"value":3306},{"type":30,"tag":1046,"props":23159,"children":23160},{"style":1070},[23161],{"type":40,"value":1161},{"type":30,"tag":1046,"props":23163,"children":23164},{"style":1070},[23165],{"type":40,"value":1073},{"type":30,"tag":1046,"props":23167,"children":23168},{"class":1048,"line":1354},[23169,23173,23177,23182,23186,23190],{"type":30,"tag":1046,"props":23170,"children":23171},{"style":1780},[23172],{"type":40,"value":1783},{"type":30,"tag":1046,"props":23174,"children":23175},{"style":1070},[23176],{"type":40,"value":1179},{"type":30,"tag":1046,"props":23178,"children":23179},{"style":1105},[23180],{"type":40,"value":23181},"database ",{"type":30,"tag":1046,"props":23183,"children":23184},{"style":1795},[23185],{"type":40,"value":1798},{"type":30,"tag":1046,"props":23187,"children":23188},{"style":1105},[23189],{"type":40,"value":3306},{"type":30,"tag":1046,"props":23191,"children":23192},{"style":1070},[23193],{"type":40,"value":1113},{"type":30,"tag":1046,"props":23195,"children":23196},{"class":1048,"line":1391},[23197],{"type":30,"tag":1046,"props":23198,"children":23199},{"style":1070},[23200],{"type":40,"value":1207},{"type":30,"tag":1046,"props":23202,"children":23203},{"class":1048,"line":1409},[23204],{"type":30,"tag":1046,"props":23205,"children":23206},{"emptyLinePlaceholder":13},[23207],{"type":40,"value":1121},{"type":30,"tag":1046,"props":23209,"children":23210},{"class":1048,"line":1417},[23211,23215,23219,23223,23227],{"type":30,"tag":1046,"props":23212,"children":23213},{"style":1053},[23214],{"type":40,"value":1130},{"type":30,"tag":1046,"props":23216,"children":23217},{"style":1053},[23218],{"type":40,"value":1135},{"type":30,"tag":1046,"props":23220,"children":23221},{"style":1138},[23222],{"type":40,"value":22054},{"type":30,"tag":1046,"props":23224,"children":23225},{"style":1070},[23226],{"type":40,"value":1320},{"type":30,"tag":1046,"props":23228,"children":23229},{"style":1070},[23230],{"type":40,"value":1073},{"type":30,"tag":1046,"props":23232,"children":23233},{"class":1048,"line":2023},[23234,23238,23242,23246],{"type":30,"tag":1046,"props":23235,"children":23236},{"style":1105},[23237],{"type":40,"value":3409},{"type":30,"tag":1046,"props":23239,"children":23240},{"style":1070},[23241],{"type":40,"value":1179},{"type":30,"tag":1046,"props":23243,"children":23244},{"style":1138},[23245],{"type":40,"value":2992},{"type":30,"tag":1046,"props":23247,"children":23248},{"style":1070},[23249],{"type":40,"value":1406},{"type":30,"tag":1046,"props":23251,"children":23252},{"class":1048,"line":2083},[23253],{"type":30,"tag":1046,"props":23254,"children":23255},{"style":1070},[23256],{"type":40,"value":1207},{"type":30,"tag":1046,"props":23258,"children":23259},{"class":1048,"line":2126},[23260],{"type":30,"tag":1046,"props":23261,"children":23262},{"style":1070},[23263],{"type":40,"value":1423},{"type":30,"tag":43,"props":23265,"children":23266},{},[23267,23269,23274],{"type":40,"value":23268},"Dans le second exemple, l'injection de dépendance rend la classe plus testable. Au lieu de créer une instance de ",{"type":30,"tag":1042,"props":23270,"children":23272},{"className":23271},[],[23273],{"type":40,"value":23153},{"type":40,"value":23275}," en interne, vous pouvez passer une base de données fictive (mock) lors de vos tests unitaires.",{"type":30,"tag":19673,"props":23277,"children":23278},{"type":19675},[23279],{"type":30,"tag":43,"props":23280,"children":23281},{},[23282],{"type":40,"value":23283},"Rendez chaque classe indépendante de ses dépendances réelles en utilisant des interfaces ou des injections de dépendances. Cela vous permet de tester chaque partie du code de manière isolée.",{"type":30,"tag":84,"props":23285,"children":23286},{},[],{"type":30,"tag":31,"props":23288,"children":23290},{"id":23289},"conseils-et-astuces-pour-appliquer-le-clean-code-au-quotidien",[23291],{"type":30,"tag":36,"props":23292,"children":23293},{},[23294],{"type":40,"value":23295},"Conseils et astuces pour appliquer le Clean Code au quotidien",{"type":30,"tag":43,"props":23297,"children":23298},{},[23299,23301,23305],{"type":40,"value":23300},"Maintenant que vous connaissez les bases du ",{"type":30,"tag":36,"props":23302,"children":23303},{},[23304],{"type":40,"value":13075},{"type":40,"value":23306},", voyons comment intégrer ces bonnes pratiques dans votre travail quotidien, même lorsque vous êtes sous pression ou que vous devez travailler sur du code existant. Voici quelques astuces simples mais efficaces pour garder votre code propre, maintenable et lisible à long terme.",{"type":30,"tag":116,"props":23308,"children":23310},{"id":23309},"_1-réécrire-du-code-existant-le-refactoring-progressif",[23311],{"type":30,"tag":36,"props":23312,"children":23313},{},[23314],{"type":40,"value":23315},"1. Réécrire du code existant : le refactoring progressif",{"type":30,"tag":43,"props":23317,"children":23318},{},[23319,23321,23327,23329,23334],{"type":40,"value":23320},"Quand vous héritez d'un ",{"type":30,"tag":75,"props":23322,"children":23324},{"href":23323},"/fr/dette-technique/legacy-code-evaluer-risque",[23325],{"type":40,"value":23326},"code legacy",{"type":40,"value":23328}," mal structuré ou difficile à comprendre, il peut être tentant de tout réécrire. Cependant, ce n'est pas toujours réaliste ou nécessaire. La meilleure approche est souvent le ",{"type":30,"tag":36,"props":23330,"children":23331},{},[23332],{"type":40,"value":23333},"refactoring progressif",{"type":40,"value":23335}," : au lieu de tout changer d'un coup, vous améliorez petit à petit le code à chaque modification ou ajout de fonctionnalité.",{"type":30,"tag":43,"props":23337,"children":23338},{},[23339],{"type":30,"tag":36,"props":23340,"children":23341},{},[23342],{"type":40,"value":13211},{"type":30,"tag":1035,"props":23344,"children":23346},{"className":1039,"code":23345,"language":1038,"meta":8,"style":8},"// Code hérité difficile à comprendre\npublic void traitementCommande(Commande commande) {\n    if (commande.isUrgent() && !commande.isValide()) {\n        System.out.println(\"Erreur\");\n    }\n    // Autres opérations\n}\n\n// Refactorisation progressive\npublic void verifierCommandeValide(Commande commande) {\n    if (!commande.isValide()) {\n        throw new IllegalArgumentException(\"Commande invalide\");\n    }\n}\n",[23347],{"type":30,"tag":1042,"props":23348,"children":23349},{"__ignoreMap":8},[23350,23358,23396,23454,23490,23497,23505,23512,23519,23527,23563,23598,23626,23633],{"type":30,"tag":1046,"props":23351,"children":23352},{"class":1048,"line":1049},[23353],{"type":30,"tag":1046,"props":23354,"children":23355},{"style":3961},[23356],{"type":40,"value":23357},"// Code hérité difficile à comprendre\n",{"type":30,"tag":1046,"props":23359,"children":23360},{"class":1048,"line":675},[23361,23365,23369,23374,23378,23383,23388,23392],{"type":30,"tag":1046,"props":23362,"children":23363},{"style":1053},[23364],{"type":40,"value":1056},{"type":30,"tag":1046,"props":23366,"children":23367},{"style":1053},[23368],{"type":40,"value":1135},{"type":30,"tag":1046,"props":23370,"children":23371},{"style":1138},[23372],{"type":40,"value":23373}," traitementCommande",{"type":30,"tag":1046,"props":23375,"children":23376},{"style":1070},[23377],{"type":40,"value":1146},{"type":30,"tag":1046,"props":23379,"children":23380},{"style":1084},[23381],{"type":40,"value":23382},"Commande",{"type":30,"tag":1046,"props":23384,"children":23385},{"style":1105},[23386],{"type":40,"value":23387}," commande",{"type":30,"tag":1046,"props":23389,"children":23390},{"style":1070},[23391],{"type":40,"value":1161},{"type":30,"tag":1046,"props":23393,"children":23394},{"style":1070},[23395],{"type":40,"value":1073},{"type":30,"tag":1046,"props":23397,"children":23398},{"class":1048,"line":681},[23399,23403,23407,23412,23416,23421,23425,23429,23433,23437,23441,23446,23450],{"type":30,"tag":1046,"props":23400,"children":23401},{"style":1053},[23402],{"type":40,"value":14008},{"type":30,"tag":1046,"props":23404,"children":23405},{"style":1070},[23406],{"type":40,"value":11861},{"type":30,"tag":1046,"props":23408,"children":23409},{"style":1105},[23410],{"type":40,"value":23411},"commande",{"type":30,"tag":1046,"props":23413,"children":23414},{"style":1070},[23415],{"type":40,"value":1179},{"type":30,"tag":1046,"props":23417,"children":23418},{"style":1138},[23419],{"type":40,"value":23420},"isUrgent",{"type":30,"tag":1046,"props":23422,"children":23423},{"style":1070},[23424],{"type":40,"value":1320},{"type":30,"tag":1046,"props":23426,"children":23427},{"style":1795},[23428],{"type":40,"value":14076},{"type":30,"tag":1046,"props":23430,"children":23431},{"style":1795},[23432],{"type":40,"value":14081},{"type":30,"tag":1046,"props":23434,"children":23435},{"style":1105},[23436],{"type":40,"value":23411},{"type":30,"tag":1046,"props":23438,"children":23439},{"style":1070},[23440],{"type":40,"value":1179},{"type":30,"tag":1046,"props":23442,"children":23443},{"style":1138},[23444],{"type":40,"value":23445},"isValide",{"type":30,"tag":1046,"props":23447,"children":23448},{"style":1070},[23449],{"type":40,"value":13520},{"type":30,"tag":1046,"props":23451,"children":23452},{"style":1070},[23453],{"type":40,"value":1073},{"type":30,"tag":1046,"props":23455,"children":23456},{"class":1048,"line":1124},[23457,23461,23465,23469,23473,23477,23481,23486],{"type":30,"tag":1046,"props":23458,"children":23459},{"style":1105},[23460],{"type":40,"value":12555},{"type":30,"tag":1046,"props":23462,"children":23463},{"style":1070},[23464],{"type":40,"value":1179},{"type":30,"tag":1046,"props":23466,"children":23467},{"style":1105},[23468],{"type":40,"value":12564},{"type":30,"tag":1046,"props":23470,"children":23471},{"style":1070},[23472],{"type":40,"value":1179},{"type":30,"tag":1046,"props":23474,"children":23475},{"style":1138},[23476],{"type":40,"value":12573},{"type":30,"tag":1046,"props":23478,"children":23479},{"style":1070},[23480],{"type":40,"value":1146},{"type":30,"tag":1046,"props":23482,"children":23483},{"style":1675},[23484],{"type":40,"value":23485},"\"Erreur\"",{"type":30,"tag":1046,"props":23487,"children":23488},{"style":1070},[23489],{"type":40,"value":1198},{"type":30,"tag":1046,"props":23491,"children":23492},{"class":1048,"line":1168},[23493],{"type":30,"tag":1046,"props":23494,"children":23495},{"style":1070},[23496],{"type":40,"value":1207},{"type":30,"tag":1046,"props":23498,"children":23499},{"class":1048,"line":1201},[23500],{"type":30,"tag":1046,"props":23501,"children":23502},{"style":3961},[23503],{"type":40,"value":23504},"    // Autres opérations\n",{"type":30,"tag":1046,"props":23506,"children":23507},{"class":1048,"line":1210},[23508],{"type":30,"tag":1046,"props":23509,"children":23510},{"style":1070},[23511],{"type":40,"value":1423},{"type":30,"tag":1046,"props":23513,"children":23514},{"class":1048,"line":1218},[23515],{"type":30,"tag":1046,"props":23516,"children":23517},{"emptyLinePlaceholder":13},[23518],{"type":40,"value":1121},{"type":30,"tag":1046,"props":23520,"children":23521},{"class":1048,"line":1255},[23522],{"type":30,"tag":1046,"props":23523,"children":23524},{"style":3961},[23525],{"type":40,"value":23526},"// Refactorisation progressive\n",{"type":30,"tag":1046,"props":23528,"children":23529},{"class":1048,"line":1284},[23530,23534,23538,23543,23547,23551,23555,23559],{"type":30,"tag":1046,"props":23531,"children":23532},{"style":1053},[23533],{"type":40,"value":1056},{"type":30,"tag":1046,"props":23535,"children":23536},{"style":1053},[23537],{"type":40,"value":1135},{"type":30,"tag":1046,"props":23539,"children":23540},{"style":1138},[23541],{"type":40,"value":23542}," verifierCommandeValide",{"type":30,"tag":1046,"props":23544,"children":23545},{"style":1070},[23546],{"type":40,"value":1146},{"type":30,"tag":1046,"props":23548,"children":23549},{"style":1084},[23550],{"type":40,"value":23382},{"type":30,"tag":1046,"props":23552,"children":23553},{"style":1105},[23554],{"type":40,"value":23387},{"type":30,"tag":1046,"props":23556,"children":23557},{"style":1070},[23558],{"type":40,"value":1161},{"type":30,"tag":1046,"props":23560,"children":23561},{"style":1070},[23562],{"type":40,"value":1073},{"type":30,"tag":1046,"props":23564,"children":23565},{"class":1048,"line":1292},[23566,23570,23574,23578,23582,23586,23590,23594],{"type":30,"tag":1046,"props":23567,"children":23568},{"style":1053},[23569],{"type":40,"value":14008},{"type":30,"tag":1046,"props":23571,"children":23572},{"style":1070},[23573],{"type":40,"value":11861},{"type":30,"tag":1046,"props":23575,"children":23576},{"style":1795},[23577],{"type":40,"value":16086},{"type":30,"tag":1046,"props":23579,"children":23580},{"style":1105},[23581],{"type":40,"value":23411},{"type":30,"tag":1046,"props":23583,"children":23584},{"style":1070},[23585],{"type":40,"value":1179},{"type":30,"tag":1046,"props":23587,"children":23588},{"style":1138},[23589],{"type":40,"value":23445},{"type":30,"tag":1046,"props":23591,"children":23592},{"style":1070},[23593],{"type":40,"value":13520},{"type":30,"tag":1046,"props":23595,"children":23596},{"style":1070},[23597],{"type":40,"value":1073},{"type":30,"tag":1046,"props":23599,"children":23600},{"class":1048,"line":1300},[23601,23606,23610,23614,23618,23622],{"type":30,"tag":1046,"props":23602,"children":23603},{"style":1053},[23604],{"type":40,"value":23605},"        throw",{"type":30,"tag":1046,"props":23607,"children":23608},{"style":1053},[23609],{"type":40,"value":2480},{"type":30,"tag":1046,"props":23611,"children":23612},{"style":1138},[23613],{"type":40,"value":4443},{"type":30,"tag":1046,"props":23615,"children":23616},{"style":1070},[23617],{"type":40,"value":1146},{"type":30,"tag":1046,"props":23619,"children":23620},{"style":1675},[23621],{"type":40,"value":19984},{"type":30,"tag":1046,"props":23623,"children":23624},{"style":1070},[23625],{"type":40,"value":1198},{"type":30,"tag":1046,"props":23627,"children":23628},{"class":1048,"line":1327},[23629],{"type":30,"tag":1046,"props":23630,"children":23631},{"style":1070},[23632],{"type":40,"value":1207},{"type":30,"tag":1046,"props":23634,"children":23635},{"class":1048,"line":1354},[23636],{"type":30,"tag":1046,"props":23637,"children":23638},{"style":1070},[23639],{"type":40,"value":1423},{"type":30,"tag":43,"props":23641,"children":23642},{},[23643,23645,23651],{"type":40,"value":23644},"Dans cet exemple, au lieu de réécrire toute la méthode ",{"type":30,"tag":1042,"props":23646,"children":23648},{"className":23647},[],[23649],{"type":40,"value":23650},"traitementCommande",{"type":40,"value":23652},", j’ai simplement extrait une partie du code dans une fonction dédiée, ce qui clarifie une portion du processus sans tout chambouler. Ce type de petit refactoring est une manière efficace de rendre le code plus propre à mesure que vous y travaillez.",{"type":30,"tag":19673,"props":23654,"children":23655},{"type":19675},[23656],{"type":30,"tag":43,"props":23657,"children":23658},{},[23659],{"type":40,"value":23660},"N'attendez pas de trouver du temps pour tout réécrire. Appliquez des petites améliorations à chaque passage sur du code existant. Petit à petit, vous verrez des résultats.",{"type":30,"tag":84,"props":23662,"children":23663},{},[],{"type":30,"tag":116,"props":23665,"children":23667},{"id":23666},"_2-prioriser-le-clean-code-sous-pression",[23668],{"type":30,"tag":36,"props":23669,"children":23670},{},[23671],{"type":40,"value":23672},"2. Prioriser le Clean Code sous pression",{"type":30,"tag":43,"props":23674,"children":23675},{},[23676,23678,23682],{"type":40,"value":23677},"Il est souvent tentant de sacrifier la qualité du code quand les délais sont serrés. Cependant, adopter les principes du ",{"type":30,"tag":36,"props":23679,"children":23680},{},[23681],{"type":40,"value":13075},{"type":40,"value":23683}," ne signifie pas que vous devez ralentir. Bien au contraire, ces principes, lorsqu’ils sont appliqués de manière cohérente, peuvent vous aider à être plus rapide, en vous permettant de comprendre et de modifier votre code plus facilement.",{"type":30,"tag":43,"props":23685,"children":23686},{},[23687,23689,23694],{"type":40,"value":23688},"Voici quelques astuces pour ",{"type":30,"tag":36,"props":23690,"children":23691},{},[23692],{"type":40,"value":23693},"garder votre code propre même sous pression",{"type":40,"value":6296},{"type":30,"tag":163,"props":23696,"children":23697},{},[23698,23708,23718],{"type":30,"tag":167,"props":23699,"children":23700},{},[23701,23706],{"type":30,"tag":36,"props":23702,"children":23703},{},[23704],{"type":40,"value":23705},"Utilisez des fonctions courtes et bien nommées.",{"type":40,"value":23707}," Même en mode rush, séparer les responsabilités vous permet de limiter les erreurs et d’accélérer le débogage.",{"type":30,"tag":167,"props":23709,"children":23710},{},[23711,23716],{"type":30,"tag":36,"props":23712,"children":23713},{},[23714],{"type":40,"value":23715},"Nommez les variables clairement.",{"type":40,"value":23717}," Prendre quelques secondes pour choisir un nom explicite peut vous faire gagner des heures plus tard en maintenance.",{"type":30,"tag":167,"props":23719,"children":23720},{},[23721,23726],{"type":30,"tag":36,"props":23722,"children":23723},{},[23724],{"type":40,"value":23725},"Évitez les solutions \"hacky\".",{"type":40,"value":23727}," Même si une solution rapide semble tentante, elle peut introduire des bugs difficiles à repérer plus tard.",{"type":30,"tag":19673,"props":23729,"children":23730},{"type":19675},[23731],{"type":30,"tag":43,"props":23732,"children":23733},{},[23734],{"type":40,"value":23735},"Fixez-vous une règle simple : \"Pas de code hacky\". Si vous vous trouvez sur le point d’ajouter une solution temporaire ou désordonnée, posez-vous la question : est-ce que vous vous souviendrez de ce hack dans 3 mois ? Si non, trouvez un moyen plus propre.",{"type":30,"tag":84,"props":23737,"children":23738},{},[],{"type":30,"tag":116,"props":23740,"children":23742},{"id":23741},"_3-collaborer-avec-dautres-développeurs-pour-améliorer-le-code",[23743],{"type":30,"tag":36,"props":23744,"children":23745},{},[23746],{"type":40,"value":23747},"3. Collaborer avec d’autres développeurs pour améliorer le code",{"type":30,"tag":43,"props":23749,"children":23750},{},[23751,23752,23756,23758,23762],{"type":40,"value":143},{"type":30,"tag":36,"props":23753,"children":23754},{},[23755],{"type":40,"value":13075},{"type":40,"value":23757}," n’est pas seulement une affaire personnelle. Il est aussi essentiel d’inciter vos collègues à adopter ces bonnes pratiques. Une ",{"type":30,"tag":36,"props":23759,"children":23760},{},[23761],{"type":40,"value":352},{"type":40,"value":23763}," régulière est un excellent moyen d’encourager une culture du Clean Code au sein de votre équipe. Chacun peut ainsi apprendre des autres et partager des conseils sur la façon d’améliorer la qualité du code.",{"type":30,"tag":43,"props":23765,"children":23766},{},[23767],{"type":30,"tag":36,"props":23768,"children":23769},{},[23770],{"type":40,"value":23771},"Quelques conseils pour une bonne collaboration :",{"type":30,"tag":163,"props":23773,"children":23774},{},[23775,23785,23795],{"type":30,"tag":167,"props":23776,"children":23777},{},[23778,23783],{"type":30,"tag":36,"props":23779,"children":23780},{},[23781],{"type":40,"value":23782},"Soyez constructif lors des revues de code.",{"type":40,"value":23784}," Au lieu de pointer du doigt les erreurs, proposez des solutions et expliquez pourquoi une modification rendrait le code plus clair.",{"type":30,"tag":167,"props":23786,"children":23787},{},[23788,23793],{"type":30,"tag":36,"props":23789,"children":23790},{},[23791],{"type":40,"value":23792},"Favorisez la documentation du code.",{"type":40,"value":23794}," Encouragez vos collègues à écrire des noms explicites, à bien structurer les fonctions, et à éviter les duplications.",{"type":30,"tag":167,"props":23796,"children":23797},{},[23798,23803],{"type":30,"tag":36,"props":23799,"children":23800},{},[23801],{"type":40,"value":23802},"Partagez les succès.",{"type":40,"value":23804}," Quand un bon refactoring ou une amélioration de la lisibilité est fait, mettez-le en avant lors de vos réunions d’équipe.",{"type":30,"tag":19673,"props":23806,"children":23807},{"type":19675},[23808],{"type":30,"tag":43,"props":23809,"children":23810},{},[23811,23813,23817],{"type":40,"value":23812},"Créez un guide interne de ",{"type":30,"tag":36,"props":23814,"children":23815},{},[23816],{"type":40,"value":13075},{"type":40,"value":23818}," avec des exemples de bonnes pratiques. Cela permet à tous les développeurs de se référer à des règles claires et d'améliorer progressivement la qualité du code.",{"type":30,"tag":84,"props":23820,"children":23821},{},[],{"type":30,"tag":31,"props":23823,"children":23825},{"id":23824},"faq-sur-le-clean-code",[23826],{"type":30,"tag":36,"props":23827,"children":23828},{},[23829],{"type":40,"value":23830},"FAQ sur le Clean Code",{"type":30,"tag":43,"props":23832,"children":23833},{},[23834,23836,23841,23843,23847],{"type":40,"value":23835},"Voici une section ",{"type":30,"tag":36,"props":23837,"children":23838},{},[23839],{"type":40,"value":23840},"FAQ",{"type":40,"value":23842}," qui répond aux questions les plus courantes sur le ",{"type":30,"tag":36,"props":23844,"children":23845},{},[23846],{"type":40,"value":13075},{"type":40,"value":23848},". Que vous débutiez ou que vous soyez déjà familier avec ces principes, vous trouverez ici des réponses claires à vos interrogations.",{"type":30,"tag":530,"props":23850,"children":23851},{},[23852,23857],{"type":30,"tag":534,"props":23853,"children":23854},{},[23855],{"type":40,"value":23856},"1. Qu'est-ce que le Clean Code exactement ?",{"type":30,"tag":43,"props":23858,"children":23859},{},[23860,23861,23865],{"type":40,"value":143},{"type":30,"tag":36,"props":23862,"children":23863},{},[23864],{"type":40,"value":13075},{"type":40,"value":23866}," est un ensemble de pratiques visant à écrire un code qui soit lisible, maintenable, et compréhensible par d'autres développeurs. Il s'agit d'un code bien structuré, avec des noms explicites, des fonctions courtes, et des responsabilités clairement définies. L'objectif est de rendre le code facile à modifier et à faire évoluer au fil du temps, tout en réduisant les risques d'erreurs.",{"type":30,"tag":530,"props":23868,"children":23869},{},[23870,23875],{"type":30,"tag":534,"props":23871,"children":23872},{},[23873],{"type":40,"value":23874},"2. Pourquoi est-il important d'écrire du Clean Code ?",{"type":30,"tag":43,"props":23876,"children":23877},{},[23878,23880,23884],{"type":40,"value":23879},"Un code propre permet de gagner du temps à long terme. Même si écrire du ",{"type":30,"tag":36,"props":23881,"children":23882},{},[23883],{"type":40,"value":13075},{"type":40,"value":23885}," demande un effort initial, cela réduit considérablement le temps nécessaire pour comprendre, déboguer, et modifier votre code. Cela améliore également la collaboration au sein des équipes de développement, car tout le monde peut lire et comprendre le code rapidement.",{"type":30,"tag":530,"props":23887,"children":23888},{},[23889,23894,23905],{"type":30,"tag":534,"props":23890,"children":23891},{},[23892],{"type":40,"value":23893},"3. Quels sont les principaux principes du Clean Code ?",{"type":30,"tag":43,"props":23895,"children":23896},{},[23897,23899,23903],{"type":40,"value":23898},"Les principes du ",{"type":30,"tag":36,"props":23900,"children":23901},{},[23902],{"type":40,"value":13075},{"type":40,"value":23904}," incluent :",{"type":30,"tag":163,"props":23906,"children":23907},{},[23908,23918,23928,23938,23946],{"type":30,"tag":167,"props":23909,"children":23910},{},[23911,23916],{"type":30,"tag":36,"props":23912,"children":23913},{},[23914],{"type":40,"value":23915},"Noms explicites",{"type":40,"value":23917}," pour les variables, fonctions, et classes",{"type":30,"tag":167,"props":23919,"children":23920},{},[23921,23926],{"type":30,"tag":36,"props":23922,"children":23923},{},[23924],{"type":40,"value":23925},"Fonctions courtes",{"type":40,"value":23927},", qui se concentrent sur une seule responsabilité",{"type":30,"tag":167,"props":23929,"children":23930},{},[23931,23936],{"type":30,"tag":36,"props":23932,"children":23933},{},[23934],{"type":40,"value":23935},"Réduction des duplications",{"type":40,"value":23937}," dans le code",{"type":30,"tag":167,"props":23939,"children":23940},{},[23941],{"type":30,"tag":36,"props":23942,"children":23943},{},[23944],{"type":40,"value":23945},"Gestion claire des erreurs et des exceptions",{"type":30,"tag":167,"props":23947,"children":23948},{},[23949,23954],{"type":30,"tag":36,"props":23950,"children":23951},{},[23952],{"type":40,"value":23953},"Tests unitaires",{"type":40,"value":23955}," pour garantir la robustesse du code",{"type":30,"tag":530,"props":23957,"children":23958},{},[23959,23964],{"type":30,"tag":534,"props":23960,"children":23961},{},[23962],{"type":40,"value":23963},"4. Comment puis-je appliquer le Clean Code sur un projet déjà existant ?",{"type":30,"tag":43,"props":23965,"children":23966},{},[23967,23969,23973],{"type":40,"value":23968},"Si vous travaillez sur un projet existant avec du code désordonné, la meilleure approche est de faire du ",{"type":30,"tag":36,"props":23970,"children":23971},{},[23972],{"type":40,"value":23333},{"type":40,"value":23974},". Cela signifie que vous améliorez le code petit à petit à chaque fois que vous ajoutez de nouvelles fonctionnalités ou que vous corrigez des bugs. Cela permet d'améliorer la qualité sans tout réécrire d'un coup.",{"type":30,"tag":530,"props":23976,"children":23977},{},[23978,23983],{"type":30,"tag":534,"props":23979,"children":23980},{},[23981],{"type":40,"value":23982},"5. Est-il possible de suivre les principes du Clean Code tout en respectant des délais serrés ?",{"type":30,"tag":43,"props":23984,"children":23985},{},[23986,23988,23992],{"type":40,"value":23987},"Oui, absolument ! Suivre les principes du ",{"type":30,"tag":36,"props":23989,"children":23990},{},[23991],{"type":40,"value":13075},{"type":40,"value":23993}," ne ralentit pas votre travail, bien au contraire. En écrivant un code plus lisible et mieux structuré dès le départ, vous réduisez le temps passé à déboguer et à comprendre votre propre code plus tard. Même sous pression, privilégiez des fonctions courtes, des noms explicites, et évitez les solutions temporaires ou \"hacky\".",{"type":30,"tag":530,"props":23995,"children":23996},{},[23997,24002],{"type":30,"tag":534,"props":23998,"children":23999},{},[24000],{"type":40,"value":24001},"6. Comment convaincre mon équipe d'adopter le Clean Code ?",{"type":30,"tag":43,"props":24003,"children":24004},{},[24005,24007,24011],{"type":40,"value":24006},"Commencez par introduire des revues de code régulières où chaque développeur peut proposer des améliorations. Partagez les avantages du ",{"type":30,"tag":36,"props":24008,"children":24009},{},[24010],{"type":40,"value":13075},{"type":40,"value":24012}," en termes de maintenabilité et de productivité à long terme. Vous pouvez aussi créer un guide interne des bonnes pratiques pour que chacun sache à quoi se référer. Enfin, montrez par l'exemple en appliquant ces principes dans votre propre code.",{"type":30,"tag":84,"props":24014,"children":24015},{},[],{"type":30,"tag":116,"props":24017,"children":24019},{"id":24018},"conclusion",[24020],{"type":30,"tag":36,"props":24021,"children":24022},{},[24023],{"type":40,"value":24024},"Conclusion",{"type":30,"tag":43,"props":24026,"children":24027},{},[24028,24029,24033],{"type":40,"value":143},{"type":30,"tag":36,"props":24030,"children":24031},{},[24032],{"type":40,"value":13075},{"type":40,"value":24034}," est bien plus qu'une simple pratique technique. C'est une manière de penser et de coder qui vous permettra d'être plus efficace, de travailler en équipe plus facilement, et de maintenir des projets sur le long terme sans vous noyer dans un code difficile à comprendre. En appliquant ces principes, vous améliorerez non seulement la qualité de votre code, mais aussi votre productivité et votre satisfaction en tant que développeur.",{"type":30,"tag":211,"props":24036,"children":24037},{"cta":19356,"href":639,"title":19357,"type":641},[24038],{"type":30,"tag":43,"props":24039,"children":24040},{},[24041],{"type":40,"value":19363},{"type":30,"tag":6456,"props":24043,"children":24044},{},[24045],{"type":40,"value":6460},{"title":8,"searchDepth":675,"depth":675,"links":24047},[24048,24053,24058,24063,24068,24073],{"id":19419,"depth":675,"text":19425,"children":24049},[24050,24051,24052],{"id":19428,"depth":681,"text":19434},{"id":19473,"depth":681,"text":19479},{"id":19492,"depth":681,"text":19498},{"id":19521,"depth":675,"text":19527,"children":24054},[24055,24056,24057],{"id":19541,"depth":681,"text":19547},{"id":19684,"depth":681,"text":19690},{"id":20532,"depth":681,"text":20538},{"id":20872,"depth":675,"text":20878,"children":24059},[24060,24061,24062],{"id":20898,"depth":681,"text":20904},{"id":21061,"depth":681,"text":21067},{"id":21572,"depth":681,"text":21578},{"id":21960,"depth":675,"text":21966,"children":24064},[24065,24066,24067],{"id":21979,"depth":681,"text":21985},{"id":22416,"depth":681,"text":22422},{"id":22924,"depth":681,"text":22930},{"id":23289,"depth":675,"text":23295,"children":24069},[24070,24071,24072],{"id":23309,"depth":681,"text":23315},{"id":23666,"depth":681,"text":23672},{"id":23741,"depth":681,"text":23747},{"id":23824,"depth":675,"text":23830,"children":24074},[24075],{"id":24018,"depth":681,"text":24024},"content:fr:dette-technique:clean-code-software-craftsmanship-principes-java.md","fr/dette-technique/clean-code-software-craftsmanship-principes-java.md","fr/dette-technique/clean-code-software-craftsmanship-principes-java",{"_path":24080,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":24081,"description":24082,"id":10540,"date":24083,"listed":13,"nocomments":7,"hidden":7,"categories":24084,"tags":24085,"--cover":24086,"readingTime":24087,"body":24092,"_type":709,"_id":29257,"_source":711,"_file":29258,"_stem":29259,"_extension":714},"/fr/dette-technique/comment-ecrire-du-code-evolutif-en-developpement-logiciel","Comment écrire du code évolutif en développement logiciel – Bonnes pratiques et exemples Java","Découvrez comment écrire du code évolutif pour faciliter la maintenance et l'extension de vos projets. Apprenez les bonnes pratiques en développement...","2024-07-01",[15],[17,18],"covers/articles/code-evolutif.jpg",{"text":24088,"minutes":24089,"time":24090,"words":24091},"15 min read",14.68,880800,2936,{"type":27,"children":24093,"toc":29236},[24094,24100,24105,24110,24113,24119,24124,24129,24135,24140,24146,24159,24554,24566,24569,24578,24584,24589,24595,24600,24959,24964,24970,24980,25101,25107,25112,25129,25376,25389,25392,25398,25403,25409,25419,25698,25704,25714,25747,25989,25995,26006,26486,26492,26503,26525,26862,26865,26871,26876,26882,26900,26906,27288,27294,27299,27790,27810,27816,27828,27833,27977,28004,28009,28027,28227,28246,28488,28494,28506,28512,28650,28656,28675,29021,29033,29036,29040,29096,29109,29122,29168,29209,29212,29216,29221,29224,29232],{"type":30,"tag":31,"props":24095,"children":24097},{"id":24096},"comment-écrire-du-code-évolutif-en-développement-logiciel-les-bonnes-pratiques-et-exemples-en-java",[24098],{"type":40,"value":24099},"Comment écrire du code évolutif en développement logiciel : Les bonnes pratiques et exemples en Java",{"type":30,"tag":43,"props":24101,"children":24102},{},[24103],{"type":40,"value":24104},"Si vous avez déjà travaillé sur un projet logiciel à long terme, vous savez à quel point il peut être frustrant de devoir modifier du code qui semble fragile et difficile à comprendre. Vous faites une petite modification, et soudain, tout le reste se brise. Cela arrive lorsque le code n'est pas évolutif, c'est-à-dire qu'il n'a pas été conçu pour être facilement modifiable ou extensible avec le temps.",{"type":30,"tag":43,"props":24106,"children":24107},{},[24108],{"type":40,"value":24109},"J'ai moi-même rencontré ce problème à de nombreuses reprises. Heureusement, il existe des solutions. Dans cet article, vous allez découvrir ce qu'est le code évolutif et comment vous pouvez écrire du code qui non seulement fonctionne aujourd'hui, mais qui restera facile à maintenir et à adapter dans le futur. Je vais vous expliquer les meilleures pratiques à adopter et vous montrer des exemples concrets en Java.",{"type":30,"tag":84,"props":24111,"children":24112},{},[],{"type":30,"tag":31,"props":24114,"children":24116},{"id":24115},"quest-ce-que-le-code-évolutif",[24117],{"type":40,"value":24118},"Qu'est-ce que le code évolutif ?",{"type":30,"tag":43,"props":24120,"children":24121},{},[24122],{"type":40,"value":24123},"Le code évolutif, c'est du code qui peut être facilement modifié et amélioré sans introduire de nouveaux bugs ou casser des fonctionnalités existantes. Cela signifie que vous pouvez ajouter de nouvelles fonctionnalités, corriger des erreurs ou adapter le code à des exigences changeantes sans devoir tout réécrire.",{"type":30,"tag":43,"props":24125,"children":24126},{},[24127],{"type":40,"value":24128},"Imaginez que vous construisez une maison. Si elle est bien conçue, vous pourrez y ajouter des étages, changer la disposition des pièces ou installer de nouvelles fenêtres sans avoir à démolir toute la structure. C'est exactement ce que vous voulez avec votre code : une base solide et flexible, capable de s'adapter aux changements.",{"type":30,"tag":2339,"props":24130,"children":24132},{"id":24131},"pourquoi-est-ce-important",[24133],{"type":40,"value":24134},"Pourquoi est-ce important ?",{"type":30,"tag":43,"props":24136,"children":24137},{},[24138],{"type":40,"value":24139},"Un code non évolutif devient rapidement un cauchemar à maintenir. Chaque modification devient risquée, car elle peut affecter des parties du programme que vous n'aviez même pas prévues. Cela augmente le coût en temps et en efforts pour ajouter des fonctionnalités ou corriger des bugs. En revanche, avec un code évolutif, vous économisez du temps à long terme et vous réduisez les risques d'introduire de nouvelles erreurs.",{"type":30,"tag":2339,"props":24141,"children":24143},{"id":24142},"exemples-de-code-non-évolutif",[24144],{"type":40,"value":24145},"Exemples de code non évolutif",{"type":30,"tag":43,"props":24147,"children":24148},{},[24149,24151,24157],{"type":40,"value":24150},"Prenons un exemple concret en Java. Imaginez que vous ayez une classe ",{"type":30,"tag":1042,"props":24152,"children":24154},{"className":24153},[],[24155],{"type":40,"value":24156},"Employee",{"type":40,"value":24158}," qui gère non seulement les informations de l'employé, mais aussi la génération de rapports, la gestion des salaires, et d'autres fonctionnalités. Si vous devez modifier une seule de ces fonctionnalités, vous risquez d'affecter tout le reste de la classe.",{"type":30,"tag":1035,"props":24160,"children":24162},{"className":1039,"code":24161,"language":1038,"meta":8,"style":8},"public class Employee {\n    private String name;\n    private double salary;\n\n    public Employee(String name, double salary) {\n        this.name = name;\n        this.salary = salary;\n    }\n\n    public void generateReport() {\n        // Code pour générer un rapport\n    }\n\n    public void processSalary() {\n        // Code pour calculer le salaire\n    }\n\n    public void updateDetails(String newName, double newSalary) {\n        this.name = newName;\n        this.salary = newSalary;\n    }\n}\n",[24163],{"type":30,"tag":1042,"props":24164,"children":24165},{"__ignoreMap":8},[24166,24186,24205,24225,24232,24275,24302,24330,24337,24344,24368,24376,24383,24390,24414,24422,24429,24436,24486,24513,24540,24547],{"type":30,"tag":1046,"props":24167,"children":24168},{"class":1048,"line":1049},[24169,24173,24177,24182],{"type":30,"tag":1046,"props":24170,"children":24171},{"style":1053},[24172],{"type":40,"value":1056},{"type":30,"tag":1046,"props":24174,"children":24175},{"style":1053},[24176],{"type":40,"value":1061},{"type":30,"tag":1046,"props":24178,"children":24179},{"style":1064},[24180],{"type":40,"value":24181}," Employee",{"type":30,"tag":1046,"props":24183,"children":24184},{"style":1070},[24185],{"type":40,"value":1073},{"type":30,"tag":1046,"props":24187,"children":24188},{"class":1048,"line":675},[24189,24193,24197,24201],{"type":30,"tag":1046,"props":24190,"children":24191},{"style":1053},[24192],{"type":40,"value":1081},{"type":30,"tag":1046,"props":24194,"children":24195},{"style":1084},[24196],{"type":40,"value":2067},{"type":30,"tag":1046,"props":24198,"children":24199},{"style":1105},[24200],{"type":40,"value":10290},{"type":30,"tag":1046,"props":24202,"children":24203},{"style":1070},[24204],{"type":40,"value":1113},{"type":30,"tag":1046,"props":24206,"children":24207},{"class":1048,"line":681},[24208,24212,24216,24221],{"type":30,"tag":1046,"props":24209,"children":24210},{"style":1053},[24211],{"type":40,"value":1081},{"type":30,"tag":1046,"props":24213,"children":24214},{"style":1053},[24215],{"type":40,"value":1310},{"type":30,"tag":1046,"props":24217,"children":24218},{"style":1105},[24219],{"type":40,"value":24220}," salary",{"type":30,"tag":1046,"props":24222,"children":24223},{"style":1070},[24224],{"type":40,"value":1113},{"type":30,"tag":1046,"props":24226,"children":24227},{"class":1048,"line":1124},[24228],{"type":30,"tag":1046,"props":24229,"children":24230},{"emptyLinePlaceholder":13},[24231],{"type":40,"value":1121},{"type":30,"tag":1046,"props":24233,"children":24234},{"class":1048,"line":1168},[24235,24239,24243,24247,24251,24255,24259,24263,24267,24271],{"type":30,"tag":1046,"props":24236,"children":24237},{"style":1053},[24238],{"type":40,"value":1130},{"type":30,"tag":1046,"props":24240,"children":24241},{"style":1138},[24242],{"type":40,"value":24181},{"type":30,"tag":1046,"props":24244,"children":24245},{"style":1070},[24246],{"type":40,"value":1146},{"type":30,"tag":1046,"props":24248,"children":24249},{"style":1084},[24250],{"type":40,"value":2882},{"type":30,"tag":1046,"props":24252,"children":24253},{"style":1153},[24254],{"type":40,"value":10290},{"type":30,"tag":1046,"props":24256,"children":24257},{"style":1070},[24258],{"type":40,"value":2891},{"type":30,"tag":1046,"props":24260,"children":24261},{"style":1053},[24262],{"type":40,"value":1310},{"type":30,"tag":1046,"props":24264,"children":24265},{"style":1153},[24266],{"type":40,"value":24220},{"type":30,"tag":1046,"props":24268,"children":24269},{"style":1070},[24270],{"type":40,"value":1161},{"type":30,"tag":1046,"props":24272,"children":24273},{"style":1070},[24274],{"type":40,"value":1073},{"type":30,"tag":1046,"props":24276,"children":24277},{"class":1048,"line":1201},[24278,24282,24286,24290,24294,24298],{"type":30,"tag":1046,"props":24279,"children":24280},{"style":1780},[24281],{"type":40,"value":1783},{"type":30,"tag":1046,"props":24283,"children":24284},{"style":1070},[24285],{"type":40,"value":1179},{"type":30,"tag":1046,"props":24287,"children":24288},{"style":1105},[24289],{"type":40,"value":10406},{"type":30,"tag":1046,"props":24291,"children":24292},{"style":1795},[24293],{"type":40,"value":1798},{"type":30,"tag":1046,"props":24295,"children":24296},{"style":1105},[24297],{"type":40,"value":10290},{"type":30,"tag":1046,"props":24299,"children":24300},{"style":1070},[24301],{"type":40,"value":1113},{"type":30,"tag":1046,"props":24303,"children":24304},{"class":1048,"line":1210},[24305,24309,24313,24318,24322,24326],{"type":30,"tag":1046,"props":24306,"children":24307},{"style":1780},[24308],{"type":40,"value":1783},{"type":30,"tag":1046,"props":24310,"children":24311},{"style":1070},[24312],{"type":40,"value":1179},{"type":30,"tag":1046,"props":24314,"children":24315},{"style":1105},[24316],{"type":40,"value":24317},"salary ",{"type":30,"tag":1046,"props":24319,"children":24320},{"style":1795},[24321],{"type":40,"value":1798},{"type":30,"tag":1046,"props":24323,"children":24324},{"style":1105},[24325],{"type":40,"value":24220},{"type":30,"tag":1046,"props":24327,"children":24328},{"style":1070},[24329],{"type":40,"value":1113},{"type":30,"tag":1046,"props":24331,"children":24332},{"class":1048,"line":1218},[24333],{"type":30,"tag":1046,"props":24334,"children":24335},{"style":1070},[24336],{"type":40,"value":1207},{"type":30,"tag":1046,"props":24338,"children":24339},{"class":1048,"line":1255},[24340],{"type":30,"tag":1046,"props":24341,"children":24342},{"emptyLinePlaceholder":13},[24343],{"type":40,"value":1121},{"type":30,"tag":1046,"props":24345,"children":24346},{"class":1048,"line":1284},[24347,24351,24355,24360,24364],{"type":30,"tag":1046,"props":24348,"children":24349},{"style":1053},[24350],{"type":40,"value":1130},{"type":30,"tag":1046,"props":24352,"children":24353},{"style":1053},[24354],{"type":40,"value":1135},{"type":30,"tag":1046,"props":24356,"children":24357},{"style":1138},[24358],{"type":40,"value":24359}," generateReport",{"type":30,"tag":1046,"props":24361,"children":24362},{"style":1070},[24363],{"type":40,"value":1320},{"type":30,"tag":1046,"props":24365,"children":24366},{"style":1070},[24367],{"type":40,"value":1073},{"type":30,"tag":1046,"props":24369,"children":24370},{"class":1048,"line":1292},[24371],{"type":30,"tag":1046,"props":24372,"children":24373},{"style":3961},[24374],{"type":40,"value":24375},"        // Code pour générer un rapport\n",{"type":30,"tag":1046,"props":24377,"children":24378},{"class":1048,"line":1300},[24379],{"type":30,"tag":1046,"props":24380,"children":24381},{"style":1070},[24382],{"type":40,"value":1207},{"type":30,"tag":1046,"props":24384,"children":24385},{"class":1048,"line":1327},[24386],{"type":30,"tag":1046,"props":24387,"children":24388},{"emptyLinePlaceholder":13},[24389],{"type":40,"value":1121},{"type":30,"tag":1046,"props":24391,"children":24392},{"class":1048,"line":1354},[24393,24397,24401,24406,24410],{"type":30,"tag":1046,"props":24394,"children":24395},{"style":1053},[24396],{"type":40,"value":1130},{"type":30,"tag":1046,"props":24398,"children":24399},{"style":1053},[24400],{"type":40,"value":1135},{"type":30,"tag":1046,"props":24402,"children":24403},{"style":1138},[24404],{"type":40,"value":24405}," processSalary",{"type":30,"tag":1046,"props":24407,"children":24408},{"style":1070},[24409],{"type":40,"value":1320},{"type":30,"tag":1046,"props":24411,"children":24412},{"style":1070},[24413],{"type":40,"value":1073},{"type":30,"tag":1046,"props":24415,"children":24416},{"class":1048,"line":1391},[24417],{"type":30,"tag":1046,"props":24418,"children":24419},{"style":3961},[24420],{"type":40,"value":24421},"        // Code pour calculer le salaire\n",{"type":30,"tag":1046,"props":24423,"children":24424},{"class":1048,"line":1409},[24425],{"type":30,"tag":1046,"props":24426,"children":24427},{"style":1070},[24428],{"type":40,"value":1207},{"type":30,"tag":1046,"props":24430,"children":24431},{"class":1048,"line":1417},[24432],{"type":30,"tag":1046,"props":24433,"children":24434},{"emptyLinePlaceholder":13},[24435],{"type":40,"value":1121},{"type":30,"tag":1046,"props":24437,"children":24438},{"class":1048,"line":2023},[24439,24443,24447,24452,24456,24460,24465,24469,24473,24478,24482],{"type":30,"tag":1046,"props":24440,"children":24441},{"style":1053},[24442],{"type":40,"value":1130},{"type":30,"tag":1046,"props":24444,"children":24445},{"style":1053},[24446],{"type":40,"value":1135},{"type":30,"tag":1046,"props":24448,"children":24449},{"style":1138},[24450],{"type":40,"value":24451}," updateDetails",{"type":30,"tag":1046,"props":24453,"children":24454},{"style":1070},[24455],{"type":40,"value":1146},{"type":30,"tag":1046,"props":24457,"children":24458},{"style":1084},[24459],{"type":40,"value":2882},{"type":30,"tag":1046,"props":24461,"children":24462},{"style":1153},[24463],{"type":40,"value":24464}," newName",{"type":30,"tag":1046,"props":24466,"children":24467},{"style":1070},[24468],{"type":40,"value":2891},{"type":30,"tag":1046,"props":24470,"children":24471},{"style":1053},[24472],{"type":40,"value":1310},{"type":30,"tag":1046,"props":24474,"children":24475},{"style":1153},[24476],{"type":40,"value":24477}," newSalary",{"type":30,"tag":1046,"props":24479,"children":24480},{"style":1070},[24481],{"type":40,"value":1161},{"type":30,"tag":1046,"props":24483,"children":24484},{"style":1070},[24485],{"type":40,"value":1073},{"type":30,"tag":1046,"props":24487,"children":24488},{"class":1048,"line":2083},[24489,24493,24497,24501,24505,24509],{"type":30,"tag":1046,"props":24490,"children":24491},{"style":1780},[24492],{"type":40,"value":1783},{"type":30,"tag":1046,"props":24494,"children":24495},{"style":1070},[24496],{"type":40,"value":1179},{"type":30,"tag":1046,"props":24498,"children":24499},{"style":1105},[24500],{"type":40,"value":10406},{"type":30,"tag":1046,"props":24502,"children":24503},{"style":1795},[24504],{"type":40,"value":1798},{"type":30,"tag":1046,"props":24506,"children":24507},{"style":1105},[24508],{"type":40,"value":24464},{"type":30,"tag":1046,"props":24510,"children":24511},{"style":1070},[24512],{"type":40,"value":1113},{"type":30,"tag":1046,"props":24514,"children":24515},{"class":1048,"line":2126},[24516,24520,24524,24528,24532,24536],{"type":30,"tag":1046,"props":24517,"children":24518},{"style":1780},[24519],{"type":40,"value":1783},{"type":30,"tag":1046,"props":24521,"children":24522},{"style":1070},[24523],{"type":40,"value":1179},{"type":30,"tag":1046,"props":24525,"children":24526},{"style":1105},[24527],{"type":40,"value":24317},{"type":30,"tag":1046,"props":24529,"children":24530},{"style":1795},[24531],{"type":40,"value":1798},{"type":30,"tag":1046,"props":24533,"children":24534},{"style":1105},[24535],{"type":40,"value":24477},{"type":30,"tag":1046,"props":24537,"children":24538},{"style":1070},[24539],{"type":40,"value":1113},{"type":30,"tag":1046,"props":24541,"children":24542},{"class":1048,"line":2159},[24543],{"type":30,"tag":1046,"props":24544,"children":24545},{"style":1070},[24546],{"type":40,"value":1207},{"type":30,"tag":1046,"props":24548,"children":24549},{"class":1048,"line":2167},[24550],{"type":30,"tag":1046,"props":24551,"children":24552},{"style":1070},[24553],{"type":40,"value":1423},{"type":30,"tag":43,"props":24555,"children":24556},{},[24557,24559,24564],{"type":40,"value":24558},"Dans cet exemple, la classe ",{"type":30,"tag":1042,"props":24560,"children":24562},{"className":24561},[],[24563],{"type":40,"value":24156},{"type":40,"value":24565}," fait trop de choses à la fois, ce qui la rend difficile à modifier sans risquer de casser quelque chose. Si vous devez ajuster la méthode de calcul du salaire, vous devez être très prudent pour ne pas impacter la génération de rapports ou la mise à jour des informations de l'employé. Ce type de conception est typique d'un code non évolutif.",{"type":30,"tag":84,"props":24567,"children":24568},{},[],{"type":30,"tag":211,"props":24570,"children":24572},{"cta":213,"href":214,"title":24571,"type":216},"Votre code est devenu un frein à l'évolution du produit ?",[24573],{"type":30,"tag":43,"props":24574,"children":24575},{},[24576],{"type":40,"value":24577},"La moindre modification menace la stabilité du système, les développeurs passent leur temps à gérer la fragilité plutôt qu'à livrer des features, et le time-to-market ne cesse de s'allonger. Réservons 30 minutes pour identifier les blocages d'évolutivité de votre architecture et définir les premières actions.",{"type":30,"tag":31,"props":24579,"children":24581},{"id":24580},"principes-de-base-pour-écrire-du-code-évolutif",[24582],{"type":40,"value":24583},"Principes de base pour écrire du code évolutif",{"type":30,"tag":43,"props":24585,"children":24586},{},[24587],{"type":40,"value":24588},"Écrire du code évolutif repose sur quelques principes essentiels qui permettent de maintenir une structure claire et flexible. Voici les concepts de base que vous devez garder à l’esprit pour garantir que votre code reste facile à modifier et à étendre.",{"type":30,"tag":116,"props":24590,"children":24592},{"id":24591},"_1-la-modularité",[24593],{"type":40,"value":24594},"1. La modularité",{"type":30,"tag":43,"props":24596,"children":24597},{},[24598],{"type":40,"value":24599},"La modularité consiste à diviser votre code en petits morceaux indépendants qui accomplissent chacun une tâche bien définie. En séparant vos fonctionnalités dans des modules distincts, vous pouvez travailler sur une partie du programme sans risquer de casser les autres. En Java, cela se traduit par la création de classes et de méthodes spécifiques qui remplissent des fonctions uniques.",{"type":30,"tag":1035,"props":24601,"children":24603},{"className":1039,"code":24602,"language":1038,"meta":8,"style":8},"// Classe pour gérer les informations de l'employé\npublic class Employee {\n    private String name;\n    private double salary;\n\n    public Employee(String name, double salary) {\n        this.name = name;\n        this.salary = salary;\n    }\n}\n\npublic class ReportGenerator {\n    public void generate(Employee employee) {\n        // Code pour générer un rapport pour cet employé\n    }\n}\n\npublic class SalaryProcessor {\n    public void process(Employee employee) {\n        // Code pour calculer le salaire\n    }\n}\n",[24604],{"type":30,"tag":1042,"props":24605,"children":24606},{"__ignoreMap":8},[24607,24615,24634,24653,24672,24679,24722,24749,24776,24783,24790,24797,24817,24853,24861,24868,24875,24882,24902,24938,24945,24952],{"type":30,"tag":1046,"props":24608,"children":24609},{"class":1048,"line":1049},[24610],{"type":30,"tag":1046,"props":24611,"children":24612},{"style":3961},[24613],{"type":40,"value":24614},"// Classe pour gérer les informations de l'employé\n",{"type":30,"tag":1046,"props":24616,"children":24617},{"class":1048,"line":675},[24618,24622,24626,24630],{"type":30,"tag":1046,"props":24619,"children":24620},{"style":1053},[24621],{"type":40,"value":1056},{"type":30,"tag":1046,"props":24623,"children":24624},{"style":1053},[24625],{"type":40,"value":1061},{"type":30,"tag":1046,"props":24627,"children":24628},{"style":1064},[24629],{"type":40,"value":24181},{"type":30,"tag":1046,"props":24631,"children":24632},{"style":1070},[24633],{"type":40,"value":1073},{"type":30,"tag":1046,"props":24635,"children":24636},{"class":1048,"line":681},[24637,24641,24645,24649],{"type":30,"tag":1046,"props":24638,"children":24639},{"style":1053},[24640],{"type":40,"value":1081},{"type":30,"tag":1046,"props":24642,"children":24643},{"style":1084},[24644],{"type":40,"value":2067},{"type":30,"tag":1046,"props":24646,"children":24647},{"style":1105},[24648],{"type":40,"value":10290},{"type":30,"tag":1046,"props":24650,"children":24651},{"style":1070},[24652],{"type":40,"value":1113},{"type":30,"tag":1046,"props":24654,"children":24655},{"class":1048,"line":1124},[24656,24660,24664,24668],{"type":30,"tag":1046,"props":24657,"children":24658},{"style":1053},[24659],{"type":40,"value":1081},{"type":30,"tag":1046,"props":24661,"children":24662},{"style":1053},[24663],{"type":40,"value":1310},{"type":30,"tag":1046,"props":24665,"children":24666},{"style":1105},[24667],{"type":40,"value":24220},{"type":30,"tag":1046,"props":24669,"children":24670},{"style":1070},[24671],{"type":40,"value":1113},{"type":30,"tag":1046,"props":24673,"children":24674},{"class":1048,"line":1168},[24675],{"type":30,"tag":1046,"props":24676,"children":24677},{"emptyLinePlaceholder":13},[24678],{"type":40,"value":1121},{"type":30,"tag":1046,"props":24680,"children":24681},{"class":1048,"line":1201},[24682,24686,24690,24694,24698,24702,24706,24710,24714,24718],{"type":30,"tag":1046,"props":24683,"children":24684},{"style":1053},[24685],{"type":40,"value":1130},{"type":30,"tag":1046,"props":24687,"children":24688},{"style":1138},[24689],{"type":40,"value":24181},{"type":30,"tag":1046,"props":24691,"children":24692},{"style":1070},[24693],{"type":40,"value":1146},{"type":30,"tag":1046,"props":24695,"children":24696},{"style":1084},[24697],{"type":40,"value":2882},{"type":30,"tag":1046,"props":24699,"children":24700},{"style":1153},[24701],{"type":40,"value":10290},{"type":30,"tag":1046,"props":24703,"children":24704},{"style":1070},[24705],{"type":40,"value":2891},{"type":30,"tag":1046,"props":24707,"children":24708},{"style":1053},[24709],{"type":40,"value":1310},{"type":30,"tag":1046,"props":24711,"children":24712},{"style":1153},[24713],{"type":40,"value":24220},{"type":30,"tag":1046,"props":24715,"children":24716},{"style":1070},[24717],{"type":40,"value":1161},{"type":30,"tag":1046,"props":24719,"children":24720},{"style":1070},[24721],{"type":40,"value":1073},{"type":30,"tag":1046,"props":24723,"children":24724},{"class":1048,"line":1210},[24725,24729,24733,24737,24741,24745],{"type":30,"tag":1046,"props":24726,"children":24727},{"style":1780},[24728],{"type":40,"value":1783},{"type":30,"tag":1046,"props":24730,"children":24731},{"style":1070},[24732],{"type":40,"value":1179},{"type":30,"tag":1046,"props":24734,"children":24735},{"style":1105},[24736],{"type":40,"value":10406},{"type":30,"tag":1046,"props":24738,"children":24739},{"style":1795},[24740],{"type":40,"value":1798},{"type":30,"tag":1046,"props":24742,"children":24743},{"style":1105},[24744],{"type":40,"value":10290},{"type":30,"tag":1046,"props":24746,"children":24747},{"style":1070},[24748],{"type":40,"value":1113},{"type":30,"tag":1046,"props":24750,"children":24751},{"class":1048,"line":1218},[24752,24756,24760,24764,24768,24772],{"type":30,"tag":1046,"props":24753,"children":24754},{"style":1780},[24755],{"type":40,"value":1783},{"type":30,"tag":1046,"props":24757,"children":24758},{"style":1070},[24759],{"type":40,"value":1179},{"type":30,"tag":1046,"props":24761,"children":24762},{"style":1105},[24763],{"type":40,"value":24317},{"type":30,"tag":1046,"props":24765,"children":24766},{"style":1795},[24767],{"type":40,"value":1798},{"type":30,"tag":1046,"props":24769,"children":24770},{"style":1105},[24771],{"type":40,"value":24220},{"type":30,"tag":1046,"props":24773,"children":24774},{"style":1070},[24775],{"type":40,"value":1113},{"type":30,"tag":1046,"props":24777,"children":24778},{"class":1048,"line":1255},[24779],{"type":30,"tag":1046,"props":24780,"children":24781},{"style":1070},[24782],{"type":40,"value":1207},{"type":30,"tag":1046,"props":24784,"children":24785},{"class":1048,"line":1284},[24786],{"type":30,"tag":1046,"props":24787,"children":24788},{"style":1070},[24789],{"type":40,"value":1423},{"type":30,"tag":1046,"props":24791,"children":24792},{"class":1048,"line":1292},[24793],{"type":30,"tag":1046,"props":24794,"children":24795},{"emptyLinePlaceholder":13},[24796],{"type":40,"value":1121},{"type":30,"tag":1046,"props":24798,"children":24799},{"class":1048,"line":1300},[24800,24804,24808,24813],{"type":30,"tag":1046,"props":24801,"children":24802},{"style":1053},[24803],{"type":40,"value":1056},{"type":30,"tag":1046,"props":24805,"children":24806},{"style":1053},[24807],{"type":40,"value":1061},{"type":30,"tag":1046,"props":24809,"children":24810},{"style":1064},[24811],{"type":40,"value":24812}," ReportGenerator",{"type":30,"tag":1046,"props":24814,"children":24815},{"style":1070},[24816],{"type":40,"value":1073},{"type":30,"tag":1046,"props":24818,"children":24819},{"class":1048,"line":1327},[24820,24824,24828,24832,24836,24840,24845,24849],{"type":30,"tag":1046,"props":24821,"children":24822},{"style":1053},[24823],{"type":40,"value":1130},{"type":30,"tag":1046,"props":24825,"children":24826},{"style":1053},[24827],{"type":40,"value":1135},{"type":30,"tag":1046,"props":24829,"children":24830},{"style":1138},[24831],{"type":40,"value":10886},{"type":30,"tag":1046,"props":24833,"children":24834},{"style":1070},[24835],{"type":40,"value":1146},{"type":30,"tag":1046,"props":24837,"children":24838},{"style":1084},[24839],{"type":40,"value":24156},{"type":30,"tag":1046,"props":24841,"children":24842},{"style":1153},[24843],{"type":40,"value":24844}," employee",{"type":30,"tag":1046,"props":24846,"children":24847},{"style":1070},[24848],{"type":40,"value":1161},{"type":30,"tag":1046,"props":24850,"children":24851},{"style":1070},[24852],{"type":40,"value":1073},{"type":30,"tag":1046,"props":24854,"children":24855},{"class":1048,"line":1354},[24856],{"type":30,"tag":1046,"props":24857,"children":24858},{"style":3961},[24859],{"type":40,"value":24860},"        // Code pour générer un rapport pour cet employé\n",{"type":30,"tag":1046,"props":24862,"children":24863},{"class":1048,"line":1391},[24864],{"type":30,"tag":1046,"props":24865,"children":24866},{"style":1070},[24867],{"type":40,"value":1207},{"type":30,"tag":1046,"props":24869,"children":24870},{"class":1048,"line":1409},[24871],{"type":30,"tag":1046,"props":24872,"children":24873},{"style":1070},[24874],{"type":40,"value":1423},{"type":30,"tag":1046,"props":24876,"children":24877},{"class":1048,"line":1417},[24878],{"type":30,"tag":1046,"props":24879,"children":24880},{"emptyLinePlaceholder":13},[24881],{"type":40,"value":1121},{"type":30,"tag":1046,"props":24883,"children":24884},{"class":1048,"line":2023},[24885,24889,24893,24898],{"type":30,"tag":1046,"props":24886,"children":24887},{"style":1053},[24888],{"type":40,"value":1056},{"type":30,"tag":1046,"props":24890,"children":24891},{"style":1053},[24892],{"type":40,"value":1061},{"type":30,"tag":1046,"props":24894,"children":24895},{"style":1064},[24896],{"type":40,"value":24897}," SalaryProcessor",{"type":30,"tag":1046,"props":24899,"children":24900},{"style":1070},[24901],{"type":40,"value":1073},{"type":30,"tag":1046,"props":24903,"children":24904},{"class":1048,"line":2083},[24905,24909,24913,24918,24922,24926,24930,24934],{"type":30,"tag":1046,"props":24906,"children":24907},{"style":1053},[24908],{"type":40,"value":1130},{"type":30,"tag":1046,"props":24910,"children":24911},{"style":1053},[24912],{"type":40,"value":1135},{"type":30,"tag":1046,"props":24914,"children":24915},{"style":1138},[24916],{"type":40,"value":24917}," process",{"type":30,"tag":1046,"props":24919,"children":24920},{"style":1070},[24921],{"type":40,"value":1146},{"type":30,"tag":1046,"props":24923,"children":24924},{"style":1084},[24925],{"type":40,"value":24156},{"type":30,"tag":1046,"props":24927,"children":24928},{"style":1153},[24929],{"type":40,"value":24844},{"type":30,"tag":1046,"props":24931,"children":24932},{"style":1070},[24933],{"type":40,"value":1161},{"type":30,"tag":1046,"props":24935,"children":24936},{"style":1070},[24937],{"type":40,"value":1073},{"type":30,"tag":1046,"props":24939,"children":24940},{"class":1048,"line":2126},[24941],{"type":30,"tag":1046,"props":24942,"children":24943},{"style":3961},[24944],{"type":40,"value":24421},{"type":30,"tag":1046,"props":24946,"children":24947},{"class":1048,"line":2159},[24948],{"type":30,"tag":1046,"props":24949,"children":24950},{"style":1070},[24951],{"type":40,"value":1207},{"type":30,"tag":1046,"props":24953,"children":24954},{"class":1048,"line":2167},[24955],{"type":30,"tag":1046,"props":24956,"children":24957},{"style":1070},[24958],{"type":40,"value":1423},{"type":30,"tag":43,"props":24960,"children":24961},{},[24962],{"type":40,"value":24963},"Dans cet exemple, chaque classe a une responsabilité claire et distincte, ce qui facilite les modifications et les extensions futures.",{"type":30,"tag":116,"props":24965,"children":24967},{"id":24966},"_2-le-principe-solid",[24968],{"type":40,"value":24969},"2. Le principe SOLID",{"type":30,"tag":43,"props":24971,"children":24972},{},[24973,24974,24978],{"type":40,"value":13695},{"type":30,"tag":75,"props":24975,"children":24976},{"href":12830},[24977],{"type":40,"value":12833},{"type":40,"value":24979}," sont cinq règles de base pour la conception de logiciels évolutifs et maintenables, formalisés notamment par Robert C. Martin dans \"Clean Code\" et approfondis par Martin Fowler dans \"Refactoring\". Voici une rapide explication de chacun de ces principes :",{"type":30,"tag":163,"props":24981,"children":24982},{},[24983,25006,25041,25062,25083],{"type":30,"tag":167,"props":24984,"children":24985},{},[24986,24991,24993,24998,25000,25004],{"type":30,"tag":36,"props":24987,"children":24988},{},[24989],{"type":40,"value":24990},"S",{"type":40,"value":24992}," : ",{"type":30,"tag":36,"props":24994,"children":24995},{},[24996],{"type":40,"value":24997},"Single Responsibility Principle",{"type":40,"value":24999}," (Principe de responsabilité unique)",{"type":30,"tag":25001,"props":25002,"children":25003},"br",{},[],{"type":40,"value":25005},"\nUne classe ne doit avoir qu'une seule raison de changer, c'est-à-dire qu'elle ne doit être responsable que d'une seule fonctionnalité ou tâche.",{"type":30,"tag":167,"props":25007,"children":25008},{},[25009,25014,25015,25020,25022,25025,25027,25032,25034,25039],{"type":30,"tag":36,"props":25010,"children":25011},{},[25012],{"type":40,"value":25013},"O",{"type":40,"value":24992},{"type":30,"tag":36,"props":25016,"children":25017},{},[25018],{"type":40,"value":25019},"Open/Closed Principle",{"type":40,"value":25021}," (Principe ouvert/fermé)",{"type":30,"tag":25001,"props":25023,"children":25024},{},[],{"type":40,"value":25026},"\nVotre code doit être ",{"type":30,"tag":36,"props":25028,"children":25029},{},[25030],{"type":40,"value":25031},"ouvert",{"type":40,"value":25033}," à l’extension mais ",{"type":30,"tag":36,"props":25035,"children":25036},{},[25037],{"type":40,"value":25038},"fermé",{"type":40,"value":25040}," à la modification. Cela signifie que vous devez pouvoir ajouter de nouvelles fonctionnalités sans modifier le code existant.",{"type":30,"tag":167,"props":25042,"children":25043},{},[25044,25049,25050,25055,25057,25060],{"type":30,"tag":36,"props":25045,"children":25046},{},[25047],{"type":40,"value":25048},"L",{"type":40,"value":24992},{"type":30,"tag":36,"props":25051,"children":25052},{},[25053],{"type":40,"value":25054},"Liskov Substitution Principle",{"type":40,"value":25056}," (Principe de substitution de Liskov)",{"type":30,"tag":25001,"props":25058,"children":25059},{},[],{"type":40,"value":25061},"\nLes objets d'une sous-classe doivent pouvoir remplacer les objets de leur classe parente sans altérer le comportement du programme.",{"type":30,"tag":167,"props":25063,"children":25064},{},[25065,25070,25071,25076,25078,25081],{"type":30,"tag":36,"props":25066,"children":25067},{},[25068],{"type":40,"value":25069},"I",{"type":40,"value":24992},{"type":30,"tag":36,"props":25072,"children":25073},{},[25074],{"type":40,"value":25075},"Interface Segregation Principle",{"type":40,"value":25077}," (Principe de ségrégation des interfaces)",{"type":30,"tag":25001,"props":25079,"children":25080},{},[],{"type":40,"value":25082},"\nIl est préférable de créer plusieurs interfaces spécifiques plutôt qu'une interface générale qui contient trop de méthodes inutiles pour certaines classes.",{"type":30,"tag":167,"props":25084,"children":25085},{},[25086,25091,25092,25099],{"type":30,"tag":36,"props":25087,"children":25088},{},[25089],{"type":40,"value":25090},"D",{"type":40,"value":24992},{"type":30,"tag":36,"props":25093,"children":25094},{},[25095],{"type":30,"tag":75,"props":25096,"children":25097},{"href":18825},[25098],{"type":40,"value":18828},{"type":40,"value":25100}," (Principe d'inversion des dépendances)\nLes modules de haut niveau ne doivent pas dépendre des modules de bas niveau. Les deux devraient dépendre d'abstractions. En d'autres termes, utilisez des interfaces pour réduire le couplage entre les classes.",{"type":30,"tag":2339,"props":25102,"children":25104},{"id":25103},"_3-lencapsulation-et-labstraction",[25105],{"type":40,"value":25106},"3. L'encapsulation et l'abstraction",{"type":30,"tag":43,"props":25108,"children":25109},{},[25110],{"type":40,"value":25111},"L’encapsulation consiste à protéger les données en les rendant inaccessibles directement depuis l’extérieur d’une classe. Vous exposez uniquement ce qui est nécessaire via des méthodes publiques. Cela permet de contrôler comment les autres parties de votre programme interagissent avec cette classe, ce qui la rend plus facile à modifier sans impacter tout le programme.",{"type":30,"tag":43,"props":25113,"children":25114},{},[25115,25117,25121,25123,25127],{"type":40,"value":25116},"L'abstraction, quant à elle, consiste à simplifier la complexité en cachant les détails d'implémentation. En utilisant des interfaces et des classes abstraites, vous pouvez vous concentrer sur ",{"type":30,"tag":36,"props":25118,"children":25119},{},[25120],{"type":40,"value":21034},{"type":40,"value":25122}," une classe fait, sans vous soucier de ",{"type":30,"tag":36,"props":25124,"children":25125},{},[25126],{"type":40,"value":1493},{"type":40,"value":25128}," elle le fait.",{"type":30,"tag":1035,"props":25130,"children":25132},{"className":1039,"code":25131,"language":1038,"meta":8,"style":8},"public interface PaymentMethod {\n    void pay(double amount);\n}\n\npublic class CreditCardPayment implements PaymentMethod {\n    public void pay(double amount) {\n        // Implémentation du paiement par carte de crédit\n    }\n}\n\npublic class PayPalPayment implements PaymentMethod {\n    public void pay(double amount) {\n        // Implémentation du paiement via PayPal\n    }\n}\n",[25133],{"type":30,"tag":1042,"props":25134,"children":25135},{"__ignoreMap":8},[25136,25156,25185,25192,25199,25227,25262,25270,25277,25284,25291,25319,25354,25362,25369],{"type":30,"tag":1046,"props":25137,"children":25138},{"class":1048,"line":1049},[25139,25143,25147,25152],{"type":30,"tag":1046,"props":25140,"children":25141},{"style":1053},[25142],{"type":40,"value":1056},{"type":30,"tag":1046,"props":25144,"children":25145},{"style":1053},[25146],{"type":40,"value":4852},{"type":30,"tag":1046,"props":25148,"children":25149},{"style":1064},[25150],{"type":40,"value":25151}," PaymentMethod",{"type":30,"tag":1046,"props":25153,"children":25154},{"style":1070},[25155],{"type":40,"value":1073},{"type":30,"tag":1046,"props":25157,"children":25158},{"class":1048,"line":675},[25159,25163,25168,25172,25176,25181],{"type":30,"tag":1046,"props":25160,"children":25161},{"style":1053},[25162],{"type":40,"value":4908},{"type":30,"tag":1046,"props":25164,"children":25165},{"style":1138},[25166],{"type":40,"value":25167}," pay",{"type":30,"tag":1046,"props":25169,"children":25170},{"style":1070},[25171],{"type":40,"value":1146},{"type":30,"tag":1046,"props":25173,"children":25174},{"style":1053},[25175],{"type":40,"value":20944},{"type":30,"tag":1046,"props":25177,"children":25178},{"style":1153},[25179],{"type":40,"value":25180}," amount",{"type":30,"tag":1046,"props":25182,"children":25183},{"style":1070},[25184],{"type":40,"value":1198},{"type":30,"tag":1046,"props":25186,"children":25187},{"class":1048,"line":681},[25188],{"type":30,"tag":1046,"props":25189,"children":25190},{"style":1070},[25191],{"type":40,"value":1423},{"type":30,"tag":1046,"props":25193,"children":25194},{"class":1048,"line":1124},[25195],{"type":30,"tag":1046,"props":25196,"children":25197},{"emptyLinePlaceholder":13},[25198],{"type":40,"value":1121},{"type":30,"tag":1046,"props":25200,"children":25201},{"class":1048,"line":1168},[25202,25206,25210,25215,25219,25223],{"type":30,"tag":1046,"props":25203,"children":25204},{"style":1053},[25205],{"type":40,"value":1056},{"type":30,"tag":1046,"props":25207,"children":25208},{"style":1053},[25209],{"type":40,"value":1061},{"type":30,"tag":1046,"props":25211,"children":25212},{"style":1064},[25213],{"type":40,"value":25214}," CreditCardPayment",{"type":30,"tag":1046,"props":25216,"children":25217},{"style":1053},[25218],{"type":40,"value":3166},{"type":30,"tag":1046,"props":25220,"children":25221},{"style":1064},[25222],{"type":40,"value":25151},{"type":30,"tag":1046,"props":25224,"children":25225},{"style":1070},[25226],{"type":40,"value":1073},{"type":30,"tag":1046,"props":25228,"children":25229},{"class":1048,"line":1201},[25230,25234,25238,25242,25246,25250,25254,25258],{"type":30,"tag":1046,"props":25231,"children":25232},{"style":1053},[25233],{"type":40,"value":1130},{"type":30,"tag":1046,"props":25235,"children":25236},{"style":1053},[25237],{"type":40,"value":1135},{"type":30,"tag":1046,"props":25239,"children":25240},{"style":1138},[25241],{"type":40,"value":25167},{"type":30,"tag":1046,"props":25243,"children":25244},{"style":1070},[25245],{"type":40,"value":1146},{"type":30,"tag":1046,"props":25247,"children":25248},{"style":1053},[25249],{"type":40,"value":20944},{"type":30,"tag":1046,"props":25251,"children":25252},{"style":1153},[25253],{"type":40,"value":25180},{"type":30,"tag":1046,"props":25255,"children":25256},{"style":1070},[25257],{"type":40,"value":1161},{"type":30,"tag":1046,"props":25259,"children":25260},{"style":1070},[25261],{"type":40,"value":1073},{"type":30,"tag":1046,"props":25263,"children":25264},{"class":1048,"line":1210},[25265],{"type":30,"tag":1046,"props":25266,"children":25267},{"style":3961},[25268],{"type":40,"value":25269},"        // Implémentation du paiement par carte de crédit\n",{"type":30,"tag":1046,"props":25271,"children":25272},{"class":1048,"line":1218},[25273],{"type":30,"tag":1046,"props":25274,"children":25275},{"style":1070},[25276],{"type":40,"value":1207},{"type":30,"tag":1046,"props":25278,"children":25279},{"class":1048,"line":1255},[25280],{"type":30,"tag":1046,"props":25281,"children":25282},{"style":1070},[25283],{"type":40,"value":1423},{"type":30,"tag":1046,"props":25285,"children":25286},{"class":1048,"line":1284},[25287],{"type":30,"tag":1046,"props":25288,"children":25289},{"emptyLinePlaceholder":13},[25290],{"type":40,"value":1121},{"type":30,"tag":1046,"props":25292,"children":25293},{"class":1048,"line":1292},[25294,25298,25302,25307,25311,25315],{"type":30,"tag":1046,"props":25295,"children":25296},{"style":1053},[25297],{"type":40,"value":1056},{"type":30,"tag":1046,"props":25299,"children":25300},{"style":1053},[25301],{"type":40,"value":1061},{"type":30,"tag":1046,"props":25303,"children":25304},{"style":1064},[25305],{"type":40,"value":25306}," PayPalPayment",{"type":30,"tag":1046,"props":25308,"children":25309},{"style":1053},[25310],{"type":40,"value":3166},{"type":30,"tag":1046,"props":25312,"children":25313},{"style":1064},[25314],{"type":40,"value":25151},{"type":30,"tag":1046,"props":25316,"children":25317},{"style":1070},[25318],{"type":40,"value":1073},{"type":30,"tag":1046,"props":25320,"children":25321},{"class":1048,"line":1300},[25322,25326,25330,25334,25338,25342,25346,25350],{"type":30,"tag":1046,"props":25323,"children":25324},{"style":1053},[25325],{"type":40,"value":1130},{"type":30,"tag":1046,"props":25327,"children":25328},{"style":1053},[25329],{"type":40,"value":1135},{"type":30,"tag":1046,"props":25331,"children":25332},{"style":1138},[25333],{"type":40,"value":25167},{"type":30,"tag":1046,"props":25335,"children":25336},{"style":1070},[25337],{"type":40,"value":1146},{"type":30,"tag":1046,"props":25339,"children":25340},{"style":1053},[25341],{"type":40,"value":20944},{"type":30,"tag":1046,"props":25343,"children":25344},{"style":1153},[25345],{"type":40,"value":25180},{"type":30,"tag":1046,"props":25347,"children":25348},{"style":1070},[25349],{"type":40,"value":1161},{"type":30,"tag":1046,"props":25351,"children":25352},{"style":1070},[25353],{"type":40,"value":1073},{"type":30,"tag":1046,"props":25355,"children":25356},{"class":1048,"line":1327},[25357],{"type":30,"tag":1046,"props":25358,"children":25359},{"style":3961},[25360],{"type":40,"value":25361},"        // Implémentation du paiement via PayPal\n",{"type":30,"tag":1046,"props":25363,"children":25364},{"class":1048,"line":1354},[25365],{"type":30,"tag":1046,"props":25366,"children":25367},{"style":1070},[25368],{"type":40,"value":1207},{"type":30,"tag":1046,"props":25370,"children":25371},{"class":1048,"line":1391},[25372],{"type":30,"tag":1046,"props":25373,"children":25374},{"style":1070},[25375],{"type":40,"value":1423},{"type":30,"tag":43,"props":25377,"children":25378},{},[25379,25381,25387],{"type":40,"value":25380},"Dans cet exemple, l’interface ",{"type":30,"tag":1042,"props":25382,"children":25384},{"className":25383},[],[25385],{"type":40,"value":25386},"PaymentMethod",{"type":40,"value":25388}," permet d’utiliser différentes méthodes de paiement sans changer le reste du code qui gère les paiements.",{"type":30,"tag":84,"props":25390,"children":25391},{},[],{"type":30,"tag":31,"props":25393,"children":25395},{"id":25394},"meilleures-pratiques-pour-un-code-évolutif-en-java",[25396],{"type":40,"value":25397},"Meilleures pratiques pour un code évolutif en Java",{"type":30,"tag":43,"props":25399,"children":25400},{},[25401],{"type":40,"value":25402},"Maintenant que vous avez une bonne compréhension des principes de base, voyons comment appliquer ces concepts dans un projet Java. Les bonnes pratiques suivantes vous aideront à écrire du code évolutif dans vos applications Java.",{"type":30,"tag":116,"props":25404,"children":25406},{"id":25405},"_1-structurer-les-classes-de-manière-logique",[25407],{"type":40,"value":25408},"1. Structurer les classes de manière logique",{"type":30,"tag":43,"props":25410,"children":25411},{},[25412,25414,25418],{"type":40,"value":25413},"Une bonne organisation des classes est cruciale pour la lisibilité et l'évolutivité du code. Je vous recommande de garder vos classes focalisées sur des tâches spécifiques et d'éviter les classes dites \"god objects\" qui s'occupent de tout. Structurez vos classes de manière à ce qu'elles respectent le principe de ",{"type":30,"tag":36,"props":25415,"children":25416},{},[25417],{"type":40,"value":12840},{"type":40,"value":1179},{"type":30,"tag":1035,"props":25420,"children":25422},{"className":1039,"code":25421,"language":1038,"meta":8,"style":8},"// Classe pour gérer les informations de l'employé\npublic class Employee {\n    private String name;\n    private String department;\n\n    // Getters et Setters\n}\n\n// Classe pour calculer le salaire\npublic class SalaryService {\n    public double calculateSalary(Employee employee) {\n        // Logique pour calculer le salaire\n    }\n}\n\n// Classe pour générer un rapport\npublic class ReportService {\n    public String generateReport(Employee employee) {\n        // Logique pour générer un rapport\n    }\n}\n",[25423],{"type":30,"tag":1042,"props":25424,"children":25425},{"__ignoreMap":8},[25426,25433,25452,25471,25491,25498,25506,25513,25520,25528,25548,25584,25592,25599,25606,25613,25621,25641,25676,25684,25691],{"type":30,"tag":1046,"props":25427,"children":25428},{"class":1048,"line":1049},[25429],{"type":30,"tag":1046,"props":25430,"children":25431},{"style":3961},[25432],{"type":40,"value":24614},{"type":30,"tag":1046,"props":25434,"children":25435},{"class":1048,"line":675},[25436,25440,25444,25448],{"type":30,"tag":1046,"props":25437,"children":25438},{"style":1053},[25439],{"type":40,"value":1056},{"type":30,"tag":1046,"props":25441,"children":25442},{"style":1053},[25443],{"type":40,"value":1061},{"type":30,"tag":1046,"props":25445,"children":25446},{"style":1064},[25447],{"type":40,"value":24181},{"type":30,"tag":1046,"props":25449,"children":25450},{"style":1070},[25451],{"type":40,"value":1073},{"type":30,"tag":1046,"props":25453,"children":25454},{"class":1048,"line":681},[25455,25459,25463,25467],{"type":30,"tag":1046,"props":25456,"children":25457},{"style":1053},[25458],{"type":40,"value":1081},{"type":30,"tag":1046,"props":25460,"children":25461},{"style":1084},[25462],{"type":40,"value":2067},{"type":30,"tag":1046,"props":25464,"children":25465},{"style":1105},[25466],{"type":40,"value":10290},{"type":30,"tag":1046,"props":25468,"children":25469},{"style":1070},[25470],{"type":40,"value":1113},{"type":30,"tag":1046,"props":25472,"children":25473},{"class":1048,"line":1124},[25474,25478,25482,25487],{"type":30,"tag":1046,"props":25475,"children":25476},{"style":1053},[25477],{"type":40,"value":1081},{"type":30,"tag":1046,"props":25479,"children":25480},{"style":1084},[25481],{"type":40,"value":2067},{"type":30,"tag":1046,"props":25483,"children":25484},{"style":1105},[25485],{"type":40,"value":25486}," department",{"type":30,"tag":1046,"props":25488,"children":25489},{"style":1070},[25490],{"type":40,"value":1113},{"type":30,"tag":1046,"props":25492,"children":25493},{"class":1048,"line":1168},[25494],{"type":30,"tag":1046,"props":25495,"children":25496},{"emptyLinePlaceholder":13},[25497],{"type":40,"value":1121},{"type":30,"tag":1046,"props":25499,"children":25500},{"class":1048,"line":1201},[25501],{"type":30,"tag":1046,"props":25502,"children":25503},{"style":3961},[25504],{"type":40,"value":25505},"    // Getters et Setters\n",{"type":30,"tag":1046,"props":25507,"children":25508},{"class":1048,"line":1210},[25509],{"type":30,"tag":1046,"props":25510,"children":25511},{"style":1070},[25512],{"type":40,"value":1423},{"type":30,"tag":1046,"props":25514,"children":25515},{"class":1048,"line":1218},[25516],{"type":30,"tag":1046,"props":25517,"children":25518},{"emptyLinePlaceholder":13},[25519],{"type":40,"value":1121},{"type":30,"tag":1046,"props":25521,"children":25522},{"class":1048,"line":1255},[25523],{"type":30,"tag":1046,"props":25524,"children":25525},{"style":3961},[25526],{"type":40,"value":25527},"// Classe pour calculer le salaire\n",{"type":30,"tag":1046,"props":25529,"children":25530},{"class":1048,"line":1284},[25531,25535,25539,25544],{"type":30,"tag":1046,"props":25532,"children":25533},{"style":1053},[25534],{"type":40,"value":1056},{"type":30,"tag":1046,"props":25536,"children":25537},{"style":1053},[25538],{"type":40,"value":1061},{"type":30,"tag":1046,"props":25540,"children":25541},{"style":1064},[25542],{"type":40,"value":25543}," SalaryService",{"type":30,"tag":1046,"props":25545,"children":25546},{"style":1070},[25547],{"type":40,"value":1073},{"type":30,"tag":1046,"props":25549,"children":25550},{"class":1048,"line":1292},[25551,25555,25559,25564,25568,25572,25576,25580],{"type":30,"tag":1046,"props":25552,"children":25553},{"style":1053},[25554],{"type":40,"value":1130},{"type":30,"tag":1046,"props":25556,"children":25557},{"style":1053},[25558],{"type":40,"value":1310},{"type":30,"tag":1046,"props":25560,"children":25561},{"style":1138},[25562],{"type":40,"value":25563}," calculateSalary",{"type":30,"tag":1046,"props":25565,"children":25566},{"style":1070},[25567],{"type":40,"value":1146},{"type":30,"tag":1046,"props":25569,"children":25570},{"style":1084},[25571],{"type":40,"value":24156},{"type":30,"tag":1046,"props":25573,"children":25574},{"style":1153},[25575],{"type":40,"value":24844},{"type":30,"tag":1046,"props":25577,"children":25578},{"style":1070},[25579],{"type":40,"value":1161},{"type":30,"tag":1046,"props":25581,"children":25582},{"style":1070},[25583],{"type":40,"value":1073},{"type":30,"tag":1046,"props":25585,"children":25586},{"class":1048,"line":1300},[25587],{"type":30,"tag":1046,"props":25588,"children":25589},{"style":3961},[25590],{"type":40,"value":25591},"        // Logique pour calculer le salaire\n",{"type":30,"tag":1046,"props":25593,"children":25594},{"class":1048,"line":1327},[25595],{"type":30,"tag":1046,"props":25596,"children":25597},{"style":1070},[25598],{"type":40,"value":1207},{"type":30,"tag":1046,"props":25600,"children":25601},{"class":1048,"line":1354},[25602],{"type":30,"tag":1046,"props":25603,"children":25604},{"style":1070},[25605],{"type":40,"value":1423},{"type":30,"tag":1046,"props":25607,"children":25608},{"class":1048,"line":1391},[25609],{"type":30,"tag":1046,"props":25610,"children":25611},{"emptyLinePlaceholder":13},[25612],{"type":40,"value":1121},{"type":30,"tag":1046,"props":25614,"children":25615},{"class":1048,"line":1409},[25616],{"type":30,"tag":1046,"props":25617,"children":25618},{"style":3961},[25619],{"type":40,"value":25620},"// Classe pour générer un rapport\n",{"type":30,"tag":1046,"props":25622,"children":25623},{"class":1048,"line":1417},[25624,25628,25632,25637],{"type":30,"tag":1046,"props":25625,"children":25626},{"style":1053},[25627],{"type":40,"value":1056},{"type":30,"tag":1046,"props":25629,"children":25630},{"style":1053},[25631],{"type":40,"value":1061},{"type":30,"tag":1046,"props":25633,"children":25634},{"style":1064},[25635],{"type":40,"value":25636}," ReportService",{"type":30,"tag":1046,"props":25638,"children":25639},{"style":1070},[25640],{"type":40,"value":1073},{"type":30,"tag":1046,"props":25642,"children":25643},{"class":1048,"line":2023},[25644,25648,25652,25656,25660,25664,25668,25672],{"type":30,"tag":1046,"props":25645,"children":25646},{"style":1053},[25647],{"type":40,"value":1130},{"type":30,"tag":1046,"props":25649,"children":25650},{"style":1084},[25651],{"type":40,"value":2067},{"type":30,"tag":1046,"props":25653,"children":25654},{"style":1138},[25655],{"type":40,"value":24359},{"type":30,"tag":1046,"props":25657,"children":25658},{"style":1070},[25659],{"type":40,"value":1146},{"type":30,"tag":1046,"props":25661,"children":25662},{"style":1084},[25663],{"type":40,"value":24156},{"type":30,"tag":1046,"props":25665,"children":25666},{"style":1153},[25667],{"type":40,"value":24844},{"type":30,"tag":1046,"props":25669,"children":25670},{"style":1070},[25671],{"type":40,"value":1161},{"type":30,"tag":1046,"props":25673,"children":25674},{"style":1070},[25675],{"type":40,"value":1073},{"type":30,"tag":1046,"props":25677,"children":25678},{"class":1048,"line":2083},[25679],{"type":30,"tag":1046,"props":25680,"children":25681},{"style":3961},[25682],{"type":40,"value":25683},"        // Logique pour générer un rapport\n",{"type":30,"tag":1046,"props":25685,"children":25686},{"class":1048,"line":2126},[25687],{"type":30,"tag":1046,"props":25688,"children":25689},{"style":1070},[25690],{"type":40,"value":1207},{"type":30,"tag":1046,"props":25692,"children":25693},{"class":1048,"line":2159},[25694],{"type":30,"tag":1046,"props":25695,"children":25696},{"style":1070},[25697],{"type":40,"value":1423},{"type":30,"tag":116,"props":25699,"children":25701},{"id":25700},"_2-utiliser-des-patrons-de-conception-design-patterns",[25702],{"type":40,"value":25703},"2. Utiliser des patrons de conception (design patterns)",{"type":30,"tag":43,"props":25705,"children":25706},{},[25707,25708,25712],{"type":40,"value":13695},{"type":30,"tag":36,"props":25709,"children":25710},{},[25711],{"type":40,"value":13914},{"type":40,"value":25713}," sont des solutions éprouvées pour résoudre des problèmes courants de conception dans le développement logiciel. Voici quelques-uns des patrons les plus utiles pour écrire du code évolutif en Java :",{"type":30,"tag":163,"props":25715,"children":25716},{},[25717,25727,25737],{"type":30,"tag":167,"props":25718,"children":25719},{},[25720,25725],{"type":30,"tag":36,"props":25721,"children":25722},{},[25723],{"type":40,"value":25724},"Patron Singleton",{"type":40,"value":25726}," : Garantit qu'une classe n'a qu'une seule instance, souvent utilisé pour des services globaux.",{"type":30,"tag":167,"props":25728,"children":25729},{},[25730,25735],{"type":30,"tag":36,"props":25731,"children":25732},{},[25733],{"type":40,"value":25734},"Patron Factory",{"type":40,"value":25736}," : Encapsule la création d'objets dans une méthode ou une classe distincte, ce qui vous permet de changer la manière dont les objets sont créés sans toucher à la logique métier principale.",{"type":30,"tag":167,"props":25738,"children":25739},{},[25740,25745],{"type":30,"tag":36,"props":25741,"children":25742},{},[25743],{"type":40,"value":25744},"Patron Observer",{"type":40,"value":25746}," : Permet à une classe d'être avertie automatiquement lorsque certaines conditions changent dans une autre classe, utile pour les systèmes d'événements.",{"type":30,"tag":1035,"props":25748,"children":25750},{"className":1039,"code":25749,"language":1038,"meta":8,"style":8},"// Exemple simple d'un Singleton en Java\npublic class DatabaseConnection {\n    private static DatabaseConnection instance;\n\n    private DatabaseConnection() {\n        // Constructeur privé pour éviter l'instanciation\n\n directe\n    }\n\n    public static DatabaseConnection getInstance() {\n        if (instance == null) {\n            instance = new DatabaseConnection();\n        }\n        return instance;\n    }\n}\n",[25751],{"type":30,"tag":1042,"props":25752,"children":25753},{"__ignoreMap":8},[25754,25762,25782,25806,25813,25832,25840,25847,25855,25862,25869,25897,25929,25953,25960,25975,25982],{"type":30,"tag":1046,"props":25755,"children":25756},{"class":1048,"line":1049},[25757],{"type":30,"tag":1046,"props":25758,"children":25759},{"style":3961},[25760],{"type":40,"value":25761},"// Exemple simple d'un Singleton en Java\n",{"type":30,"tag":1046,"props":25763,"children":25764},{"class":1048,"line":675},[25765,25769,25773,25778],{"type":30,"tag":1046,"props":25766,"children":25767},{"style":1053},[25768],{"type":40,"value":1056},{"type":30,"tag":1046,"props":25770,"children":25771},{"style":1053},[25772],{"type":40,"value":1061},{"type":30,"tag":1046,"props":25774,"children":25775},{"style":1064},[25776],{"type":40,"value":25777}," DatabaseConnection",{"type":30,"tag":1046,"props":25779,"children":25780},{"style":1070},[25781],{"type":40,"value":1073},{"type":30,"tag":1046,"props":25783,"children":25784},{"class":1048,"line":681},[25785,25789,25793,25797,25802],{"type":30,"tag":1046,"props":25786,"children":25787},{"style":1053},[25788],{"type":40,"value":1081},{"type":30,"tag":1046,"props":25790,"children":25791},{"style":1053},[25792],{"type":40,"value":12363},{"type":30,"tag":1046,"props":25794,"children":25795},{"style":1084},[25796],{"type":40,"value":25777},{"type":30,"tag":1046,"props":25798,"children":25799},{"style":1105},[25800],{"type":40,"value":25801}," instance",{"type":30,"tag":1046,"props":25803,"children":25804},{"style":1070},[25805],{"type":40,"value":1113},{"type":30,"tag":1046,"props":25807,"children":25808},{"class":1048,"line":1124},[25809],{"type":30,"tag":1046,"props":25810,"children":25811},{"emptyLinePlaceholder":13},[25812],{"type":40,"value":1121},{"type":30,"tag":1046,"props":25814,"children":25815},{"class":1048,"line":1168},[25816,25820,25824,25828],{"type":30,"tag":1046,"props":25817,"children":25818},{"style":1053},[25819],{"type":40,"value":1081},{"type":30,"tag":1046,"props":25821,"children":25822},{"style":1138},[25823],{"type":40,"value":25777},{"type":30,"tag":1046,"props":25825,"children":25826},{"style":1070},[25827],{"type":40,"value":1320},{"type":30,"tag":1046,"props":25829,"children":25830},{"style":1070},[25831],{"type":40,"value":1073},{"type":30,"tag":1046,"props":25833,"children":25834},{"class":1048,"line":1201},[25835],{"type":30,"tag":1046,"props":25836,"children":25837},{"style":3961},[25838],{"type":40,"value":25839},"        // Constructeur privé pour éviter l'instanciation\n",{"type":30,"tag":1046,"props":25841,"children":25842},{"class":1048,"line":1210},[25843],{"type":30,"tag":1046,"props":25844,"children":25845},{"emptyLinePlaceholder":13},[25846],{"type":40,"value":1121},{"type":30,"tag":1046,"props":25848,"children":25849},{"class":1048,"line":1218},[25850],{"type":30,"tag":1046,"props":25851,"children":25852},{"style":1105},[25853],{"type":40,"value":25854}," directe\n",{"type":30,"tag":1046,"props":25856,"children":25857},{"class":1048,"line":1255},[25858],{"type":30,"tag":1046,"props":25859,"children":25860},{"style":1070},[25861],{"type":40,"value":1207},{"type":30,"tag":1046,"props":25863,"children":25864},{"class":1048,"line":1284},[25865],{"type":30,"tag":1046,"props":25866,"children":25867},{"emptyLinePlaceholder":13},[25868],{"type":40,"value":1121},{"type":30,"tag":1046,"props":25870,"children":25871},{"class":1048,"line":1292},[25872,25876,25880,25884,25889,25893],{"type":30,"tag":1046,"props":25873,"children":25874},{"style":1053},[25875],{"type":40,"value":1130},{"type":30,"tag":1046,"props":25877,"children":25878},{"style":1053},[25879],{"type":40,"value":12363},{"type":30,"tag":1046,"props":25881,"children":25882},{"style":1084},[25883],{"type":40,"value":25777},{"type":30,"tag":1046,"props":25885,"children":25886},{"style":1138},[25887],{"type":40,"value":25888}," getInstance",{"type":30,"tag":1046,"props":25890,"children":25891},{"style":1070},[25892],{"type":40,"value":1320},{"type":30,"tag":1046,"props":25894,"children":25895},{"style":1070},[25896],{"type":40,"value":1073},{"type":30,"tag":1046,"props":25898,"children":25899},{"class":1048,"line":1300},[25900,25904,25908,25913,25917,25921,25925],{"type":30,"tag":1046,"props":25901,"children":25902},{"style":1053},[25903],{"type":40,"value":11856},{"type":30,"tag":1046,"props":25905,"children":25906},{"style":1070},[25907],{"type":40,"value":11861},{"type":30,"tag":1046,"props":25909,"children":25910},{"style":1105},[25911],{"type":40,"value":25912},"instance ",{"type":30,"tag":1046,"props":25914,"children":25915},{"style":1795},[25916],{"type":40,"value":11871},{"type":30,"tag":1046,"props":25918,"children":25919},{"style":1780},[25920],{"type":40,"value":11876},{"type":30,"tag":1046,"props":25922,"children":25923},{"style":1070},[25924],{"type":40,"value":1161},{"type":30,"tag":1046,"props":25926,"children":25927},{"style":1070},[25928],{"type":40,"value":1073},{"type":30,"tag":1046,"props":25930,"children":25931},{"class":1048,"line":1327},[25932,25937,25941,25945,25949],{"type":30,"tag":1046,"props":25933,"children":25934},{"style":1105},[25935],{"type":40,"value":25936},"            instance ",{"type":30,"tag":1046,"props":25938,"children":25939},{"style":1795},[25940],{"type":40,"value":1798},{"type":30,"tag":1046,"props":25942,"children":25943},{"style":1053},[25944],{"type":40,"value":2480},{"type":30,"tag":1046,"props":25946,"children":25947},{"style":1138},[25948],{"type":40,"value":25777},{"type":30,"tag":1046,"props":25950,"children":25951},{"style":1070},[25952],{"type":40,"value":1406},{"type":30,"tag":1046,"props":25954,"children":25955},{"class":1048,"line":1354},[25956],{"type":30,"tag":1046,"props":25957,"children":25958},{"style":1070},[25959],{"type":40,"value":11922},{"type":30,"tag":1046,"props":25961,"children":25962},{"class":1048,"line":1391},[25963,25967,25971],{"type":30,"tag":1046,"props":25964,"children":25965},{"style":1053},[25966],{"type":40,"value":1333},{"type":30,"tag":1046,"props":25968,"children":25969},{"style":1105},[25970],{"type":40,"value":25801},{"type":30,"tag":1046,"props":25972,"children":25973},{"style":1070},[25974],{"type":40,"value":1113},{"type":30,"tag":1046,"props":25976,"children":25977},{"class":1048,"line":1409},[25978],{"type":30,"tag":1046,"props":25979,"children":25980},{"style":1070},[25981],{"type":40,"value":1207},{"type":30,"tag":1046,"props":25983,"children":25984},{"class":1048,"line":1417},[25985],{"type":30,"tag":1046,"props":25986,"children":25987},{"style":1070},[25988],{"type":40,"value":1423},{"type":30,"tag":116,"props":25990,"children":25992},{"id":25991},"_3-favoriser-le-couplage-faible",[25993],{"type":40,"value":25994},"3. Favoriser le couplage faible",{"type":30,"tag":43,"props":25996,"children":25997},{},[25998,25999,26004],{"type":40,"value":143},{"type":30,"tag":36,"props":26000,"children":26001},{},[26002],{"type":40,"value":26003},"couplage faible",{"type":40,"value":26005}," signifie que vos classes et modules doivent être aussi indépendants que possible les uns des autres. Cela permet de les modifier ou de les remplacer sans affecter d'autres parties du programme. En Java, l'utilisation d'interfaces est un excellent moyen de réduire le couplage entre les classes.",{"type":30,"tag":1035,"props":26007,"children":26009},{"className":1039,"code":26008,"language":1038,"meta":8,"style":8},"// Interface pour la méthode de paiement\npublic interface PaymentMethod {\n    void processPayment(double amount);\n}\n\n// Implémentation de la méthode de paiement par carte\npublic class CreditCardPayment implements PaymentMethod {\n    public void processPayment(double amount) {\n        // Logique de paiement par carte\n    }\n}\n\n// Implémentation de la méthode de paiement via PayPal\npublic class PayPalPayment implements PaymentMethod {\n    public void processPayment(double amount) {\n        // Logique de paiement PayPal\n    }\n}\n\n// Utilisation de la méthode de paiement sans se soucier de l'implémentation\npublic class PaymentService {\n    private PaymentMethod paymentMethod;\n\n    public PaymentService(PaymentMethod paymentMethod) {\n        this.paymentMethod = paymentMethod;\n    }\n\n    public void executePayment(double amount) {\n        paymentMethod.processPayment(amount);\n    }\n}\n",[26010],{"type":30,"tag":1042,"props":26011,"children":26012},{"__ignoreMap":8},[26013,26021,26040,26067,26074,26081,26089,26116,26151,26159,26166,26173,26180,26188,26215,26250,26258,26265,26272,26279,26287,26307,26327,26334,26365,26393,26400,26407,26443,26472,26479],{"type":30,"tag":1046,"props":26014,"children":26015},{"class":1048,"line":1049},[26016],{"type":30,"tag":1046,"props":26017,"children":26018},{"style":3961},[26019],{"type":40,"value":26020},"// Interface pour la méthode de paiement\n",{"type":30,"tag":1046,"props":26022,"children":26023},{"class":1048,"line":675},[26024,26028,26032,26036],{"type":30,"tag":1046,"props":26025,"children":26026},{"style":1053},[26027],{"type":40,"value":1056},{"type":30,"tag":1046,"props":26029,"children":26030},{"style":1053},[26031],{"type":40,"value":4852},{"type":30,"tag":1046,"props":26033,"children":26034},{"style":1064},[26035],{"type":40,"value":25151},{"type":30,"tag":1046,"props":26037,"children":26038},{"style":1070},[26039],{"type":40,"value":1073},{"type":30,"tag":1046,"props":26041,"children":26042},{"class":1048,"line":681},[26043,26047,26051,26055,26059,26063],{"type":30,"tag":1046,"props":26044,"children":26045},{"style":1053},[26046],{"type":40,"value":4908},{"type":30,"tag":1046,"props":26048,"children":26049},{"style":1138},[26050],{"type":40,"value":20317},{"type":30,"tag":1046,"props":26052,"children":26053},{"style":1070},[26054],{"type":40,"value":1146},{"type":30,"tag":1046,"props":26056,"children":26057},{"style":1053},[26058],{"type":40,"value":20944},{"type":30,"tag":1046,"props":26060,"children":26061},{"style":1153},[26062],{"type":40,"value":25180},{"type":30,"tag":1046,"props":26064,"children":26065},{"style":1070},[26066],{"type":40,"value":1198},{"type":30,"tag":1046,"props":26068,"children":26069},{"class":1048,"line":1124},[26070],{"type":30,"tag":1046,"props":26071,"children":26072},{"style":1070},[26073],{"type":40,"value":1423},{"type":30,"tag":1046,"props":26075,"children":26076},{"class":1048,"line":1168},[26077],{"type":30,"tag":1046,"props":26078,"children":26079},{"emptyLinePlaceholder":13},[26080],{"type":40,"value":1121},{"type":30,"tag":1046,"props":26082,"children":26083},{"class":1048,"line":1201},[26084],{"type":30,"tag":1046,"props":26085,"children":26086},{"style":3961},[26087],{"type":40,"value":26088},"// Implémentation de la méthode de paiement par carte\n",{"type":30,"tag":1046,"props":26090,"children":26091},{"class":1048,"line":1210},[26092,26096,26100,26104,26108,26112],{"type":30,"tag":1046,"props":26093,"children":26094},{"style":1053},[26095],{"type":40,"value":1056},{"type":30,"tag":1046,"props":26097,"children":26098},{"style":1053},[26099],{"type":40,"value":1061},{"type":30,"tag":1046,"props":26101,"children":26102},{"style":1064},[26103],{"type":40,"value":25214},{"type":30,"tag":1046,"props":26105,"children":26106},{"style":1053},[26107],{"type":40,"value":3166},{"type":30,"tag":1046,"props":26109,"children":26110},{"style":1064},[26111],{"type":40,"value":25151},{"type":30,"tag":1046,"props":26113,"children":26114},{"style":1070},[26115],{"type":40,"value":1073},{"type":30,"tag":1046,"props":26117,"children":26118},{"class":1048,"line":1218},[26119,26123,26127,26131,26135,26139,26143,26147],{"type":30,"tag":1046,"props":26120,"children":26121},{"style":1053},[26122],{"type":40,"value":1130},{"type":30,"tag":1046,"props":26124,"children":26125},{"style":1053},[26126],{"type":40,"value":1135},{"type":30,"tag":1046,"props":26128,"children":26129},{"style":1138},[26130],{"type":40,"value":20317},{"type":30,"tag":1046,"props":26132,"children":26133},{"style":1070},[26134],{"type":40,"value":1146},{"type":30,"tag":1046,"props":26136,"children":26137},{"style":1053},[26138],{"type":40,"value":20944},{"type":30,"tag":1046,"props":26140,"children":26141},{"style":1153},[26142],{"type":40,"value":25180},{"type":30,"tag":1046,"props":26144,"children":26145},{"style":1070},[26146],{"type":40,"value":1161},{"type":30,"tag":1046,"props":26148,"children":26149},{"style":1070},[26150],{"type":40,"value":1073},{"type":30,"tag":1046,"props":26152,"children":26153},{"class":1048,"line":1255},[26154],{"type":30,"tag":1046,"props":26155,"children":26156},{"style":3961},[26157],{"type":40,"value":26158},"        // Logique de paiement par carte\n",{"type":30,"tag":1046,"props":26160,"children":26161},{"class":1048,"line":1284},[26162],{"type":30,"tag":1046,"props":26163,"children":26164},{"style":1070},[26165],{"type":40,"value":1207},{"type":30,"tag":1046,"props":26167,"children":26168},{"class":1048,"line":1292},[26169],{"type":30,"tag":1046,"props":26170,"children":26171},{"style":1070},[26172],{"type":40,"value":1423},{"type":30,"tag":1046,"props":26174,"children":26175},{"class":1048,"line":1300},[26176],{"type":30,"tag":1046,"props":26177,"children":26178},{"emptyLinePlaceholder":13},[26179],{"type":40,"value":1121},{"type":30,"tag":1046,"props":26181,"children":26182},{"class":1048,"line":1327},[26183],{"type":30,"tag":1046,"props":26184,"children":26185},{"style":3961},[26186],{"type":40,"value":26187},"// Implémentation de la méthode de paiement via PayPal\n",{"type":30,"tag":1046,"props":26189,"children":26190},{"class":1048,"line":1354},[26191,26195,26199,26203,26207,26211],{"type":30,"tag":1046,"props":26192,"children":26193},{"style":1053},[26194],{"type":40,"value":1056},{"type":30,"tag":1046,"props":26196,"children":26197},{"style":1053},[26198],{"type":40,"value":1061},{"type":30,"tag":1046,"props":26200,"children":26201},{"style":1064},[26202],{"type":40,"value":25306},{"type":30,"tag":1046,"props":26204,"children":26205},{"style":1053},[26206],{"type":40,"value":3166},{"type":30,"tag":1046,"props":26208,"children":26209},{"style":1064},[26210],{"type":40,"value":25151},{"type":30,"tag":1046,"props":26212,"children":26213},{"style":1070},[26214],{"type":40,"value":1073},{"type":30,"tag":1046,"props":26216,"children":26217},{"class":1048,"line":1391},[26218,26222,26226,26230,26234,26238,26242,26246],{"type":30,"tag":1046,"props":26219,"children":26220},{"style":1053},[26221],{"type":40,"value":1130},{"type":30,"tag":1046,"props":26223,"children":26224},{"style":1053},[26225],{"type":40,"value":1135},{"type":30,"tag":1046,"props":26227,"children":26228},{"style":1138},[26229],{"type":40,"value":20317},{"type":30,"tag":1046,"props":26231,"children":26232},{"style":1070},[26233],{"type":40,"value":1146},{"type":30,"tag":1046,"props":26235,"children":26236},{"style":1053},[26237],{"type":40,"value":20944},{"type":30,"tag":1046,"props":26239,"children":26240},{"style":1153},[26241],{"type":40,"value":25180},{"type":30,"tag":1046,"props":26243,"children":26244},{"style":1070},[26245],{"type":40,"value":1161},{"type":30,"tag":1046,"props":26247,"children":26248},{"style":1070},[26249],{"type":40,"value":1073},{"type":30,"tag":1046,"props":26251,"children":26252},{"class":1048,"line":1409},[26253],{"type":30,"tag":1046,"props":26254,"children":26255},{"style":3961},[26256],{"type":40,"value":26257},"        // Logique de paiement PayPal\n",{"type":30,"tag":1046,"props":26259,"children":26260},{"class":1048,"line":1417},[26261],{"type":30,"tag":1046,"props":26262,"children":26263},{"style":1070},[26264],{"type":40,"value":1207},{"type":30,"tag":1046,"props":26266,"children":26267},{"class":1048,"line":2023},[26268],{"type":30,"tag":1046,"props":26269,"children":26270},{"style":1070},[26271],{"type":40,"value":1423},{"type":30,"tag":1046,"props":26273,"children":26274},{"class":1048,"line":2083},[26275],{"type":30,"tag":1046,"props":26276,"children":26277},{"emptyLinePlaceholder":13},[26278],{"type":40,"value":1121},{"type":30,"tag":1046,"props":26280,"children":26281},{"class":1048,"line":2126},[26282],{"type":30,"tag":1046,"props":26283,"children":26284},{"style":3961},[26285],{"type":40,"value":26286},"// Utilisation de la méthode de paiement sans se soucier de l'implémentation\n",{"type":30,"tag":1046,"props":26288,"children":26289},{"class":1048,"line":2159},[26290,26294,26298,26303],{"type":30,"tag":1046,"props":26291,"children":26292},{"style":1053},[26293],{"type":40,"value":1056},{"type":30,"tag":1046,"props":26295,"children":26296},{"style":1053},[26297],{"type":40,"value":1061},{"type":30,"tag":1046,"props":26299,"children":26300},{"style":1064},[26301],{"type":40,"value":26302}," PaymentService",{"type":30,"tag":1046,"props":26304,"children":26305},{"style":1070},[26306],{"type":40,"value":1073},{"type":30,"tag":1046,"props":26308,"children":26309},{"class":1048,"line":2167},[26310,26314,26318,26323],{"type":30,"tag":1046,"props":26311,"children":26312},{"style":1053},[26313],{"type":40,"value":1081},{"type":30,"tag":1046,"props":26315,"children":26316},{"style":1084},[26317],{"type":40,"value":25151},{"type":30,"tag":1046,"props":26319,"children":26320},{"style":1105},[26321],{"type":40,"value":26322}," paymentMethod",{"type":30,"tag":1046,"props":26324,"children":26325},{"style":1070},[26326],{"type":40,"value":1113},{"type":30,"tag":1046,"props":26328,"children":26329},{"class":1048,"line":4537},[26330],{"type":30,"tag":1046,"props":26331,"children":26332},{"emptyLinePlaceholder":13},[26333],{"type":40,"value":1121},{"type":30,"tag":1046,"props":26335,"children":26336},{"class":1048,"line":4545},[26337,26341,26345,26349,26353,26357,26361],{"type":30,"tag":1046,"props":26338,"children":26339},{"style":1053},[26340],{"type":40,"value":1130},{"type":30,"tag":1046,"props":26342,"children":26343},{"style":1138},[26344],{"type":40,"value":26302},{"type":30,"tag":1046,"props":26346,"children":26347},{"style":1070},[26348],{"type":40,"value":1146},{"type":30,"tag":1046,"props":26350,"children":26351},{"style":1084},[26352],{"type":40,"value":25386},{"type":30,"tag":1046,"props":26354,"children":26355},{"style":1153},[26356],{"type":40,"value":26322},{"type":30,"tag":1046,"props":26358,"children":26359},{"style":1070},[26360],{"type":40,"value":1161},{"type":30,"tag":1046,"props":26362,"children":26363},{"style":1070},[26364],{"type":40,"value":1073},{"type":30,"tag":1046,"props":26366,"children":26367},{"class":1048,"line":4582},[26368,26372,26376,26381,26385,26389],{"type":30,"tag":1046,"props":26369,"children":26370},{"style":1780},[26371],{"type":40,"value":1783},{"type":30,"tag":1046,"props":26373,"children":26374},{"style":1070},[26375],{"type":40,"value":1179},{"type":30,"tag":1046,"props":26377,"children":26378},{"style":1105},[26379],{"type":40,"value":26380},"paymentMethod ",{"type":30,"tag":1046,"props":26382,"children":26383},{"style":1795},[26384],{"type":40,"value":1798},{"type":30,"tag":1046,"props":26386,"children":26387},{"style":1105},[26388],{"type":40,"value":26322},{"type":30,"tag":1046,"props":26390,"children":26391},{"style":1070},[26392],{"type":40,"value":1113},{"type":30,"tag":1046,"props":26394,"children":26395},{"class":1048,"line":4622},[26396],{"type":30,"tag":1046,"props":26397,"children":26398},{"style":1070},[26399],{"type":40,"value":1207},{"type":30,"tag":1046,"props":26401,"children":26402},{"class":1048,"line":4662},[26403],{"type":30,"tag":1046,"props":26404,"children":26405},{"emptyLinePlaceholder":13},[26406],{"type":40,"value":1121},{"type":30,"tag":1046,"props":26408,"children":26409},{"class":1048,"line":4687},[26410,26414,26418,26423,26427,26431,26435,26439],{"type":30,"tag":1046,"props":26411,"children":26412},{"style":1053},[26413],{"type":40,"value":1130},{"type":30,"tag":1046,"props":26415,"children":26416},{"style":1053},[26417],{"type":40,"value":1135},{"type":30,"tag":1046,"props":26419,"children":26420},{"style":1138},[26421],{"type":40,"value":26422}," executePayment",{"type":30,"tag":1046,"props":26424,"children":26425},{"style":1070},[26426],{"type":40,"value":1146},{"type":30,"tag":1046,"props":26428,"children":26429},{"style":1053},[26430],{"type":40,"value":20944},{"type":30,"tag":1046,"props":26432,"children":26433},{"style":1153},[26434],{"type":40,"value":25180},{"type":30,"tag":1046,"props":26436,"children":26437},{"style":1070},[26438],{"type":40,"value":1161},{"type":30,"tag":1046,"props":26440,"children":26441},{"style":1070},[26442],{"type":40,"value":1073},{"type":30,"tag":1046,"props":26444,"children":26445},{"class":1048,"line":4695},[26446,26451,26455,26459,26463,26468],{"type":30,"tag":1046,"props":26447,"children":26448},{"style":1105},[26449],{"type":40,"value":26450},"        paymentMethod",{"type":30,"tag":1046,"props":26452,"children":26453},{"style":1070},[26454],{"type":40,"value":1179},{"type":30,"tag":1046,"props":26456,"children":26457},{"style":1138},[26458],{"type":40,"value":20857},{"type":30,"tag":1046,"props":26460,"children":26461},{"style":1070},[26462],{"type":40,"value":1146},{"type":30,"tag":1046,"props":26464,"children":26465},{"style":1105},[26466],{"type":40,"value":26467},"amount",{"type":30,"tag":1046,"props":26469,"children":26470},{"style":1070},[26471],{"type":40,"value":1198},{"type":30,"tag":1046,"props":26473,"children":26474},{"class":1048,"line":4703},[26475],{"type":30,"tag":1046,"props":26476,"children":26477},{"style":1070},[26478],{"type":40,"value":1207},{"type":30,"tag":1046,"props":26480,"children":26481},{"class":1048,"line":4739},[26482],{"type":30,"tag":1046,"props":26483,"children":26484},{"style":1070},[26485],{"type":40,"value":1423},{"type":30,"tag":116,"props":26487,"children":26489},{"id":26488},"_4-tests-automatisés-et-tdd",[26490],{"type":40,"value":26491},"4. Tests automatisés et TDD",{"type":30,"tag":43,"props":26493,"children":26494},{},[26495,26497,26501],{"type":40,"value":26496},"Les tests sont essentiels pour garantir que votre code fonctionne correctement après chaque modification. L'écriture de ",{"type":30,"tag":36,"props":26498,"children":26499},{},[26500],{"type":40,"value":22943},{"type":40,"value":26502}," aide à s'assurer que chaque module de votre code fonctionne comme prévu, tandis que les tests d'intégration garantissent que les modules fonctionnent bien ensemble.",{"type":30,"tag":43,"props":26504,"children":26505},{},[26506,26507,26512,26514,26518,26519,26523],{"type":40,"value":52},{"type":30,"tag":36,"props":26508,"children":26509},{},[26510],{"type":40,"value":26511},"méthodologie TDD (Test-Driven Development)",{"type":40,"value":26513}," consiste à écrire d'abord les tests avant de coder. Cela garantit que le code que vous écrivez est toujours testable et évolutif. Avec Java, des frameworks comme ",{"type":30,"tag":36,"props":26515,"children":26516},{},[26517],{"type":40,"value":12965},{"type":40,"value":8328},{"type":30,"tag":36,"props":26520,"children":26521},{},[26522],{"type":40,"value":12971},{"type":40,"value":26524}," facilitent l'écriture de tests unitaires et de tests d'intégration.",{"type":30,"tag":1035,"props":26526,"children":26528},{"className":1039,"code":26527,"language":1038,"meta":8,"style":8},"import static org.junit.Assert.assertEquals;\nimport org.junit.Test;\n\npublic class SalaryServiceTest {\n\n    @Test\n    public void testCalculateSalary() {\n        Employee employee = new Employee(\"John\", \"IT\");\n        SalaryService salaryService = new SalaryService();\n        double salary = salaryService.calculateSalary(employee);\n\n        assertEquals(3000, salary, 0.01); // Vérifie si le salaire est bien calculé\n    }\n}\n",[26529],{"type":30,"tag":1042,"props":26530,"children":26531},{"__ignoreMap":8},[26532,26578,26610,26617,26637,26644,26655,26679,26726,26755,26798,26805,26848,26855],{"type":30,"tag":1046,"props":26533,"children":26534},{"class":1048,"line":1049},[26535,26539,26543,26547,26551,26556,26560,26565,26569,26574],{"type":30,"tag":1046,"props":26536,"children":26537},{"style":1053},[26538],{"type":40,"value":9107},{"type":30,"tag":1046,"props":26540,"children":26541},{"style":1053},[26542],{"type":40,"value":12363},{"type":30,"tag":1046,"props":26544,"children":26545},{"style":1105},[26546],{"type":40,"value":9431},{"type":30,"tag":1046,"props":26548,"children":26549},{"style":1070},[26550],{"type":40,"value":1179},{"type":30,"tag":1046,"props":26552,"children":26553},{"style":1105},[26554],{"type":40,"value":26555},"junit",{"type":30,"tag":1046,"props":26557,"children":26558},{"style":1070},[26559],{"type":40,"value":1179},{"type":30,"tag":1046,"props":26561,"children":26562},{"style":1105},[26563],{"type":40,"value":26564},"Assert",{"type":30,"tag":1046,"props":26566,"children":26567},{"style":1070},[26568],{"type":40,"value":1179},{"type":30,"tag":1046,"props":26570,"children":26571},{"style":1105},[26572],{"type":40,"value":26573},"assertEquals",{"type":30,"tag":1046,"props":26575,"children":26576},{"style":1070},[26577],{"type":40,"value":1113},{"type":30,"tag":1046,"props":26579,"children":26580},{"class":1048,"line":675},[26581,26585,26589,26593,26597,26601,26606],{"type":30,"tag":1046,"props":26582,"children":26583},{"style":1053},[26584],{"type":40,"value":9107},{"type":30,"tag":1046,"props":26586,"children":26587},{"style":1105},[26588],{"type":40,"value":9431},{"type":30,"tag":1046,"props":26590,"children":26591},{"style":1070},[26592],{"type":40,"value":1179},{"type":30,"tag":1046,"props":26594,"children":26595},{"style":1105},[26596],{"type":40,"value":26555},{"type":30,"tag":1046,"props":26598,"children":26599},{"style":1070},[26600],{"type":40,"value":1179},{"type":30,"tag":1046,"props":26602,"children":26603},{"style":1105},[26604],{"type":40,"value":26605},"Test",{"type":30,"tag":1046,"props":26607,"children":26608},{"style":1070},[26609],{"type":40,"value":1113},{"type":30,"tag":1046,"props":26611,"children":26612},{"class":1048,"line":681},[26613],{"type":30,"tag":1046,"props":26614,"children":26615},{"emptyLinePlaceholder":13},[26616],{"type":40,"value":1121},{"type":30,"tag":1046,"props":26618,"children":26619},{"class":1048,"line":1124},[26620,26624,26628,26633],{"type":30,"tag":1046,"props":26621,"children":26622},{"style":1053},[26623],{"type":40,"value":1056},{"type":30,"tag":1046,"props":26625,"children":26626},{"style":1053},[26627],{"type":40,"value":1061},{"type":30,"tag":1046,"props":26629,"children":26630},{"style":1064},[26631],{"type":40,"value":26632}," SalaryServiceTest",{"type":30,"tag":1046,"props":26634,"children":26635},{"style":1070},[26636],{"type":40,"value":1073},{"type":30,"tag":1046,"props":26638,"children":26639},{"class":1048,"line":1168},[26640],{"type":30,"tag":1046,"props":26641,"children":26642},{"emptyLinePlaceholder":13},[26643],{"type":40,"value":1121},{"type":30,"tag":1046,"props":26645,"children":26646},{"class":1048,"line":1201},[26647,26651],{"type":30,"tag":1046,"props":26648,"children":26649},{"style":1647},[26650],{"type":40,"value":1828},{"type":30,"tag":1046,"props":26652,"children":26653},{"style":1653},[26654],{"type":40,"value":13736},{"type":30,"tag":1046,"props":26656,"children":26657},{"class":1048,"line":1210},[26658,26662,26666,26671,26675],{"type":30,"tag":1046,"props":26659,"children":26660},{"style":1053},[26661],{"type":40,"value":1130},{"type":30,"tag":1046,"props":26663,"children":26664},{"style":1053},[26665],{"type":40,"value":1135},{"type":30,"tag":1046,"props":26667,"children":26668},{"style":1138},[26669],{"type":40,"value":26670}," testCalculateSalary",{"type":30,"tag":1046,"props":26672,"children":26673},{"style":1070},[26674],{"type":40,"value":1320},{"type":30,"tag":1046,"props":26676,"children":26677},{"style":1070},[26678],{"type":40,"value":1073},{"type":30,"tag":1046,"props":26680,"children":26681},{"class":1048,"line":1218},[26682,26687,26692,26696,26700,26704,26708,26713,26717,26722],{"type":30,"tag":1046,"props":26683,"children":26684},{"style":1084},[26685],{"type":40,"value":26686},"        Employee",{"type":30,"tag":1046,"props":26688,"children":26689},{"style":1105},[26690],{"type":40,"value":26691}," employee ",{"type":30,"tag":1046,"props":26693,"children":26694},{"style":1795},[26695],{"type":40,"value":1798},{"type":30,"tag":1046,"props":26697,"children":26698},{"style":1053},[26699],{"type":40,"value":2480},{"type":30,"tag":1046,"props":26701,"children":26702},{"style":1138},[26703],{"type":40,"value":24181},{"type":30,"tag":1046,"props":26705,"children":26706},{"style":1070},[26707],{"type":40,"value":1146},{"type":30,"tag":1046,"props":26709,"children":26710},{"style":1675},[26711],{"type":40,"value":26712},"\"John\"",{"type":30,"tag":1046,"props":26714,"children":26715},{"style":1070},[26716],{"type":40,"value":2891},{"type":30,"tag":1046,"props":26718,"children":26719},{"style":1675},[26720],{"type":40,"value":26721}," \"IT\"",{"type":30,"tag":1046,"props":26723,"children":26724},{"style":1070},[26725],{"type":40,"value":1198},{"type":30,"tag":1046,"props":26727,"children":26728},{"class":1048,"line":1255},[26729,26734,26739,26743,26747,26751],{"type":30,"tag":1046,"props":26730,"children":26731},{"style":1084},[26732],{"type":40,"value":26733},"        SalaryService",{"type":30,"tag":1046,"props":26735,"children":26736},{"style":1105},[26737],{"type":40,"value":26738}," salaryService ",{"type":30,"tag":1046,"props":26740,"children":26741},{"style":1795},[26742],{"type":40,"value":1798},{"type":30,"tag":1046,"props":26744,"children":26745},{"style":1053},[26746],{"type":40,"value":2480},{"type":30,"tag":1046,"props":26748,"children":26749},{"style":1138},[26750],{"type":40,"value":25543},{"type":30,"tag":1046,"props":26752,"children":26753},{"style":1070},[26754],{"type":40,"value":1406},{"type":30,"tag":1046,"props":26756,"children":26757},{"class":1048,"line":1284},[26758,26762,26767,26771,26776,26780,26785,26789,26794],{"type":30,"tag":1046,"props":26759,"children":26760},{"style":1053},[26761],{"type":40,"value":5933},{"type":30,"tag":1046,"props":26763,"children":26764},{"style":1105},[26765],{"type":40,"value":26766}," salary ",{"type":30,"tag":1046,"props":26768,"children":26769},{"style":1795},[26770],{"type":40,"value":1798},{"type":30,"tag":1046,"props":26772,"children":26773},{"style":1105},[26774],{"type":40,"value":26775}," salaryService",{"type":30,"tag":1046,"props":26777,"children":26778},{"style":1070},[26779],{"type":40,"value":1179},{"type":30,"tag":1046,"props":26781,"children":26782},{"style":1138},[26783],{"type":40,"value":26784},"calculateSalary",{"type":30,"tag":1046,"props":26786,"children":26787},{"style":1070},[26788],{"type":40,"value":1146},{"type":30,"tag":1046,"props":26790,"children":26791},{"style":1105},[26792],{"type":40,"value":26793},"employee",{"type":30,"tag":1046,"props":26795,"children":26796},{"style":1070},[26797],{"type":40,"value":1198},{"type":30,"tag":1046,"props":26799,"children":26800},{"class":1048,"line":1292},[26801],{"type":30,"tag":1046,"props":26802,"children":26803},{"emptyLinePlaceholder":13},[26804],{"type":40,"value":1121},{"type":30,"tag":1046,"props":26806,"children":26807},{"class":1048,"line":1300},[26808,26813,26817,26822,26826,26830,26834,26839,26843],{"type":30,"tag":1046,"props":26809,"children":26810},{"style":1138},[26811],{"type":40,"value":26812},"        assertEquals",{"type":30,"tag":1046,"props":26814,"children":26815},{"style":1070},[26816],{"type":40,"value":1146},{"type":30,"tag":1046,"props":26818,"children":26819},{"style":6886},[26820],{"type":40,"value":26821},"3000",{"type":30,"tag":1046,"props":26823,"children":26824},{"style":1070},[26825],{"type":40,"value":2891},{"type":30,"tag":1046,"props":26827,"children":26828},{"style":1105},[26829],{"type":40,"value":24220},{"type":30,"tag":1046,"props":26831,"children":26832},{"style":1070},[26833],{"type":40,"value":2891},{"type":30,"tag":1046,"props":26835,"children":26836},{"style":6886},[26837],{"type":40,"value":26838}," 0.01",{"type":30,"tag":1046,"props":26840,"children":26841},{"style":1070},[26842],{"type":40,"value":3958},{"type":30,"tag":1046,"props":26844,"children":26845},{"style":3961},[26846],{"type":40,"value":26847}," // Vérifie si le salaire est bien calculé\n",{"type":30,"tag":1046,"props":26849,"children":26850},{"class":1048,"line":1327},[26851],{"type":30,"tag":1046,"props":26852,"children":26853},{"style":1070},[26854],{"type":40,"value":1207},{"type":30,"tag":1046,"props":26856,"children":26857},{"class":1048,"line":1354},[26858],{"type":30,"tag":1046,"props":26859,"children":26860},{"style":1070},[26861],{"type":40,"value":1423},{"type":30,"tag":84,"props":26863,"children":26864},{},[],{"type":30,"tag":31,"props":26866,"children":26868},{"id":26867},"exemples-pratiques-de-code-évolutif-en-java",[26869],{"type":40,"value":26870},"Exemples pratiques de code évolutif en Java",{"type":30,"tag":43,"props":26872,"children":26873},{},[26874],{"type":40,"value":26875},"Voici des exemples concrets qui montrent comment appliquer les principes d'écriture de code évolutif en Java. Vous verrez comment améliorer du code pour le rendre plus maintenable et évolutif. J'ai vu ces patterns se répéter dans des dizaines d'équipes que j'ai accompagnées, notamment dans des DSI bancaires où la dette structurelle s'accumule vite faute de séparation des responsabilités.",{"type":30,"tag":116,"props":26877,"children":26879},{"id":26878},"exemple-1-application-du-principe-de-responsabilité-unique-srp",[26880],{"type":40,"value":26881},"Exemple 1 : Application du principe de Responsabilité unique (SRP)",{"type":30,"tag":43,"props":26883,"children":26884},{},[26885,26887,26891,26893,26898],{"type":40,"value":26886},"Prenons un exemple de code qui viole le ",{"type":30,"tag":36,"props":26888,"children":26889},{},[26890],{"type":40,"value":21994},{"type":40,"value":26892}," (SRP). Ici, une classe ",{"type":30,"tag":1042,"props":26894,"children":26896},{"className":26895},[],[26897],{"type":40,"value":15652},{"type":40,"value":26899}," fait trop de choses à la fois, notamment gérer les détails de la commande, traiter le paiement et générer des factures.",{"type":30,"tag":2339,"props":26901,"children":26903},{"id":26902},"avant-code-non-évolutif",[26904],{"type":40,"value":26905},"Avant : Code non évolutif",{"type":30,"tag":1035,"props":26907,"children":26909},{"className":1039,"code":26908,"language":1038,"meta":8,"style":8},"public class Order {\n    private String product;\n    private int quantity;\n    private double price;\n\n    public Order(String product, int quantity, double price) {\n        this.product = product;\n        this.quantity = quantity;\n        this.price = price;\n    }\n\n    public void processOrder() {\n        // Logique pour traiter la commande\n    }\n\n    public void generateInvoice() {\n        // Logique pour générer une facture\n    }\n\n    public void processPayment() {\n        // Logique pour traiter le paiement\n    }\n}\n",[26910],{"type":30,"tag":1042,"props":26911,"children":26912},{"__ignoreMap":8},[26913,26933,26952,26972,26992,26999,27054,27082,27110,27138,27145,27152,27175,27183,27190,27197,27221,27229,27236,27243,27266,27274,27281],{"type":30,"tag":1046,"props":26914,"children":26915},{"class":1048,"line":1049},[26916,26920,26924,26929],{"type":30,"tag":1046,"props":26917,"children":26918},{"style":1053},[26919],{"type":40,"value":1056},{"type":30,"tag":1046,"props":26921,"children":26922},{"style":1053},[26923],{"type":40,"value":1061},{"type":30,"tag":1046,"props":26925,"children":26926},{"style":1064},[26927],{"type":40,"value":26928}," Order",{"type":30,"tag":1046,"props":26930,"children":26931},{"style":1070},[26932],{"type":40,"value":1073},{"type":30,"tag":1046,"props":26934,"children":26935},{"class":1048,"line":675},[26936,26940,26944,26948],{"type":30,"tag":1046,"props":26937,"children":26938},{"style":1053},[26939],{"type":40,"value":1081},{"type":30,"tag":1046,"props":26941,"children":26942},{"style":1084},[26943],{"type":40,"value":2067},{"type":30,"tag":1046,"props":26945,"children":26946},{"style":1105},[26947],{"type":40,"value":6914},{"type":30,"tag":1046,"props":26949,"children":26950},{"style":1070},[26951],{"type":40,"value":1113},{"type":30,"tag":1046,"props":26953,"children":26954},{"class":1048,"line":681},[26955,26959,26963,26968],{"type":30,"tag":1046,"props":26956,"children":26957},{"style":1053},[26958],{"type":40,"value":1081},{"type":30,"tag":1046,"props":26960,"children":26961},{"style":1053},[26962],{"type":40,"value":10265},{"type":30,"tag":1046,"props":26964,"children":26965},{"style":1105},[26966],{"type":40,"value":26967}," quantity",{"type":30,"tag":1046,"props":26969,"children":26970},{"style":1070},[26971],{"type":40,"value":1113},{"type":30,"tag":1046,"props":26973,"children":26974},{"class":1048,"line":1124},[26975,26979,26983,26988],{"type":30,"tag":1046,"props":26976,"children":26977},{"style":1053},[26978],{"type":40,"value":1081},{"type":30,"tag":1046,"props":26980,"children":26981},{"style":1053},[26982],{"type":40,"value":1310},{"type":30,"tag":1046,"props":26984,"children":26985},{"style":1105},[26986],{"type":40,"value":26987}," price",{"type":30,"tag":1046,"props":26989,"children":26990},{"style":1070},[26991],{"type":40,"value":1113},{"type":30,"tag":1046,"props":26993,"children":26994},{"class":1048,"line":1168},[26995],{"type":30,"tag":1046,"props":26996,"children":26997},{"emptyLinePlaceholder":13},[26998],{"type":40,"value":1121},{"type":30,"tag":1046,"props":27000,"children":27001},{"class":1048,"line":1201},[27002,27006,27010,27014,27018,27022,27026,27030,27034,27038,27042,27046,27050],{"type":30,"tag":1046,"props":27003,"children":27004},{"style":1053},[27005],{"type":40,"value":1130},{"type":30,"tag":1046,"props":27007,"children":27008},{"style":1138},[27009],{"type":40,"value":26928},{"type":30,"tag":1046,"props":27011,"children":27012},{"style":1070},[27013],{"type":40,"value":1146},{"type":30,"tag":1046,"props":27015,"children":27016},{"style":1084},[27017],{"type":40,"value":2882},{"type":30,"tag":1046,"props":27019,"children":27020},{"style":1153},[27021],{"type":40,"value":6914},{"type":30,"tag":1046,"props":27023,"children":27024},{"style":1070},[27025],{"type":40,"value":2891},{"type":30,"tag":1046,"props":27027,"children":27028},{"style":1053},[27029],{"type":40,"value":10265},{"type":30,"tag":1046,"props":27031,"children":27032},{"style":1153},[27033],{"type":40,"value":26967},{"type":30,"tag":1046,"props":27035,"children":27036},{"style":1070},[27037],{"type":40,"value":2891},{"type":30,"tag":1046,"props":27039,"children":27040},{"style":1053},[27041],{"type":40,"value":1310},{"type":30,"tag":1046,"props":27043,"children":27044},{"style":1153},[27045],{"type":40,"value":26987},{"type":30,"tag":1046,"props":27047,"children":27048},{"style":1070},[27049],{"type":40,"value":1161},{"type":30,"tag":1046,"props":27051,"children":27052},{"style":1070},[27053],{"type":40,"value":1073},{"type":30,"tag":1046,"props":27055,"children":27056},{"class":1048,"line":1210},[27057,27061,27065,27070,27074,27078],{"type":30,"tag":1046,"props":27058,"children":27059},{"style":1780},[27060],{"type":40,"value":1783},{"type":30,"tag":1046,"props":27062,"children":27063},{"style":1070},[27064],{"type":40,"value":1179},{"type":30,"tag":1046,"props":27066,"children":27067},{"style":1105},[27068],{"type":40,"value":27069},"product ",{"type":30,"tag":1046,"props":27071,"children":27072},{"style":1795},[27073],{"type":40,"value":1798},{"type":30,"tag":1046,"props":27075,"children":27076},{"style":1105},[27077],{"type":40,"value":6914},{"type":30,"tag":1046,"props":27079,"children":27080},{"style":1070},[27081],{"type":40,"value":1113},{"type":30,"tag":1046,"props":27083,"children":27084},{"class":1048,"line":1218},[27085,27089,27093,27098,27102,27106],{"type":30,"tag":1046,"props":27086,"children":27087},{"style":1780},[27088],{"type":40,"value":1783},{"type":30,"tag":1046,"props":27090,"children":27091},{"style":1070},[27092],{"type":40,"value":1179},{"type":30,"tag":1046,"props":27094,"children":27095},{"style":1105},[27096],{"type":40,"value":27097},"quantity ",{"type":30,"tag":1046,"props":27099,"children":27100},{"style":1795},[27101],{"type":40,"value":1798},{"type":30,"tag":1046,"props":27103,"children":27104},{"style":1105},[27105],{"type":40,"value":26967},{"type":30,"tag":1046,"props":27107,"children":27108},{"style":1070},[27109],{"type":40,"value":1113},{"type":30,"tag":1046,"props":27111,"children":27112},{"class":1048,"line":1255},[27113,27117,27121,27126,27130,27134],{"type":30,"tag":1046,"props":27114,"children":27115},{"style":1780},[27116],{"type":40,"value":1783},{"type":30,"tag":1046,"props":27118,"children":27119},{"style":1070},[27120],{"type":40,"value":1179},{"type":30,"tag":1046,"props":27122,"children":27123},{"style":1105},[27124],{"type":40,"value":27125},"price ",{"type":30,"tag":1046,"props":27127,"children":27128},{"style":1795},[27129],{"type":40,"value":1798},{"type":30,"tag":1046,"props":27131,"children":27132},{"style":1105},[27133],{"type":40,"value":26987},{"type":30,"tag":1046,"props":27135,"children":27136},{"style":1070},[27137],{"type":40,"value":1113},{"type":30,"tag":1046,"props":27139,"children":27140},{"class":1048,"line":1284},[27141],{"type":30,"tag":1046,"props":27142,"children":27143},{"style":1070},[27144],{"type":40,"value":1207},{"type":30,"tag":1046,"props":27146,"children":27147},{"class":1048,"line":1292},[27148],{"type":30,"tag":1046,"props":27149,"children":27150},{"emptyLinePlaceholder":13},[27151],{"type":40,"value":1121},{"type":30,"tag":1046,"props":27153,"children":27154},{"class":1048,"line":1300},[27155,27159,27163,27167,27171],{"type":30,"tag":1046,"props":27156,"children":27157},{"style":1053},[27158],{"type":40,"value":1130},{"type":30,"tag":1046,"props":27160,"children":27161},{"style":1053},[27162],{"type":40,"value":1135},{"type":30,"tag":1046,"props":27164,"children":27165},{"style":1138},[27166],{"type":40,"value":15643},{"type":30,"tag":1046,"props":27168,"children":27169},{"style":1070},[27170],{"type":40,"value":1320},{"type":30,"tag":1046,"props":27172,"children":27173},{"style":1070},[27174],{"type":40,"value":1073},{"type":30,"tag":1046,"props":27176,"children":27177},{"class":1048,"line":1327},[27178],{"type":30,"tag":1046,"props":27179,"children":27180},{"style":3961},[27181],{"type":40,"value":27182},"        // Logique pour traiter la commande\n",{"type":30,"tag":1046,"props":27184,"children":27185},{"class":1048,"line":1354},[27186],{"type":30,"tag":1046,"props":27187,"children":27188},{"style":1070},[27189],{"type":40,"value":1207},{"type":30,"tag":1046,"props":27191,"children":27192},{"class":1048,"line":1391},[27193],{"type":30,"tag":1046,"props":27194,"children":27195},{"emptyLinePlaceholder":13},[27196],{"type":40,"value":1121},{"type":30,"tag":1046,"props":27198,"children":27199},{"class":1048,"line":1409},[27200,27204,27208,27213,27217],{"type":30,"tag":1046,"props":27201,"children":27202},{"style":1053},[27203],{"type":40,"value":1130},{"type":30,"tag":1046,"props":27205,"children":27206},{"style":1053},[27207],{"type":40,"value":1135},{"type":30,"tag":1046,"props":27209,"children":27210},{"style":1138},[27211],{"type":40,"value":27212}," generateInvoice",{"type":30,"tag":1046,"props":27214,"children":27215},{"style":1070},[27216],{"type":40,"value":1320},{"type":30,"tag":1046,"props":27218,"children":27219},{"style":1070},[27220],{"type":40,"value":1073},{"type":30,"tag":1046,"props":27222,"children":27223},{"class":1048,"line":1417},[27224],{"type":30,"tag":1046,"props":27225,"children":27226},{"style":3961},[27227],{"type":40,"value":27228},"        // Logique pour générer une facture\n",{"type":30,"tag":1046,"props":27230,"children":27231},{"class":1048,"line":2023},[27232],{"type":30,"tag":1046,"props":27233,"children":27234},{"style":1070},[27235],{"type":40,"value":1207},{"type":30,"tag":1046,"props":27237,"children":27238},{"class":1048,"line":2083},[27239],{"type":30,"tag":1046,"props":27240,"children":27241},{"emptyLinePlaceholder":13},[27242],{"type":40,"value":1121},{"type":30,"tag":1046,"props":27244,"children":27245},{"class":1048,"line":2126},[27246,27250,27254,27258,27262],{"type":30,"tag":1046,"props":27247,"children":27248},{"style":1053},[27249],{"type":40,"value":1130},{"type":30,"tag":1046,"props":27251,"children":27252},{"style":1053},[27253],{"type":40,"value":1135},{"type":30,"tag":1046,"props":27255,"children":27256},{"style":1138},[27257],{"type":40,"value":20317},{"type":30,"tag":1046,"props":27259,"children":27260},{"style":1070},[27261],{"type":40,"value":1320},{"type":30,"tag":1046,"props":27263,"children":27264},{"style":1070},[27265],{"type":40,"value":1073},{"type":30,"tag":1046,"props":27267,"children":27268},{"class":1048,"line":2159},[27269],{"type":30,"tag":1046,"props":27270,"children":27271},{"style":3961},[27272],{"type":40,"value":27273},"        // Logique pour traiter le paiement\n",{"type":30,"tag":1046,"props":27275,"children":27276},{"class":1048,"line":2167},[27277],{"type":30,"tag":1046,"props":27278,"children":27279},{"style":1070},[27280],{"type":40,"value":1207},{"type":30,"tag":1046,"props":27282,"children":27283},{"class":1048,"line":4537},[27284],{"type":30,"tag":1046,"props":27285,"children":27286},{"style":1070},[27287],{"type":40,"value":1423},{"type":30,"tag":2339,"props":27289,"children":27291},{"id":27290},"après-code-évolutif",[27292],{"type":40,"value":27293},"Après : Code évolutif",{"type":30,"tag":43,"props":27295,"children":27296},{},[27297],{"type":40,"value":27298},"Voici une version améliorée en appliquant le principe de responsabilité unique. Chaque classe a désormais un rôle distinct.",{"type":30,"tag":1035,"props":27300,"children":27302},{"className":1039,"code":27301,"language":1038,"meta":8,"style":8},"public class Order {\n    private String product;\n    private int quantity;\n    private double price;\n\n    public Order(String product, int quantity, double price) {\n        this.product = product;\n        this.quantity = quantity;\n        this.price = price;\n    }\n\n    // Méthode pour obtenir le prix total de la commande\n    public double getTotalPrice() {\n        return quantity * price;\n    }\n}\n\n// Classe pour traiter le paiement\npublic class PaymentService {\n    public void processPayment(Order order) {\n        // Logique pour traiter le paiement\n    }\n}\n\n// Classe pour générer une facture\npublic class InvoiceService {\n    public void generateInvoice(Order order) {\n        // Logique pour générer une facture\n    }\n}\n",[27303],{"type":30,"tag":1042,"props":27304,"children":27305},{"__ignoreMap":8},[27306,27325,27344,27363,27382,27389,27444,27471,27498,27525,27532,27539,27547,27571,27595,27602,27609,27616,27624,27643,27678,27685,27692,27699,27706,27714,27734,27769,27776,27783],{"type":30,"tag":1046,"props":27307,"children":27308},{"class":1048,"line":1049},[27309,27313,27317,27321],{"type":30,"tag":1046,"props":27310,"children":27311},{"style":1053},[27312],{"type":40,"value":1056},{"type":30,"tag":1046,"props":27314,"children":27315},{"style":1053},[27316],{"type":40,"value":1061},{"type":30,"tag":1046,"props":27318,"children":27319},{"style":1064},[27320],{"type":40,"value":26928},{"type":30,"tag":1046,"props":27322,"children":27323},{"style":1070},[27324],{"type":40,"value":1073},{"type":30,"tag":1046,"props":27326,"children":27327},{"class":1048,"line":675},[27328,27332,27336,27340],{"type":30,"tag":1046,"props":27329,"children":27330},{"style":1053},[27331],{"type":40,"value":1081},{"type":30,"tag":1046,"props":27333,"children":27334},{"style":1084},[27335],{"type":40,"value":2067},{"type":30,"tag":1046,"props":27337,"children":27338},{"style":1105},[27339],{"type":40,"value":6914},{"type":30,"tag":1046,"props":27341,"children":27342},{"style":1070},[27343],{"type":40,"value":1113},{"type":30,"tag":1046,"props":27345,"children":27346},{"class":1048,"line":681},[27347,27351,27355,27359],{"type":30,"tag":1046,"props":27348,"children":27349},{"style":1053},[27350],{"type":40,"value":1081},{"type":30,"tag":1046,"props":27352,"children":27353},{"style":1053},[27354],{"type":40,"value":10265},{"type":30,"tag":1046,"props":27356,"children":27357},{"style":1105},[27358],{"type":40,"value":26967},{"type":30,"tag":1046,"props":27360,"children":27361},{"style":1070},[27362],{"type":40,"value":1113},{"type":30,"tag":1046,"props":27364,"children":27365},{"class":1048,"line":1124},[27366,27370,27374,27378],{"type":30,"tag":1046,"props":27367,"children":27368},{"style":1053},[27369],{"type":40,"value":1081},{"type":30,"tag":1046,"props":27371,"children":27372},{"style":1053},[27373],{"type":40,"value":1310},{"type":30,"tag":1046,"props":27375,"children":27376},{"style":1105},[27377],{"type":40,"value":26987},{"type":30,"tag":1046,"props":27379,"children":27380},{"style":1070},[27381],{"type":40,"value":1113},{"type":30,"tag":1046,"props":27383,"children":27384},{"class":1048,"line":1168},[27385],{"type":30,"tag":1046,"props":27386,"children":27387},{"emptyLinePlaceholder":13},[27388],{"type":40,"value":1121},{"type":30,"tag":1046,"props":27390,"children":27391},{"class":1048,"line":1201},[27392,27396,27400,27404,27408,27412,27416,27420,27424,27428,27432,27436,27440],{"type":30,"tag":1046,"props":27393,"children":27394},{"style":1053},[27395],{"type":40,"value":1130},{"type":30,"tag":1046,"props":27397,"children":27398},{"style":1138},[27399],{"type":40,"value":26928},{"type":30,"tag":1046,"props":27401,"children":27402},{"style":1070},[27403],{"type":40,"value":1146},{"type":30,"tag":1046,"props":27405,"children":27406},{"style":1084},[27407],{"type":40,"value":2882},{"type":30,"tag":1046,"props":27409,"children":27410},{"style":1153},[27411],{"type":40,"value":6914},{"type":30,"tag":1046,"props":27413,"children":27414},{"style":1070},[27415],{"type":40,"value":2891},{"type":30,"tag":1046,"props":27417,"children":27418},{"style":1053},[27419],{"type":40,"value":10265},{"type":30,"tag":1046,"props":27421,"children":27422},{"style":1153},[27423],{"type":40,"value":26967},{"type":30,"tag":1046,"props":27425,"children":27426},{"style":1070},[27427],{"type":40,"value":2891},{"type":30,"tag":1046,"props":27429,"children":27430},{"style":1053},[27431],{"type":40,"value":1310},{"type":30,"tag":1046,"props":27433,"children":27434},{"style":1153},[27435],{"type":40,"value":26987},{"type":30,"tag":1046,"props":27437,"children":27438},{"style":1070},[27439],{"type":40,"value":1161},{"type":30,"tag":1046,"props":27441,"children":27442},{"style":1070},[27443],{"type":40,"value":1073},{"type":30,"tag":1046,"props":27445,"children":27446},{"class":1048,"line":1210},[27447,27451,27455,27459,27463,27467],{"type":30,"tag":1046,"props":27448,"children":27449},{"style":1780},[27450],{"type":40,"value":1783},{"type":30,"tag":1046,"props":27452,"children":27453},{"style":1070},[27454],{"type":40,"value":1179},{"type":30,"tag":1046,"props":27456,"children":27457},{"style":1105},[27458],{"type":40,"value":27069},{"type":30,"tag":1046,"props":27460,"children":27461},{"style":1795},[27462],{"type":40,"value":1798},{"type":30,"tag":1046,"props":27464,"children":27465},{"style":1105},[27466],{"type":40,"value":6914},{"type":30,"tag":1046,"props":27468,"children":27469},{"style":1070},[27470],{"type":40,"value":1113},{"type":30,"tag":1046,"props":27472,"children":27473},{"class":1048,"line":1218},[27474,27478,27482,27486,27490,27494],{"type":30,"tag":1046,"props":27475,"children":27476},{"style":1780},[27477],{"type":40,"value":1783},{"type":30,"tag":1046,"props":27479,"children":27480},{"style":1070},[27481],{"type":40,"value":1179},{"type":30,"tag":1046,"props":27483,"children":27484},{"style":1105},[27485],{"type":40,"value":27097},{"type":30,"tag":1046,"props":27487,"children":27488},{"style":1795},[27489],{"type":40,"value":1798},{"type":30,"tag":1046,"props":27491,"children":27492},{"style":1105},[27493],{"type":40,"value":26967},{"type":30,"tag":1046,"props":27495,"children":27496},{"style":1070},[27497],{"type":40,"value":1113},{"type":30,"tag":1046,"props":27499,"children":27500},{"class":1048,"line":1255},[27501,27505,27509,27513,27517,27521],{"type":30,"tag":1046,"props":27502,"children":27503},{"style":1780},[27504],{"type":40,"value":1783},{"type":30,"tag":1046,"props":27506,"children":27507},{"style":1070},[27508],{"type":40,"value":1179},{"type":30,"tag":1046,"props":27510,"children":27511},{"style":1105},[27512],{"type":40,"value":27125},{"type":30,"tag":1046,"props":27514,"children":27515},{"style":1795},[27516],{"type":40,"value":1798},{"type":30,"tag":1046,"props":27518,"children":27519},{"style":1105},[27520],{"type":40,"value":26987},{"type":30,"tag":1046,"props":27522,"children":27523},{"style":1070},[27524],{"type":40,"value":1113},{"type":30,"tag":1046,"props":27526,"children":27527},{"class":1048,"line":1284},[27528],{"type":30,"tag":1046,"props":27529,"children":27530},{"style":1070},[27531],{"type":40,"value":1207},{"type":30,"tag":1046,"props":27533,"children":27534},{"class":1048,"line":1292},[27535],{"type":30,"tag":1046,"props":27536,"children":27537},{"emptyLinePlaceholder":13},[27538],{"type":40,"value":1121},{"type":30,"tag":1046,"props":27540,"children":27541},{"class":1048,"line":1300},[27542],{"type":30,"tag":1046,"props":27543,"children":27544},{"style":3961},[27545],{"type":40,"value":27546},"    // Méthode pour obtenir le prix total de la commande\n",{"type":30,"tag":1046,"props":27548,"children":27549},{"class":1048,"line":1327},[27550,27554,27558,27563,27567],{"type":30,"tag":1046,"props":27551,"children":27552},{"style":1053},[27553],{"type":40,"value":1130},{"type":30,"tag":1046,"props":27555,"children":27556},{"style":1053},[27557],{"type":40,"value":1310},{"type":30,"tag":1046,"props":27559,"children":27560},{"style":1138},[27561],{"type":40,"value":27562}," getTotalPrice",{"type":30,"tag":1046,"props":27564,"children":27565},{"style":1070},[27566],{"type":40,"value":1320},{"type":30,"tag":1046,"props":27568,"children":27569},{"style":1070},[27570],{"type":40,"value":1073},{"type":30,"tag":1046,"props":27572,"children":27573},{"class":1048,"line":1354},[27574,27578,27583,27587,27591],{"type":30,"tag":1046,"props":27575,"children":27576},{"style":1053},[27577],{"type":40,"value":1333},{"type":30,"tag":1046,"props":27579,"children":27580},{"style":1105},[27581],{"type":40,"value":27582}," quantity ",{"type":30,"tag":1046,"props":27584,"children":27585},{"style":1795},[27586],{"type":40,"value":21197},{"type":30,"tag":1046,"props":27588,"children":27589},{"style":1105},[27590],{"type":40,"value":26987},{"type":30,"tag":1046,"props":27592,"children":27593},{"style":1070},[27594],{"type":40,"value":1113},{"type":30,"tag":1046,"props":27596,"children":27597},{"class":1048,"line":1391},[27598],{"type":30,"tag":1046,"props":27599,"children":27600},{"style":1070},[27601],{"type":40,"value":1207},{"type":30,"tag":1046,"props":27603,"children":27604},{"class":1048,"line":1409},[27605],{"type":30,"tag":1046,"props":27606,"children":27607},{"style":1070},[27608],{"type":40,"value":1423},{"type":30,"tag":1046,"props":27610,"children":27611},{"class":1048,"line":1417},[27612],{"type":30,"tag":1046,"props":27613,"children":27614},{"emptyLinePlaceholder":13},[27615],{"type":40,"value":1121},{"type":30,"tag":1046,"props":27617,"children":27618},{"class":1048,"line":2023},[27619],{"type":30,"tag":1046,"props":27620,"children":27621},{"style":3961},[27622],{"type":40,"value":27623},"// Classe pour traiter le paiement\n",{"type":30,"tag":1046,"props":27625,"children":27626},{"class":1048,"line":2083},[27627,27631,27635,27639],{"type":30,"tag":1046,"props":27628,"children":27629},{"style":1053},[27630],{"type":40,"value":1056},{"type":30,"tag":1046,"props":27632,"children":27633},{"style":1053},[27634],{"type":40,"value":1061},{"type":30,"tag":1046,"props":27636,"children":27637},{"style":1064},[27638],{"type":40,"value":26302},{"type":30,"tag":1046,"props":27640,"children":27641},{"style":1070},[27642],{"type":40,"value":1073},{"type":30,"tag":1046,"props":27644,"children":27645},{"class":1048,"line":2126},[27646,27650,27654,27658,27662,27666,27670,27674],{"type":30,"tag":1046,"props":27647,"children":27648},{"style":1053},[27649],{"type":40,"value":1130},{"type":30,"tag":1046,"props":27651,"children":27652},{"style":1053},[27653],{"type":40,"value":1135},{"type":30,"tag":1046,"props":27655,"children":27656},{"style":1138},[27657],{"type":40,"value":20317},{"type":30,"tag":1046,"props":27659,"children":27660},{"style":1070},[27661],{"type":40,"value":1146},{"type":30,"tag":1046,"props":27663,"children":27664},{"style":1084},[27665],{"type":40,"value":15652},{"type":30,"tag":1046,"props":27667,"children":27668},{"style":1153},[27669],{"type":40,"value":15657},{"type":30,"tag":1046,"props":27671,"children":27672},{"style":1070},[27673],{"type":40,"value":1161},{"type":30,"tag":1046,"props":27675,"children":27676},{"style":1070},[27677],{"type":40,"value":1073},{"type":30,"tag":1046,"props":27679,"children":27680},{"class":1048,"line":2159},[27681],{"type":30,"tag":1046,"props":27682,"children":27683},{"style":3961},[27684],{"type":40,"value":27273},{"type":30,"tag":1046,"props":27686,"children":27687},{"class":1048,"line":2167},[27688],{"type":30,"tag":1046,"props":27689,"children":27690},{"style":1070},[27691],{"type":40,"value":1207},{"type":30,"tag":1046,"props":27693,"children":27694},{"class":1048,"line":4537},[27695],{"type":30,"tag":1046,"props":27696,"children":27697},{"style":1070},[27698],{"type":40,"value":1423},{"type":30,"tag":1046,"props":27700,"children":27701},{"class":1048,"line":4545},[27702],{"type":30,"tag":1046,"props":27703,"children":27704},{"emptyLinePlaceholder":13},[27705],{"type":40,"value":1121},{"type":30,"tag":1046,"props":27707,"children":27708},{"class":1048,"line":4582},[27709],{"type":30,"tag":1046,"props":27710,"children":27711},{"style":3961},[27712],{"type":40,"value":27713},"// Classe pour générer une facture\n",{"type":30,"tag":1046,"props":27715,"children":27716},{"class":1048,"line":4622},[27717,27721,27725,27730],{"type":30,"tag":1046,"props":27718,"children":27719},{"style":1053},[27720],{"type":40,"value":1056},{"type":30,"tag":1046,"props":27722,"children":27723},{"style":1053},[27724],{"type":40,"value":1061},{"type":30,"tag":1046,"props":27726,"children":27727},{"style":1064},[27728],{"type":40,"value":27729}," InvoiceService",{"type":30,"tag":1046,"props":27731,"children":27732},{"style":1070},[27733],{"type":40,"value":1073},{"type":30,"tag":1046,"props":27735,"children":27736},{"class":1048,"line":4662},[27737,27741,27745,27749,27753,27757,27761,27765],{"type":30,"tag":1046,"props":27738,"children":27739},{"style":1053},[27740],{"type":40,"value":1130},{"type":30,"tag":1046,"props":27742,"children":27743},{"style":1053},[27744],{"type":40,"value":1135},{"type":30,"tag":1046,"props":27746,"children":27747},{"style":1138},[27748],{"type":40,"value":27212},{"type":30,"tag":1046,"props":27750,"children":27751},{"style":1070},[27752],{"type":40,"value":1146},{"type":30,"tag":1046,"props":27754,"children":27755},{"style":1084},[27756],{"type":40,"value":15652},{"type":30,"tag":1046,"props":27758,"children":27759},{"style":1153},[27760],{"type":40,"value":15657},{"type":30,"tag":1046,"props":27762,"children":27763},{"style":1070},[27764],{"type":40,"value":1161},{"type":30,"tag":1046,"props":27766,"children":27767},{"style":1070},[27768],{"type":40,"value":1073},{"type":30,"tag":1046,"props":27770,"children":27771},{"class":1048,"line":4687},[27772],{"type":30,"tag":1046,"props":27773,"children":27774},{"style":3961},[27775],{"type":40,"value":27228},{"type":30,"tag":1046,"props":27777,"children":27778},{"class":1048,"line":4695},[27779],{"type":30,"tag":1046,"props":27780,"children":27781},{"style":1070},[27782],{"type":40,"value":1207},{"type":30,"tag":1046,"props":27784,"children":27785},{"class":1048,"line":4703},[27786],{"type":30,"tag":1046,"props":27787,"children":27788},{"style":1070},[27789],{"type":40,"value":1423},{"type":30,"tag":43,"props":27791,"children":27792},{},[27793,27795,27801,27803,27808],{"type":40,"value":27794},"Maintenant, si vous avez besoin de changer la façon dont les paiements sont gérés, vous pouvez le faire dans la classe ",{"type":30,"tag":1042,"props":27796,"children":27798},{"className":27797},[],[27799],{"type":40,"value":27800},"PaymentService",{"type":40,"value":27802}," sans toucher à la classe ",{"type":30,"tag":1042,"props":27804,"children":27806},{"className":27805},[],[27807],{"type":40,"value":15652},{"type":40,"value":27809},". Cela rend le code beaucoup plus évolutif.",{"type":30,"tag":116,"props":27811,"children":27813},{"id":27812},"exemple-2-gestion-des-dépendances-avec-inversion-de-dépendances",[27814],{"type":40,"value":27815},"Exemple 2 : Gestion des dépendances avec inversion de dépendances",{"type":30,"tag":43,"props":27817,"children":27818},{},[27819,27821,27826],{"type":40,"value":27820},"Dans cet exemple, nous allons améliorer la gestion des dépendances en appliquant le ",{"type":30,"tag":36,"props":27822,"children":27823},{},[27824],{"type":40,"value":27825},"principe d'inversion des dépendances",{"type":40,"value":27827},". Nous allons partir d'une classe qui crée elle-même ses dépendances, ce qui la rend rigide et difficile à tester.",{"type":30,"tag":2339,"props":27829,"children":27831},{"id":27830},"avant-code-non-évolutif-1",[27832],{"type":40,"value":26905},{"type":30,"tag":1035,"props":27834,"children":27836},{"className":1039,"code":27835,"language":1038,"meta":8,"style":8},"public class ShoppingCart {\n    private PaymentService paymentService = new PaymentService();\n\n    public void checkout(Order order) {\n        paymentService.processPayment(order);\n    }\n}\n",[27837],{"type":30,"tag":1042,"props":27838,"children":27839},{"__ignoreMap":8},[27840,27860,27892,27899,27935,27963,27970],{"type":30,"tag":1046,"props":27841,"children":27842},{"class":1048,"line":1049},[27843,27847,27851,27856],{"type":30,"tag":1046,"props":27844,"children":27845},{"style":1053},[27846],{"type":40,"value":1056},{"type":30,"tag":1046,"props":27848,"children":27849},{"style":1053},[27850],{"type":40,"value":1061},{"type":30,"tag":1046,"props":27852,"children":27853},{"style":1064},[27854],{"type":40,"value":27855}," ShoppingCart",{"type":30,"tag":1046,"props":27857,"children":27858},{"style":1070},[27859],{"type":40,"value":1073},{"type":30,"tag":1046,"props":27861,"children":27862},{"class":1048,"line":675},[27863,27867,27871,27876,27880,27884,27888],{"type":30,"tag":1046,"props":27864,"children":27865},{"style":1053},[27866],{"type":40,"value":1081},{"type":30,"tag":1046,"props":27868,"children":27869},{"style":1084},[27870],{"type":40,"value":26302},{"type":30,"tag":1046,"props":27872,"children":27873},{"style":1105},[27874],{"type":40,"value":27875}," paymentService ",{"type":30,"tag":1046,"props":27877,"children":27878},{"style":1795},[27879],{"type":40,"value":1798},{"type":30,"tag":1046,"props":27881,"children":27882},{"style":1053},[27883],{"type":40,"value":2480},{"type":30,"tag":1046,"props":27885,"children":27886},{"style":1138},[27887],{"type":40,"value":26302},{"type":30,"tag":1046,"props":27889,"children":27890},{"style":1070},[27891],{"type":40,"value":1406},{"type":30,"tag":1046,"props":27893,"children":27894},{"class":1048,"line":681},[27895],{"type":30,"tag":1046,"props":27896,"children":27897},{"emptyLinePlaceholder":13},[27898],{"type":40,"value":1121},{"type":30,"tag":1046,"props":27900,"children":27901},{"class":1048,"line":1124},[27902,27906,27910,27915,27919,27923,27927,27931],{"type":30,"tag":1046,"props":27903,"children":27904},{"style":1053},[27905],{"type":40,"value":1130},{"type":30,"tag":1046,"props":27907,"children":27908},{"style":1053},[27909],{"type":40,"value":1135},{"type":30,"tag":1046,"props":27911,"children":27912},{"style":1138},[27913],{"type":40,"value":27914}," checkout",{"type":30,"tag":1046,"props":27916,"children":27917},{"style":1070},[27918],{"type":40,"value":1146},{"type":30,"tag":1046,"props":27920,"children":27921},{"style":1084},[27922],{"type":40,"value":15652},{"type":30,"tag":1046,"props":27924,"children":27925},{"style":1153},[27926],{"type":40,"value":15657},{"type":30,"tag":1046,"props":27928,"children":27929},{"style":1070},[27930],{"type":40,"value":1161},{"type":30,"tag":1046,"props":27932,"children":27933},{"style":1070},[27934],{"type":40,"value":1073},{"type":30,"tag":1046,"props":27936,"children":27937},{"class":1048,"line":1168},[27938,27943,27947,27951,27955,27959],{"type":30,"tag":1046,"props":27939,"children":27940},{"style":1105},[27941],{"type":40,"value":27942},"        paymentService",{"type":30,"tag":1046,"props":27944,"children":27945},{"style":1070},[27946],{"type":40,"value":1179},{"type":30,"tag":1046,"props":27948,"children":27949},{"style":1138},[27950],{"type":40,"value":20857},{"type":30,"tag":1046,"props":27952,"children":27953},{"style":1070},[27954],{"type":40,"value":1146},{"type":30,"tag":1046,"props":27956,"children":27957},{"style":1105},[27958],{"type":40,"value":15689},{"type":30,"tag":1046,"props":27960,"children":27961},{"style":1070},[27962],{"type":40,"value":1198},{"type":30,"tag":1046,"props":27964,"children":27965},{"class":1048,"line":1201},[27966],{"type":30,"tag":1046,"props":27967,"children":27968},{"style":1070},[27969],{"type":40,"value":1207},{"type":30,"tag":1046,"props":27971,"children":27972},{"class":1048,"line":1210},[27973],{"type":30,"tag":1046,"props":27974,"children":27975},{"style":1070},[27976],{"type":40,"value":1423},{"type":30,"tag":43,"props":27978,"children":27979},{},[27980,27982,27988,27990,27995,27997,28002],{"type":40,"value":27981},"Dans ce cas, la classe ",{"type":30,"tag":1042,"props":27983,"children":27985},{"className":27984},[],[27986],{"type":40,"value":27987},"ShoppingCart",{"type":40,"value":27989}," est fortement couplée à ",{"type":30,"tag":1042,"props":27991,"children":27993},{"className":27992},[],[27994],{"type":40,"value":27800},{"type":40,"value":27996},", ce qui rend difficile l'ajout d'une nouvelle méthode de paiement, ou le test de ",{"type":30,"tag":1042,"props":27998,"children":28000},{"className":27999},[],[28001],{"type":40,"value":27987},{"type":40,"value":28003}," en isolation.",{"type":30,"tag":2339,"props":28005,"children":28007},{"id":28006},"après-code-évolutif-1",[28008],{"type":40,"value":27293},{"type":30,"tag":43,"props":28010,"children":28011},{},[28012,28014,28019,28021,28026],{"type":40,"value":28013},"Nous allons inverser la dépendance en passant la méthode de paiement comme paramètre dans le constructeur de ",{"type":30,"tag":1042,"props":28015,"children":28017},{"className":28016},[],[28018],{"type":40,"value":27987},{"type":40,"value":28020},". Cela permet de changer facilement l'implémentation du paiement sans modifier ",{"type":30,"tag":1042,"props":28022,"children":28024},{"className":28023},[],[28025],{"type":40,"value":27987},{"type":40,"value":1179},{"type":30,"tag":1035,"props":28028,"children":28030},{"className":1039,"code":28029,"language":1038,"meta":8,"style":8},"public class ShoppingCart {\n    private PaymentMethod paymentMethod;\n\n    public ShoppingCart(PaymentMethod paymentMethod) {\n        this.paymentMethod = paymentMethod;\n    }\n\n    public void checkout(Order order) {\n        paymentMethod.processPayment(order);\n    }\n}\n",[28031],{"type":30,"tag":1042,"props":28032,"children":28033},{"__ignoreMap":8},[28034,28053,28072,28079,28110,28137,28144,28151,28186,28213,28220],{"type":30,"tag":1046,"props":28035,"children":28036},{"class":1048,"line":1049},[28037,28041,28045,28049],{"type":30,"tag":1046,"props":28038,"children":28039},{"style":1053},[28040],{"type":40,"value":1056},{"type":30,"tag":1046,"props":28042,"children":28043},{"style":1053},[28044],{"type":40,"value":1061},{"type":30,"tag":1046,"props":28046,"children":28047},{"style":1064},[28048],{"type":40,"value":27855},{"type":30,"tag":1046,"props":28050,"children":28051},{"style":1070},[28052],{"type":40,"value":1073},{"type":30,"tag":1046,"props":28054,"children":28055},{"class":1048,"line":675},[28056,28060,28064,28068],{"type":30,"tag":1046,"props":28057,"children":28058},{"style":1053},[28059],{"type":40,"value":1081},{"type":30,"tag":1046,"props":28061,"children":28062},{"style":1084},[28063],{"type":40,"value":25151},{"type":30,"tag":1046,"props":28065,"children":28066},{"style":1105},[28067],{"type":40,"value":26322},{"type":30,"tag":1046,"props":28069,"children":28070},{"style":1070},[28071],{"type":40,"value":1113},{"type":30,"tag":1046,"props":28073,"children":28074},{"class":1048,"line":681},[28075],{"type":30,"tag":1046,"props":28076,"children":28077},{"emptyLinePlaceholder":13},[28078],{"type":40,"value":1121},{"type":30,"tag":1046,"props":28080,"children":28081},{"class":1048,"line":1124},[28082,28086,28090,28094,28098,28102,28106],{"type":30,"tag":1046,"props":28083,"children":28084},{"style":1053},[28085],{"type":40,"value":1130},{"type":30,"tag":1046,"props":28087,"children":28088},{"style":1138},[28089],{"type":40,"value":27855},{"type":30,"tag":1046,"props":28091,"children":28092},{"style":1070},[28093],{"type":40,"value":1146},{"type":30,"tag":1046,"props":28095,"children":28096},{"style":1084},[28097],{"type":40,"value":25386},{"type":30,"tag":1046,"props":28099,"children":28100},{"style":1153},[28101],{"type":40,"value":26322},{"type":30,"tag":1046,"props":28103,"children":28104},{"style":1070},[28105],{"type":40,"value":1161},{"type":30,"tag":1046,"props":28107,"children":28108},{"style":1070},[28109],{"type":40,"value":1073},{"type":30,"tag":1046,"props":28111,"children":28112},{"class":1048,"line":1168},[28113,28117,28121,28125,28129,28133],{"type":30,"tag":1046,"props":28114,"children":28115},{"style":1780},[28116],{"type":40,"value":1783},{"type":30,"tag":1046,"props":28118,"children":28119},{"style":1070},[28120],{"type":40,"value":1179},{"type":30,"tag":1046,"props":28122,"children":28123},{"style":1105},[28124],{"type":40,"value":26380},{"type":30,"tag":1046,"props":28126,"children":28127},{"style":1795},[28128],{"type":40,"value":1798},{"type":30,"tag":1046,"props":28130,"children":28131},{"style":1105},[28132],{"type":40,"value":26322},{"type":30,"tag":1046,"props":28134,"children":28135},{"style":1070},[28136],{"type":40,"value":1113},{"type":30,"tag":1046,"props":28138,"children":28139},{"class":1048,"line":1201},[28140],{"type":30,"tag":1046,"props":28141,"children":28142},{"style":1070},[28143],{"type":40,"value":1207},{"type":30,"tag":1046,"props":28145,"children":28146},{"class":1048,"line":1210},[28147],{"type":30,"tag":1046,"props":28148,"children":28149},{"emptyLinePlaceholder":13},[28150],{"type":40,"value":1121},{"type":30,"tag":1046,"props":28152,"children":28153},{"class":1048,"line":1218},[28154,28158,28162,28166,28170,28174,28178,28182],{"type":30,"tag":1046,"props":28155,"children":28156},{"style":1053},[28157],{"type":40,"value":1130},{"type":30,"tag":1046,"props":28159,"children":28160},{"style":1053},[28161],{"type":40,"value":1135},{"type":30,"tag":1046,"props":28163,"children":28164},{"style":1138},[28165],{"type":40,"value":27914},{"type":30,"tag":1046,"props":28167,"children":28168},{"style":1070},[28169],{"type":40,"value":1146},{"type":30,"tag":1046,"props":28171,"children":28172},{"style":1084},[28173],{"type":40,"value":15652},{"type":30,"tag":1046,"props":28175,"children":28176},{"style":1153},[28177],{"type":40,"value":15657},{"type":30,"tag":1046,"props":28179,"children":28180},{"style":1070},[28181],{"type":40,"value":1161},{"type":30,"tag":1046,"props":28183,"children":28184},{"style":1070},[28185],{"type":40,"value":1073},{"type":30,"tag":1046,"props":28187,"children":28188},{"class":1048,"line":1255},[28189,28193,28197,28201,28205,28209],{"type":30,"tag":1046,"props":28190,"children":28191},{"style":1105},[28192],{"type":40,"value":26450},{"type":30,"tag":1046,"props":28194,"children":28195},{"style":1070},[28196],{"type":40,"value":1179},{"type":30,"tag":1046,"props":28198,"children":28199},{"style":1138},[28200],{"type":40,"value":20857},{"type":30,"tag":1046,"props":28202,"children":28203},{"style":1070},[28204],{"type":40,"value":1146},{"type":30,"tag":1046,"props":28206,"children":28207},{"style":1105},[28208],{"type":40,"value":15689},{"type":30,"tag":1046,"props":28210,"children":28211},{"style":1070},[28212],{"type":40,"value":1198},{"type":30,"tag":1046,"props":28214,"children":28215},{"class":1048,"line":1284},[28216],{"type":30,"tag":1046,"props":28217,"children":28218},{"style":1070},[28219],{"type":40,"value":1207},{"type":30,"tag":1046,"props":28221,"children":28222},{"class":1048,"line":1292},[28223],{"type":30,"tag":1046,"props":28224,"children":28225},{"style":1070},[28226],{"type":40,"value":1423},{"type":30,"tag":43,"props":28228,"children":28229},{},[28230,28232,28237,28239,28244],{"type":40,"value":28231},"Maintenant, ",{"type":30,"tag":1042,"props":28233,"children":28235},{"className":28234},[],[28236],{"type":40,"value":27987},{"type":40,"value":28238}," peut accepter n'importe quelle implémentation de ",{"type":30,"tag":1042,"props":28240,"children":28242},{"className":28241},[],[28243],{"type":40,"value":25386},{"type":40,"value":28245}," (carte de crédit, PayPal, etc.), ce qui rend le code beaucoup plus flexible et facile à maintenir.",{"type":30,"tag":1035,"props":28247,"children":28249},{"className":1039,"code":28248,"language":1038,"meta":8,"style":8},"public interface PaymentMethod {\n    void processPayment(Order order);\n}\n\npublic class CreditCardPayment implements PaymentMethod {\n    public void processPayment(Order order) {\n        // Logique pour traiter le paiement par carte\n    }\n}\n\npublic class PayPalPayment implements PaymentMethod {\n    public void processPayment(Order order) {\n        // Logique pour traiter le paiement via PayPal\n    }\n}\n",[28250],{"type":30,"tag":1042,"props":28251,"children":28252},{"__ignoreMap":8},[28253,28272,28299,28306,28313,28340,28375,28383,28390,28397,28404,28431,28466,28474,28481],{"type":30,"tag":1046,"props":28254,"children":28255},{"class":1048,"line":1049},[28256,28260,28264,28268],{"type":30,"tag":1046,"props":28257,"children":28258},{"style":1053},[28259],{"type":40,"value":1056},{"type":30,"tag":1046,"props":28261,"children":28262},{"style":1053},[28263],{"type":40,"value":4852},{"type":30,"tag":1046,"props":28265,"children":28266},{"style":1064},[28267],{"type":40,"value":25151},{"type":30,"tag":1046,"props":28269,"children":28270},{"style":1070},[28271],{"type":40,"value":1073},{"type":30,"tag":1046,"props":28273,"children":28274},{"class":1048,"line":675},[28275,28279,28283,28287,28291,28295],{"type":30,"tag":1046,"props":28276,"children":28277},{"style":1053},[28278],{"type":40,"value":4908},{"type":30,"tag":1046,"props":28280,"children":28281},{"style":1138},[28282],{"type":40,"value":20317},{"type":30,"tag":1046,"props":28284,"children":28285},{"style":1070},[28286],{"type":40,"value":1146},{"type":30,"tag":1046,"props":28288,"children":28289},{"style":1084},[28290],{"type":40,"value":15652},{"type":30,"tag":1046,"props":28292,"children":28293},{"style":1153},[28294],{"type":40,"value":15657},{"type":30,"tag":1046,"props":28296,"children":28297},{"style":1070},[28298],{"type":40,"value":1198},{"type":30,"tag":1046,"props":28300,"children":28301},{"class":1048,"line":681},[28302],{"type":30,"tag":1046,"props":28303,"children":28304},{"style":1070},[28305],{"type":40,"value":1423},{"type":30,"tag":1046,"props":28307,"children":28308},{"class":1048,"line":1124},[28309],{"type":30,"tag":1046,"props":28310,"children":28311},{"emptyLinePlaceholder":13},[28312],{"type":40,"value":1121},{"type":30,"tag":1046,"props":28314,"children":28315},{"class":1048,"line":1168},[28316,28320,28324,28328,28332,28336],{"type":30,"tag":1046,"props":28317,"children":28318},{"style":1053},[28319],{"type":40,"value":1056},{"type":30,"tag":1046,"props":28321,"children":28322},{"style":1053},[28323],{"type":40,"value":1061},{"type":30,"tag":1046,"props":28325,"children":28326},{"style":1064},[28327],{"type":40,"value":25214},{"type":30,"tag":1046,"props":28329,"children":28330},{"style":1053},[28331],{"type":40,"value":3166},{"type":30,"tag":1046,"props":28333,"children":28334},{"style":1064},[28335],{"type":40,"value":25151},{"type":30,"tag":1046,"props":28337,"children":28338},{"style":1070},[28339],{"type":40,"value":1073},{"type":30,"tag":1046,"props":28341,"children":28342},{"class":1048,"line":1201},[28343,28347,28351,28355,28359,28363,28367,28371],{"type":30,"tag":1046,"props":28344,"children":28345},{"style":1053},[28346],{"type":40,"value":1130},{"type":30,"tag":1046,"props":28348,"children":28349},{"style":1053},[28350],{"type":40,"value":1135},{"type":30,"tag":1046,"props":28352,"children":28353},{"style":1138},[28354],{"type":40,"value":20317},{"type":30,"tag":1046,"props":28356,"children":28357},{"style":1070},[28358],{"type":40,"value":1146},{"type":30,"tag":1046,"props":28360,"children":28361},{"style":1084},[28362],{"type":40,"value":15652},{"type":30,"tag":1046,"props":28364,"children":28365},{"style":1153},[28366],{"type":40,"value":15657},{"type":30,"tag":1046,"props":28368,"children":28369},{"style":1070},[28370],{"type":40,"value":1161},{"type":30,"tag":1046,"props":28372,"children":28373},{"style":1070},[28374],{"type":40,"value":1073},{"type":30,"tag":1046,"props":28376,"children":28377},{"class":1048,"line":1210},[28378],{"type":30,"tag":1046,"props":28379,"children":28380},{"style":3961},[28381],{"type":40,"value":28382},"        // Logique pour traiter le paiement par carte\n",{"type":30,"tag":1046,"props":28384,"children":28385},{"class":1048,"line":1218},[28386],{"type":30,"tag":1046,"props":28387,"children":28388},{"style":1070},[28389],{"type":40,"value":1207},{"type":30,"tag":1046,"props":28391,"children":28392},{"class":1048,"line":1255},[28393],{"type":30,"tag":1046,"props":28394,"children":28395},{"style":1070},[28396],{"type":40,"value":1423},{"type":30,"tag":1046,"props":28398,"children":28399},{"class":1048,"line":1284},[28400],{"type":30,"tag":1046,"props":28401,"children":28402},{"emptyLinePlaceholder":13},[28403],{"type":40,"value":1121},{"type":30,"tag":1046,"props":28405,"children":28406},{"class":1048,"line":1292},[28407,28411,28415,28419,28423,28427],{"type":30,"tag":1046,"props":28408,"children":28409},{"style":1053},[28410],{"type":40,"value":1056},{"type":30,"tag":1046,"props":28412,"children":28413},{"style":1053},[28414],{"type":40,"value":1061},{"type":30,"tag":1046,"props":28416,"children":28417},{"style":1064},[28418],{"type":40,"value":25306},{"type":30,"tag":1046,"props":28420,"children":28421},{"style":1053},[28422],{"type":40,"value":3166},{"type":30,"tag":1046,"props":28424,"children":28425},{"style":1064},[28426],{"type":40,"value":25151},{"type":30,"tag":1046,"props":28428,"children":28429},{"style":1070},[28430],{"type":40,"value":1073},{"type":30,"tag":1046,"props":28432,"children":28433},{"class":1048,"line":1300},[28434,28438,28442,28446,28450,28454,28458,28462],{"type":30,"tag":1046,"props":28435,"children":28436},{"style":1053},[28437],{"type":40,"value":1130},{"type":30,"tag":1046,"props":28439,"children":28440},{"style":1053},[28441],{"type":40,"value":1135},{"type":30,"tag":1046,"props":28443,"children":28444},{"style":1138},[28445],{"type":40,"value":20317},{"type":30,"tag":1046,"props":28447,"children":28448},{"style":1070},[28449],{"type":40,"value":1146},{"type":30,"tag":1046,"props":28451,"children":28452},{"style":1084},[28453],{"type":40,"value":15652},{"type":30,"tag":1046,"props":28455,"children":28456},{"style":1153},[28457],{"type":40,"value":15657},{"type":30,"tag":1046,"props":28459,"children":28460},{"style":1070},[28461],{"type":40,"value":1161},{"type":30,"tag":1046,"props":28463,"children":28464},{"style":1070},[28465],{"type":40,"value":1073},{"type":30,"tag":1046,"props":28467,"children":28468},{"class":1048,"line":1327},[28469],{"type":30,"tag":1046,"props":28470,"children":28471},{"style":3961},[28472],{"type":40,"value":28473},"        // Logique pour traiter le paiement via PayPal\n",{"type":30,"tag":1046,"props":28475,"children":28476},{"class":1048,"line":1354},[28477],{"type":30,"tag":1046,"props":28478,"children":28479},{"style":1070},[28480],{"type":40,"value":1207},{"type":30,"tag":1046,"props":28482,"children":28483},{"class":1048,"line":1391},[28484],{"type":30,"tag":1046,"props":28485,"children":28486},{"style":1070},[28487],{"type":40,"value":1423},{"type":30,"tag":116,"props":28489,"children":28491},{"id":28490},"exemple-3-testabilité-et-utilisation-de-tdd",[28492],{"type":40,"value":28493},"Exemple 3 : Testabilité et utilisation de TDD",{"type":30,"tag":43,"props":28495,"children":28496},{},[28497,28499,28504],{"type":40,"value":28498},"L'évolutivité ne concerne pas seulement le code de production, mais aussi les tests. Un code bien conçu doit être facilement testable. L'approche ",{"type":30,"tag":36,"props":28500,"children":28501},{},[28502],{"type":40,"value":28503},"Test-Driven Development (TDD)",{"type":40,"value":28505}," aide à garantir que chaque modification du code est couverte par des tests unitaires, réduisant ainsi le risque d'introduire des bugs.",{"type":30,"tag":2339,"props":28507,"children":28509},{"id":28508},"avant-code-non-testé",[28510],{"type":40,"value":28511},"Avant : Code non testé",{"type":30,"tag":1035,"props":28513,"children":28515},{"className":1039,"code":28514,"language":1038,"meta":8,"style":8},"public class DiscountService {\n    public double applyDiscount(Order order, double discountRate) {\n        return order.getTotalPrice() * (1 - discountRate);\n    }\n}\n",[28516],{"type":30,"tag":1042,"props":28517,"children":28518},{"__ignoreMap":8},[28519,28539,28587,28636,28643],{"type":30,"tag":1046,"props":28520,"children":28521},{"class":1048,"line":1049},[28522,28526,28530,28535],{"type":30,"tag":1046,"props":28523,"children":28524},{"style":1053},[28525],{"type":40,"value":1056},{"type":30,"tag":1046,"props":28527,"children":28528},{"style":1053},[28529],{"type":40,"value":1061},{"type":30,"tag":1046,"props":28531,"children":28532},{"style":1064},[28533],{"type":40,"value":28534}," DiscountService",{"type":30,"tag":1046,"props":28536,"children":28537},{"style":1070},[28538],{"type":40,"value":1073},{"type":30,"tag":1046,"props":28540,"children":28541},{"class":1048,"line":675},[28542,28546,28550,28554,28558,28562,28566,28570,28574,28579,28583],{"type":30,"tag":1046,"props":28543,"children":28544},{"style":1053},[28545],{"type":40,"value":1130},{"type":30,"tag":1046,"props":28547,"children":28548},{"style":1053},[28549],{"type":40,"value":1310},{"type":30,"tag":1046,"props":28551,"children":28552},{"style":1138},[28553],{"type":40,"value":16181},{"type":30,"tag":1046,"props":28555,"children":28556},{"style":1070},[28557],{"type":40,"value":1146},{"type":30,"tag":1046,"props":28559,"children":28560},{"style":1084},[28561],{"type":40,"value":15652},{"type":30,"tag":1046,"props":28563,"children":28564},{"style":1153},[28565],{"type":40,"value":15657},{"type":30,"tag":1046,"props":28567,"children":28568},{"style":1070},[28569],{"type":40,"value":2891},{"type":30,"tag":1046,"props":28571,"children":28572},{"style":1053},[28573],{"type":40,"value":1310},{"type":30,"tag":1046,"props":28575,"children":28576},{"style":1153},[28577],{"type":40,"value":28578}," discountRate",{"type":30,"tag":1046,"props":28580,"children":28581},{"style":1070},[28582],{"type":40,"value":1161},{"type":30,"tag":1046,"props":28584,"children":28585},{"style":1070},[28586],{"type":40,"value":1073},{"type":30,"tag":1046,"props":28588,"children":28589},{"class":1048,"line":681},[28590,28594,28598,28602,28607,28611,28615,28619,28623,28628,28632],{"type":30,"tag":1046,"props":28591,"children":28592},{"style":1053},[28593],{"type":40,"value":1333},{"type":30,"tag":1046,"props":28595,"children":28596},{"style":1105},[28597],{"type":40,"value":15657},{"type":30,"tag":1046,"props":28599,"children":28600},{"style":1070},[28601],{"type":40,"value":1179},{"type":30,"tag":1046,"props":28603,"children":28604},{"style":1138},[28605],{"type":40,"value":28606},"getTotalPrice",{"type":30,"tag":1046,"props":28608,"children":28609},{"style":1070},[28610],{"type":40,"value":1320},{"type":30,"tag":1046,"props":28612,"children":28613},{"style":1795},[28614],{"type":40,"value":15817},{"type":30,"tag":1046,"props":28616,"children":28617},{"style":1070},[28618],{"type":40,"value":11861},{"type":30,"tag":1046,"props":28620,"children":28621},{"style":6886},[28622],{"type":40,"value":10166},{"type":30,"tag":1046,"props":28624,"children":28625},{"style":1795},[28626],{"type":40,"value":28627}," -",{"type":30,"tag":1046,"props":28629,"children":28630},{"style":1105},[28631],{"type":40,"value":28578},{"type":30,"tag":1046,"props":28633,"children":28634},{"style":1070},[28635],{"type":40,"value":1198},{"type":30,"tag":1046,"props":28637,"children":28638},{"class":1048,"line":1124},[28639],{"type":30,"tag":1046,"props":28640,"children":28641},{"style":1070},[28642],{"type":40,"value":1207},{"type":30,"tag":1046,"props":28644,"children":28645},{"class":1048,"line":1168},[28646],{"type":30,"tag":1046,"props":28647,"children":28648},{"style":1070},[28649],{"type":40,"value":1423},{"type":30,"tag":2339,"props":28651,"children":28653},{"id":28652},"après-ajout-de-tests-unitaires",[28654],{"type":40,"value":28655},"Après : Ajout de tests unitaires",{"type":30,"tag":43,"props":28657,"children":28658},{},[28659,28661,28665,28667,28673],{"type":40,"value":28660},"En utilisant ",{"type":30,"tag":36,"props":28662,"children":28663},{},[28664],{"type":40,"value":12965},{"type":40,"value":28666},", nous pouvons écrire un test unitaire pour garantir que la méthode ",{"type":30,"tag":1042,"props":28668,"children":28670},{"className":28669},[],[28671],{"type":40,"value":28672},"applyDiscount",{"type":40,"value":28674}," fonctionne correctement, même après des modifications.",{"type":30,"tag":1035,"props":28676,"children":28678},{"className":1039,"code":28677,"language":1038,"meta":8,"style":8},"import static org.junit.Assert.assertEquals;\nimport org.junit.Test;\n\npublic class DiscountServiceTest {\n\n    @Test\n    public void testApplyDiscount() {\n        Order order = new Order(\"Laptop\", 2, 1000);\n        DiscountService discountService = new DiscountService();\n        double discountedPrice = discountService.applyDiscount(order, 0.1); // 10% de réduction\n\n        assertEquals(1800, discountedPrice, 0.01);\n    }\n}\n",[28679],{"type":30,"tag":1042,"props":28680,"children":28681},{"__ignoreMap":8},[28682,28725,28756,28763,28783,28790,28801,28825,28880,28909,28963,28970,29007,29014],{"type":30,"tag":1046,"props":28683,"children":28684},{"class":1048,"line":1049},[28685,28689,28693,28697,28701,28705,28709,28713,28717,28721],{"type":30,"tag":1046,"props":28686,"children":28687},{"style":1053},[28688],{"type":40,"value":9107},{"type":30,"tag":1046,"props":28690,"children":28691},{"style":1053},[28692],{"type":40,"value":12363},{"type":30,"tag":1046,"props":28694,"children":28695},{"style":1105},[28696],{"type":40,"value":9431},{"type":30,"tag":1046,"props":28698,"children":28699},{"style":1070},[28700],{"type":40,"value":1179},{"type":30,"tag":1046,"props":28702,"children":28703},{"style":1105},[28704],{"type":40,"value":26555},{"type":30,"tag":1046,"props":28706,"children":28707},{"style":1070},[28708],{"type":40,"value":1179},{"type":30,"tag":1046,"props":28710,"children":28711},{"style":1105},[28712],{"type":40,"value":26564},{"type":30,"tag":1046,"props":28714,"children":28715},{"style":1070},[28716],{"type":40,"value":1179},{"type":30,"tag":1046,"props":28718,"children":28719},{"style":1105},[28720],{"type":40,"value":26573},{"type":30,"tag":1046,"props":28722,"children":28723},{"style":1070},[28724],{"type":40,"value":1113},{"type":30,"tag":1046,"props":28726,"children":28727},{"class":1048,"line":675},[28728,28732,28736,28740,28744,28748,28752],{"type":30,"tag":1046,"props":28729,"children":28730},{"style":1053},[28731],{"type":40,"value":9107},{"type":30,"tag":1046,"props":28733,"children":28734},{"style":1105},[28735],{"type":40,"value":9431},{"type":30,"tag":1046,"props":28737,"children":28738},{"style":1070},[28739],{"type":40,"value":1179},{"type":30,"tag":1046,"props":28741,"children":28742},{"style":1105},[28743],{"type":40,"value":26555},{"type":30,"tag":1046,"props":28745,"children":28746},{"style":1070},[28747],{"type":40,"value":1179},{"type":30,"tag":1046,"props":28749,"children":28750},{"style":1105},[28751],{"type":40,"value":26605},{"type":30,"tag":1046,"props":28753,"children":28754},{"style":1070},[28755],{"type":40,"value":1113},{"type":30,"tag":1046,"props":28757,"children":28758},{"class":1048,"line":681},[28759],{"type":30,"tag":1046,"props":28760,"children":28761},{"emptyLinePlaceholder":13},[28762],{"type":40,"value":1121},{"type":30,"tag":1046,"props":28764,"children":28765},{"class":1048,"line":1124},[28766,28770,28774,28779],{"type":30,"tag":1046,"props":28767,"children":28768},{"style":1053},[28769],{"type":40,"value":1056},{"type":30,"tag":1046,"props":28771,"children":28772},{"style":1053},[28773],{"type":40,"value":1061},{"type":30,"tag":1046,"props":28775,"children":28776},{"style":1064},[28777],{"type":40,"value":28778}," DiscountServiceTest",{"type":30,"tag":1046,"props":28780,"children":28781},{"style":1070},[28782],{"type":40,"value":1073},{"type":30,"tag":1046,"props":28784,"children":28785},{"class":1048,"line":1168},[28786],{"type":30,"tag":1046,"props":28787,"children":28788},{"emptyLinePlaceholder":13},[28789],{"type":40,"value":1121},{"type":30,"tag":1046,"props":28791,"children":28792},{"class":1048,"line":1201},[28793,28797],{"type":30,"tag":1046,"props":28794,"children":28795},{"style":1647},[28796],{"type":40,"value":1828},{"type":30,"tag":1046,"props":28798,"children":28799},{"style":1653},[28800],{"type":40,"value":13736},{"type":30,"tag":1046,"props":28802,"children":28803},{"class":1048,"line":1210},[28804,28808,28812,28817,28821],{"type":30,"tag":1046,"props":28805,"children":28806},{"style":1053},[28807],{"type":40,"value":1130},{"type":30,"tag":1046,"props":28809,"children":28810},{"style":1053},[28811],{"type":40,"value":1135},{"type":30,"tag":1046,"props":28813,"children":28814},{"style":1138},[28815],{"type":40,"value":28816}," testApplyDiscount",{"type":30,"tag":1046,"props":28818,"children":28819},{"style":1070},[28820],{"type":40,"value":1320},{"type":30,"tag":1046,"props":28822,"children":28823},{"style":1070},[28824],{"type":40,"value":1073},{"type":30,"tag":1046,"props":28826,"children":28827},{"class":1048,"line":1218},[28828,28833,28838,28842,28846,28850,28854,28859,28863,28868,28872,28876],{"type":30,"tag":1046,"props":28829,"children":28830},{"style":1084},[28831],{"type":40,"value":28832},"        Order",{"type":30,"tag":1046,"props":28834,"children":28835},{"style":1105},[28836],{"type":40,"value":28837}," order ",{"type":30,"tag":1046,"props":28839,"children":28840},{"style":1795},[28841],{"type":40,"value":1798},{"type":30,"tag":1046,"props":28843,"children":28844},{"style":1053},[28845],{"type":40,"value":2480},{"type":30,"tag":1046,"props":28847,"children":28848},{"style":1138},[28849],{"type":40,"value":26928},{"type":30,"tag":1046,"props":28851,"children":28852},{"style":1070},[28853],{"type":40,"value":1146},{"type":30,"tag":1046,"props":28855,"children":28856},{"style":1675},[28857],{"type":40,"value":28858},"\"Laptop\"",{"type":30,"tag":1046,"props":28860,"children":28861},{"style":1070},[28862],{"type":40,"value":2891},{"type":30,"tag":1046,"props":28864,"children":28865},{"style":6886},[28866],{"type":40,"value":28867}," 2",{"type":30,"tag":1046,"props":28869,"children":28870},{"style":1070},[28871],{"type":40,"value":2891},{"type":30,"tag":1046,"props":28873,"children":28874},{"style":6886},[28875],{"type":40,"value":22531},{"type":30,"tag":1046,"props":28877,"children":28878},{"style":1070},[28879],{"type":40,"value":1198},{"type":30,"tag":1046,"props":28881,"children":28882},{"class":1048,"line":1255},[28883,28888,28893,28897,28901,28905],{"type":30,"tag":1046,"props":28884,"children":28885},{"style":1084},[28886],{"type":40,"value":28887},"        DiscountService",{"type":30,"tag":1046,"props":28889,"children":28890},{"style":1105},[28891],{"type":40,"value":28892}," discountService ",{"type":30,"tag":1046,"props":28894,"children":28895},{"style":1795},[28896],{"type":40,"value":1798},{"type":30,"tag":1046,"props":28898,"children":28899},{"style":1053},[28900],{"type":40,"value":2480},{"type":30,"tag":1046,"props":28902,"children":28903},{"style":1138},[28904],{"type":40,"value":28534},{"type":30,"tag":1046,"props":28906,"children":28907},{"style":1070},[28908],{"type":40,"value":1406},{"type":30,"tag":1046,"props":28910,"children":28911},{"class":1048,"line":1284},[28912,28916,28921,28925,28930,28934,28938,28942,28946,28950,28954,28958],{"type":30,"tag":1046,"props":28913,"children":28914},{"style":1053},[28915],{"type":40,"value":5933},{"type":30,"tag":1046,"props":28917,"children":28918},{"style":1105},[28919],{"type":40,"value":28920}," discountedPrice ",{"type":30,"tag":1046,"props":28922,"children":28923},{"style":1795},[28924],{"type":40,"value":1798},{"type":30,"tag":1046,"props":28926,"children":28927},{"style":1105},[28928],{"type":40,"value":28929}," discountService",{"type":30,"tag":1046,"props":28931,"children":28932},{"style":1070},[28933],{"type":40,"value":1179},{"type":30,"tag":1046,"props":28935,"children":28936},{"style":1138},[28937],{"type":40,"value":28672},{"type":30,"tag":1046,"props":28939,"children":28940},{"style":1070},[28941],{"type":40,"value":1146},{"type":30,"tag":1046,"props":28943,"children":28944},{"style":1105},[28945],{"type":40,"value":15689},{"type":30,"tag":1046,"props":28947,"children":28948},{"style":1070},[28949],{"type":40,"value":2891},{"type":30,"tag":1046,"props":28951,"children":28952},{"style":6886},[28953],{"type":40,"value":22565},{"type":30,"tag":1046,"props":28955,"children":28956},{"style":1070},[28957],{"type":40,"value":3958},{"type":30,"tag":1046,"props":28959,"children":28960},{"style":3961},[28961],{"type":40,"value":28962}," // 10% de réduction\n",{"type":30,"tag":1046,"props":28964,"children":28965},{"class":1048,"line":1292},[28966],{"type":30,"tag":1046,"props":28967,"children":28968},{"emptyLinePlaceholder":13},[28969],{"type":40,"value":1121},{"type":30,"tag":1046,"props":28971,"children":28972},{"class":1048,"line":1300},[28973,28977,28981,28986,28990,28995,28999,29003],{"type":30,"tag":1046,"props":28974,"children":28975},{"style":1138},[28976],{"type":40,"value":26812},{"type":30,"tag":1046,"props":28978,"children":28979},{"style":1070},[28980],{"type":40,"value":1146},{"type":30,"tag":1046,"props":28982,"children":28983},{"style":6886},[28984],{"type":40,"value":28985},"1800",{"type":30,"tag":1046,"props":28987,"children":28988},{"style":1070},[28989],{"type":40,"value":2891},{"type":30,"tag":1046,"props":28991,"children":28992},{"style":1105},[28993],{"type":40,"value":28994}," discountedPrice",{"type":30,"tag":1046,"props":28996,"children":28997},{"style":1070},[28998],{"type":40,"value":2891},{"type":30,"tag":1046,"props":29000,"children":29001},{"style":6886},[29002],{"type":40,"value":26838},{"type":30,"tag":1046,"props":29004,"children":29005},{"style":1070},[29006],{"type":40,"value":1198},{"type":30,"tag":1046,"props":29008,"children":29009},{"class":1048,"line":1327},[29010],{"type":30,"tag":1046,"props":29011,"children":29012},{"style":1070},[29013],{"type":40,"value":1207},{"type":30,"tag":1046,"props":29015,"children":29016},{"class":1048,"line":1354},[29017],{"type":30,"tag":1046,"props":29018,"children":29019},{"style":1070},[29020],{"type":40,"value":1423},{"type":30,"tag":43,"props":29022,"children":29023},{},[29024,29026,29031],{"type":40,"value":29025},"Grâce à ce test, nous pouvons modifier la méthode ",{"type":30,"tag":1042,"props":29027,"children":29029},{"className":29028},[],[29030],{"type":40,"value":28672},{"type":40,"value":29032}," sans crainte, car les tests nous avertiront immédiatement si quelque chose casse.",{"type":30,"tag":84,"props":29034,"children":29035},{},[],{"type":30,"tag":31,"props":29037,"children":29038},{"id":6335},[29039],{"type":40,"value":6341},{"type":30,"tag":530,"props":29041,"children":29042},{},[29043,29048,29053],{"type":30,"tag":534,"props":29044,"children":29045},{},[29046],{"type":40,"value":29047},"1. Quels sont les signes d’un code non évolutif ?",{"type":30,"tag":43,"props":29049,"children":29050},{},[29051],{"type":40,"value":29052},"Un code non évolutif se reconnaît par plusieurs symptômes :",{"type":30,"tag":163,"props":29054,"children":29055},{},[29056,29066,29076,29086],{"type":30,"tag":167,"props":29057,"children":29058},{},[29059,29064],{"type":30,"tag":36,"props":29060,"children":29061},{},[29062],{"type":40,"value":29063},"Dépendances rigides",{"type":40,"value":29065}," : Vous devez souvent modifier plusieurs fichiers ou classes pour introduire un simple changement.",{"type":30,"tag":167,"props":29067,"children":29068},{},[29069,29074],{"type":30,"tag":36,"props":29070,"children":29071},{},[29072],{"type":40,"value":29073},"Classes surchargées",{"type":40,"value":29075}," : Certaines classes ou méthodes semblent faire trop de choses à la fois, ce qui les rend difficiles à maintenir et à comprendre.",{"type":30,"tag":167,"props":29077,"children":29078},{},[29079,29084],{"type":30,"tag":36,"props":29080,"children":29081},{},[29082],{"type":40,"value":29083},"Régression fréquente",{"type":40,"value":29085}," : À chaque fois que vous modifiez le code, vous cassez des fonctionnalités existantes.",{"type":30,"tag":167,"props":29087,"children":29088},{},[29089,29094],{"type":30,"tag":36,"props":29090,"children":29091},{},[29092],{"type":40,"value":29093},"Manque de tests",{"type":40,"value":29095}," : Vous ne pouvez pas facilement tester certaines parties de votre code, ou les tests ne couvrent pas assez de cas, rendant le refactoring risqué.",{"type":30,"tag":530,"props":29097,"children":29098},{},[29099,29104],{"type":30,"tag":534,"props":29100,"children":29101},{},[29102],{"type":40,"value":29103},"2. Combien de temps faut-il pour écrire du code évolutif ?",{"type":30,"tag":43,"props":29105,"children":29106},{},[29107],{"type":40,"value":29108},"Écrire du code évolutif peut demander un peu plus de temps au départ, car cela implique de réfléchir à la structure et de suivre des principes comme SOLID. Cependant, ce temps initial est largement compensé par les économies réalisées à long terme. Vous aurez moins de bugs à corriger, et ajouter de nouvelles fonctionnalités sera beaucoup plus simple. Considérez cela comme un investissement pour réduire la dette technique à l’avenir.",{"type":30,"tag":530,"props":29110,"children":29111},{},[29112,29117],{"type":30,"tag":534,"props":29113,"children":29114},{},[29115],{"type":40,"value":29116},"3. Est-ce que toutes les parties d’un projet doivent être évolutives dès le début ?",{"type":30,"tag":43,"props":29118,"children":29119},{},[29120],{"type":40,"value":29121},"Pas nécessairement. Il est important de prioriser les parties du projet qui sont les plus susceptibles d’évoluer avec le temps. Les parties critiques, celles qui interagissent avec d’autres modules, ou celles qui seront sujettes à de fréquentes modifications, doivent être conçues pour être évolutives dès le début. D’autres portions, comme du code très spécifique ou temporaire, peuvent être plus simples sans forcément suivre les mêmes exigences d’évolutivité.",{"type":30,"tag":530,"props":29123,"children":29124},{},[29125,29130,29135],{"type":30,"tag":534,"props":29126,"children":29127},{},[29128],{"type":40,"value":29129},"4. Comment puis-je convaincre mon équipe d’adopter ces pratiques ?",{"type":30,"tag":43,"props":29131,"children":29132},{},[29133],{"type":40,"value":29134},"Souvent, les équipes sont réticentes à changer leurs habitudes parce que cela peut sembler plus complexe au début. Pour convaincre votre équipe, vous pouvez :",{"type":30,"tag":163,"props":29136,"children":29137},{},[29138,29148,29158],{"type":30,"tag":167,"props":29139,"children":29140},{},[29141,29146],{"type":30,"tag":36,"props":29142,"children":29143},{},[29144],{"type":40,"value":29145},"Montrer des exemples concrets",{"type":40,"value":29147}," : Comparez du code non évolutif et son alternative plus évolutive, et montrez les avantages en termes de maintenance et de flexibilité.",{"type":30,"tag":167,"props":29149,"children":29150},{},[29151,29156],{"type":30,"tag":36,"props":29152,"children":29153},{},[29154],{"type":40,"value":29155},"Souligner les avantages à long terme",{"type":40,"value":29157}," : Expliquez que bien que cela demande un effort initial, l’adoption de ces pratiques réduira le nombre de bugs et accélérera l’ajout de nouvelles fonctionnalités.",{"type":30,"tag":167,"props":29159,"children":29160},{},[29161,29166],{"type":30,"tag":36,"props":29162,"children":29163},{},[29164],{"type":40,"value":29165},"Suggérer des étapes progressives",{"type":40,"value":29167}," : Vous pouvez commencer par introduire quelques principes, comme le principe de responsabilité unique, puis étendre les pratiques à l’ensemble du projet.",{"type":30,"tag":530,"props":29169,"children":29170},{},[29171,29176],{"type":30,"tag":534,"props":29172,"children":29173},{},[29174],{"type":40,"value":29175},"5. Quelles erreurs courantes dois-je éviter en cherchant à écrire du code évolutif ?",{"type":30,"tag":163,"props":29177,"children":29178},{},[29179,29189,29199],{"type":30,"tag":167,"props":29180,"children":29181},{},[29182,29187],{"type":30,"tag":36,"props":29183,"children":29184},{},[29185],{"type":40,"value":29186},"Sur-conception",{"type":40,"value":29188}," : Vouloir anticiper chaque possible changement peut conduire à un code trop abstrait et complexe. Restez pragmatique : faites évoluer votre code au fur et à mesure des besoins réels, plutôt que de prévoir des changements qui n’arriveront peut-être jamais.",{"type":30,"tag":167,"props":29190,"children":29191},{},[29192,29197],{"type":30,"tag":36,"props":29193,"children":29194},{},[29195],{"type":40,"value":29196},"Ignorer les tests",{"type":40,"value":29198}," : Écrire du code évolutif sans tests unitaires et d’intégration solides est une erreur. Les tests sont votre filet de sécurité lorsque vous modifiez ou refactorisez du code.",{"type":30,"tag":167,"props":29200,"children":29201},{},[29202,29207],{"type":30,"tag":36,"props":29203,"children":29204},{},[29205],{"type":40,"value":29206},"Manque de documentation",{"type":40,"value":29208}," : Si vous écrivez du code évolutif mais que personne ne sait comment l’utiliser ou l’étendre, cela devient contre-productif. Documentez les parties importantes de votre code, surtout si elles sont complexes.",{"type":30,"tag":84,"props":29210,"children":29211},{},[],{"type":30,"tag":31,"props":29213,"children":29214},{"id":24018},[29215],{"type":40,"value":24024},{"type":30,"tag":43,"props":29217,"children":29218},{},[29219],{"type":40,"value":29220},"En appliquant les bonnes pratiques et les principes présentés ici, vous pouvez rendre votre code beaucoup plus évolutif. Cela vous permettra d'ajouter de nouvelles fonctionnalités, de corriger des erreurs et de maintenir votre logiciel plus facilement, sans avoir à craindre de tout casser. Avec des exemples concrets en Java, vous avez maintenant les outils nécessaires pour appliquer ces concepts à vos propres projets et améliorer la qualité et la longévité de votre code.",{"type":30,"tag":84,"props":29222,"children":29223},{},[],{"type":30,"tag":211,"props":29225,"children":29226},{"cta":6447,"href":639,"title":6448,"type":641},[29227],{"type":30,"tag":43,"props":29228,"children":29229},{},[29230],{"type":40,"value":29231},"Le framework 4 phases appliqué dans 12 équipes engineering, avec des exemples before/after chiffrés. Un code évolutif est la clé d'un lead time court — découvrez comment y parvenir.",{"type":30,"tag":6456,"props":29233,"children":29234},{},[29235],{"type":40,"value":6460},{"title":8,"searchDepth":675,"depth":675,"links":29237},[29238,29239,29240,29244,29250,29255,29256],{"id":24096,"depth":675,"text":24099},{"id":24115,"depth":675,"text":24118},{"id":24580,"depth":675,"text":24583,"children":29241},[29242,29243],{"id":24591,"depth":681,"text":24594},{"id":24966,"depth":681,"text":24969},{"id":25394,"depth":675,"text":25397,"children":29245},[29246,29247,29248,29249],{"id":25405,"depth":681,"text":25408},{"id":25700,"depth":681,"text":25703},{"id":25991,"depth":681,"text":25994},{"id":26488,"depth":681,"text":26491},{"id":26867,"depth":675,"text":26870,"children":29251},[29252,29253,29254],{"id":26878,"depth":681,"text":26881},{"id":27812,"depth":681,"text":27815},{"id":28490,"depth":681,"text":28493},{"id":6335,"depth":675,"text":6341},{"id":24018,"depth":675,"text":24024},"content:fr:dette-technique:comment-ecrire-du-code-evolutif-en-developpement-logiciel.md","fr/dette-technique/comment-ecrire-du-code-evolutif-en-developpement-logiciel.md","fr/dette-technique/comment-ecrire-du-code-evolutif-en-developpement-logiciel",{"_path":29261,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":29262,"description":29263,"id":10376,"date":29264,"listed":13,"nocomments":7,"hidden":7,"categories":29265,"tags":29266,"--cover":29267,"readingTime":29268,"body":29273,"_type":709,"_id":30624,"_source":711,"_file":30625,"_stem":30626,"_extension":714},"/fr/dette-technique/guide-code-lisible-software-craftsmanship","Le Guide du Code Lisible, Améliorer la Qualité Logicielle en Software Craftsmanship","Découvrez comment la lisibilité du code est essentielle en software craftsmanship. Apprenez des techniques pratiques pour écrire un code lisible, clair...","2024-06-27",[15],[17,18],"covers/articles/qualite-de-code.jpg",{"text":29269,"minutes":29270,"time":29271,"words":29272},"13 min read",12.245,734700,2449,{"type":27,"children":29274,"toc":30615},[29275,29281,29294,29305,29310,29316,29321,29326,29423,29449,29545,29550,29585,29591,29623,29636,29641,29650,29656,29666,29672,29714,29719,29731,29737,29742,29747,29753,29758,29763,29868,29873,30036,30041,30053,30059,30064,30070,30089,30094,30244,30249,30279,30284,30296,30302,30307,30312,30330,30336,30341,30346,30351,30363,30369,30374,30379,30391,30397,30402,30408,30413,30423,30435,30441,30446,30455,30461,30466,30475,30481,30491,30496,30499,30505,30518,30543,30556,30569,30582,30585,30604,30611],{"type":30,"tag":31,"props":29276,"children":29278},{"id":29277},"introduction-pourquoi-la-lisibilité-du-code-est-cruciale",[29279],{"type":40,"value":29280},"Introduction : Pourquoi la lisibilité du code est cruciale ?",{"type":30,"tag":43,"props":29282,"children":29283},{},[29284,29286,29292],{"type":40,"value":29285},"Arrêtez-moi si vous avez déjà vécu cette situation : vous ouvrez un fichier de code sur lequel vous avez travaillé il y a quelques mois. Dès les premières lignes, vous vous retrouvez face à un enchevêtrement de variables cryptiques comme ",{"type":30,"tag":1042,"props":29287,"children":29289},{"className":29288},[],[29290],{"type":40,"value":29291},"var1",{"type":40,"value":29293}," et des fonctions interminables. Vous passez un temps fou à essayer de comprendre ce que vous aviez fait, ou pire encore, ce code n’est même pas le vôtre, mais celui d’un collègue. Résultat : des heures de frustration, des retards dans votre travail et une confusion qui ne fait qu’augmenter.",{"type":30,"tag":43,"props":29295,"children":29296},{},[29297,29299,29303],{"type":40,"value":29298},"Si cela vous semble familier, vous n’êtes pas seul. J’ai accompagné des dizaines d’équipes confrontées à ce genre de problèmes, notamment dans des DSI comme Canal+ ou Crédit Agricole Assurances, et c’est ici que le concept de ",{"type":30,"tag":36,"props":29300,"children":29301},{},[29302],{"type":40,"value":80},{"type":40,"value":29304}," devient essentiel. La lisibilité du code n’est pas un luxe, c’est une nécessité pour produire un logiciel de qualité, collaborer efficacement et éviter de se retrouver piégé par une dette technique difficile à rembourser.",{"type":30,"tag":43,"props":29306,"children":29307},{},[29308],{"type":40,"value":29309},"Je vais vous expliquer pourquoi la lisibilité du code est une pierre angulaire du software craftsmanship, et surtout, comment rendre votre code clair et compréhensible, même plusieurs mois après ou par d’autres développeurs. Vous aurez des outils concrets pour transformer votre façon de coder, et vous verrez comment des pratiques simples peuvent rendre vos projets plus solides et faciles à maintenir.",{"type":30,"tag":31,"props":29311,"children":29313},{"id":29312},"quest-ce-quun-code-lisible",[29314],{"type":40,"value":29315},"Qu’est-ce qu’un code lisible ?",{"type":30,"tag":43,"props":29317,"children":29318},{},[29319],{"type":40,"value":29320},"Un code lisible, c’est avant tout un code que n’importe quel développeur peut comprendre rapidement, sans avoir besoin d’y passer des heures. C’est un code qui raconte une histoire claire. Il ne nécessite pas que l'on devine ce que l’auteur voulait faire. Pour cela, chaque élément doit être soigneusement choisi pour refléter précisément son rôle.",{"type":30,"tag":43,"props":29322,"children":29323},{},[29324],{"type":40,"value":29325},"Prenons un exemple simple :",{"type":30,"tag":1035,"props":29327,"children":29329},{"className":1039,"code":29328,"language":1038,"meta":8,"style":8},"int a = 3;  \nint b = 5;  \nint c = a * b;\n",[29330],{"type":30,"tag":1042,"props":29331,"children":29332},{"__ignoreMap":8},[29333,29362,29390],{"type":30,"tag":1046,"props":29334,"children":29335},{"class":1048,"line":1049},[29336,29340,29344,29348,29353,29357],{"type":30,"tag":1046,"props":29337,"children":29338},{"style":1053},[29339],{"type":40,"value":10323},{"type":30,"tag":1046,"props":29341,"children":29342},{"style":1105},[29343],{"type":40,"value":19599},{"type":30,"tag":1046,"props":29345,"children":29346},{"style":1795},[29347],{"type":40,"value":1798},{"type":30,"tag":1046,"props":29349,"children":29350},{"style":6886},[29351],{"type":40,"value":29352}," 3",{"type":30,"tag":1046,"props":29354,"children":29355},{"style":1070},[29356],{"type":40,"value":13298},{"type":30,"tag":1046,"props":29358,"children":29359},{"style":1105},[29360],{"type":40,"value":29361},"  \n",{"type":30,"tag":1046,"props":29363,"children":29364},{"class":1048,"line":675},[29365,29369,29374,29378,29382,29386],{"type":30,"tag":1046,"props":29366,"children":29367},{"style":1053},[29368],{"type":40,"value":10323},{"type":30,"tag":1046,"props":29370,"children":29371},{"style":1105},[29372],{"type":40,"value":29373}," b ",{"type":30,"tag":1046,"props":29375,"children":29376},{"style":1795},[29377],{"type":40,"value":1798},{"type":30,"tag":1046,"props":29379,"children":29380},{"style":6886},[29381],{"type":40,"value":18313},{"type":30,"tag":1046,"props":29383,"children":29384},{"style":1070},[29385],{"type":40,"value":13298},{"type":30,"tag":1046,"props":29387,"children":29388},{"style":1105},[29389],{"type":40,"value":29361},{"type":30,"tag":1046,"props":29391,"children":29392},{"class":1048,"line":681},[29393,29397,29402,29406,29410,29414,29419],{"type":30,"tag":1046,"props":29394,"children":29395},{"style":1053},[29396],{"type":40,"value":10323},{"type":30,"tag":1046,"props":29398,"children":29399},{"style":1105},[29400],{"type":40,"value":29401}," c ",{"type":30,"tag":1046,"props":29403,"children":29404},{"style":1795},[29405],{"type":40,"value":1798},{"type":30,"tag":1046,"props":29407,"children":29408},{"style":1105},[29409],{"type":40,"value":19599},{"type":30,"tag":1046,"props":29411,"children":29412},{"style":1795},[29413],{"type":40,"value":21197},{"type":30,"tag":1046,"props":29415,"children":29416},{"style":1105},[29417],{"type":40,"value":29418}," b",{"type":30,"tag":1046,"props":29420,"children":29421},{"style":1070},[29422],{"type":40,"value":1113},{"type":30,"tag":43,"props":29424,"children":29425},{},[29426,29428,29433,29434,29440,29441,29447],{"type":40,"value":29427},"Ici, les noms des variables ",{"type":30,"tag":1042,"props":29429,"children":29431},{"className":29430},[],[29432],{"type":40,"value":75},{"type":40,"value":19457},{"type":30,"tag":1042,"props":29435,"children":29437},{"className":29436},[],[29438],{"type":40,"value":29439},"b",{"type":40,"value":8328},{"type":30,"tag":1042,"props":29442,"children":29444},{"className":29443},[],[29445],{"type":40,"value":29446},"c",{"type":40,"value":29448}," ne donnent aucune indication sur leur signification ou leur rôle. Maintenant, regardons une version plus lisible :",{"type":30,"tag":1035,"props":29450,"children":29452},{"className":1039,"code":29451,"language":1038,"meta":8,"style":8},"int largeur = 3;  \nint hauteur = 5;  \nint surface = largeur * hauteur;\n",[29453],{"type":30,"tag":1042,"props":29454,"children":29455},{"__ignoreMap":8},[29456,29484,29512],{"type":30,"tag":1046,"props":29457,"children":29458},{"class":1048,"line":1049},[29459,29463,29468,29472,29476,29480],{"type":30,"tag":1046,"props":29460,"children":29461},{"style":1053},[29462],{"type":40,"value":10323},{"type":30,"tag":1046,"props":29464,"children":29465},{"style":1105},[29466],{"type":40,"value":29467}," largeur ",{"type":30,"tag":1046,"props":29469,"children":29470},{"style":1795},[29471],{"type":40,"value":1798},{"type":30,"tag":1046,"props":29473,"children":29474},{"style":6886},[29475],{"type":40,"value":29352},{"type":30,"tag":1046,"props":29477,"children":29478},{"style":1070},[29479],{"type":40,"value":13298},{"type":30,"tag":1046,"props":29481,"children":29482},{"style":1105},[29483],{"type":40,"value":29361},{"type":30,"tag":1046,"props":29485,"children":29486},{"class":1048,"line":675},[29487,29491,29496,29500,29504,29508],{"type":30,"tag":1046,"props":29488,"children":29489},{"style":1053},[29490],{"type":40,"value":10323},{"type":30,"tag":1046,"props":29492,"children":29493},{"style":1105},[29494],{"type":40,"value":29495}," hauteur ",{"type":30,"tag":1046,"props":29497,"children":29498},{"style":1795},[29499],{"type":40,"value":1798},{"type":30,"tag":1046,"props":29501,"children":29502},{"style":6886},[29503],{"type":40,"value":18313},{"type":30,"tag":1046,"props":29505,"children":29506},{"style":1070},[29507],{"type":40,"value":13298},{"type":30,"tag":1046,"props":29509,"children":29510},{"style":1105},[29511],{"type":40,"value":29361},{"type":30,"tag":1046,"props":29513,"children":29514},{"class":1048,"line":681},[29515,29519,29524,29528,29532,29536,29541],{"type":30,"tag":1046,"props":29516,"children":29517},{"style":1053},[29518],{"type":40,"value":10323},{"type":30,"tag":1046,"props":29520,"children":29521},{"style":1105},[29522],{"type":40,"value":29523}," surface ",{"type":30,"tag":1046,"props":29525,"children":29526},{"style":1795},[29527],{"type":40,"value":1798},{"type":30,"tag":1046,"props":29529,"children":29530},{"style":1105},[29531],{"type":40,"value":29467},{"type":30,"tag":1046,"props":29533,"children":29534},{"style":1795},[29535],{"type":40,"value":21197},{"type":30,"tag":1046,"props":29537,"children":29538},{"style":1105},[29539],{"type":40,"value":29540}," hauteur",{"type":30,"tag":1046,"props":29542,"children":29543},{"style":1070},[29544],{"type":40,"value":1113},{"type":30,"tag":43,"props":29546,"children":29547},{},[29548],{"type":40,"value":29549},"En renommant simplement les variables, le code devient immédiatement plus compréhensible. Même sans commentaire, on devine que ce code calcule la surface d’un rectangle. La lisibilité du code commence donc par des noms explicites et précis.",{"type":30,"tag":964,"props":29551,"children":29552},{},[29553],{"type":30,"tag":43,"props":29554,"children":29555},{},[29556,29561,29563,29569,29571,29577,29578,29584],{"type":30,"tag":36,"props":29557,"children":29558},{},[29559],{"type":40,"value":29560},"💡 Astuce",{"type":40,"value":29562}," : Utilisez des noms de variables descriptifs et évitez les abréviations ou termes trop génériques. Un bon nom de variable décrit son rôle dans le code. Par exemple, préférez ",{"type":30,"tag":1042,"props":29564,"children":29566},{"className":29565},[],[29567],{"type":40,"value":29568},"nombreDeLignes",{"type":40,"value":29570}," à ",{"type":30,"tag":1042,"props":29572,"children":29574},{"className":29573},[],[29575],{"type":40,"value":29576},"n",{"type":40,"value":1573},{"type":30,"tag":1042,"props":29579,"children":29581},{"className":29580},[],[29582],{"type":40,"value":29583},"ligneCount",{"type":40,"value":1179},{"type":30,"tag":2339,"props":29586,"children":29588},{"id":29587},"les-avantages-dun-code-lisible",[29589],{"type":40,"value":29590},"Les avantages d’un code lisible :",{"type":30,"tag":163,"props":29592,"children":29593},{},[29594,29604,29614],{"type":30,"tag":167,"props":29595,"children":29596},{},[29597,29602],{"type":30,"tag":36,"props":29598,"children":29599},{},[29600],{"type":40,"value":29601},"Facilité de maintenance",{"type":40,"value":29603}," : Un code clair est plus facile à corriger et à améliorer, même des mois après l’avoir écrit.",{"type":30,"tag":167,"props":29605,"children":29606},{},[29607,29612],{"type":30,"tag":36,"props":29608,"children":29609},{},[29610],{"type":40,"value":29611},"Meilleure collaboration",{"type":40,"value":29613}," : Quand plusieurs développeurs travaillent sur le même projet, la lisibilité facilite la communication. Le code devient un langage commun que chacun peut comprendre sans effort.",{"type":30,"tag":167,"props":29615,"children":29616},{},[29617,29621],{"type":30,"tag":36,"props":29618,"children":29619},{},[29620],{"type":40,"value":11048},{"type":40,"value":29622}," : Un code bien structuré et facile à lire réduit le risque d’introduire des bugs, car chaque fonctionnalité est plus facile à appréhender.",{"type":30,"tag":964,"props":29624,"children":29625},{},[29626],{"type":30,"tag":43,"props":29627,"children":29628},{},[29629,29634],{"type":30,"tag":36,"props":29630,"children":29631},{},[29632],{"type":40,"value":29633},"⚠️ Alerte",{"type":40,"value":29635}," : Un code illisible entraîne souvent de la dette technique. Ce n’est pas seulement une perte de temps, c’est aussi un facteur de bugs futurs et de coûts accrus en maintenance.",{"type":30,"tag":43,"props":29637,"children":29638},{},[29639],{"type":40,"value":29640},"La lisibilité n’est pas un objectif secondaire : elle est au cœur de la qualité logicielle. C’est ce qui permet à votre code d’être utile à long terme, que ce soit pour vous ou pour les autres membres de votre équipe.",{"type":30,"tag":211,"props":29642,"children":29644},{"cta":213,"href":214,"title":29643,"type":216},"Votre codebase est illisible et ça ralentit toute l'équipe ?",[29645],{"type":30,"tag":43,"props":29646,"children":29647},{},[29648],{"type":40,"value":29649},"Variables cryptiques, fonctions de 200 lignes, zéro documentation — chaque développeur passe des heures à déchiffrer plutôt qu'à créer. Réservons 30 minutes pour évaluer la lisibilité de votre codebase et identifier les quick wins qui accélèrent immédiatement la productivité.",{"type":30,"tag":31,"props":29651,"children":29653},{"id":29652},"les-principes-du-code-lisible-en-software-craftsmanship",[29654],{"type":40,"value":29655},"Les principes du code lisible en Software Craftsmanship",{"type":30,"tag":43,"props":29657,"children":29658},{},[29659,29661,29665],{"type":40,"value":29660},"Rendre votre code lisible ne se résume pas uniquement à nommer correctement vos variables. Il existe des principes fondamentaux qui, appliqués de manière cohérente, permettent d’améliorer la qualité et la compréhension du code. Robert C. Martin le résume parfaitement dans \"Clean Code\" : un bon code se lit comme de la prose. Voici quelques-uns des piliers de la lisibilité dans le ",{"type":30,"tag":36,"props":29662,"children":29663},{},[29664],{"type":40,"value":80},{"type":40,"value":1179},{"type":30,"tag":2339,"props":29667,"children":29669},{"id":29668},"_1-nommage-des-variables-et-fonctions",[29670],{"type":40,"value":29671},"1. Nommage des variables et fonctions",{"type":30,"tag":43,"props":29673,"children":29674},{},[29675,29677,29683,29685,29691,29692,29698,29700,29706,29708,29713],{"type":40,"value":29676},"Le nom des variables, fonctions, et classes doit être explicite. Chaque nom doit refléter précisément le rôle ou l’objectif de l’élément nommé. Par exemple, si une fonction additionne deux nombres, un nom comme ",{"type":30,"tag":1042,"props":29678,"children":29680},{"className":29679},[],[29681],{"type":40,"value":29682},"additionnerNombres",{"type":40,"value":29684}," est bien plus parlant que ",{"type":30,"tag":1042,"props":29686,"children":29688},{"className":29687},[],[29689],{"type":40,"value":29690},"calculer",{"type":40,"value":1573},{"type":30,"tag":1042,"props":29693,"children":29695},{"className":29694},[],[29696],{"type":40,"value":29697},"traitement",{"type":40,"value":29699},". Ce principe s’applique également aux variables. Un nom comme ",{"type":30,"tag":1042,"props":29701,"children":29703},{"className":29702},[],[29704],{"type":40,"value":29705},"compteurDeLignes",{"type":40,"value":29707}," est infiniment plus utile qu’un simple ",{"type":30,"tag":1042,"props":29709,"children":29711},{"className":29710},[],[29712],{"type":40,"value":13376},{"type":40,"value":1179},{"type":30,"tag":43,"props":29715,"children":29716},{},[29717],{"type":40,"value":29718},"L’idée est de permettre à toute personne qui lit votre code de savoir immédiatement ce qu’il fait, sans avoir à lire les commentaires ou à déchiffrer la logique sous-jacente.",{"type":30,"tag":964,"props":29720,"children":29721},{},[29722],{"type":30,"tag":43,"props":29723,"children":29724},{},[29725,29729],{"type":30,"tag":36,"props":29726,"children":29727},{},[29728],{"type":40,"value":29560},{"type":40,"value":29730}," : Utilisez la règle des trois secondes : si quelqu’un ne peut pas comprendre ce que fait une variable ou une fonction en trois secondes en lisant son nom, il est temps de le renommer.",{"type":30,"tag":2339,"props":29732,"children":29734},{"id":29733},"_2-structure-et-organisation-du-code",[29735],{"type":40,"value":29736},"2. Structure et organisation du code",{"type":30,"tag":43,"props":29738,"children":29739},{},[29740],{"type":40,"value":29741},"La manière dont votre code est structuré a un impact direct sur sa lisibilité. Il est essentiel de séparer les préoccupations et de diviser le code en petites fonctions ou méthodes qui réalisent chacune une tâche bien précise. Une règle simple : chaque fonction ne devrait faire qu'une seule chose. Si vous constatez que votre fonction fait plusieurs actions, il est probablement temps de la diviser en plusieurs fonctions plus petites.",{"type":30,"tag":43,"props":29743,"children":29744},{},[29745],{"type":40,"value":29746},"De plus, un bon formatage (indentation, espaces, sauts de ligne) améliore la lisibilité. Un code compact et mal organisé, sans espaces entre les blocs logiques, devient rapidement difficile à suivre.",{"type":30,"tag":2339,"props":29748,"children":29750},{"id":29749},"_3-limiter-la-complexité-cognitive",[29751],{"type":40,"value":29752},"3. Limiter la complexité cognitive",{"type":30,"tag":43,"props":29754,"children":29755},{},[29756],{"type":40,"value":29757},"La complexité cognitive correspond à la charge mentale nécessaire pour comprendre un morceau de code. Plus un code est complexe, plus il est difficile à lire et à maintenir. Pour réduire cette complexité, je vous recommande d'éviter les longues chaînes de conditions, les boucles imbriquées et les instructions trop denses.",{"type":30,"tag":43,"props":29759,"children":29760},{},[29761],{"type":40,"value":29762},"Par exemple, au lieu de ceci :",{"type":30,"tag":1035,"props":29764,"children":29766},{"className":1039,"code":29765,"language":1038,"meta":8,"style":8},"if (x > 10 && y \u003C 5 || (z == 3 && !a)) {\n    // code\n}\n",[29767],{"type":30,"tag":1042,"props":29768,"children":29769},{"__ignoreMap":8},[29770,29853,29861],{"type":30,"tag":1046,"props":29771,"children":29772},{"class":1048,"line":1049},[29773,29777,29781,29786,29790,29795,29799,29804,29808,29812,29816,29820,29825,29829,29833,29837,29841,29845,29849],{"type":30,"tag":1046,"props":29774,"children":29775},{"style":1053},[29776],{"type":40,"value":20585},{"type":30,"tag":1046,"props":29778,"children":29779},{"style":1070},[29780],{"type":40,"value":11861},{"type":30,"tag":1046,"props":29782,"children":29783},{"style":1105},[29784],{"type":40,"value":29785},"x ",{"type":30,"tag":1046,"props":29787,"children":29788},{"style":1795},[29789],{"type":40,"value":1102},{"type":30,"tag":1046,"props":29791,"children":29792},{"style":6886},[29793],{"type":40,"value":29794}," 10",{"type":30,"tag":1046,"props":29796,"children":29797},{"style":1795},[29798],{"type":40,"value":14076},{"type":30,"tag":1046,"props":29800,"children":29801},{"style":1105},[29802],{"type":40,"value":29803}," y ",{"type":30,"tag":1046,"props":29805,"children":29806},{"style":1795},[29807],{"type":40,"value":1092},{"type":30,"tag":1046,"props":29809,"children":29810},{"style":6886},[29811],{"type":40,"value":18313},{"type":30,"tag":1046,"props":29813,"children":29814},{"style":1795},[29815],{"type":40,"value":14396},{"type":30,"tag":1046,"props":29817,"children":29818},{"style":1070},[29819],{"type":40,"value":11861},{"type":30,"tag":1046,"props":29821,"children":29822},{"style":1105},[29823],{"type":40,"value":29824},"z ",{"type":30,"tag":1046,"props":29826,"children":29827},{"style":1795},[29828],{"type":40,"value":11871},{"type":30,"tag":1046,"props":29830,"children":29831},{"style":6886},[29832],{"type":40,"value":29352},{"type":30,"tag":1046,"props":29834,"children":29835},{"style":1795},[29836],{"type":40,"value":14076},{"type":30,"tag":1046,"props":29838,"children":29839},{"style":1795},[29840],{"type":40,"value":14081},{"type":30,"tag":1046,"props":29842,"children":29843},{"style":1105},[29844],{"type":40,"value":75},{"type":30,"tag":1046,"props":29846,"children":29847},{"style":1070},[29848],{"type":40,"value":9913},{"type":30,"tag":1046,"props":29850,"children":29851},{"style":1070},[29852],{"type":40,"value":1073},{"type":30,"tag":1046,"props":29854,"children":29855},{"class":1048,"line":675},[29856],{"type":30,"tag":1046,"props":29857,"children":29858},{"style":3961},[29859],{"type":40,"value":29860},"    // code\n",{"type":30,"tag":1046,"props":29862,"children":29863},{"class":1048,"line":681},[29864],{"type":30,"tag":1046,"props":29865,"children":29866},{"style":1070},[29867],{"type":40,"value":1423},{"type":30,"tag":43,"props":29869,"children":29870},{},[29871],{"type":40,"value":29872},"Vous pouvez simplifier la logique en extrayant des morceaux de code dans des fonctions ou en les assignant à des variables explicites :",{"type":30,"tag":1035,"props":29874,"children":29876},{"className":1039,"code":29875,"language":1038,"meta":8,"style":8},"boolean condition1 = (x > 10 && y \u003C 5);\nboolean condition2 = (z == 3 && !a);\n\nif (condition1 || condition2) {\n    // code\n}\n",[29877],{"type":30,"tag":1042,"props":29878,"children":29879},{"__ignoreMap":8},[29880,29933,29981,29988,30022,30029],{"type":30,"tag":1046,"props":29881,"children":29882},{"class":1048,"line":1049},[29883,29888,29893,29897,29901,29905,29909,29913,29917,29921,29925,29929],{"type":30,"tag":1046,"props":29884,"children":29885},{"style":1053},[29886],{"type":40,"value":29887},"boolean",{"type":30,"tag":1046,"props":29889,"children":29890},{"style":1105},[29891],{"type":40,"value":29892}," condition1 ",{"type":30,"tag":1046,"props":29894,"children":29895},{"style":1795},[29896],{"type":40,"value":1798},{"type":30,"tag":1046,"props":29898,"children":29899},{"style":1070},[29900],{"type":40,"value":11861},{"type":30,"tag":1046,"props":29902,"children":29903},{"style":1105},[29904],{"type":40,"value":29785},{"type":30,"tag":1046,"props":29906,"children":29907},{"style":1795},[29908],{"type":40,"value":1102},{"type":30,"tag":1046,"props":29910,"children":29911},{"style":6886},[29912],{"type":40,"value":29794},{"type":30,"tag":1046,"props":29914,"children":29915},{"style":1795},[29916],{"type":40,"value":14076},{"type":30,"tag":1046,"props":29918,"children":29919},{"style":1105},[29920],{"type":40,"value":29803},{"type":30,"tag":1046,"props":29922,"children":29923},{"style":1795},[29924],{"type":40,"value":1092},{"type":30,"tag":1046,"props":29926,"children":29927},{"style":6886},[29928],{"type":40,"value":18313},{"type":30,"tag":1046,"props":29930,"children":29931},{"style":1070},[29932],{"type":40,"value":1198},{"type":30,"tag":1046,"props":29934,"children":29935},{"class":1048,"line":675},[29936,29940,29945,29949,29953,29957,29961,29965,29969,29973,29977],{"type":30,"tag":1046,"props":29937,"children":29938},{"style":1053},[29939],{"type":40,"value":29887},{"type":30,"tag":1046,"props":29941,"children":29942},{"style":1105},[29943],{"type":40,"value":29944}," condition2 ",{"type":30,"tag":1046,"props":29946,"children":29947},{"style":1795},[29948],{"type":40,"value":1798},{"type":30,"tag":1046,"props":29950,"children":29951},{"style":1070},[29952],{"type":40,"value":11861},{"type":30,"tag":1046,"props":29954,"children":29955},{"style":1105},[29956],{"type":40,"value":29824},{"type":30,"tag":1046,"props":29958,"children":29959},{"style":1795},[29960],{"type":40,"value":11871},{"type":30,"tag":1046,"props":29962,"children":29963},{"style":6886},[29964],{"type":40,"value":29352},{"type":30,"tag":1046,"props":29966,"children":29967},{"style":1795},[29968],{"type":40,"value":14076},{"type":30,"tag":1046,"props":29970,"children":29971},{"style":1795},[29972],{"type":40,"value":14081},{"type":30,"tag":1046,"props":29974,"children":29975},{"style":1105},[29976],{"type":40,"value":75},{"type":30,"tag":1046,"props":29978,"children":29979},{"style":1070},[29980],{"type":40,"value":1198},{"type":30,"tag":1046,"props":29982,"children":29983},{"class":1048,"line":681},[29984],{"type":30,"tag":1046,"props":29985,"children":29986},{"emptyLinePlaceholder":13},[29987],{"type":40,"value":1121},{"type":30,"tag":1046,"props":29989,"children":29990},{"class":1048,"line":1124},[29991,29995,29999,30004,30009,30014,30018],{"type":30,"tag":1046,"props":29992,"children":29993},{"style":1053},[29994],{"type":40,"value":20585},{"type":30,"tag":1046,"props":29996,"children":29997},{"style":1070},[29998],{"type":40,"value":11861},{"type":30,"tag":1046,"props":30000,"children":30001},{"style":1105},[30002],{"type":40,"value":30003},"condition1 ",{"type":30,"tag":1046,"props":30005,"children":30006},{"style":1795},[30007],{"type":40,"value":30008},"||",{"type":30,"tag":1046,"props":30010,"children":30011},{"style":1105},[30012],{"type":40,"value":30013}," condition2",{"type":30,"tag":1046,"props":30015,"children":30016},{"style":1070},[30017],{"type":40,"value":1161},{"type":30,"tag":1046,"props":30019,"children":30020},{"style":1070},[30021],{"type":40,"value":1073},{"type":30,"tag":1046,"props":30023,"children":30024},{"class":1048,"line":1168},[30025],{"type":30,"tag":1046,"props":30026,"children":30027},{"style":3961},[30028],{"type":40,"value":29860},{"type":30,"tag":1046,"props":30030,"children":30031},{"class":1048,"line":1201},[30032],{"type":30,"tag":1046,"props":30033,"children":30034},{"style":1070},[30035],{"type":40,"value":1423},{"type":30,"tag":43,"props":30037,"children":30038},{},[30039],{"type":40,"value":30040},"Ce code est plus facile à lire et à comprendre car chaque condition a été isolée dans une variable qui a un nom clair.",{"type":30,"tag":964,"props":30042,"children":30043},{},[30044],{"type":30,"tag":43,"props":30045,"children":30046},{},[30047,30051],{"type":30,"tag":36,"props":30048,"children":30049},{},[30050],{"type":40,"value":29560},{"type":40,"value":30052}," : Lorsque vous vous retrouvez avec une condition complexe, essayez de la découper en plusieurs variables bien nommées pour réduire la charge cognitive.",{"type":30,"tag":31,"props":30054,"children":30056},{"id":30055},"outils-et-pratiques-pour-améliorer-la-lisibilité-du-code",[30057],{"type":40,"value":30058},"Outils et pratiques pour améliorer la lisibilité du code",{"type":30,"tag":43,"props":30060,"children":30061},{},[30062],{"type":40,"value":30063},"Même avec de bonnes intentions, il peut parfois être difficile de maintenir un haut niveau de lisibilité dans le code. Heureusement, il existe des outils et des pratiques éprouvées qui peuvent vous aider à écrire du code plus lisible au quotidien.",{"type":30,"tag":2339,"props":30065,"children":30067},{"id":30066},"_1-commentaires-pertinents-et-documentation",[30068],{"type":40,"value":30069},"1. Commentaires pertinents et documentation",{"type":30,"tag":43,"props":30071,"children":30072},{},[30073,30075,30080,30082,30087],{"type":40,"value":30074},"Bien que le code doit idéalement s’expliquer par lui-même, les commentaires restent un outil précieux lorsqu'ils sont utilisés de manière judicieuse. Un bon commentaire doit expliquer ",{"type":30,"tag":872,"props":30076,"children":30077},{},[30078],{"type":40,"value":30079},"pourquoi",{"type":40,"value":30081}," une certaine approche a été choisie, et non ",{"type":30,"tag":872,"props":30083,"children":30084},{},[30085],{"type":40,"value":30086},"ce que",{"type":40,"value":30088}," fait le code. Un commentaire qui se contente de paraphraser le code n’ajoute aucune valeur.",{"type":30,"tag":43,"props":30090,"children":30091},{},[30092],{"type":40,"value":30093},"Exemple de commentaire utile :",{"type":30,"tag":1035,"props":30095,"children":30097},{"className":1039,"code":30096,"language":1038,"meta":8,"style":8},"// Vérifie si le montant de la commande dépasse le seuil pour la livraison gratuite.\n// Ce seuil est défini en fonction d'une promotion actuelle (20% de réduction) pour encourager les commandes de plus de 50€.\nif (commande.getMontantTotal() > 50) {\n    commande.setLivraisonGratuite(true);\n} else {\n    commande.setFraisLivraison(7.99);\n}\n\n",[30098],{"type":30,"tag":1042,"props":30099,"children":30100},{"__ignoreMap":8},[30101,30109,30117,30163,30193,30208,30237],{"type":30,"tag":1046,"props":30102,"children":30103},{"class":1048,"line":1049},[30104],{"type":30,"tag":1046,"props":30105,"children":30106},{"style":3961},[30107],{"type":40,"value":30108},"// Vérifie si le montant de la commande dépasse le seuil pour la livraison gratuite.\n",{"type":30,"tag":1046,"props":30110,"children":30111},{"class":1048,"line":675},[30112],{"type":30,"tag":1046,"props":30113,"children":30114},{"style":3961},[30115],{"type":40,"value":30116},"// Ce seuil est défini en fonction d'une promotion actuelle (20% de réduction) pour encourager les commandes de plus de 50€.\n",{"type":30,"tag":1046,"props":30118,"children":30119},{"class":1048,"line":681},[30120,30124,30128,30132,30136,30141,30145,30150,30155,30159],{"type":30,"tag":1046,"props":30121,"children":30122},{"style":1053},[30123],{"type":40,"value":20585},{"type":30,"tag":1046,"props":30125,"children":30126},{"style":1070},[30127],{"type":40,"value":11861},{"type":30,"tag":1046,"props":30129,"children":30130},{"style":1105},[30131],{"type":40,"value":23411},{"type":30,"tag":1046,"props":30133,"children":30134},{"style":1070},[30135],{"type":40,"value":1179},{"type":30,"tag":1046,"props":30137,"children":30138},{"style":1138},[30139],{"type":40,"value":30140},"getMontantTotal",{"type":30,"tag":1046,"props":30142,"children":30143},{"style":1070},[30144],{"type":40,"value":1320},{"type":30,"tag":1046,"props":30146,"children":30147},{"style":1795},[30148],{"type":40,"value":30149}," >",{"type":30,"tag":1046,"props":30151,"children":30152},{"style":6886},[30153],{"type":40,"value":30154}," 50",{"type":30,"tag":1046,"props":30156,"children":30157},{"style":1070},[30158],{"type":40,"value":1161},{"type":30,"tag":1046,"props":30160,"children":30161},{"style":1070},[30162],{"type":40,"value":1073},{"type":30,"tag":1046,"props":30164,"children":30165},{"class":1048,"line":1124},[30166,30171,30175,30180,30184,30189],{"type":30,"tag":1046,"props":30167,"children":30168},{"style":1105},[30169],{"type":40,"value":30170},"    commande",{"type":30,"tag":1046,"props":30172,"children":30173},{"style":1070},[30174],{"type":40,"value":1179},{"type":30,"tag":1046,"props":30176,"children":30177},{"style":1138},[30178],{"type":40,"value":30179},"setLivraisonGratuite",{"type":30,"tag":1046,"props":30181,"children":30182},{"style":1070},[30183],{"type":40,"value":1146},{"type":30,"tag":1046,"props":30185,"children":30186},{"style":1780},[30187],{"type":40,"value":30188},"true",{"type":30,"tag":1046,"props":30190,"children":30191},{"style":1070},[30192],{"type":40,"value":1198},{"type":30,"tag":1046,"props":30194,"children":30195},{"class":1048,"line":1168},[30196,30200,30204],{"type":30,"tag":1046,"props":30197,"children":30198},{"style":1070},[30199],{"type":40,"value":20692},{"type":30,"tag":1046,"props":30201,"children":30202},{"style":1053},[30203],{"type":40,"value":19948},{"type":30,"tag":1046,"props":30205,"children":30206},{"style":1070},[30207],{"type":40,"value":1073},{"type":30,"tag":1046,"props":30209,"children":30210},{"class":1048,"line":1201},[30211,30215,30219,30224,30228,30233],{"type":30,"tag":1046,"props":30212,"children":30213},{"style":1105},[30214],{"type":40,"value":30170},{"type":30,"tag":1046,"props":30216,"children":30217},{"style":1070},[30218],{"type":40,"value":1179},{"type":30,"tag":1046,"props":30220,"children":30221},{"style":1138},[30222],{"type":40,"value":30223},"setFraisLivraison",{"type":30,"tag":1046,"props":30225,"children":30226},{"style":1070},[30227],{"type":40,"value":1146},{"type":30,"tag":1046,"props":30229,"children":30230},{"style":6886},[30231],{"type":40,"value":30232},"7.99",{"type":30,"tag":1046,"props":30234,"children":30235},{"style":1070},[30236],{"type":40,"value":1198},{"type":30,"tag":1046,"props":30238,"children":30239},{"class":1048,"line":1210},[30240],{"type":30,"tag":1046,"props":30241,"children":30242},{"style":1070},[30243],{"type":40,"value":1423},{"type":30,"tag":43,"props":30245,"children":30246},{},[30247],{"type":40,"value":30248},"Exemple de commentaire inutile :",{"type":30,"tag":1035,"props":30250,"children":30252},{"className":1039,"code":30251,"language":1038,"meta":8,"style":8},"// Incrémente la variable i\ni++;\n",[30253],{"type":30,"tag":1042,"props":30254,"children":30255},{"__ignoreMap":8},[30256,30264],{"type":30,"tag":1046,"props":30257,"children":30258},{"class":1048,"line":1049},[30259],{"type":30,"tag":1046,"props":30260,"children":30261},{"style":3961},[30262],{"type":40,"value":30263},"// Incrémente la variable i\n",{"type":30,"tag":1046,"props":30265,"children":30266},{"class":1048,"line":675},[30267,30271,30275],{"type":30,"tag":1046,"props":30268,"children":30269},{"style":1105},[30270],{"type":40,"value":13376},{"type":30,"tag":1046,"props":30272,"children":30273},{"style":1795},[30274],{"type":40,"value":13334},{"type":30,"tag":1046,"props":30276,"children":30277},{"style":1070},[30278],{"type":40,"value":1113},{"type":30,"tag":43,"props":30280,"children":30281},{},[30282],{"type":40,"value":30283},"En plus des commentaires, une documentation claire et concise est essentielle, surtout pour les projets de grande envergure. Les outils comme Javadoc, Doxygen ou encore Sphinx (pour Python) peuvent vous aider à générer une documentation directement à partir de votre code.",{"type":30,"tag":964,"props":30285,"children":30286},{},[30287],{"type":30,"tag":43,"props":30288,"children":30289},{},[30290,30294],{"type":30,"tag":36,"props":30291,"children":30292},{},[30293],{"type":40,"value":29633},{"type":40,"value":30295}," : Trop de commentaires inutiles ou redondants encombrent votre code et le rendent plus difficile à lire. Privilégiez un code explicite à un commentaire excessif.",{"type":30,"tag":2339,"props":30297,"children":30299},{"id":30298},"_2-revue-de-code-entre-pairs",[30300],{"type":40,"value":30301},"2. Revue de code entre pairs",{"type":30,"tag":43,"props":30303,"children":30304},{},[30305],{"type":40,"value":30306},"La revue de code est l’une des pratiques les plus efficaces pour garantir la lisibilité du code. Lorsqu’un autre développeur examine votre travail, il peut repérer des parties de code qui vous paraissent évidentes mais qui ne le sont pas pour quelqu’un d’autre. Les critiques constructives permettent d’améliorer non seulement le code, mais aussi les compétences de chacun dans l’équipe.",{"type":30,"tag":43,"props":30308,"children":30309},{},[30310],{"type":40,"value":30311},"Quelques points à aborder lors d’une revue de code :",{"type":30,"tag":163,"props":30313,"children":30314},{},[30315,30320,30325],{"type":30,"tag":167,"props":30316,"children":30317},{},[30318],{"type":40,"value":30319},"Est-ce que les noms des variables et des fonctions sont explicites ?",{"type":30,"tag":167,"props":30321,"children":30322},{},[30323],{"type":40,"value":30324},"Est-ce que la logique est claire et facile à suivre ?",{"type":30,"tag":167,"props":30326,"children":30327},{},[30328],{"type":40,"value":30329},"Y a-t-il des parties du code qui pourraient être simplifiées ou réorganisées ?",{"type":30,"tag":2339,"props":30331,"children":30333},{"id":30332},"_3-tests-automatisés-pour-renforcer-la-clarté",[30334],{"type":40,"value":30335},"3. Tests automatisés pour renforcer la clarté",{"type":30,"tag":43,"props":30337,"children":30338},{},[30339],{"type":40,"value":30340},"Les tests automatisés, en particulier les tests unitaires, contribuent également à rendre le code plus lisible. En rédigeant des tests, vous êtes amené à réfléchir à la manière dont chaque partie de votre code doit se comporter. Un test bien écrit fonctionne comme une",{"type":30,"tag":43,"props":30342,"children":30343},{},[30344],{"type":40,"value":30345},"forme de documentation vivante : il montre comment les différentes fonctions interagissent et ce qu’on attend d’elles.",{"type":30,"tag":43,"props":30347,"children":30348},{},[30349],{"type":40,"value":30350},"En plus, les tests permettent d’éviter l’introduction de bugs lors des modifications futures. Une suite de tests complète garantit que même un code remanié reste fonctionnel, ce qui renforce sa maintenabilité.",{"type":30,"tag":964,"props":30352,"children":30353},{},[30354],{"type":30,"tag":43,"props":30355,"children":30356},{},[30357,30361],{"type":30,"tag":36,"props":30358,"children":30359},{},[30360],{"type":40,"value":29560},{"type":40,"value":30362}," : Considérez chaque test comme une explication de votre code. Si vous avez du mal à écrire un test pour une partie du code, cela pourrait être le signe que cette partie est trop complexe et pourrait bénéficier d'une simplification.",{"type":30,"tag":2339,"props":30364,"children":30366},{"id":30365},"_4-linters-et-formatteurs-automatiques",[30367],{"type":40,"value":30368},"4. Linters et formatteurs automatiques",{"type":30,"tag":43,"props":30370,"children":30371},{},[30372],{"type":40,"value":30373},"Des outils comme les linters (par exemple, ESLint pour JavaScript, Pylint pour Python) et les formatteurs de code (comme Prettier ou Black) sont très utiles pour imposer des standards de qualité dans le code. Ces outils vérifient automatiquement la cohérence du style et peuvent même corriger certaines erreurs de formatage, rendant le code plus propre et lisible sans effort manuel.",{"type":30,"tag":43,"props":30375,"children":30376},{},[30377],{"type":40,"value":30378},"Ils assurent aussi que tous les membres d'une équipe respectent les mêmes conventions, ce qui améliore encore la lisibilité générale du projet.",{"type":30,"tag":964,"props":30380,"children":30381},{},[30382],{"type":30,"tag":43,"props":30383,"children":30384},{},[30385,30389],{"type":30,"tag":36,"props":30386,"children":30387},{},[30388],{"type":40,"value":29633},{"type":40,"value":30390}," : Assurez-vous d'utiliser des linters adaptés à votre langage de programmation et de bien configurer les règles pour correspondre aux standards de votre équipe.",{"type":30,"tag":31,"props":30392,"children":30394},{"id":30393},"objections-courantes-et-comment-les-surmonter",[30395],{"type":40,"value":30396},"Objections courantes et comment les surmonter",{"type":30,"tag":43,"props":30398,"children":30399},{},[30400],{"type":40,"value":30401},"Malgré l’importance de la lisibilité du code, de nombreux développeurs hésitent à y consacrer du temps, principalement en raison de contraintes de temps ou de priorités mal définies. Voici quelques-unes des objections les plus courantes et des réponses pour les surmonter.",{"type":30,"tag":2339,"props":30403,"children":30405},{"id":30404},"objection-1-je-nai-pas-le-temps-de-rendre-mon-code-lisible",[30406],{"type":40,"value":30407},"Objection 1 : \"Je n’ai pas le temps de rendre mon code lisible.\"",{"type":30,"tag":43,"props":30409,"children":30410},{},[30411],{"type":40,"value":30412},"C’est probablement l’objection la plus fréquente. Lorsque vous travaillez sous pression pour respecter des délais, il peut sembler plus rapide de sacrifier la lisibilité au profit de l’efficacité immédiate. Cependant, c’est un piège à long terme.",{"type":30,"tag":43,"props":30414,"children":30415},{},[30416,30421],{"type":30,"tag":36,"props":30417,"children":30418},{},[30419],{"type":40,"value":30420},"Réponse",{"type":40,"value":30422}," : Écrire du code lisible fait gagner du temps à long terme. Un code clair nécessite moins de corrections et est plus facile à maintenir, surtout dans des projets de longue durée où vous devez souvent revenir sur du code ancien. Les quelques minutes que vous passez à choisir de bons noms de variables ou à bien structurer votre code peuvent vous épargner des heures de débogage plus tard.",{"type":30,"tag":964,"props":30424,"children":30425},{},[30426],{"type":30,"tag":43,"props":30427,"children":30428},{},[30429,30433],{"type":30,"tag":36,"props":30430,"children":30431},{},[30432],{"type":40,"value":29560},{"type":40,"value":30434}," : Considérez la lisibilité comme un investissement. Un code mal structuré aujourd’hui coûtera beaucoup plus cher en maintenance demain.",{"type":30,"tag":2339,"props":30436,"children":30438},{"id":30437},"objection-2-tant-que-ça-fonctionne-peu-importe-si-le-code-est-un-peu-désordonné",[30439],{"type":40,"value":30440},"Objection 2 : \"Tant que ça fonctionne, peu importe si le code est un peu désordonné.\"",{"type":30,"tag":43,"props":30442,"children":30443},{},[30444],{"type":40,"value":30445},"Certains développeurs pensent que la lisibilité est un détail secondaire tant que le code \"fait le job\". Après tout, si le logiciel fonctionne correctement, pourquoi se soucier de l’apparence du code ?",{"type":30,"tag":43,"props":30447,"children":30448},{},[30449,30453],{"type":30,"tag":36,"props":30450,"children":30451},{},[30452],{"type":40,"value":30420},{"type":40,"value":30454}," : Un code qui fonctionne aujourd'hui, mais qui est difficile à lire, est une bombe à retardement. La plupart des bugs apparaissent lors de la maintenance ou des modifications du code. Si le code est difficile à comprendre, chaque modification devient risquée, augmentant les chances d’introduire de nouvelles erreurs.",{"type":30,"tag":2339,"props":30456,"children":30458},{"id":30457},"objection-3-ce-nest-pas-mon-problème-si-les-autres-ne-comprennent-pas-mon-code",[30459],{"type":40,"value":30460},"Objection 3 : \"Ce n’est pas mon problème si les autres ne comprennent pas mon code.\"",{"type":30,"tag":43,"props":30462,"children":30463},{},[30464],{"type":40,"value":30465},"Certains développeurs pensent que chaque personne devrait être responsable de comprendre le code, quelle que soit sa lisibilité. Ils estiment que tant qu'ils comprennent ce qu’ils ont écrit, c’est suffisant.",{"type":30,"tag":43,"props":30467,"children":30468},{},[30469,30473],{"type":30,"tag":36,"props":30470,"children":30471},{},[30472],{"type":40,"value":30420},{"type":40,"value":30474}," : Travailler en équipe repose sur la collaboration, et un code illisible devient un obstacle à la productivité collective. Lorsque d'autres membres de l'équipe doivent passer du temps à déchiffrer votre code, cela réduit leur efficacité et génère de la frustration.",{"type":30,"tag":31,"props":30476,"children":30478},{"id":30477},"conclusion-la-lisibilité-comme-fondation-de-la-qualité-logicielle",[30479],{"type":40,"value":30480},"Conclusion : La lisibilité comme fondation de la qualité logicielle",{"type":30,"tag":43,"props":30482,"children":30483},{},[30484,30485,30489],{"type":40,"value":143},{"type":30,"tag":36,"props":30486,"children":30487},{},[30488],{"type":40,"value":80},{"type":40,"value":30490}," ne consiste pas seulement à écrire du code qui fonctionne, mais à produire du code qui soit à la fois robuste, maintenable et, surtout, lisible. En prenant soin de rendre votre code clair dès le départ, vous vous assurez non seulement de faciliter votre propre travail à l’avenir, mais aussi de contribuer à un environnement de développement collaboratif où chacun peut comprendre et améliorer le travail des autres.",{"type":30,"tag":43,"props":30492,"children":30493},{},[30494],{"type":40,"value":30495},"La lisibilité du code, c’est comme investir dans une assurance pour votre projet : cela peut sembler coûteux à court terme, mais les bénéfices à long terme sont inestimables. Que ce soit par des noms de variables explicites, une organisation cohérente, des commentaires pertinents ou l’adoption de pratiques telles que la revue de code et les tests automatisés, chaque étape vers un code plus lisible renforce la qualité globale de votre logiciel.",{"type":30,"tag":84,"props":30497,"children":30498},{},[],{"type":30,"tag":31,"props":30500,"children":30502},{"id":30501},"faq-questions-fréquentes-sur-la-lisibilité-du-code",[30503],{"type":40,"value":30504},"FAQ : Questions fréquentes sur la lisibilité du code",{"type":30,"tag":530,"props":30506,"children":30507},{},[30508,30513],{"type":30,"tag":534,"props":30509,"children":30510},{},[30511],{"type":40,"value":30512},"Qu’est-ce qui différencie un code fonctionnel d’un code lisible ?",{"type":30,"tag":43,"props":30514,"children":30515},{},[30516],{"type":40,"value":30517},"Un code fonctionnel, c’est un code qui fait ce qu’on attend de lui, mais cela ne signifie pas nécessairement qu’il est facile à comprendre. Un code lisible, en revanche, est structuré et écrit de manière à être compris rapidement par n’importe quel développeur, même sans explication supplémentaire.",{"type":30,"tag":530,"props":30519,"children":30520},{},[30521,30526],{"type":30,"tag":534,"props":30522,"children":30523},{},[30524],{"type":40,"value":30525},"Dois-je commenter chaque ligne de code ?",{"type":30,"tag":43,"props":30527,"children":30528},{},[30529,30531,30535,30537,30541],{"type":40,"value":30530},"Non, commenter chaque ligne peut rendre le code encore plus difficile à lire. Les commentaires doivent être utilisés pour expliquer ",{"type":30,"tag":872,"props":30532,"children":30533},{},[30534],{"type":40,"value":30079},{"type":40,"value":30536}," certaines décisions ont été prises, et non ",{"type":30,"tag":872,"props":30538,"children":30539},{},[30540],{"type":40,"value":30086},{"type":40,"value":30542}," fait chaque ligne de code. Un bon code se doit d’être lisible sans avoir besoin de commentaires excessifs.",{"type":30,"tag":530,"props":30544,"children":30545},{},[30546,30551],{"type":30,"tag":534,"props":30547,"children":30548},{},[30549],{"type":40,"value":30550},"Est-il vraiment nécessaire de passer du temps à rendre mon code lisible si je suis le seul à travailler dessus ?",{"type":30,"tag":43,"props":30552,"children":30553},{},[30554],{"type":40,"value":30555},"Oui ! Même si vous êtes seul sur un projet, vous pourriez revenir sur votre propre code dans plusieurs mois et avoir du mal à comprendre vos propres choix. De plus, rendre votre code lisible vous permet de vous discipliner et de maintenir un niveau de qualité constant.",{"type":30,"tag":530,"props":30557,"children":30558},{},[30559,30564],{"type":30,"tag":534,"props":30560,"children":30561},{},[30562],{"type":40,"value":30563},"Quels outils puis-je utiliser pour améliorer la lisibilité de mon code ?",{"type":30,"tag":43,"props":30565,"children":30566},{},[30567],{"type":40,"value":30568},"Les outils comme les linters (ESLint, Pylint) et les formatteurs automatiques (Prettier, Black) sont d’excellents moyens d’assurer une bonne structure de code. Les tests unitaires et les revues de code entre pairs sont également des pratiques essentielles pour améliorer la clarté du code.",{"type":30,"tag":530,"props":30570,"children":30571},{},[30572,30577],{"type":30,"tag":534,"props":30573,"children":30574},{},[30575],{"type":40,"value":30576},"Est-ce que la lisibilité du code a un impact sur les performances ?",{"type":30,"tag":43,"props":30578,"children":30579},{},[30580],{"type":40,"value":30581},"La lisibilité du code n’affecte généralement pas les performances du programme en termes de vitesse d’exécution, mais elle améliore les performances humaines. Un code clair et bien structuré permet aux développeurs de travailler plus efficacement, de déboguer plus rapidement et d’ajouter de nouvelles fonctionnalités avec moins de risques d’erreurs.",{"type":30,"tag":84,"props":30583,"children":30584},{},[],{"type":30,"tag":43,"props":30586,"children":30587},{},[30588,30590,30594,30596,30602],{"type":40,"value":30589},"Un code lisible est aussi un code qui passe la ",{"type":30,"tag":75,"props":30591,"children":30592},{"href":349},[30593],{"type":40,"value":352},{"type":40,"value":30595}," sans friction et qui s'inscrit dans les pratiques d'une ",{"type":30,"tag":75,"props":30597,"children":30599},{"href":30598},"/fr/dette-technique/definition-of-done-qualite",[30600],{"type":40,"value":30601},"Definition of Done",{"type":40,"value":30603}," exigeante : ces deux pratiques se renforcent mutuellement.",{"type":30,"tag":211,"props":30605,"children":30606},{"cta":11121,"href":639,"title":16714,"type":641},[30607],{"type":30,"tag":43,"props":30608,"children":30609},{},[30610],{"type":40,"value":16720},{"type":30,"tag":6456,"props":30612,"children":30613},{},[30614],{"type":40,"value":6460},{"title":8,"searchDepth":675,"depth":675,"links":30616},[30617,30618,30619,30620,30621,30622,30623],{"id":29277,"depth":675,"text":29280},{"id":29312,"depth":675,"text":29315},{"id":29652,"depth":675,"text":29655},{"id":30055,"depth":675,"text":30058},{"id":30393,"depth":675,"text":30396},{"id":30477,"depth":675,"text":30480},{"id":30501,"depth":675,"text":30504},"content:fr:dette-technique:guide-code-lisible-software-craftsmanship.md","fr/dette-technique/guide-code-lisible-software-craftsmanship.md","fr/dette-technique/guide-code-lisible-software-craftsmanship",{"_path":30628,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":30629,"description":30630,"id":10392,"date":30631,"listed":13,"nocomments":7,"hidden":7,"categories":30632,"tags":30633,"--cover":30634,"readingTime":30635,"body":30639,"_type":709,"_id":32159,"_source":711,"_file":32160,"_stem":32161,"_extension":714},"/fr/dette-technique/yagni-ecrire-code-qualite-sans-fonctionnalites-inutiles","Principe YAGNI, Comment écrire du code de qualité en évitant les fonctionnalités inutiles","Découvrez le principe YAGNI en software craftsmanship et apprenez à simplifier votre code en évitant d'anticiper des besoins futurs. Exemples concrets en Java inclus.","2024-06-18",[6],[13022,726],"covers/articles/principe-yagni.jpg",{"text":29269,"minutes":30636,"time":30637,"words":30638},12.475,748500,2495,{"type":27,"children":30640,"toc":32148},[30641,30647,30653,30658,30669,30674,30677,30683,30688,30698,30703,30713,30725,30735,30740,30750,30755,30758,30767,30773,30778,30788,30800,30810,30815,30825,30830,30840,30845,30851,30856,31201,31214,31217,31223,31228,31238,31257,31264,31432,31450,31460,31465,31473,31716,31728,31838,31848,31853,31863,31868,31876,31884,31894,31899,31902,31908,31913,31923,31928,31936,31941,31951,31956,31963,31968,31978,31983,31993,31998,32008,32013,32016,32022,32041,32054,32067,32080,32093,32112,32125,32128,32132,32137,32144],{"type":30,"tag":31,"props":30642,"children":30644},{"id":30643},"yagni-comment-écrire-du-code-de-qualité-en-évitant-les-fonctionnalités-inutiles",[30645],{"type":40,"value":30646},"YAGNI : Comment écrire du code de qualité en évitant les fonctionnalités inutiles",{"type":30,"tag":116,"props":30648,"children":30650},{"id":30649},"introduction-quest-ce-que-yagni",[30651],{"type":40,"value":30652},"Introduction : Qu’est-ce que YAGNI ?",{"type":30,"tag":43,"props":30654,"children":30655},{},[30656],{"type":40,"value":30657},"Mise en situation : vous travaillez sur un projet de développement, et vous vous dites que ce serait une bonne idée d’anticiper certains besoins futurs. Vous décidez donc d’ajouter une ou deux fonctionnalités \"au cas où\". Mais voilà, des mois plus tard, ces fonctionnalités ne sont toujours pas utilisées, et pire, elles compliquent la lecture et la maintenance du code. Cela vous semble familier ?",{"type":30,"tag":43,"props":30659,"children":30660},{},[30661,30663,30667],{"type":40,"value":30662},"Si c’est le cas, vous n’êtes pas seul. Beaucoup de développeurs tombent dans ce piège : c’est là que le principe YAGNI (You Aren’t Gonna Need It) intervient. Formulé par Kent Beck dans le cadre de l’Extreme Programming, YAGNI est un des piliers du ",{"type":30,"tag":36,"props":30664,"children":30665},{},[30666],{"type":40,"value":80},{"type":40,"value":30668},", conçu pour éviter l’ajout de fonctionnalités inutiles. En l’appliquant correctement, vous gardez votre code simple, évolutif et sans surcharge. C’est exactement ce que j’observe dans des équipes que j’accompagne : chez un client dans le secteur bancaire, une estimation a révélé que près de 30 % du code ne répondait à aucun besoin actif, ce qui ralentissait chaque livraison et chaque onboarding.",{"type":30,"tag":43,"props":30670,"children":30671},{},[30672],{"type":40,"value":30673},"Je vais vous montrer comment appliquer YAGNI de manière pratique dans votre code, avec des exemples concrets en Java. Vous comprendrez comment identifier et éviter les ajouts superflus pour écrire du code plus propre, plus rapide à tester et plus facile à maintenir.",{"type":30,"tag":84,"props":30675,"children":30676},{},[],{"type":30,"tag":116,"props":30678,"children":30680},{"id":30679},"pourquoi-appliquer-yagni",[30681],{"type":40,"value":30682},"Pourquoi appliquer YAGNI ?",{"type":30,"tag":43,"props":30684,"children":30685},{},[30686],{"type":40,"value":30687},"Le principe de YAGNI n’est pas juste un mantra pour les puristes du code propre, il a des avantages concrets qui impactent la qualité de votre code et la productivité de votre équipe. Voici pourquoi appliquer YAGNI peut vraiment transformer votre manière de développer :",{"type":30,"tag":2339,"props":30689,"children":30691},{"id":30690},"_1-réduction-de-la-complexité",[30692,30693],{"type":40,"value":242},{"type":30,"tag":36,"props":30694,"children":30695},{},[30696],{"type":40,"value":30697},"Réduction de la complexité",{"type":30,"tag":43,"props":30699,"children":30700},{},[30701],{"type":40,"value":30702},"Chaque nouvelle fonctionnalité ajoutée au code, même si elle semble innocente, augmente la complexité globale. Cette complexité se traduit par plus de lignes de code à maintenir, des tests supplémentaires à écrire et un risque plus élevé de bugs. En évitant d'ajouter des fonctionnalités inutiles, vous simplifiez votre code et le rendez plus facile à comprendre pour vous et pour les autres développeurs qui le liront après vous.",{"type":30,"tag":2339,"props":30704,"children":30706},{"id":30705},"_2-diminution-de-la-dette-technique",[30707,30708],{"type":40,"value":268},{"type":30,"tag":36,"props":30709,"children":30710},{},[30711],{"type":40,"value":30712},"Diminution de la dette technique",{"type":30,"tag":43,"props":30714,"children":30715},{},[30716,30718,30723],{"type":40,"value":30717},"Ajouter des fonctionnalités que vous n’utiliserez peut-être jamais, c’est créer une forme de ",{"type":30,"tag":75,"props":30719,"children":30720},{"href":23323},[30721],{"type":40,"value":30722},"dette technique",{"type":40,"value":30724},". Avec le temps, ces parties de code inutiles peuvent poser des problèmes : elles deviennent obsolètes, difficiles à maintenir ou doivent être adaptées pour fonctionner avec d’autres changements. En appliquant YAGNI, vous évitez d’accumuler cette dette, et vous restez concentré sur les fonctionnalités réellement nécessaires.",{"type":30,"tag":2339,"props":30726,"children":30728},{"id":30727},"_3-gagner-du-temps-et-des-ressources",[30729,30730],{"type":40,"value":293},{"type":30,"tag":36,"props":30731,"children":30732},{},[30733],{"type":40,"value":30734},"Gagner du temps et des ressources",{"type":30,"tag":43,"props":30736,"children":30737},{},[30738],{"type":40,"value":30739},"Quand vous écrivez moins de code, vous gagnez du temps. Ce n’est pas seulement le temps passé à écrire, mais aussi celui passé à tester, déboguer et maintenir ce code. Cela permet à votre équipe de se concentrer sur des fonctionnalités qui apportent une réelle valeur au produit final, plutôt que de perdre du temps sur des éléments hypothétiques.",{"type":30,"tag":2339,"props":30741,"children":30743},{"id":30742},"_4-favoriser-la-flexibilité",[30744,30745],{"type":40,"value":318},{"type":30,"tag":36,"props":30746,"children":30747},{},[30748],{"type":40,"value":30749},"Favoriser la flexibilité",{"type":30,"tag":43,"props":30751,"children":30752},{},[30753],{"type":40,"value":30754},"En vous concentrant uniquement sur ce qui est nécessaire, vous vous assurez que votre code est plus modulaire et prêt à évoluer. Un code simple est plus facile à adapter lorsqu’un nouveau besoin se présente réellement. YAGNI vous encourage à ne pas anticiper les besoins futurs, car ces besoins changent souvent avec le temps. En gardant votre code minimaliste, vous serez plus agile face aux demandes imprévues.",{"type":30,"tag":84,"props":30756,"children":30757},{},[],{"type":30,"tag":211,"props":30759,"children":30761},{"cta":213,"href":214,"title":30760,"type":216},"Votre équipe accumule des fonctionnalités que personne n’utilise ?",[30762],{"type":30,"tag":43,"props":30763,"children":30764},{},[30765],{"type":40,"value":30766},"La base de code grossit, la dette technique s’accumule et personne ne sait vraiment ce qui est encore actif. Résultat : chaque modification est un risque, et la vélocité chute sprint après sprint. Réservons 30 minutes pour identifier ce qui freine réellement votre équipe et construire un plan d’action concret.",{"type":30,"tag":116,"props":30768,"children":30770},{"id":30769},"comment-identifier-une-fonctionnalité-inutile",[30771],{"type":40,"value":30772},"Comment identifier une fonctionnalité inutile ?",{"type":30,"tag":43,"props":30774,"children":30775},{},[30776],{"type":40,"value":30777},"L’une des plus grandes difficultés dans l’application du principe YAGNI est de savoir si une fonctionnalité est réellement nécessaire ou non. La tentation d’ajouter des éléments \"au cas où\" peut être forte, mais voici quelques critères pour vous aider à identifier ce qui est superflu.",{"type":30,"tag":2339,"props":30779,"children":30781},{"id":30780},"_1-demande-immédiate-ou-hypothétique",[30782,30783],{"type":40,"value":242},{"type":30,"tag":36,"props":30784,"children":30785},{},[30786],{"type":40,"value":30787},"Demande immédiate ou hypothétique ?",{"type":30,"tag":43,"props":30789,"children":30790},{},[30791,30793,30798],{"type":40,"value":30792},"Un des indicateurs les plus simples : est-ce que cette fonctionnalité répond à un besoin immédiat ? Si la réponse est non et qu’elle est seulement là pour anticiper un besoin futur potentiel, il est probable que vous n’en aurez pas besoin. YAGNI vous pousse à implémenter uniquement ce qui est nécessaire ",{"type":30,"tag":36,"props":30794,"children":30795},{},[30796],{"type":40,"value":30797},"aujourd’hui",{"type":40,"value":30799},". Si un jour ce besoin se présente, vous pourrez toujours l’ajouter au bon moment.",{"type":30,"tag":2339,"props":30801,"children":30803},{"id":30802},"_2-est-ce-que-cest-nécessaire-pour-la-fonctionnalité-actuelle",[30804,30805],{"type":40,"value":268},{"type":30,"tag":36,"props":30806,"children":30807},{},[30808],{"type":40,"value":30809},"Est-ce que c’est nécessaire pour la fonctionnalité actuelle ?",{"type":30,"tag":43,"props":30811,"children":30812},{},[30813],{"type":40,"value":30814},"Si cette nouvelle fonctionnalité n’est pas essentielle pour le fonctionnement de ce que vous êtes en train de développer, alors elle est peut-être inutile. Posez-vous cette question : \"Est-ce que mon application marcherait toujours correctement sans cette fonctionnalité ?\" Si la réponse est oui, il est probablement sage de la laisser de côté pour l’instant.",{"type":30,"tag":2339,"props":30816,"children":30818},{"id":30817},"_3-est-ce-que-ça-complique-le-code",[30819,30820],{"type":40,"value":293},{"type":30,"tag":36,"props":30821,"children":30822},{},[30823],{"type":40,"value":30824},"Est-ce que ça complique le code ?",{"type":30,"tag":43,"props":30826,"children":30827},{},[30828],{"type":40,"value":30829},"Un autre bon indicateur est de voir si cette nouvelle fonctionnalité ajoute de la complexité au code existant. Si elle rend votre code plus difficile à lire, à tester ou à maintenir, c’est un signe clair qu’elle pourrait être inutile. Le code simple est toujours plus facile à faire évoluer, et YAGNI vous encourage à garder votre code aussi léger que possible.",{"type":30,"tag":2339,"props":30831,"children":30833},{"id":30832},"_4-est-ce-que-cest-une-demande-externe-ou-interne",[30834,30835],{"type":40,"value":318},{"type":30,"tag":36,"props":30836,"children":30837},{},[30838],{"type":40,"value":30839},"Est-ce que c’est une demande externe ou interne ?",{"type":30,"tag":43,"props":30841,"children":30842},{},[30843],{"type":40,"value":30844},"Parfois, la pression vient de l’extérieur : un client, un supérieur ou un collègue peut insister pour ajouter des fonctionnalités \"juste au cas où\". Dans ces situations, je vous recommande d'évaluer soigneusement si la demande est justifiée ou si elle repose sur des hypothèses. Expliquer les avantages du principe YAGNI peut aussi aider à éviter d’ajouter des fonctionnalités inutiles.",{"type":30,"tag":2339,"props":30846,"children":30848},{"id":30847},"exemples-concrets-en-java",[30849],{"type":40,"value":30850},"Exemples concrets en Java",{"type":30,"tag":43,"props":30852,"children":30853},{},[30854],{"type":40,"value":30855},"Prenons un exemple simple en Java où vous pourriez être tenté d’ajouter une fonctionnalité inutile :",{"type":30,"tag":1035,"props":30857,"children":30859},{"className":1039,"code":30858,"language":1038,"meta":8,"style":8},"// Exemple où une fonctionnalité inutile est ajoutée\npublic class User {\n    private String name;\n    private int age;\n    private String address; // Cette information n'est pas encore utilisée\n\n    public User(String name, int age) {\n        this.name = name;\n        this.age = age;\n        // On pourrait être tenté d'ajouter l'adresse dès maintenant, mais YAGNI !\n    }\n\n    public String getName() {\n        return name;\n    }\n\n    public int getAge() {\n        return age;\n    }\n    \n    // On pourrait ajouter un getter pour l'adresse ici, mais ça serait prématuré.\n}\n",[30860],{"type":30,"tag":1042,"props":30861,"children":30862},{"__ignoreMap":8},[30863,30871,30890,30909,30929,30954,30961,31004,31031,31059,31067,31074,31081,31104,31119,31126,31133,31157,31172,31179,31186,31194],{"type":30,"tag":1046,"props":30864,"children":30865},{"class":1048,"line":1049},[30866],{"type":30,"tag":1046,"props":30867,"children":30868},{"style":3961},[30869],{"type":40,"value":30870},"// Exemple où une fonctionnalité inutile est ajoutée\n",{"type":30,"tag":1046,"props":30872,"children":30873},{"class":1048,"line":675},[30874,30878,30882,30886],{"type":30,"tag":1046,"props":30875,"children":30876},{"style":1053},[30877],{"type":40,"value":1056},{"type":30,"tag":1046,"props":30879,"children":30880},{"style":1053},[30881],{"type":40,"value":1061},{"type":30,"tag":1046,"props":30883,"children":30884},{"style":1064},[30885],{"type":40,"value":9900},{"type":30,"tag":1046,"props":30887,"children":30888},{"style":1070},[30889],{"type":40,"value":1073},{"type":30,"tag":1046,"props":30891,"children":30892},{"class":1048,"line":681},[30893,30897,30901,30905],{"type":30,"tag":1046,"props":30894,"children":30895},{"style":1053},[30896],{"type":40,"value":1081},{"type":30,"tag":1046,"props":30898,"children":30899},{"style":1084},[30900],{"type":40,"value":2067},{"type":30,"tag":1046,"props":30902,"children":30903},{"style":1105},[30904],{"type":40,"value":10290},{"type":30,"tag":1046,"props":30906,"children":30907},{"style":1070},[30908],{"type":40,"value":1113},{"type":30,"tag":1046,"props":30910,"children":30911},{"class":1048,"line":1124},[30912,30916,30920,30925],{"type":30,"tag":1046,"props":30913,"children":30914},{"style":1053},[30915],{"type":40,"value":1081},{"type":30,"tag":1046,"props":30917,"children":30918},{"style":1053},[30919],{"type":40,"value":10265},{"type":30,"tag":1046,"props":30921,"children":30922},{"style":1105},[30923],{"type":40,"value":30924}," age",{"type":30,"tag":1046,"props":30926,"children":30927},{"style":1070},[30928],{"type":40,"value":1113},{"type":30,"tag":1046,"props":30930,"children":30931},{"class":1048,"line":1168},[30932,30936,30940,30945,30949],{"type":30,"tag":1046,"props":30933,"children":30934},{"style":1053},[30935],{"type":40,"value":1081},{"type":30,"tag":1046,"props":30937,"children":30938},{"style":1084},[30939],{"type":40,"value":2067},{"type":30,"tag":1046,"props":30941,"children":30942},{"style":1105},[30943],{"type":40,"value":30944}," address",{"type":30,"tag":1046,"props":30946,"children":30947},{"style":1070},[30948],{"type":40,"value":13298},{"type":30,"tag":1046,"props":30950,"children":30951},{"style":3961},[30952],{"type":40,"value":30953}," // Cette information n'est pas encore utilisée\n",{"type":30,"tag":1046,"props":30955,"children":30956},{"class":1048,"line":1201},[30957],{"type":30,"tag":1046,"props":30958,"children":30959},{"emptyLinePlaceholder":13},[30960],{"type":40,"value":1121},{"type":30,"tag":1046,"props":30962,"children":30963},{"class":1048,"line":1210},[30964,30968,30972,30976,30980,30984,30988,30992,30996,31000],{"type":30,"tag":1046,"props":30965,"children":30966},{"style":1053},[30967],{"type":40,"value":1130},{"type":30,"tag":1046,"props":30969,"children":30970},{"style":1138},[30971],{"type":40,"value":9900},{"type":30,"tag":1046,"props":30973,"children":30974},{"style":1070},[30975],{"type":40,"value":1146},{"type":30,"tag":1046,"props":30977,"children":30978},{"style":1084},[30979],{"type":40,"value":2882},{"type":30,"tag":1046,"props":30981,"children":30982},{"style":1153},[30983],{"type":40,"value":10290},{"type":30,"tag":1046,"props":30985,"children":30986},{"style":1070},[30987],{"type":40,"value":2891},{"type":30,"tag":1046,"props":30989,"children":30990},{"style":1053},[30991],{"type":40,"value":10265},{"type":30,"tag":1046,"props":30993,"children":30994},{"style":1153},[30995],{"type":40,"value":30924},{"type":30,"tag":1046,"props":30997,"children":30998},{"style":1070},[30999],{"type":40,"value":1161},{"type":30,"tag":1046,"props":31001,"children":31002},{"style":1070},[31003],{"type":40,"value":1073},{"type":30,"tag":1046,"props":31005,"children":31006},{"class":1048,"line":1218},[31007,31011,31015,31019,31023,31027],{"type":30,"tag":1046,"props":31008,"children":31009},{"style":1780},[31010],{"type":40,"value":1783},{"type":30,"tag":1046,"props":31012,"children":31013},{"style":1070},[31014],{"type":40,"value":1179},{"type":30,"tag":1046,"props":31016,"children":31017},{"style":1105},[31018],{"type":40,"value":10406},{"type":30,"tag":1046,"props":31020,"children":31021},{"style":1795},[31022],{"type":40,"value":1798},{"type":30,"tag":1046,"props":31024,"children":31025},{"style":1105},[31026],{"type":40,"value":10290},{"type":30,"tag":1046,"props":31028,"children":31029},{"style":1070},[31030],{"type":40,"value":1113},{"type":30,"tag":1046,"props":31032,"children":31033},{"class":1048,"line":1255},[31034,31038,31042,31047,31051,31055],{"type":30,"tag":1046,"props":31035,"children":31036},{"style":1780},[31037],{"type":40,"value":1783},{"type":30,"tag":1046,"props":31039,"children":31040},{"style":1070},[31041],{"type":40,"value":1179},{"type":30,"tag":1046,"props":31043,"children":31044},{"style":1105},[31045],{"type":40,"value":31046},"age ",{"type":30,"tag":1046,"props":31048,"children":31049},{"style":1795},[31050],{"type":40,"value":1798},{"type":30,"tag":1046,"props":31052,"children":31053},{"style":1105},[31054],{"type":40,"value":30924},{"type":30,"tag":1046,"props":31056,"children":31057},{"style":1070},[31058],{"type":40,"value":1113},{"type":30,"tag":1046,"props":31060,"children":31061},{"class":1048,"line":1284},[31062],{"type":30,"tag":1046,"props":31063,"children":31064},{"style":3961},[31065],{"type":40,"value":31066},"        // On pourrait être tenté d'ajouter l'adresse dès maintenant, mais YAGNI !\n",{"type":30,"tag":1046,"props":31068,"children":31069},{"class":1048,"line":1292},[31070],{"type":30,"tag":1046,"props":31071,"children":31072},{"style":1070},[31073],{"type":40,"value":1207},{"type":30,"tag":1046,"props":31075,"children":31076},{"class":1048,"line":1300},[31077],{"type":30,"tag":1046,"props":31078,"children":31079},{"emptyLinePlaceholder":13},[31080],{"type":40,"value":1121},{"type":30,"tag":1046,"props":31082,"children":31083},{"class":1048,"line":1327},[31084,31088,31092,31096,31100],{"type":30,"tag":1046,"props":31085,"children":31086},{"style":1053},[31087],{"type":40,"value":1130},{"type":30,"tag":1046,"props":31089,"children":31090},{"style":1084},[31091],{"type":40,"value":2067},{"type":30,"tag":1046,"props":31093,"children":31094},{"style":1138},[31095],{"type":40,"value":10597},{"type":30,"tag":1046,"props":31097,"children":31098},{"style":1070},[31099],{"type":40,"value":1320},{"type":30,"tag":1046,"props":31101,"children":31102},{"style":1070},[31103],{"type":40,"value":1073},{"type":30,"tag":1046,"props":31105,"children":31106},{"class":1048,"line":1354},[31107,31111,31115],{"type":30,"tag":1046,"props":31108,"children":31109},{"style":1053},[31110],{"type":40,"value":1333},{"type":30,"tag":1046,"props":31112,"children":31113},{"style":1105},[31114],{"type":40,"value":10290},{"type":30,"tag":1046,"props":31116,"children":31117},{"style":1070},[31118],{"type":40,"value":1113},{"type":30,"tag":1046,"props":31120,"children":31121},{"class":1048,"line":1391},[31122],{"type":30,"tag":1046,"props":31123,"children":31124},{"style":1070},[31125],{"type":40,"value":1207},{"type":30,"tag":1046,"props":31127,"children":31128},{"class":1048,"line":1409},[31129],{"type":30,"tag":1046,"props":31130,"children":31131},{"emptyLinePlaceholder":13},[31132],{"type":40,"value":1121},{"type":30,"tag":1046,"props":31134,"children":31135},{"class":1048,"line":1417},[31136,31140,31144,31149,31153],{"type":30,"tag":1046,"props":31137,"children":31138},{"style":1053},[31139],{"type":40,"value":1130},{"type":30,"tag":1046,"props":31141,"children":31142},{"style":1053},[31143],{"type":40,"value":10265},{"type":30,"tag":1046,"props":31145,"children":31146},{"style":1138},[31147],{"type":40,"value":31148}," getAge",{"type":30,"tag":1046,"props":31150,"children":31151},{"style":1070},[31152],{"type":40,"value":1320},{"type":30,"tag":1046,"props":31154,"children":31155},{"style":1070},[31156],{"type":40,"value":1073},{"type":30,"tag":1046,"props":31158,"children":31159},{"class":1048,"line":2023},[31160,31164,31168],{"type":30,"tag":1046,"props":31161,"children":31162},{"style":1053},[31163],{"type":40,"value":1333},{"type":30,"tag":1046,"props":31165,"children":31166},{"style":1105},[31167],{"type":40,"value":30924},{"type":30,"tag":1046,"props":31169,"children":31170},{"style":1070},[31171],{"type":40,"value":1113},{"type":30,"tag":1046,"props":31173,"children":31174},{"class":1048,"line":2083},[31175],{"type":30,"tag":1046,"props":31176,"children":31177},{"style":1070},[31178],{"type":40,"value":1207},{"type":30,"tag":1046,"props":31180,"children":31181},{"class":1048,"line":2126},[31182],{"type":30,"tag":1046,"props":31183,"children":31184},{"style":1105},[31185],{"type":40,"value":16132},{"type":30,"tag":1046,"props":31187,"children":31188},{"class":1048,"line":2159},[31189],{"type":30,"tag":1046,"props":31190,"children":31191},{"style":3961},[31192],{"type":40,"value":31193},"    // On pourrait ajouter un getter pour l'adresse ici, mais ça serait prématuré.\n",{"type":30,"tag":1046,"props":31195,"children":31196},{"class":1048,"line":2167},[31197],{"type":30,"tag":1046,"props":31198,"children":31199},{"style":1070},[31200],{"type":40,"value":1423},{"type":30,"tag":43,"props":31202,"children":31203},{},[31204,31206,31212],{"type":40,"value":31205},"Dans cet exemple, l’attribut ",{"type":30,"tag":1042,"props":31207,"children":31209},{"className":31208},[],[31210],{"type":40,"value":31211},"address",{"type":40,"value":31213}," est inutile tant que le programme n’en a pas besoin. Selon YAGNI, ne l’ajoutez pas avant d’avoir une demande précise pour cette fonctionnalité.",{"type":30,"tag":84,"props":31215,"children":31216},{},[],{"type":30,"tag":116,"props":31218,"children":31220},{"id":31219},"bonnes-pratiques-pour-appliquer-yagni-en-java",[31221],{"type":40,"value":31222},"Bonnes pratiques pour appliquer YAGNI en Java",{"type":30,"tag":43,"props":31224,"children":31225},{},[31226],{"type":40,"value":31227},"Appliquer YAGNI de manière efficace demande de la discipline et une certaine maîtrise des principes de base du développement. Voici quelques bonnes pratiques qui vous permettront d’intégrer YAGNI dans votre quotidien, en particulier lorsque vous écrivez du code Java.",{"type":30,"tag":2339,"props":31229,"children":31231},{"id":31230},"_1-utilisez-les-tests-pour-guider-votre-développement",[31232,31233],{"type":40,"value":242},{"type":30,"tag":36,"props":31234,"children":31235},{},[31236],{"type":40,"value":31237},"Utilisez les tests pour guider votre développement",{"type":30,"tag":43,"props":31239,"children":31240},{},[31241,31243,31247,31249,31255],{"type":40,"value":31242},"L’une des meilleures manières de ne pas anticiper inutilement est d’adopter une approche ",{"type":30,"tag":36,"props":31244,"children":31245},{},[31246],{"type":40,"value":28503},{"type":40,"value":31248},". En TDD, vous écrivez d’abord un ",{"type":30,"tag":75,"props":31250,"children":31252},{"href":31251},"/fr/dette-technique/decouvrir-frameworks-tests-java",[31253],{"type":40,"value":31254},"test",{"type":40,"value":31256}," pour la fonctionnalité spécifique que vous souhaitez implémenter, puis vous écrivez juste assez de code pour passer ce test. Cela vous oblige à vous concentrer uniquement sur ce qui est nécessaire pour faire fonctionner votre application.",{"type":30,"tag":43,"props":31258,"children":31259},{},[31260],{"type":30,"tag":36,"props":31261,"children":31262},{},[31263],{"type":40,"value":13211},{"type":30,"tag":1035,"props":31265,"children":31267},{"className":1039,"code":31266,"language":1038,"meta":8,"style":8},"@Test\npublic void testAddUser() {\n    User user = new User(\"Alice\", 30);\n    assertEquals(\"Alice\", user.getName());\n    assertEquals(30, user.getAge());\n}\n",[31268],{"type":30,"tag":1042,"props":31269,"children":31270},{"__ignoreMap":8},[31271,31282,31306,31353,31389,31425],{"type":30,"tag":1046,"props":31272,"children":31273},{"class":1048,"line":1049},[31274,31278],{"type":30,"tag":1046,"props":31275,"children":31276},{"style":1647},[31277],{"type":40,"value":1650},{"type":30,"tag":1046,"props":31279,"children":31280},{"style":1653},[31281],{"type":40,"value":13736},{"type":30,"tag":1046,"props":31283,"children":31284},{"class":1048,"line":675},[31285,31289,31293,31298,31302],{"type":30,"tag":1046,"props":31286,"children":31287},{"style":1053},[31288],{"type":40,"value":1056},{"type":30,"tag":1046,"props":31290,"children":31291},{"style":1053},[31292],{"type":40,"value":1135},{"type":30,"tag":1046,"props":31294,"children":31295},{"style":1138},[31296],{"type":40,"value":31297}," testAddUser",{"type":30,"tag":1046,"props":31299,"children":31300},{"style":1070},[31301],{"type":40,"value":1320},{"type":30,"tag":1046,"props":31303,"children":31304},{"style":1070},[31305],{"type":40,"value":1073},{"type":30,"tag":1046,"props":31307,"children":31308},{"class":1048,"line":681},[31309,31314,31319,31323,31327,31331,31335,31340,31344,31349],{"type":30,"tag":1046,"props":31310,"children":31311},{"style":1084},[31312],{"type":40,"value":31313},"    User",{"type":30,"tag":1046,"props":31315,"children":31316},{"style":1105},[31317],{"type":40,"value":31318}," user ",{"type":30,"tag":1046,"props":31320,"children":31321},{"style":1795},[31322],{"type":40,"value":1798},{"type":30,"tag":1046,"props":31324,"children":31325},{"style":1053},[31326],{"type":40,"value":2480},{"type":30,"tag":1046,"props":31328,"children":31329},{"style":1138},[31330],{"type":40,"value":9900},{"type":30,"tag":1046,"props":31332,"children":31333},{"style":1070},[31334],{"type":40,"value":1146},{"type":30,"tag":1046,"props":31336,"children":31337},{"style":1675},[31338],{"type":40,"value":31339},"\"Alice\"",{"type":30,"tag":1046,"props":31341,"children":31342},{"style":1070},[31343],{"type":40,"value":2891},{"type":30,"tag":1046,"props":31345,"children":31346},{"style":6886},[31347],{"type":40,"value":31348}," 30",{"type":30,"tag":1046,"props":31350,"children":31351},{"style":1070},[31352],{"type":40,"value":1198},{"type":30,"tag":1046,"props":31354,"children":31355},{"class":1048,"line":1124},[31356,31361,31365,31369,31373,31377,31381,31385],{"type":30,"tag":1046,"props":31357,"children":31358},{"style":1138},[31359],{"type":40,"value":31360},"    assertEquals",{"type":30,"tag":1046,"props":31362,"children":31363},{"style":1070},[31364],{"type":40,"value":1146},{"type":30,"tag":1046,"props":31366,"children":31367},{"style":1675},[31368],{"type":40,"value":31339},{"type":30,"tag":1046,"props":31370,"children":31371},{"style":1070},[31372],{"type":40,"value":2891},{"type":30,"tag":1046,"props":31374,"children":31375},{"style":1105},[31376],{"type":40,"value":15092},{"type":30,"tag":1046,"props":31378,"children":31379},{"style":1070},[31380],{"type":40,"value":1179},{"type":30,"tag":1046,"props":31382,"children":31383},{"style":1138},[31384],{"type":40,"value":7392},{"type":30,"tag":1046,"props":31386,"children":31387},{"style":1070},[31388],{"type":40,"value":3340},{"type":30,"tag":1046,"props":31390,"children":31391},{"class":1048,"line":1168},[31392,31396,31400,31405,31409,31413,31417,31421],{"type":30,"tag":1046,"props":31393,"children":31394},{"style":1138},[31395],{"type":40,"value":31360},{"type":30,"tag":1046,"props":31397,"children":31398},{"style":1070},[31399],{"type":40,"value":1146},{"type":30,"tag":1046,"props":31401,"children":31402},{"style":6886},[31403],{"type":40,"value":31404},"30",{"type":30,"tag":1046,"props":31406,"children":31407},{"style":1070},[31408],{"type":40,"value":2891},{"type":30,"tag":1046,"props":31410,"children":31411},{"style":1105},[31412],{"type":40,"value":15092},{"type":30,"tag":1046,"props":31414,"children":31415},{"style":1070},[31416],{"type":40,"value":1179},{"type":30,"tag":1046,"props":31418,"children":31419},{"style":1138},[31420],{"type":40,"value":14136},{"type":30,"tag":1046,"props":31422,"children":31423},{"style":1070},[31424],{"type":40,"value":3340},{"type":30,"tag":1046,"props":31426,"children":31427},{"class":1048,"line":1201},[31428],{"type":30,"tag":1046,"props":31429,"children":31430},{"style":1070},[31431],{"type":40,"value":1423},{"type":30,"tag":43,"props":31433,"children":31434},{},[31435,31437,31442,31444,31449],{"type":40,"value":31436},"Avec ce test, vous vous concentrez uniquement sur l’ajout de l’utilisateur avec un nom et un âge. Tant qu’il n’existe pas de test nécessitant l’adresse, n’ajoutez pas d’attribut ",{"type":30,"tag":1042,"props":31438,"children":31440},{"className":31439},[],[31441],{"type":40,"value":31211},{"type":40,"value":31443}," à la classe ",{"type":30,"tag":1042,"props":31445,"children":31447},{"className":31446},[],[31448],{"type":40,"value":10100},{"type":40,"value":1179},{"type":30,"tag":2339,"props":31451,"children":31453},{"id":31452},"_2-évitez-de-généraliser-trop-tôt",[31454,31455],{"type":40,"value":268},{"type":30,"tag":36,"props":31456,"children":31457},{},[31458],{"type":40,"value":31459},"Évitez de généraliser trop tôt",{"type":30,"tag":43,"props":31461,"children":31462},{},[31463],{"type":40,"value":31464},"Un autre piège commun est de vouloir tout de suite rendre votre code trop générique ou flexible. Par exemple, vous pourriez penser qu’une méthode pourrait être réutilisée plus tard et vouloir la rendre paramétrable. Mais en réalité, si cette flexibilité n’est pas nécessaire maintenant, elle pourrait ne jamais l’être.",{"type":30,"tag":43,"props":31466,"children":31467},{},[31468],{"type":30,"tag":36,"props":31469,"children":31470},{},[31471],{"type":40,"value":31472},"Exemple à éviter :",{"type":30,"tag":1035,"props":31474,"children":31476},{"className":1039,"code":31475,"language":1038,"meta":8,"style":8},"public class MathOperations {\n    // On pourrait être tenté de rendre cette méthode très générique\n    public int multiply(int a, int b, boolean absoluteValues) {\n        if (absoluteValues) {\n            return Math.abs(a) * Math.abs(b);\n        } else {\n            return a * b;\n        }\n    }\n}\n",[31477],{"type":30,"tag":1042,"props":31478,"children":31479},{"__ignoreMap":8},[31480,31500,31508,31570,31594,31656,31672,31695,31702,31709],{"type":30,"tag":1046,"props":31481,"children":31482},{"class":1048,"line":1049},[31483,31487,31491,31496],{"type":30,"tag":1046,"props":31484,"children":31485},{"style":1053},[31486],{"type":40,"value":1056},{"type":30,"tag":1046,"props":31488,"children":31489},{"style":1053},[31490],{"type":40,"value":1061},{"type":30,"tag":1046,"props":31492,"children":31493},{"style":1064},[31494],{"type":40,"value":31495}," MathOperations",{"type":30,"tag":1046,"props":31497,"children":31498},{"style":1070},[31499],{"type":40,"value":1073},{"type":30,"tag":1046,"props":31501,"children":31502},{"class":1048,"line":675},[31503],{"type":30,"tag":1046,"props":31504,"children":31505},{"style":3961},[31506],{"type":40,"value":31507},"    // On pourrait être tenté de rendre cette méthode très générique\n",{"type":30,"tag":1046,"props":31509,"children":31510},{"class":1048,"line":681},[31511,31515,31519,31524,31528,31532,31537,31541,31545,31549,31553,31557,31562,31566],{"type":30,"tag":1046,"props":31512,"children":31513},{"style":1053},[31514],{"type":40,"value":1130},{"type":30,"tag":1046,"props":31516,"children":31517},{"style":1053},[31518],{"type":40,"value":10265},{"type":30,"tag":1046,"props":31520,"children":31521},{"style":1138},[31522],{"type":40,"value":31523}," multiply",{"type":30,"tag":1046,"props":31525,"children":31526},{"style":1070},[31527],{"type":40,"value":1146},{"type":30,"tag":1046,"props":31529,"children":31530},{"style":1053},[31531],{"type":40,"value":10323},{"type":30,"tag":1046,"props":31533,"children":31534},{"style":1153},[31535],{"type":40,"value":31536}," a",{"type":30,"tag":1046,"props":31538,"children":31539},{"style":1070},[31540],{"type":40,"value":2891},{"type":30,"tag":1046,"props":31542,"children":31543},{"style":1053},[31544],{"type":40,"value":10265},{"type":30,"tag":1046,"props":31546,"children":31547},{"style":1153},[31548],{"type":40,"value":29418},{"type":30,"tag":1046,"props":31550,"children":31551},{"style":1070},[31552],{"type":40,"value":2891},{"type":30,"tag":1046,"props":31554,"children":31555},{"style":1053},[31556],{"type":40,"value":13605},{"type":30,"tag":1046,"props":31558,"children":31559},{"style":1153},[31560],{"type":40,"value":31561}," absoluteValues",{"type":30,"tag":1046,"props":31563,"children":31564},{"style":1070},[31565],{"type":40,"value":1161},{"type":30,"tag":1046,"props":31567,"children":31568},{"style":1070},[31569],{"type":40,"value":1073},{"type":30,"tag":1046,"props":31571,"children":31572},{"class":1048,"line":1124},[31573,31577,31581,31586,31590],{"type":30,"tag":1046,"props":31574,"children":31575},{"style":1053},[31576],{"type":40,"value":11856},{"type":30,"tag":1046,"props":31578,"children":31579},{"style":1070},[31580],{"type":40,"value":11861},{"type":30,"tag":1046,"props":31582,"children":31583},{"style":1105},[31584],{"type":40,"value":31585},"absoluteValues",{"type":30,"tag":1046,"props":31587,"children":31588},{"style":1070},[31589],{"type":40,"value":1161},{"type":30,"tag":1046,"props":31591,"children":31592},{"style":1070},[31593],{"type":40,"value":1073},{"type":30,"tag":1046,"props":31595,"children":31596},{"class":1048,"line":1168},[31597,31602,31607,31611,31616,31620,31624,31628,31632,31636,31640,31644,31648,31652],{"type":30,"tag":1046,"props":31598,"children":31599},{"style":1053},[31600],{"type":40,"value":31601},"            return",{"type":30,"tag":1046,"props":31603,"children":31604},{"style":1105},[31605],{"type":40,"value":31606}," Math",{"type":30,"tag":1046,"props":31608,"children":31609},{"style":1070},[31610],{"type":40,"value":1179},{"type":30,"tag":1046,"props":31612,"children":31613},{"style":1138},[31614],{"type":40,"value":31615},"abs",{"type":30,"tag":1046,"props":31617,"children":31618},{"style":1070},[31619],{"type":40,"value":1146},{"type":30,"tag":1046,"props":31621,"children":31622},{"style":1105},[31623],{"type":40,"value":75},{"type":30,"tag":1046,"props":31625,"children":31626},{"style":1070},[31627],{"type":40,"value":1161},{"type":30,"tag":1046,"props":31629,"children":31630},{"style":1795},[31631],{"type":40,"value":15817},{"type":30,"tag":1046,"props":31633,"children":31634},{"style":1105},[31635],{"type":40,"value":31606},{"type":30,"tag":1046,"props":31637,"children":31638},{"style":1070},[31639],{"type":40,"value":1179},{"type":30,"tag":1046,"props":31641,"children":31642},{"style":1138},[31643],{"type":40,"value":31615},{"type":30,"tag":1046,"props":31645,"children":31646},{"style":1070},[31647],{"type":40,"value":1146},{"type":30,"tag":1046,"props":31649,"children":31650},{"style":1105},[31651],{"type":40,"value":29439},{"type":30,"tag":1046,"props":31653,"children":31654},{"style":1070},[31655],{"type":40,"value":1198},{"type":30,"tag":1046,"props":31657,"children":31658},{"class":1048,"line":1201},[31659,31664,31668],{"type":30,"tag":1046,"props":31660,"children":31661},{"style":1070},[31662],{"type":40,"value":31663},"        }",{"type":30,"tag":1046,"props":31665,"children":31666},{"style":1053},[31667],{"type":40,"value":19948},{"type":30,"tag":1046,"props":31669,"children":31670},{"style":1070},[31671],{"type":40,"value":1073},{"type":30,"tag":1046,"props":31673,"children":31674},{"class":1048,"line":1210},[31675,31679,31683,31687,31691],{"type":30,"tag":1046,"props":31676,"children":31677},{"style":1053},[31678],{"type":40,"value":31601},{"type":30,"tag":1046,"props":31680,"children":31681},{"style":1105},[31682],{"type":40,"value":19599},{"type":30,"tag":1046,"props":31684,"children":31685},{"style":1795},[31686],{"type":40,"value":21197},{"type":30,"tag":1046,"props":31688,"children":31689},{"style":1105},[31690],{"type":40,"value":29418},{"type":30,"tag":1046,"props":31692,"children":31693},{"style":1070},[31694],{"type":40,"value":1113},{"type":30,"tag":1046,"props":31696,"children":31697},{"class":1048,"line":1218},[31698],{"type":30,"tag":1046,"props":31699,"children":31700},{"style":1070},[31701],{"type":40,"value":11922},{"type":30,"tag":1046,"props":31703,"children":31704},{"class":1048,"line":1255},[31705],{"type":30,"tag":1046,"props":31706,"children":31707},{"style":1070},[31708],{"type":40,"value":1207},{"type":30,"tag":1046,"props":31710,"children":31711},{"class":1048,"line":1284},[31712],{"type":30,"tag":1046,"props":31713,"children":31714},{"style":1070},[31715],{"type":40,"value":1423},{"type":30,"tag":43,"props":31717,"children":31718},{},[31719,31721,31726],{"type":40,"value":31720},"Cette méthode introduit de la complexité inutile (avec le paramètre ",{"type":30,"tag":1042,"props":31722,"children":31724},{"className":31723},[],[31725],{"type":40,"value":31585},{"type":40,"value":31727},") si votre programme n'a besoin que de multiplier des nombres sans se préoccuper de leur signe. La solution YAGNI serait de garder la méthode simple :",{"type":30,"tag":1035,"props":31729,"children":31731},{"className":1039,"code":31730,"language":1038,"meta":8,"style":8},"public class MathOperations {\n    public int multiply(int a, int b) {\n        return a * b;\n    }\n}\n",[31732],{"type":30,"tag":1042,"props":31733,"children":31734},{"__ignoreMap":8},[31735,31754,31801,31824,31831],{"type":30,"tag":1046,"props":31736,"children":31737},{"class":1048,"line":1049},[31738,31742,31746,31750],{"type":30,"tag":1046,"props":31739,"children":31740},{"style":1053},[31741],{"type":40,"value":1056},{"type":30,"tag":1046,"props":31743,"children":31744},{"style":1053},[31745],{"type":40,"value":1061},{"type":30,"tag":1046,"props":31747,"children":31748},{"style":1064},[31749],{"type":40,"value":31495},{"type":30,"tag":1046,"props":31751,"children":31752},{"style":1070},[31753],{"type":40,"value":1073},{"type":30,"tag":1046,"props":31755,"children":31756},{"class":1048,"line":675},[31757,31761,31765,31769,31773,31777,31781,31785,31789,31793,31797],{"type":30,"tag":1046,"props":31758,"children":31759},{"style":1053},[31760],{"type":40,"value":1130},{"type":30,"tag":1046,"props":31762,"children":31763},{"style":1053},[31764],{"type":40,"value":10265},{"type":30,"tag":1046,"props":31766,"children":31767},{"style":1138},[31768],{"type":40,"value":31523},{"type":30,"tag":1046,"props":31770,"children":31771},{"style":1070},[31772],{"type":40,"value":1146},{"type":30,"tag":1046,"props":31774,"children":31775},{"style":1053},[31776],{"type":40,"value":10323},{"type":30,"tag":1046,"props":31778,"children":31779},{"style":1153},[31780],{"type":40,"value":31536},{"type":30,"tag":1046,"props":31782,"children":31783},{"style":1070},[31784],{"type":40,"value":2891},{"type":30,"tag":1046,"props":31786,"children":31787},{"style":1053},[31788],{"type":40,"value":10265},{"type":30,"tag":1046,"props":31790,"children":31791},{"style":1153},[31792],{"type":40,"value":29418},{"type":30,"tag":1046,"props":31794,"children":31795},{"style":1070},[31796],{"type":40,"value":1161},{"type":30,"tag":1046,"props":31798,"children":31799},{"style":1070},[31800],{"type":40,"value":1073},{"type":30,"tag":1046,"props":31802,"children":31803},{"class":1048,"line":681},[31804,31808,31812,31816,31820],{"type":30,"tag":1046,"props":31805,"children":31806},{"style":1053},[31807],{"type":40,"value":1333},{"type":30,"tag":1046,"props":31809,"children":31810},{"style":1105},[31811],{"type":40,"value":19599},{"type":30,"tag":1046,"props":31813,"children":31814},{"style":1795},[31815],{"type":40,"value":21197},{"type":30,"tag":1046,"props":31817,"children":31818},{"style":1105},[31819],{"type":40,"value":29418},{"type":30,"tag":1046,"props":31821,"children":31822},{"style":1070},[31823],{"type":40,"value":1113},{"type":30,"tag":1046,"props":31825,"children":31826},{"class":1048,"line":1124},[31827],{"type":30,"tag":1046,"props":31828,"children":31829},{"style":1070},[31830],{"type":40,"value":1207},{"type":30,"tag":1046,"props":31832,"children":31833},{"class":1048,"line":1168},[31834],{"type":30,"tag":1046,"props":31835,"children":31836},{"style":1070},[31837],{"type":40,"value":1423},{"type":30,"tag":2339,"props":31839,"children":31841},{"id":31840},"_3-refactorisez-régulièrement-votre-code",[31842,31843],{"type":40,"value":293},{"type":30,"tag":36,"props":31844,"children":31845},{},[31846],{"type":40,"value":31847},"Refactorisez régulièrement votre code",{"type":30,"tag":43,"props":31849,"children":31850},{},[31851],{"type":40,"value":31852},"Refactoriser régulièrement vous permet de retirer les fonctionnalités qui sont devenues inutiles au fil du temps. Parfois, un projet évolue et certaines parties du code, ajoutées dans l’anticipation de besoins futurs, ne sont jamais utilisées. Ce que j’observe sur le terrain : maintenir un code propre et minimal facilite les modifications et évite que du code non nécessaire ne s’accumule.",{"type":30,"tag":2339,"props":31854,"children":31856},{"id":31855},"_4-collaborez-avec-votre-équipe-sur-les-fonctionnalités",[31857,31858],{"type":40,"value":318},{"type":30,"tag":36,"props":31859,"children":31860},{},[31861],{"type":40,"value":31862},"Collaborez avec votre équipe sur les fonctionnalités",{"type":30,"tag":43,"props":31864,"children":31865},{},[31866],{"type":40,"value":31867},"Travailler en équipe demande de la communication, surtout en ce qui concerne la prise de décision sur les fonctionnalités. Si quelqu’un propose d’ajouter une nouvelle fonctionnalité, assurez-vous qu’il existe un besoin clair et immédiat. Si c’est pour anticiper des besoins futurs, demandez si ces besoins sont confirmés ou s’il s’agit simplement d’une spéculation.",{"type":30,"tag":43,"props":31869,"children":31870},{},[31871],{"type":30,"tag":36,"props":31872,"children":31873},{},[31874],{"type":40,"value":31875},"Exemple de réflexion d’équipe :",{"type":30,"tag":964,"props":31877,"children":31878},{},[31879],{"type":30,"tag":43,"props":31880,"children":31881},{},[31882],{"type":40,"value":31883},"\"Est-ce que cette fonctionnalité sera utilisée par les utilisateurs actuels ? Sinon, nous pourrions la développer plus tard si un besoin réel émerge.\"",{"type":30,"tag":2339,"props":31885,"children":31887},{"id":31886},"_5-ne-pas-coder-pour-des-fonctionnalités-hypothétiques",[31888,31889],{"type":40,"value":360},{"type":30,"tag":36,"props":31890,"children":31891},{},[31892],{"type":40,"value":31893},"Ne pas coder pour des fonctionnalités hypothétiques",{"type":30,"tag":43,"props":31895,"children":31896},{},[31897],{"type":40,"value":31898},"Souvent, vous vous dites que certaines fonctionnalités seront utiles dans le futur, mais bien souvent, ces hypothèses sont fausses. Pour appliquer YAGNI, codez uniquement pour répondre aux exigences actuelles du projet. Les fonctionnalités futures seront ajoutées en temps voulu, lorsque les besoins seront confirmés.",{"type":30,"tag":84,"props":31900,"children":31901},{},[],{"type":30,"tag":116,"props":31903,"children":31905},{"id":31904},"erreurs-courantes-et-objections-liées-à-yagni",[31906],{"type":40,"value":31907},"Erreurs courantes et objections liées à YAGNI",{"type":30,"tag":43,"props":31909,"children":31910},{},[31911],{"type":40,"value":31912},"Même si le principe YAGNI paraît simple en théorie, de nombreuses erreurs sont commises lorsqu’il est mis en pratique. De plus, certains développeurs expriment des réticences à l’appliquer strictement. Voici quelques erreurs courantes et les objections les plus fréquentes que j’entends au sujet de YAGNI dans les équipes que j’accompagne.",{"type":30,"tag":2339,"props":31914,"children":31916},{"id":31915},"_1-erreur-préparer-le-code-pour-des-scénarios-hypothétiques",[31917,31918],{"type":40,"value":242},{"type":30,"tag":36,"props":31919,"children":31920},{},[31921],{"type":40,"value":31922},"Erreur : Préparer le code pour des scénarios hypothétiques",{"type":30,"tag":43,"props":31924,"children":31925},{},[31926],{"type":40,"value":31927},"L’une des erreurs les plus répandues est de croire que l’ajout d’une fonctionnalité \"juste au cas où\" est une bonne pratique. Cela part souvent d’une bonne intention, mais cela mène presque toujours à une complexité inutile. En réalité, la majorité des \"cas potentiels\" anticipés ne se présentent jamais.",{"type":30,"tag":43,"props":31929,"children":31930},{},[31931],{"type":30,"tag":36,"props":31932,"children":31933},{},[31934],{"type":40,"value":31935},"Exemple :",{"type":30,"tag":43,"props":31937,"children":31938},{},[31939],{"type":40,"value":31940},"Imaginons que vous ajoutez un traitement pour gérer des devises dans une application qui ne fait encore que des transactions en euros. En supposant que, peut-être un jour, l’application gérera plusieurs devises, vous commencez à ajouter du code pour les conversions monétaires. Pourtant, si ce besoin ne devient jamais concret, vous vous retrouvez avec du code qui alourdit votre application sans apporter de valeur.",{"type":30,"tag":2339,"props":31942,"children":31944},{"id":31943},"_2-erreur-ne-pas-sadapter-à-lévolution-des-besoins",[31945,31946],{"type":40,"value":268},{"type":30,"tag":36,"props":31947,"children":31948},{},[31949],{"type":40,"value":31950},"Erreur : Ne pas s’adapter à l’évolution des besoins",{"type":30,"tag":43,"props":31952,"children":31953},{},[31954],{"type":40,"value":31955},"Certaines personnes confondent YAGNI avec un refus d’anticiper totalement. YAGNI ne signifie pas que vous ne devriez jamais changer ou adapter votre code aux nouvelles exigences. Il s’agit plutôt de ne pas écrire du code en prévision d’un besoin qui pourrait ne jamais exister. Si un nouveau besoin émerge effectivement, c’est alors le bon moment pour l’ajouter.",{"type":30,"tag":43,"props":31957,"children":31958},{},[31959],{"type":30,"tag":36,"props":31960,"children":31961},{},[31962],{"type":40,"value":31935},{"type":30,"tag":43,"props":31964,"children":31965},{},[31966],{"type":40,"value":31967},"Si, dans votre application, un nouveau client demande une fonctionnalité spécifique, il est tout à fait légitime de l’ajouter. L’important est de s’assurer que cette demande est confirmée, et non basée sur des spéculations.",{"type":30,"tag":2339,"props":31969,"children":31971},{"id":31970},"_3-objection-si-je-ne-lajoute-pas-maintenant-je-devrai-tout-refaire-plus-tard",[31972,31973],{"type":40,"value":293},{"type":30,"tag":36,"props":31974,"children":31975},{},[31976],{"type":40,"value":31977},"Objection : \"Si je ne l’ajoute pas maintenant, je devrai tout refaire plus tard\"",{"type":30,"tag":43,"props":31979,"children":31980},{},[31981],{"type":40,"value":31982},"Cette peur est fréquente, surtout chez les développeurs qui souhaitent éviter de retourner sur des morceaux de code plus tard. Pourtant, YAGNI vous encourage à ne pas surcharger votre code en essayant d’anticiper tous les futurs possibles. Quand un besoin précis survient, vous pourrez y répondre avec une solution adaptée à la situation actuelle, et souvent cela sera bien plus efficace que si vous aviez tenté d’anticiper toutes les variables dès le départ.",{"type":30,"tag":2339,"props":31984,"children":31986},{"id":31985},"_4-objection-mon-client-ou-mon-chef-veut-toujours-plus-de-fonctionnalités",[31987,31988],{"type":40,"value":318},{"type":30,"tag":36,"props":31989,"children":31990},{},[31991],{"type":40,"value":31992},"Objection : \"Mon client ou mon chef veut toujours plus de fonctionnalités\"",{"type":30,"tag":43,"props":31994,"children":31995},{},[31996],{"type":40,"value":31997},"Il arrive que des clients ou des supérieurs souhaitent des fonctionnalités supplémentaires \"au cas où\", sans vraiment savoir s’ils en auront besoin. Dans ce cas, je vous recommande d’expliquer pourquoi YAGNI est avantageux, à la fois pour réduire la complexité du produit et pour économiser du temps et des ressources. L’argument est simple : en évitant d’ajouter des fonctionnalités inutiles, vous réduisez les coûts de développement à court terme et vous gardez le code plus flexible pour l’avenir.",{"type":30,"tag":2339,"props":31999,"children":32001},{"id":32000},"_5-erreur-se-limiter-par-peur-de-manquer-danticipation",[32002,32003],{"type":40,"value":360},{"type":30,"tag":36,"props":32004,"children":32005},{},[32006],{"type":40,"value":32007},"Erreur : Se limiter par peur de manquer d’anticipation",{"type":30,"tag":43,"props":32009,"children":32010},{},[32011],{"type":40,"value":32012},"À l’inverse, certains développeurs peuvent mal comprendre YAGNI et éviter de préparer le code à des extensions évidentes, même lorsque le besoin futur est bien identifié. YAGNI ne signifie pas d’ignorer complètement les futurs possibles, mais de les traiter uniquement lorsque le besoin est avéré. Si vous savez qu’une fonctionnalité sera nécessaire, ne pas l’implémenter pourrait être contre-productif. L’idée est d’avoir la souplesse de rajouter des fonctionnalités en temps voulu, pas d’éviter de faire évoluer le produit.",{"type":30,"tag":84,"props":32014,"children":32015},{},[],{"type":30,"tag":116,"props":32017,"children":32019},{"id":32018},"faq-réponses-aux-questions-fréquentes-sur-yagni",[32020],{"type":40,"value":32021},"FAQ : Réponses aux questions fréquentes sur YAGNI",{"type":30,"tag":530,"props":32023,"children":32024},{},[32025,32030],{"type":30,"tag":534,"props":32026,"children":32027},{},[32028],{"type":40,"value":32029},"1. Qu’est-ce que YAGNI ?",{"type":30,"tag":43,"props":32031,"children":32032},{},[32033,32035,32039],{"type":40,"value":32034},"YAGNI signifie \"You Aren’t Gonna Need It\" et fait partie des principes de ",{"type":30,"tag":36,"props":32036,"children":32037},{},[32038],{"type":40,"value":80},{"type":40,"value":32040},". Il encourage les développeurs à ne pas ajouter de fonctionnalités inutiles ou prématurées dans leur code, en se concentrant uniquement sur les besoins actuels plutôt que sur des hypothèses de besoins futurs.",{"type":30,"tag":530,"props":32042,"children":32043},{},[32044,32049],{"type":30,"tag":534,"props":32045,"children":32046},{},[32047],{"type":40,"value":32048},"2. Quand devrais-je appliquer YAGNI ?",{"type":30,"tag":43,"props":32050,"children":32051},{},[32052],{"type":40,"value":32053},"Appliquez YAGNI dès que vous vous demandez si une fonctionnalité que vous êtes en train de coder sera réellement utilisée ou si vous l’ajoutez juste par anticipation. Si cette fonctionnalité ne répond pas à un besoin immédiat, elle est probablement superflue.",{"type":30,"tag":530,"props":32055,"children":32056},{},[32057,32062],{"type":30,"tag":534,"props":32058,"children":32059},{},[32060],{"type":40,"value":32061},"3. Comment puis-je expliquer YAGNI à mon équipe ou à mon client ?",{"type":30,"tag":43,"props":32063,"children":32064},{},[32065],{"type":40,"value":32066},"La meilleure façon d’expliquer YAGNI est de montrer comment ce principe aide à maintenir un code simple, évolutif, et moins coûteux à long terme. En ajoutant des fonctionnalités hypothétiques, vous augmentez la complexité, ce qui rend la maintenance plus difficile et coûteuse. En restant focalisé sur ce qui est nécessaire, vous économisez du temps et des ressources.",{"type":30,"tag":530,"props":32068,"children":32069},{},[32070,32075],{"type":30,"tag":534,"props":32071,"children":32072},{},[32073],{"type":40,"value":32074},"4. Et si j’ai vraiment besoin de cette fonctionnalité plus tard ?",{"type":30,"tag":43,"props":32076,"children":32077},{},[32078],{"type":40,"value":32079},"YAGNI ne vous empêche pas d’ajouter des fonctionnalités quand elles deviennent réellement nécessaires. Le principe encourage simplement à ne pas anticiper des besoins incertains. Si un besoin futur se concrétise, vous pourrez ajouter la fonctionnalité à ce moment-là, avec une meilleure compréhension des exigences.",{"type":30,"tag":530,"props":32081,"children":32082},{},[32083,32088],{"type":30,"tag":534,"props":32084,"children":32085},{},[32086],{"type":40,"value":32087},"5. YAGNI est-il compatible avec les méthodes agiles ?",{"type":30,"tag":43,"props":32089,"children":32090},{},[32091],{"type":40,"value":32092},"Absolument. YAGNI s’intègre parfaitement dans les méthodologies agiles qui mettent l’accent sur la livraison rapide de la valeur et l’adaptation aux besoins changeants. En vous concentrant sur les besoins actuels et en livrant des incréments de valeur fonctionnelle, vous répondez aux exigences du client sans surcharger le produit avec des fonctionnalités inutiles.",{"type":30,"tag":530,"props":32094,"children":32095},{},[32096,32101],{"type":30,"tag":534,"props":32097,"children":32098},{},[32099],{"type":40,"value":32100},"6. Comment éviter de coder pour des scénarios hypothétiques ?",{"type":30,"tag":43,"props":32102,"children":32103},{},[32104,32106,32110],{"type":40,"value":32105},"La meilleure manière est de s’en tenir strictement aux exigences du projet et d’utiliser des pratiques comme le ",{"type":30,"tag":36,"props":32107,"children":32108},{},[32109],{"type":40,"value":28503},{"type":40,"value":32111},". En n’écrivant que le code nécessaire pour faire passer les tests, vous restez focalisé sur l’essentiel sans vous égarer dans des fonctionnalités anticipées.",{"type":30,"tag":530,"props":32113,"children":32114},{},[32115,32120],{"type":30,"tag":534,"props":32116,"children":32117},{},[32118],{"type":40,"value":32119},"7. Quels sont les risques de ne pas appliquer YAGNI ?",{"type":30,"tag":43,"props":32121,"children":32122},{},[32123],{"type":40,"value":32124},"Ne pas appliquer YAGNI conduit à un code plus complexe et plus difficile à maintenir. Cela peut également augmenter la dette technique, car les fonctionnalités ajoutées prématurément peuvent devenir obsolètes, ou être mal adaptées lorsque les véritables besoins émergent.",{"type":30,"tag":84,"props":32126,"children":32127},{},[],{"type":30,"tag":116,"props":32129,"children":32130},{"id":24018},[32131],{"type":40,"value":24024},{"type":30,"tag":43,"props":32133,"children":32134},{},[32135],{"type":40,"value":32136},"Le principe YAGNI est un excellent guide pour garder votre code simple, propre et focalisé sur ce qui compte réellement : répondre aux besoins immédiats de votre projet. En l’appliquant correctement, vous éviterez d’ajouter des fonctionnalités inutiles qui compliquent la maintenance et augmentent la dette technique. J’espère que ces exemples en Java vous aideront à mieux intégrer YAGNI dans vos pratiques de développement au quotidien.",{"type":30,"tag":211,"props":32138,"children":32139},{"cta":12975,"href":639,"title":12976,"type":641},[32140],{"type":30,"tag":43,"props":32141,"children":32142},{},[32143],{"type":40,"value":12982},{"type":30,"tag":6456,"props":32145,"children":32146},{},[32147],{"type":40,"value":6460},{"title":8,"searchDepth":675,"depth":675,"links":32149},[32150],{"id":30643,"depth":675,"text":30646,"children":32151},[32152,32153,32154,32155,32156,32157,32158],{"id":30649,"depth":681,"text":30652},{"id":30679,"depth":681,"text":30682},{"id":30769,"depth":681,"text":30772},{"id":31219,"depth":681,"text":31222},{"id":31904,"depth":681,"text":31907},{"id":32018,"depth":681,"text":32021},{"id":24018,"depth":681,"text":24024},"content:fr:dette-technique:yagni-ecrire-code-qualite-sans-fonctionnalites-inutiles.md","fr/dette-technique/yagni-ecrire-code-qualite-sans-fonctionnalites-inutiles.md","fr/dette-technique/yagni-ecrire-code-qualite-sans-fonctionnalites-inutiles",{"_path":77,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":32163,"description":32164,"id":10471,"date":32165,"listed":13,"nocomments":7,"hidden":7,"categories":32166,"tags":32167,"--cover":32168,"readingTime":32169,"body":32173,"_type":709,"_id":34937,"_source":711,"_file":34938,"_stem":34939,"_extension":714},"Software Craftsmanship, Principes, Exemples Java et Astuces pour un Code Propre","Découvrez le Software Craftsmanship et comment appliquer ses principes à travers des exemples concrets en Java, des outils recommandés et des astuces pour améliorer votre code.","2024-05-25",[15],[17,18],"covers/articles/software-craftsmanship.jpg",{"text":22,"minutes":32170,"time":32171,"words":32172},10.285,617100,2057,{"type":27,"children":32174,"toc":34926},[32175,32181,32187,32217,32228,32231,32237,32255,32261,32273,32279,32298,32333,32344,32347,32356,32362,32372,32406,32414,32577,32594,32624,32632,32838,32847,32870,32878,32886,33051,33059,33175,33198,33214,33217,33223,33234,33240,33245,33268,33276,33488,33496,33834,33850,33853,33859,33864,33872,34005,34010,34026,34029,34035,34054,34059,34066,34170,34177,34287,34292,34308,34311,34317,34342,34345,34351,34369,34375,34388,34397,34417,34426,34432,34466,34474,34657,34663,34676,34685,34698,34701,34707,34712,34718,34723,34732,34738,34743,34752,34758,34763,34766,34772,34815,34818,34823,34836,34849,34862,34882,34885,34889,34910,34915,34922],{"type":30,"tag":116,"props":32176,"children":32178},{"id":32177},"software-craftsmanship-guide-complet-pour-un-code-propre-et-maintenable",[32179],{"type":40,"value":32180},"Software Craftsmanship : Guide Complet pour un Code Propre et Maintenable",{"type":30,"tag":2339,"props":32182,"children":32184},{"id":32183},"introduction-quest-ce-que-le-software-craftsmanship",[32185],{"type":40,"value":32186},"Introduction : Qu'est-ce que le Software Craftsmanship ?",{"type":30,"tag":43,"props":32188,"children":32189},{},[32190,32192,32196,32198,32202,32204,32209,32211,32216],{"type":40,"value":32191},"Avez-vous déjà ressenti que votre code, même fonctionnel, manque de structure ou devient difficile à maintenir à long terme ? Si oui, vous n’êtes pas seul. De nombreux développeurs vivent cette frustration, surtout lorsqu’on leur demande de livrer rapidement au détriment de la qualité. C’est là qu’intervient le ",{"type":30,"tag":36,"props":32193,"children":32194},{},[32195],{"type":40,"value":13173},{"type":40,"value":32197},", une philosophie qui va au-delà de la simple création de logiciels fonctionnels. Elle met l’accent sur la ",{"type":30,"tag":36,"props":32199,"children":32200},{},[32201],{"type":40,"value":18},{"type":40,"value":32203},", la ",{"type":30,"tag":36,"props":32205,"children":32206},{},[32207],{"type":40,"value":32208},"maintenabilité",{"type":40,"value":32210}," et la ",{"type":30,"tag":36,"props":32212,"children":32213},{},[32214],{"type":40,"value":32215},"fierté du travail bien fait",{"type":40,"value":1179},{"type":30,"tag":43,"props":32218,"children":32219},{},[32220,32222,32226],{"type":40,"value":32221},"Je vais vous expliquer pourquoi le Software Craftsmanship pourrait transformer votre manière de coder, tout comme il a transformé la mienne. Vous repartirez avec des exemples concrets en ",{"type":30,"tag":36,"props":32223,"children":32224},{},[32225],{"type":40,"value":845},{"type":40,"value":32227}," et des astuces pratiques pour appliquer cette méthodologie dans votre quotidien. C’est exactement ce que j’ai observé dans des équipes que j’accompagnais chez Agirc-Arrco et ING Bank : adopter une posture d’artisan logiciel a un impact direct sur la vélocité des équipes et la réduction des coûts de maintenance.",{"type":30,"tag":84,"props":32229,"children":32230},{},[],{"type":30,"tag":116,"props":32232,"children":32234},{"id":32233},"les-origines-du-software-craftsmanship",[32235],{"type":40,"value":32236},"Les origines du Software Craftsmanship",{"type":30,"tag":43,"props":32238,"children":32239},{},[32240,32242,32246,32248,32253],{"type":40,"value":32241},"Le mouvement ",{"type":30,"tag":36,"props":32243,"children":32244},{},[32245],{"type":40,"value":13173},{"type":40,"value":32247}," trouve ses racines dans la volonté d’améliorer la qualité du code produit dans l'industrie du logiciel. Il s'agit d'une réponse directe aux pratiques de développement qui privilégient la vitesse au détriment de la qualité, souvent encouragées par des approches ",{"type":30,"tag":36,"props":32249,"children":32250},{},[32251],{"type":40,"value":32252},"agiles",{"type":40,"value":32254}," mal interprétées.",{"type":30,"tag":2339,"props":32256,"children":32258},{"id":32257},"_1-le-manifeste-agile-2001",[32259],{"type":40,"value":32260},"1. Le Manifeste Agile (2001)",{"type":30,"tag":43,"props":32262,"children":32263},{},[32264,32266,32271],{"type":40,"value":32265},"Tout commence en 2001 avec le ",{"type":30,"tag":36,"props":32267,"children":32268},{},[32269],{"type":40,"value":32270},"Manifeste Agile",{"type":40,"value":32272}," qui prône l'adaptation et la flexibilité dans le développement logiciel. Cependant, au fil des années, certains développeurs ont constaté que la méthodologie agile était parfois utilisée pour justifier un travail rapide et bâclé.",{"type":30,"tag":2339,"props":32274,"children":32276},{"id":32275},"_2-le-manifeste-du-software-craftsmanship-2009",[32277],{"type":40,"value":32278},"2. Le Manifeste du Software Craftsmanship (2009)",{"type":30,"tag":43,"props":32280,"children":32281},{},[32282,32284,32289,32291,32296],{"type":40,"value":32283},"En 2009, un groupe de développeurs, mené par des experts comme ",{"type":30,"tag":36,"props":32285,"children":32286},{},[32287],{"type":40,"value":32288},"Robert C. Martin",{"type":40,"value":32290}," (aussi connu sous le nom d’Uncle Bob), a publié le ",{"type":30,"tag":36,"props":32292,"children":32293},{},[32294],{"type":40,"value":32295},"Manifeste du Software Craftsmanship",{"type":40,"value":32297},". Ce manifeste prône une approche centrée sur l'excellence technique, le développement de logiciels de qualité et le partage des connaissances. Voici les quatre principes qui y sont énoncés :",{"type":30,"tag":163,"props":32299,"children":32300},{},[32301,32309,32317,32325],{"type":30,"tag":167,"props":32302,"children":32303},{},[32304],{"type":30,"tag":36,"props":32305,"children":32306},{},[32307],{"type":40,"value":32308},"Pas seulement du logiciel qui fonctionne, mais aussi du logiciel bien conçu.",{"type":30,"tag":167,"props":32310,"children":32311},{},[32312],{"type":30,"tag":36,"props":32313,"children":32314},{},[32315],{"type":40,"value":32316},"Pas seulement réagir au changement, mais aussi ajouter de la valeur en continu.",{"type":30,"tag":167,"props":32318,"children":32319},{},[32320],{"type":30,"tag":36,"props":32321,"children":32322},{},[32323],{"type":40,"value":32324},"Pas seulement des individus et des interactions, mais aussi une communauté de professionnels.",{"type":30,"tag":167,"props":32326,"children":32327},{},[32328],{"type":30,"tag":36,"props":32329,"children":32330},{},[32331],{"type":40,"value":32332},"Pas seulement une collaboration avec le client, mais aussi une collaboration productive.",{"type":30,"tag":43,"props":32334,"children":32335},{},[32336,32338,32342],{"type":40,"value":32337},"C'est une extension naturelle des principes agiles, avec un accent particulier mis sur la ",{"type":30,"tag":36,"props":32339,"children":32340},{},[32341],{"type":40,"value":18},{"type":40,"value":32343}," du travail accompli, plutôt que la simple livraison de fonctionnalités.",{"type":30,"tag":84,"props":32345,"children":32346},{},[],{"type":30,"tag":211,"props":32348,"children":32350},{"cta":213,"href":214,"title":32349,"type":216},"Votre équipe livre vite mais casse tout à chaque sprint ?",[32351],{"type":30,"tag":43,"props":32352,"children":32353},{},[32354],{"type":40,"value":32355},"La qualité se dégrade malgré les bonnes intentions, les régressions s'accumulent, et la dette technique freine de plus en plus la vélocité. Réservons 30 minutes pour diagnostiquer les vraies causes et construire une culture de qualité durable dans votre équipe.",{"type":30,"tag":116,"props":32357,"children":32359},{"id":32358},"les-principes-fondamentaux-du-software-craftsmanship",[32360],{"type":40,"value":32361},"Les principes fondamentaux du Software Craftsmanship",{"type":30,"tag":43,"props":32363,"children":32364},{},[32365,32366,32370],{"type":40,"value":143},{"type":30,"tag":36,"props":32367,"children":32368},{},[32369],{"type":40,"value":13173},{"type":40,"value":32371}," repose sur plusieurs principes clés qui vont bien au-delà du simple fait d'écrire du code qui fonctionne. C'est une approche qui valorise la qualité du code et la collaboration au sein de la communauté des développeurs. Voici les principes fondamentaux :",{"type":30,"tag":1518,"props":32373,"children":32374},{},[32375],{"type":30,"tag":167,"props":32376,"children":32377},{},[32378,32383,32386,32388,32392,32393,32398,32399,32404],{"type":30,"tag":36,"props":32379,"children":32380},{},[32381],{"type":40,"value":32382},"Code propre (Clean Code)",{"type":30,"tag":25001,"props":32384,"children":32385},{},[],{"type":40,"value":32387},"\nLe code doit être ",{"type":30,"tag":36,"props":32389,"children":32390},{},[32391],{"type":40,"value":19462},{"type":40,"value":19457},{"type":30,"tag":36,"props":32394,"children":32395},{},[32396],{"type":40,"value":32397},"maintenable",{"type":40,"value":8328},{"type":30,"tag":36,"props":32400,"children":32401},{},[32402],{"type":40,"value":32403},"testé",{"type":40,"value":32405},". En d'autres termes, un autre développeur (ou vous-même dans quelques mois) doit être capable de comprendre facilement ce que fait votre code. Cela inclut une bonne organisation, des noms de variables explicites et des fonctions courtes et précises.",{"type":30,"tag":43,"props":32407,"children":32408},{},[32409],{"type":30,"tag":872,"props":32410,"children":32411},{},[32412],{"type":40,"value":32413},"Exemple Java :",{"type":30,"tag":1035,"props":32415,"children":32417},{"className":1039,"code":32416,"language":1038,"meta":8,"style":8},"public class Calculateur {\n    public double calculerMoyenne(List\u003CInteger> nombres) {\n        return nombres.stream().mapToInt(Integer::intValue).average().orElse(0);\n    }\n}\n",[32418],{"type":30,"tag":1042,"props":32419,"children":32420},{"__ignoreMap":8},[32421,32441,32490,32563,32570],{"type":30,"tag":1046,"props":32422,"children":32423},{"class":1048,"line":1049},[32424,32428,32432,32437],{"type":30,"tag":1046,"props":32425,"children":32426},{"style":1053},[32427],{"type":40,"value":1056},{"type":30,"tag":1046,"props":32429,"children":32430},{"style":1053},[32431],{"type":40,"value":1061},{"type":30,"tag":1046,"props":32433,"children":32434},{"style":1064},[32435],{"type":40,"value":32436}," Calculateur",{"type":30,"tag":1046,"props":32438,"children":32439},{"style":1070},[32440],{"type":40,"value":1073},{"type":30,"tag":1046,"props":32442,"children":32443},{"class":1048,"line":675},[32444,32448,32452,32457,32461,32465,32469,32473,32477,32482,32486],{"type":30,"tag":1046,"props":32445,"children":32446},{"style":1053},[32447],{"type":40,"value":1130},{"type":30,"tag":1046,"props":32449,"children":32450},{"style":1053},[32451],{"type":40,"value":1310},{"type":30,"tag":1046,"props":32453,"children":32454},{"style":1138},[32455],{"type":40,"value":32456}," calculerMoyenne",{"type":30,"tag":1046,"props":32458,"children":32459},{"style":1070},[32460],{"type":40,"value":1146},{"type":30,"tag":1046,"props":32462,"children":32463},{"style":1084},[32464],{"type":40,"value":9627},{"type":30,"tag":1046,"props":32466,"children":32467},{"style":1070},[32468],{"type":40,"value":1092},{"type":30,"tag":1046,"props":32470,"children":32471},{"style":1053},[32472],{"type":40,"value":14692},{"type":30,"tag":1046,"props":32474,"children":32475},{"style":1070},[32476],{"type":40,"value":1102},{"type":30,"tag":1046,"props":32478,"children":32479},{"style":1153},[32480],{"type":40,"value":32481}," nombres",{"type":30,"tag":1046,"props":32483,"children":32484},{"style":1070},[32485],{"type":40,"value":1161},{"type":30,"tag":1046,"props":32487,"children":32488},{"style":1070},[32489],{"type":40,"value":1073},{"type":30,"tag":1046,"props":32491,"children":32492},{"class":1048,"line":681},[32493,32497,32501,32505,32509,32513,32517,32521,32525,32529,32533,32537,32542,32546,32550,32554,32559],{"type":30,"tag":1046,"props":32494,"children":32495},{"style":1053},[32496],{"type":40,"value":1333},{"type":30,"tag":1046,"props":32498,"children":32499},{"style":1105},[32500],{"type":40,"value":32481},{"type":30,"tag":1046,"props":32502,"children":32503},{"style":1070},[32504],{"type":40,"value":1179},{"type":30,"tag":1046,"props":32506,"children":32507},{"style":1138},[32508],{"type":40,"value":1346},{"type":30,"tag":1046,"props":32510,"children":32511},{"style":1070},[32512],{"type":40,"value":14098},{"type":30,"tag":1046,"props":32514,"children":32515},{"style":1138},[32516],{"type":40,"value":14976},{"type":30,"tag":1046,"props":32518,"children":32519},{"style":1070},[32520],{"type":40,"value":1146},{"type":30,"tag":1046,"props":32522,"children":32523},{"style":1105},[32524],{"type":40,"value":14692},{"type":30,"tag":1046,"props":32526,"children":32527},{"style":1053},[32528],{"type":40,"value":1378},{"type":30,"tag":1046,"props":32530,"children":32531},{"style":1105},[32532],{"type":40,"value":14993},{"type":30,"tag":1046,"props":32534,"children":32535},{"style":1070},[32536],{"type":40,"value":6392},{"type":30,"tag":1046,"props":32538,"children":32539},{"style":1138},[32540],{"type":40,"value":32541},"average",{"type":30,"tag":1046,"props":32543,"children":32544},{"style":1070},[32545],{"type":40,"value":14098},{"type":30,"tag":1046,"props":32547,"children":32548},{"style":1138},[32549],{"type":40,"value":4225},{"type":30,"tag":1046,"props":32551,"children":32552},{"style":1070},[32553],{"type":40,"value":1146},{"type":30,"tag":1046,"props":32555,"children":32556},{"style":6886},[32557],{"type":40,"value":32558},"0",{"type":30,"tag":1046,"props":32560,"children":32561},{"style":1070},[32562],{"type":40,"value":1198},{"type":30,"tag":1046,"props":32564,"children":32565},{"class":1048,"line":1124},[32566],{"type":30,"tag":1046,"props":32567,"children":32568},{"style":1070},[32569],{"type":40,"value":1207},{"type":30,"tag":1046,"props":32571,"children":32572},{"class":1048,"line":1168},[32573],{"type":30,"tag":1046,"props":32574,"children":32575},{"style":1070},[32576],{"type":40,"value":1423},{"type":30,"tag":43,"props":32578,"children":32579},{},[32580,32585,32587,32592],{"type":30,"tag":36,"props":32581,"children":32582},{},[32583],{"type":40,"value":32584},"Tip :",{"type":40,"value":32586}," Utilisez des noms de méthodes et de variables qui décrivent ",{"type":30,"tag":36,"props":32588,"children":32589},{},[32590],{"type":40,"value":32591},"clairement",{"type":40,"value":32593}," leur but. \"calculerMoyenne\" est beaucoup plus clair que \"calc\" ou \"moy\".",{"type":30,"tag":1518,"props":32595,"children":32596},{"start":675},[32597],{"type":30,"tag":167,"props":32598,"children":32599},{},[32600,32605,32608,32610,32615,32617,32622],{"type":30,"tag":36,"props":32601,"children":32602},{},[32603],{"type":40,"value":32604},"Tests automatisés",{"type":30,"tag":25001,"props":32606,"children":32607},{},[],{"type":40,"value":32609},"\nLe développement piloté par les tests (",{"type":30,"tag":36,"props":32611,"children":32612},{},[32613],{"type":40,"value":32614},"TDD",{"type":40,"value":32616},") est un autre aspect fondamental du Software Craftsmanship. L'idée est d'écrire les tests ",{"type":30,"tag":36,"props":32618,"children":32619},{},[32620],{"type":40,"value":32621},"avant",{"type":40,"value":32623}," le code, garantissant ainsi que chaque fonctionnalité est testée et validée au fur et à mesure.",{"type":30,"tag":43,"props":32625,"children":32626},{},[32627],{"type":30,"tag":872,"props":32628,"children":32629},{},[32630],{"type":40,"value":32631},"Exemple Java avec JUnit :",{"type":30,"tag":1035,"props":32633,"children":32635},{"className":1039,"code":32634,"language":1038,"meta":8,"style":8},"@Test\npublic void testCalculerMoyenne() {\n    Calculateur calc = new Calculateur();\n    List\u003CInteger> nombres = Arrays.asList(2, 4, 6);\n    assertEquals(4.0, calc.calculerMoyenne(nombres), 0.01);\n}\n",[32636],{"type":30,"tag":1042,"props":32637,"children":32638},{"__ignoreMap":8},[32639,32650,32674,32703,32776,32831],{"type":30,"tag":1046,"props":32640,"children":32641},{"class":1048,"line":1049},[32642,32646],{"type":30,"tag":1046,"props":32643,"children":32644},{"style":1647},[32645],{"type":40,"value":1650},{"type":30,"tag":1046,"props":32647,"children":32648},{"style":1653},[32649],{"type":40,"value":13736},{"type":30,"tag":1046,"props":32651,"children":32652},{"class":1048,"line":675},[32653,32657,32661,32666,32670],{"type":30,"tag":1046,"props":32654,"children":32655},{"style":1053},[32656],{"type":40,"value":1056},{"type":30,"tag":1046,"props":32658,"children":32659},{"style":1053},[32660],{"type":40,"value":1135},{"type":30,"tag":1046,"props":32662,"children":32663},{"style":1138},[32664],{"type":40,"value":32665}," testCalculerMoyenne",{"type":30,"tag":1046,"props":32667,"children":32668},{"style":1070},[32669],{"type":40,"value":1320},{"type":30,"tag":1046,"props":32671,"children":32672},{"style":1070},[32673],{"type":40,"value":1073},{"type":30,"tag":1046,"props":32675,"children":32676},{"class":1048,"line":681},[32677,32682,32687,32691,32695,32699],{"type":30,"tag":1046,"props":32678,"children":32679},{"style":1084},[32680],{"type":40,"value":32681},"    Calculateur",{"type":30,"tag":1046,"props":32683,"children":32684},{"style":1105},[32685],{"type":40,"value":32686}," calc ",{"type":30,"tag":1046,"props":32688,"children":32689},{"style":1795},[32690],{"type":40,"value":1798},{"type":30,"tag":1046,"props":32692,"children":32693},{"style":1053},[32694],{"type":40,"value":2480},{"type":30,"tag":1046,"props":32696,"children":32697},{"style":1138},[32698],{"type":40,"value":32436},{"type":30,"tag":1046,"props":32700,"children":32701},{"style":1070},[32702],{"type":40,"value":1406},{"type":30,"tag":1046,"props":32704,"children":32705},{"class":1048,"line":1124},[32706,32711,32715,32719,32723,32728,32732,32737,32741,32746,32750,32754,32758,32763,32767,32772],{"type":30,"tag":1046,"props":32707,"children":32708},{"style":1084},[32709],{"type":40,"value":32710},"    List",{"type":30,"tag":1046,"props":32712,"children":32713},{"style":1070},[32714],{"type":40,"value":1092},{"type":30,"tag":1046,"props":32716,"children":32717},{"style":1053},[32718],{"type":40,"value":14692},{"type":30,"tag":1046,"props":32720,"children":32721},{"style":1070},[32722],{"type":40,"value":1102},{"type":30,"tag":1046,"props":32724,"children":32725},{"style":1105},[32726],{"type":40,"value":32727}," nombres ",{"type":30,"tag":1046,"props":32729,"children":32730},{"style":1795},[32731],{"type":40,"value":1798},{"type":30,"tag":1046,"props":32733,"children":32734},{"style":1105},[32735],{"type":40,"value":32736}," Arrays",{"type":30,"tag":1046,"props":32738,"children":32739},{"style":1070},[32740],{"type":40,"value":1179},{"type":30,"tag":1046,"props":32742,"children":32743},{"style":1138},[32744],{"type":40,"value":32745},"asList",{"type":30,"tag":1046,"props":32747,"children":32748},{"style":1070},[32749],{"type":40,"value":1146},{"type":30,"tag":1046,"props":32751,"children":32752},{"style":6886},[32753],{"type":40,"value":10197},{"type":30,"tag":1046,"props":32755,"children":32756},{"style":1070},[32757],{"type":40,"value":2891},{"type":30,"tag":1046,"props":32759,"children":32760},{"style":6886},[32761],{"type":40,"value":32762}," 4",{"type":30,"tag":1046,"props":32764,"children":32765},{"style":1070},[32766],{"type":40,"value":2891},{"type":30,"tag":1046,"props":32768,"children":32769},{"style":6886},[32770],{"type":40,"value":32771}," 6",{"type":30,"tag":1046,"props":32773,"children":32774},{"style":1070},[32775],{"type":40,"value":1198},{"type":30,"tag":1046,"props":32777,"children":32778},{"class":1048,"line":1168},[32779,32783,32787,32792,32796,32801,32805,32810,32814,32819,32823,32827],{"type":30,"tag":1046,"props":32780,"children":32781},{"style":1138},[32782],{"type":40,"value":31360},{"type":30,"tag":1046,"props":32784,"children":32785},{"style":1070},[32786],{"type":40,"value":1146},{"type":30,"tag":1046,"props":32788,"children":32789},{"style":6886},[32790],{"type":40,"value":32791},"4.0",{"type":30,"tag":1046,"props":32793,"children":32794},{"style":1070},[32795],{"type":40,"value":2891},{"type":30,"tag":1046,"props":32797,"children":32798},{"style":1105},[32799],{"type":40,"value":32800}," calc",{"type":30,"tag":1046,"props":32802,"children":32803},{"style":1070},[32804],{"type":40,"value":1179},{"type":30,"tag":1046,"props":32806,"children":32807},{"style":1138},[32808],{"type":40,"value":32809},"calculerMoyenne",{"type":30,"tag":1046,"props":32811,"children":32812},{"style":1070},[32813],{"type":40,"value":1146},{"type":30,"tag":1046,"props":32815,"children":32816},{"style":1105},[32817],{"type":40,"value":32818},"nombres",{"type":30,"tag":1046,"props":32820,"children":32821},{"style":1070},[32822],{"type":40,"value":10180},{"type":30,"tag":1046,"props":32824,"children":32825},{"style":6886},[32826],{"type":40,"value":26838},{"type":30,"tag":1046,"props":32828,"children":32829},{"style":1070},[32830],{"type":40,"value":1198},{"type":30,"tag":1046,"props":32832,"children":32833},{"class":1048,"line":1201},[32834],{"type":30,"tag":1046,"props":32835,"children":32836},{"style":1070},[32837],{"type":40,"value":1423},{"type":30,"tag":43,"props":32839,"children":32840},{},[32841,32845],{"type":30,"tag":36,"props":32842,"children":32843},{},[32844],{"type":40,"value":18421},{"type":40,"value":32846}," Ne sous-estimez jamais l'importance des tests automatisés. Ils permettent d'éviter les régressions, surtout dans les projets à long terme où vous pouvez facilement perdre de vue toutes les fonctionnalités à vérifier.",{"type":30,"tag":1518,"props":32848,"children":32849},{"start":681},[32850],{"type":30,"tag":167,"props":32851,"children":32852},{},[32853,32858,32861,32863,32868],{"type":30,"tag":36,"props":32854,"children":32855},{},[32856],{"type":40,"value":32857},"Refactoring constant",{"type":30,"tag":25001,"props":32859,"children":32860},{},[],{"type":40,"value":32862},"\nL'un des autres principes essentiels est d'améliorer constamment le code existant sans changer son comportement. Ce processus, appelé ",{"type":30,"tag":36,"props":32864,"children":32865},{},[32866],{"type":40,"value":32867},"refactoring",{"type":40,"value":32869},", garantit que le code reste propre et efficace à mesure que le projet évolue.",{"type":30,"tag":43,"props":32871,"children":32872},{},[32873],{"type":30,"tag":872,"props":32874,"children":32875},{},[32876],{"type":40,"value":32877},"Exemple Java avant et après refactoring :",{"type":30,"tag":43,"props":32879,"children":32880},{},[32881],{"type":30,"tag":36,"props":32882,"children":32883},{},[32884],{"type":40,"value":32885},"Avant :",{"type":30,"tag":1035,"props":32887,"children":32889},{"className":1039,"code":32888,"language":1038,"meta":8,"style":8},"public double calculerTotal(List\u003CInteger> prix) {\n    double total = 0;\n    for (int prixUnitaire : prix) {\n        total += prixUnitaire;\n    }\n    return total;\n}\n",[32890],{"type":30,"tag":1042,"props":32891,"children":32892},{"__ignoreMap":8},[32893,32942,32965,33001,33022,33029,33044],{"type":30,"tag":1046,"props":32894,"children":32895},{"class":1048,"line":1049},[32896,32900,32904,32909,32913,32917,32921,32925,32929,32934,32938],{"type":30,"tag":1046,"props":32897,"children":32898},{"style":1053},[32899],{"type":40,"value":1056},{"type":30,"tag":1046,"props":32901,"children":32902},{"style":1053},[32903],{"type":40,"value":1310},{"type":30,"tag":1046,"props":32905,"children":32906},{"style":1138},[32907],{"type":40,"value":32908}," calculerTotal",{"type":30,"tag":1046,"props":32910,"children":32911},{"style":1070},[32912],{"type":40,"value":1146},{"type":30,"tag":1046,"props":32914,"children":32915},{"style":1084},[32916],{"type":40,"value":9627},{"type":30,"tag":1046,"props":32918,"children":32919},{"style":1795},[32920],{"type":40,"value":1092},{"type":30,"tag":1046,"props":32922,"children":32923},{"style":1105},[32924],{"type":40,"value":14692},{"type":30,"tag":1046,"props":32926,"children":32927},{"style":1795},[32928],{"type":40,"value":1102},{"type":30,"tag":1046,"props":32930,"children":32931},{"style":1105},[32932],{"type":40,"value":32933}," prix",{"type":30,"tag":1046,"props":32935,"children":32936},{"style":1070},[32937],{"type":40,"value":1161},{"type":30,"tag":1046,"props":32939,"children":32940},{"style":1070},[32941],{"type":40,"value":1073},{"type":30,"tag":1046,"props":32943,"children":32944},{"class":1048,"line":675},[32945,32949,32953,32957,32961],{"type":30,"tag":1046,"props":32946,"children":32947},{"style":1053},[32948],{"type":40,"value":16140},{"type":30,"tag":1046,"props":32950,"children":32951},{"style":1105},[32952],{"type":40,"value":5938},{"type":30,"tag":1046,"props":32954,"children":32955},{"style":1795},[32956],{"type":40,"value":1798},{"type":30,"tag":1046,"props":32958,"children":32959},{"style":6886},[32960],{"type":40,"value":13293},{"type":30,"tag":1046,"props":32962,"children":32963},{"style":1070},[32964],{"type":40,"value":1113},{"type":30,"tag":1046,"props":32966,"children":32967},{"class":1048,"line":681},[32968,32972,32976,32980,32985,32989,32993,32997],{"type":30,"tag":1046,"props":32969,"children":32970},{"style":1053},[32971],{"type":40,"value":13271},{"type":30,"tag":1046,"props":32973,"children":32974},{"style":1070},[32975],{"type":40,"value":11861},{"type":30,"tag":1046,"props":32977,"children":32978},{"style":1053},[32979],{"type":40,"value":10323},{"type":30,"tag":1046,"props":32981,"children":32982},{"style":1105},[32983],{"type":40,"value":32984}," prixUnitaire ",{"type":30,"tag":1046,"props":32986,"children":32987},{"style":1053},[32988],{"type":40,"value":8498},{"type":30,"tag":1046,"props":32990,"children":32991},{"style":1105},[32992],{"type":40,"value":32933},{"type":30,"tag":1046,"props":32994,"children":32995},{"style":1070},[32996],{"type":40,"value":1161},{"type":30,"tag":1046,"props":32998,"children":32999},{"style":1070},[33000],{"type":40,"value":1073},{"type":30,"tag":1046,"props":33002,"children":33003},{"class":1048,"line":1124},[33004,33009,33013,33018],{"type":30,"tag":1046,"props":33005,"children":33006},{"style":1105},[33007],{"type":40,"value":33008},"        total ",{"type":30,"tag":1046,"props":33010,"children":33011},{"style":1795},[33012],{"type":40,"value":14829},{"type":30,"tag":1046,"props":33014,"children":33015},{"style":1105},[33016],{"type":40,"value":33017}," prixUnitaire",{"type":30,"tag":1046,"props":33019,"children":33020},{"style":1070},[33021],{"type":40,"value":1113},{"type":30,"tag":1046,"props":33023,"children":33024},{"class":1048,"line":1168},[33025],{"type":30,"tag":1046,"props":33026,"children":33027},{"style":1070},[33028],{"type":40,"value":1207},{"type":30,"tag":1046,"props":33030,"children":33031},{"class":1048,"line":1201},[33032,33036,33040],{"type":30,"tag":1046,"props":33033,"children":33034},{"style":1053},[33035],{"type":40,"value":7894},{"type":30,"tag":1046,"props":33037,"children":33038},{"style":1105},[33039],{"type":40,"value":15992},{"type":30,"tag":1046,"props":33041,"children":33042},{"style":1070},[33043],{"type":40,"value":1113},{"type":30,"tag":1046,"props":33045,"children":33046},{"class":1048,"line":1210},[33047],{"type":30,"tag":1046,"props":33048,"children":33049},{"style":1070},[33050],{"type":40,"value":1423},{"type":30,"tag":43,"props":33052,"children":33053},{},[33054],{"type":30,"tag":36,"props":33055,"children":33056},{},[33057],{"type":40,"value":33058},"Après :",{"type":30,"tag":1035,"props":33060,"children":33062},{"className":1039,"code":33061,"language":1038,"meta":8,"style":8},"public double calculerTotal(List\u003CInteger> prix) {\n    return prix.stream().mapToDouble(Integer::intValue).sum();\n}\n",[33063],{"type":30,"tag":1042,"props":33064,"children":33065},{"__ignoreMap":8},[33066,33113,33168],{"type":30,"tag":1046,"props":33067,"children":33068},{"class":1048,"line":1049},[33069,33073,33077,33081,33085,33089,33093,33097,33101,33105,33109],{"type":30,"tag":1046,"props":33070,"children":33071},{"style":1053},[33072],{"type":40,"value":1056},{"type":30,"tag":1046,"props":33074,"children":33075},{"style":1053},[33076],{"type":40,"value":1310},{"type":30,"tag":1046,"props":33078,"children":33079},{"style":1138},[33080],{"type":40,"value":32908},{"type":30,"tag":1046,"props":33082,"children":33083},{"style":1070},[33084],{"type":40,"value":1146},{"type":30,"tag":1046,"props":33086,"children":33087},{"style":1084},[33088],{"type":40,"value":9627},{"type":30,"tag":1046,"props":33090,"children":33091},{"style":1795},[33092],{"type":40,"value":1092},{"type":30,"tag":1046,"props":33094,"children":33095},{"style":1105},[33096],{"type":40,"value":14692},{"type":30,"tag":1046,"props":33098,"children":33099},{"style":1795},[33100],{"type":40,"value":1102},{"type":30,"tag":1046,"props":33102,"children":33103},{"style":1105},[33104],{"type":40,"value":32933},{"type":30,"tag":1046,"props":33106,"children":33107},{"style":1070},[33108],{"type":40,"value":1161},{"type":30,"tag":1046,"props":33110,"children":33111},{"style":1070},[33112],{"type":40,"value":1073},{"type":30,"tag":1046,"props":33114,"children":33115},{"class":1048,"line":675},[33116,33120,33124,33128,33132,33136,33140,33144,33148,33152,33156,33160,33164],{"type":30,"tag":1046,"props":33117,"children":33118},{"style":1053},[33119],{"type":40,"value":7894},{"type":30,"tag":1046,"props":33121,"children":33122},{"style":1105},[33123],{"type":40,"value":32933},{"type":30,"tag":1046,"props":33125,"children":33126},{"style":1070},[33127],{"type":40,"value":1179},{"type":30,"tag":1046,"props":33129,"children":33130},{"style":1138},[33131],{"type":40,"value":1346},{"type":30,"tag":1046,"props":33133,"children":33134},{"style":1070},[33135],{"type":40,"value":14098},{"type":30,"tag":1046,"props":33137,"children":33138},{"style":1138},[33139],{"type":40,"value":1365},{"type":30,"tag":1046,"props":33141,"children":33142},{"style":1070},[33143],{"type":40,"value":1146},{"type":30,"tag":1046,"props":33145,"children":33146},{"style":1105},[33147],{"type":40,"value":14692},{"type":30,"tag":1046,"props":33149,"children":33150},{"style":1053},[33151],{"type":40,"value":1378},{"type":30,"tag":1046,"props":33153,"children":33154},{"style":1105},[33155],{"type":40,"value":14993},{"type":30,"tag":1046,"props":33157,"children":33158},{"style":1070},[33159],{"type":40,"value":6392},{"type":30,"tag":1046,"props":33161,"children":33162},{"style":1138},[33163],{"type":40,"value":1401},{"type":30,"tag":1046,"props":33165,"children":33166},{"style":1070},[33167],{"type":40,"value":1406},{"type":30,"tag":1046,"props":33169,"children":33170},{"class":1048,"line":681},[33171],{"type":30,"tag":1046,"props":33172,"children":33173},{"style":1070},[33174],{"type":40,"value":1423},{"type":30,"tag":1518,"props":33176,"children":33177},{"start":1124},[33178],{"type":30,"tag":167,"props":33179,"children":33180},{},[33181,33186,33189,33191,33196],{"type":30,"tag":36,"props":33182,"children":33183},{},[33184],{"type":40,"value":33185},"Engagement à apprendre et à enseigner",{"type":30,"tag":25001,"props":33187,"children":33188},{},[],{"type":40,"value":33190},"\nLe Software Craftsmanship ne concerne pas uniquement le code. Il inclut également l'idée que nous sommes des ",{"type":30,"tag":36,"props":33192,"children":33193},{},[33194],{"type":40,"value":33195},"apprenants à vie",{"type":40,"value":33197},". S'améliorer en permanence, partager ses connaissances et encourager les autres à faire de même sont au cœur de cette philosophie.",{"type":30,"tag":43,"props":33199,"children":33200},{},[33201,33205,33207,33212],{"type":30,"tag":36,"props":33202,"children":33203},{},[33204],{"type":40,"value":32584},{"type":40,"value":33206}," Rejoignez des communautés de développeurs, participez à des ",{"type":30,"tag":36,"props":33208,"children":33209},{},[33210],{"type":40,"value":33211},"code reviews",{"type":40,"value":33213},", et n'ayez pas peur de demander ou de donner des conseils.",{"type":30,"tag":84,"props":33215,"children":33216},{},[],{"type":30,"tag":116,"props":33218,"children":33220},{"id":33219},"comment-appliquer-ces-principes-dans-votre-code-au-quotidien-avec-exemples-java",[33221],{"type":40,"value":33222},"Comment appliquer ces principes dans votre code au quotidien (avec exemples Java)",{"type":30,"tag":43,"props":33224,"children":33225},{},[33226,33228,33232],{"type":40,"value":33227},"Voyons ",{"type":30,"tag":36,"props":33229,"children":33230},{},[33231],{"type":40,"value":1493},{"type":40,"value":33233}," appliquer de manière concrète ces principes dans votre développement quotidien.",{"type":30,"tag":2339,"props":33235,"children":33237},{"id":33236},"_1-code-propre-structure-et-lisibilité",[33238],{"type":40,"value":33239},"1. Code propre : Structure et lisibilité",{"type":30,"tag":43,"props":33241,"children":33242},{},[33243],{"type":40,"value":33244},"Quand je parle de code propre, cela signifie que chaque partie de votre code doit être facilement compréhensible et maintenable. Voici quelques règles simples pour y parvenir :",{"type":30,"tag":163,"props":33246,"children":33247},{},[33248,33258],{"type":30,"tag":167,"props":33249,"children":33250},{},[33251,33256],{"type":30,"tag":36,"props":33252,"children":33253},{},[33254],{"type":40,"value":33255},"Utilisez des noms de variables explicites.",{"type":40,"value":33257}," Les noms doivent décrire clairement leur rôle.",{"type":30,"tag":167,"props":33259,"children":33260},{},[33261,33266],{"type":30,"tag":36,"props":33262,"children":33263},{},[33264],{"type":40,"value":33265},"Découpez votre code en petites fonctions",{"type":40,"value":33267},". Chacune doit accomplir une seule tâche.",{"type":30,"tag":43,"props":33269,"children":33270},{},[33271],{"type":30,"tag":36,"props":33272,"children":33273},{},[33274],{"type":40,"value":33275},"Exemple de mauvaise pratique :",{"type":30,"tag":1035,"props":33277,"children":33279},{"className":1039,"code":33278,"language":1038,"meta":8,"style":8},"public void traiterDonnées(List\u003CString> données) {\n    for (String d : données) {\n        if (d != null && !d.isEmpty()) {\n            System.out.println(\"Donnée : \" + d);\n        }\n    }\n}\n",[33280],{"type":30,"tag":1042,"props":33281,"children":33282},{"__ignoreMap":8},[33283,33332,33368,33421,33467,33474,33481],{"type":30,"tag":1046,"props":33284,"children":33285},{"class":1048,"line":1049},[33286,33290,33294,33299,33303,33307,33311,33315,33319,33324,33328],{"type":30,"tag":1046,"props":33287,"children":33288},{"style":1053},[33289],{"type":40,"value":1056},{"type":30,"tag":1046,"props":33291,"children":33292},{"style":1053},[33293],{"type":40,"value":1135},{"type":30,"tag":1046,"props":33295,"children":33296},{"style":1138},[33297],{"type":40,"value":33298}," traiterDonnées",{"type":30,"tag":1046,"props":33300,"children":33301},{"style":1070},[33302],{"type":40,"value":1146},{"type":30,"tag":1046,"props":33304,"children":33305},{"style":1084},[33306],{"type":40,"value":9627},{"type":30,"tag":1046,"props":33308,"children":33309},{"style":1795},[33310],{"type":40,"value":1092},{"type":30,"tag":1046,"props":33312,"children":33313},{"style":1105},[33314],{"type":40,"value":2882},{"type":30,"tag":1046,"props":33316,"children":33317},{"style":1795},[33318],{"type":40,"value":1102},{"type":30,"tag":1046,"props":33320,"children":33321},{"style":1105},[33322],{"type":40,"value":33323}," données",{"type":30,"tag":1046,"props":33325,"children":33326},{"style":1070},[33327],{"type":40,"value":1161},{"type":30,"tag":1046,"props":33329,"children":33330},{"style":1070},[33331],{"type":40,"value":1073},{"type":30,"tag":1046,"props":33333,"children":33334},{"class":1048,"line":675},[33335,33339,33343,33347,33352,33356,33360,33364],{"type":30,"tag":1046,"props":33336,"children":33337},{"style":1053},[33338],{"type":40,"value":13271},{"type":30,"tag":1046,"props":33340,"children":33341},{"style":1070},[33342],{"type":40,"value":11861},{"type":30,"tag":1046,"props":33344,"children":33345},{"style":1084},[33346],{"type":40,"value":2882},{"type":30,"tag":1046,"props":33348,"children":33349},{"style":1105},[33350],{"type":40,"value":33351}," d ",{"type":30,"tag":1046,"props":33353,"children":33354},{"style":1053},[33355],{"type":40,"value":8498},{"type":30,"tag":1046,"props":33357,"children":33358},{"style":1105},[33359],{"type":40,"value":33323},{"type":30,"tag":1046,"props":33361,"children":33362},{"style":1070},[33363],{"type":40,"value":1161},{"type":30,"tag":1046,"props":33365,"children":33366},{"style":1070},[33367],{"type":40,"value":1073},{"type":30,"tag":1046,"props":33369,"children":33370},{"class":1048,"line":681},[33371,33375,33379,33384,33388,33392,33396,33400,33405,33409,33413,33417],{"type":30,"tag":1046,"props":33372,"children":33373},{"style":1053},[33374],{"type":40,"value":11856},{"type":30,"tag":1046,"props":33376,"children":33377},{"style":1070},[33378],{"type":40,"value":11861},{"type":30,"tag":1046,"props":33380,"children":33381},{"style":1105},[33382],{"type":40,"value":33383},"d ",{"type":30,"tag":1046,"props":33385,"children":33386},{"style":1795},[33387],{"type":40,"value":14022},{"type":30,"tag":1046,"props":33389,"children":33390},{"style":1780},[33391],{"type":40,"value":11876},{"type":30,"tag":1046,"props":33393,"children":33394},{"style":1795},[33395],{"type":40,"value":14076},{"type":30,"tag":1046,"props":33397,"children":33398},{"style":1795},[33399],{"type":40,"value":14081},{"type":30,"tag":1046,"props":33401,"children":33402},{"style":1105},[33403],{"type":40,"value":33404},"d",{"type":30,"tag":1046,"props":33406,"children":33407},{"style":1070},[33408],{"type":40,"value":1179},{"type":30,"tag":1046,"props":33410,"children":33411},{"style":1138},[33412],{"type":40,"value":14103},{"type":30,"tag":1046,"props":33414,"children":33415},{"style":1070},[33416],{"type":40,"value":13520},{"type":30,"tag":1046,"props":33418,"children":33419},{"style":1070},[33420],{"type":40,"value":1073},{"type":30,"tag":1046,"props":33422,"children":33423},{"class":1048,"line":1124},[33424,33429,33433,33437,33441,33445,33449,33454,33458,33463],{"type":30,"tag":1046,"props":33425,"children":33426},{"style":1105},[33427],{"type":40,"value":33428},"            System",{"type":30,"tag":1046,"props":33430,"children":33431},{"style":1070},[33432],{"type":40,"value":1179},{"type":30,"tag":1046,"props":33434,"children":33435},{"style":1105},[33436],{"type":40,"value":12564},{"type":30,"tag":1046,"props":33438,"children":33439},{"style":1070},[33440],{"type":40,"value":1179},{"type":30,"tag":1046,"props":33442,"children":33443},{"style":1138},[33444],{"type":40,"value":12573},{"type":30,"tag":1046,"props":33446,"children":33447},{"style":1070},[33448],{"type":40,"value":1146},{"type":30,"tag":1046,"props":33450,"children":33451},{"style":1675},[33452],{"type":40,"value":33453},"\"Donnée : \"",{"type":30,"tag":1046,"props":33455,"children":33456},{"style":1795},[33457],{"type":40,"value":7261},{"type":30,"tag":1046,"props":33459,"children":33460},{"style":1105},[33461],{"type":40,"value":33462}," d",{"type":30,"tag":1046,"props":33464,"children":33465},{"style":1070},[33466],{"type":40,"value":1198},{"type":30,"tag":1046,"props":33468,"children":33469},{"class":1048,"line":1168},[33470],{"type":30,"tag":1046,"props":33471,"children":33472},{"style":1070},[33473],{"type":40,"value":11922},{"type":30,"tag":1046,"props":33475,"children":33476},{"class":1048,"line":1201},[33477],{"type":30,"tag":1046,"props":33478,"children":33479},{"style":1070},[33480],{"type":40,"value":1207},{"type":30,"tag":1046,"props":33482,"children":33483},{"class":1048,"line":1210},[33484],{"type":30,"tag":1046,"props":33485,"children":33486},{"style":1070},[33487],{"type":40,"value":1423},{"type":30,"tag":43,"props":33489,"children":33490},{},[33491],{"type":30,"tag":36,"props":33492,"children":33493},{},[33494],{"type":40,"value":33495},"Exemple amélioré :",{"type":30,"tag":1035,"props":33497,"children":33499},{"className":1039,"code":33498,"language":1038,"meta":8,"style":8},"public void afficherDonnéesNonNulles(List\u003CString> données) {\n    données.stream()\n           .filter(this::estValide)\n           .forEach(this::afficherDonnée);\n}\n\nprivate boolean estValide(String donnée) {\n    return donnée != null && !donnée.isEmpty();\n}\n\nprivate void afficherDonnée(String donnée) {\n    System.out.println(\"Donnée : \" + donnée);\n}\n",[33500],{"type":30,"tag":1042,"props":33501,"children":33502},{"__ignoreMap":8},[33503,33551,33571,33605,33638,33645,33652,33689,33734,33741,33748,33784,33827],{"type":30,"tag":1046,"props":33504,"children":33505},{"class":1048,"line":1049},[33506,33510,33514,33519,33523,33527,33531,33535,33539,33543,33547],{"type":30,"tag":1046,"props":33507,"children":33508},{"style":1053},[33509],{"type":40,"value":1056},{"type":30,"tag":1046,"props":33511,"children":33512},{"style":1053},[33513],{"type":40,"value":1135},{"type":30,"tag":1046,"props":33515,"children":33516},{"style":1138},[33517],{"type":40,"value":33518}," afficherDonnéesNonNulles",{"type":30,"tag":1046,"props":33520,"children":33521},{"style":1070},[33522],{"type":40,"value":1146},{"type":30,"tag":1046,"props":33524,"children":33525},{"style":1084},[33526],{"type":40,"value":9627},{"type":30,"tag":1046,"props":33528,"children":33529},{"style":1795},[33530],{"type":40,"value":1092},{"type":30,"tag":1046,"props":33532,"children":33533},{"style":1105},[33534],{"type":40,"value":2882},{"type":30,"tag":1046,"props":33536,"children":33537},{"style":1795},[33538],{"type":40,"value":1102},{"type":30,"tag":1046,"props":33540,"children":33541},{"style":1105},[33542],{"type":40,"value":33323},{"type":30,"tag":1046,"props":33544,"children":33545},{"style":1070},[33546],{"type":40,"value":1161},{"type":30,"tag":1046,"props":33548,"children":33549},{"style":1070},[33550],{"type":40,"value":1073},{"type":30,"tag":1046,"props":33552,"children":33553},{"class":1048,"line":675},[33554,33559,33563,33567],{"type":30,"tag":1046,"props":33555,"children":33556},{"style":1105},[33557],{"type":40,"value":33558},"    données",{"type":30,"tag":1046,"props":33560,"children":33561},{"style":1070},[33562],{"type":40,"value":1179},{"type":30,"tag":1046,"props":33564,"children":33565},{"style":1138},[33566],{"type":40,"value":1346},{"type":30,"tag":1046,"props":33568,"children":33569},{"style":1070},[33570],{"type":40,"value":1351},{"type":30,"tag":1046,"props":33572,"children":33573},{"class":1048,"line":681},[33574,33579,33584,33588,33592,33596,33601],{"type":30,"tag":1046,"props":33575,"children":33576},{"style":1070},[33577],{"type":40,"value":33578},"           .",{"type":30,"tag":1046,"props":33580,"children":33581},{"style":1138},[33582],{"type":40,"value":33583},"filter",{"type":30,"tag":1046,"props":33585,"children":33586},{"style":1070},[33587],{"type":40,"value":1146},{"type":30,"tag":1046,"props":33589,"children":33590},{"style":1780},[33591],{"type":40,"value":17588},{"type":30,"tag":1046,"props":33593,"children":33594},{"style":1053},[33595],{"type":40,"value":1378},{"type":30,"tag":1046,"props":33597,"children":33598},{"style":1105},[33599],{"type":40,"value":33600},"estValide",{"type":30,"tag":1046,"props":33602,"children":33603},{"style":1070},[33604],{"type":40,"value":1388},{"type":30,"tag":1046,"props":33606,"children":33607},{"class":1048,"line":1124},[33608,33612,33617,33621,33625,33629,33634],{"type":30,"tag":1046,"props":33609,"children":33610},{"style":1070},[33611],{"type":40,"value":33578},{"type":30,"tag":1046,"props":33613,"children":33614},{"style":1138},[33615],{"type":40,"value":33616},"forEach",{"type":30,"tag":1046,"props":33618,"children":33619},{"style":1070},[33620],{"type":40,"value":1146},{"type":30,"tag":1046,"props":33622,"children":33623},{"style":1780},[33624],{"type":40,"value":17588},{"type":30,"tag":1046,"props":33626,"children":33627},{"style":1053},[33628],{"type":40,"value":1378},{"type":30,"tag":1046,"props":33630,"children":33631},{"style":1105},[33632],{"type":40,"value":33633},"afficherDonnée",{"type":30,"tag":1046,"props":33635,"children":33636},{"style":1070},[33637],{"type":40,"value":1198},{"type":30,"tag":1046,"props":33639,"children":33640},{"class":1048,"line":1168},[33641],{"type":30,"tag":1046,"props":33642,"children":33643},{"style":1070},[33644],{"type":40,"value":1423},{"type":30,"tag":1046,"props":33646,"children":33647},{"class":1048,"line":1201},[33648],{"type":30,"tag":1046,"props":33649,"children":33650},{"emptyLinePlaceholder":13},[33651],{"type":40,"value":1121},{"type":30,"tag":1046,"props":33653,"children":33654},{"class":1048,"line":1210},[33655,33659,33663,33668,33672,33676,33681,33685],{"type":30,"tag":1046,"props":33656,"children":33657},{"style":1053},[33658],{"type":40,"value":13600},{"type":30,"tag":1046,"props":33660,"children":33661},{"style":1053},[33662],{"type":40,"value":13605},{"type":30,"tag":1046,"props":33664,"children":33665},{"style":1138},[33666],{"type":40,"value":33667}," estValide",{"type":30,"tag":1046,"props":33669,"children":33670},{"style":1070},[33671],{"type":40,"value":1146},{"type":30,"tag":1046,"props":33673,"children":33674},{"style":1084},[33675],{"type":40,"value":2882},{"type":30,"tag":1046,"props":33677,"children":33678},{"style":1105},[33679],{"type":40,"value":33680}," donnée",{"type":30,"tag":1046,"props":33682,"children":33683},{"style":1070},[33684],{"type":40,"value":1161},{"type":30,"tag":1046,"props":33686,"children":33687},{"style":1070},[33688],{"type":40,"value":1073},{"type":30,"tag":1046,"props":33690,"children":33691},{"class":1048,"line":1218},[33692,33696,33701,33705,33709,33713,33717,33722,33726,33730],{"type":30,"tag":1046,"props":33693,"children":33694},{"style":1053},[33695],{"type":40,"value":7894},{"type":30,"tag":1046,"props":33697,"children":33698},{"style":1105},[33699],{"type":40,"value":33700}," donnée ",{"type":30,"tag":1046,"props":33702,"children":33703},{"style":1795},[33704],{"type":40,"value":14022},{"type":30,"tag":1046,"props":33706,"children":33707},{"style":1780},[33708],{"type":40,"value":11876},{"type":30,"tag":1046,"props":33710,"children":33711},{"style":1795},[33712],{"type":40,"value":14076},{"type":30,"tag":1046,"props":33714,"children":33715},{"style":1795},[33716],{"type":40,"value":14081},{"type":30,"tag":1046,"props":33718,"children":33719},{"style":1105},[33720],{"type":40,"value":33721},"donnée",{"type":30,"tag":1046,"props":33723,"children":33724},{"style":1070},[33725],{"type":40,"value":1179},{"type":30,"tag":1046,"props":33727,"children":33728},{"style":1138},[33729],{"type":40,"value":14103},{"type":30,"tag":1046,"props":33731,"children":33732},{"style":1070},[33733],{"type":40,"value":1406},{"type":30,"tag":1046,"props":33735,"children":33736},{"class":1048,"line":1255},[33737],{"type":30,"tag":1046,"props":33738,"children":33739},{"style":1070},[33740],{"type":40,"value":1423},{"type":30,"tag":1046,"props":33742,"children":33743},{"class":1048,"line":1284},[33744],{"type":30,"tag":1046,"props":33745,"children":33746},{"emptyLinePlaceholder":13},[33747],{"type":40,"value":1121},{"type":30,"tag":1046,"props":33749,"children":33750},{"class":1048,"line":1292},[33751,33755,33759,33764,33768,33772,33776,33780],{"type":30,"tag":1046,"props":33752,"children":33753},{"style":1053},[33754],{"type":40,"value":13600},{"type":30,"tag":1046,"props":33756,"children":33757},{"style":1053},[33758],{"type":40,"value":1135},{"type":30,"tag":1046,"props":33760,"children":33761},{"style":1138},[33762],{"type":40,"value":33763}," afficherDonnée",{"type":30,"tag":1046,"props":33765,"children":33766},{"style":1070},[33767],{"type":40,"value":1146},{"type":30,"tag":1046,"props":33769,"children":33770},{"style":1084},[33771],{"type":40,"value":2882},{"type":30,"tag":1046,"props":33773,"children":33774},{"style":1105},[33775],{"type":40,"value":33680},{"type":30,"tag":1046,"props":33777,"children":33778},{"style":1070},[33779],{"type":40,"value":1161},{"type":30,"tag":1046,"props":33781,"children":33782},{"style":1070},[33783],{"type":40,"value":1073},{"type":30,"tag":1046,"props":33785,"children":33786},{"class":1048,"line":1300},[33787,33791,33795,33799,33803,33807,33811,33815,33819,33823],{"type":30,"tag":1046,"props":33788,"children":33789},{"style":1105},[33790],{"type":40,"value":20461},{"type":30,"tag":1046,"props":33792,"children":33793},{"style":1070},[33794],{"type":40,"value":1179},{"type":30,"tag":1046,"props":33796,"children":33797},{"style":1105},[33798],{"type":40,"value":12564},{"type":30,"tag":1046,"props":33800,"children":33801},{"style":1070},[33802],{"type":40,"value":1179},{"type":30,"tag":1046,"props":33804,"children":33805},{"style":1138},[33806],{"type":40,"value":12573},{"type":30,"tag":1046,"props":33808,"children":33809},{"style":1070},[33810],{"type":40,"value":1146},{"type":30,"tag":1046,"props":33812,"children":33813},{"style":1675},[33814],{"type":40,"value":33453},{"type":30,"tag":1046,"props":33816,"children":33817},{"style":1795},[33818],{"type":40,"value":7261},{"type":30,"tag":1046,"props":33820,"children":33821},{"style":1105},[33822],{"type":40,"value":33680},{"type":30,"tag":1046,"props":33824,"children":33825},{"style":1070},[33826],{"type":40,"value":1198},{"type":30,"tag":1046,"props":33828,"children":33829},{"class":1048,"line":1327},[33830],{"type":30,"tag":1046,"props":33831,"children":33832},{"style":1070},[33833],{"type":40,"value":1423},{"type":30,"tag":43,"props":33835,"children":33836},{},[33837,33841,33843,33848],{"type":30,"tag":36,"props":33838,"children":33839},{},[33840],{"type":40,"value":32584},{"type":40,"value":33842}," Utilisez des ",{"type":30,"tag":36,"props":33844,"children":33845},{},[33846],{"type":40,"value":33847},"méthodes privées",{"type":40,"value":33849}," pour découper les actions complexes en étapes plus simples et plus compréhensibles.",{"type":30,"tag":84,"props":33851,"children":33852},{},[],{"type":30,"tag":2339,"props":33854,"children":33856},{"id":33855},"_2-tests-automatisés-assurer-la-qualité-de-votre-code-dès-le-départ",[33857],{"type":40,"value":33858},"2. Tests automatisés : Assurer la qualité de votre code dès le départ",{"type":30,"tag":43,"props":33860,"children":33861},{},[33862],{"type":40,"value":33863},"Les tests permettent de garantir que votre code fonctionne comme prévu à chaque étape. Ils vous permettent aussi de faire du refactoring en toute confiance.",{"type":30,"tag":43,"props":33865,"children":33866},{},[33867],{"type":30,"tag":36,"props":33868,"children":33869},{},[33870],{"type":40,"value":33871},"Exemple avec JUnit :",{"type":30,"tag":1035,"props":33873,"children":33875},{"className":1039,"code":33874,"language":1038,"meta":8,"style":8},"@Test\npublic void testEstValide() {\n    assertTrue(estValide(\"ValidData\"));\n    assertFalse(estValide(\"\"));\n    assertFalse(estValide(null));\n}\n",[33876],{"type":30,"tag":1042,"props":33877,"children":33878},{"__ignoreMap":8},[33879,33890,33914,33942,33970,33998],{"type":30,"tag":1046,"props":33880,"children":33881},{"class":1048,"line":1049},[33882,33886],{"type":30,"tag":1046,"props":33883,"children":33884},{"style":1647},[33885],{"type":40,"value":1650},{"type":30,"tag":1046,"props":33887,"children":33888},{"style":1653},[33889],{"type":40,"value":13736},{"type":30,"tag":1046,"props":33891,"children":33892},{"class":1048,"line":675},[33893,33897,33901,33906,33910],{"type":30,"tag":1046,"props":33894,"children":33895},{"style":1053},[33896],{"type":40,"value":1056},{"type":30,"tag":1046,"props":33898,"children":33899},{"style":1053},[33900],{"type":40,"value":1135},{"type":30,"tag":1046,"props":33902,"children":33903},{"style":1138},[33904],{"type":40,"value":33905}," testEstValide",{"type":30,"tag":1046,"props":33907,"children":33908},{"style":1070},[33909],{"type":40,"value":1320},{"type":30,"tag":1046,"props":33911,"children":33912},{"style":1070},[33913],{"type":40,"value":1073},{"type":30,"tag":1046,"props":33915,"children":33916},{"class":1048,"line":681},[33917,33921,33925,33929,33933,33938],{"type":30,"tag":1046,"props":33918,"children":33919},{"style":1138},[33920],{"type":40,"value":13768},{"type":30,"tag":1046,"props":33922,"children":33923},{"style":1070},[33924],{"type":40,"value":1146},{"type":30,"tag":1046,"props":33926,"children":33927},{"style":1138},[33928],{"type":40,"value":33600},{"type":30,"tag":1046,"props":33930,"children":33931},{"style":1070},[33932],{"type":40,"value":1146},{"type":30,"tag":1046,"props":33934,"children":33935},{"style":1675},[33936],{"type":40,"value":33937},"\"ValidData\"",{"type":30,"tag":1046,"props":33939,"children":33940},{"style":1070},[33941],{"type":40,"value":4457},{"type":30,"tag":1046,"props":33943,"children":33944},{"class":1048,"line":1124},[33945,33949,33953,33957,33961,33966],{"type":30,"tag":1046,"props":33946,"children":33947},{"style":1138},[33948],{"type":40,"value":13846},{"type":30,"tag":1046,"props":33950,"children":33951},{"style":1070},[33952],{"type":40,"value":1146},{"type":30,"tag":1046,"props":33954,"children":33955},{"style":1138},[33956],{"type":40,"value":33600},{"type":30,"tag":1046,"props":33958,"children":33959},{"style":1070},[33960],{"type":40,"value":1146},{"type":30,"tag":1046,"props":33962,"children":33963},{"style":1675},[33964],{"type":40,"value":33965},"\"\"",{"type":30,"tag":1046,"props":33967,"children":33968},{"style":1070},[33969],{"type":40,"value":4457},{"type":30,"tag":1046,"props":33971,"children":33972},{"class":1048,"line":1168},[33973,33977,33981,33985,33989,33994],{"type":30,"tag":1046,"props":33974,"children":33975},{"style":1138},[33976],{"type":40,"value":13846},{"type":30,"tag":1046,"props":33978,"children":33979},{"style":1070},[33980],{"type":40,"value":1146},{"type":30,"tag":1046,"props":33982,"children":33983},{"style":1138},[33984],{"type":40,"value":33600},{"type":30,"tag":1046,"props":33986,"children":33987},{"style":1070},[33988],{"type":40,"value":1146},{"type":30,"tag":1046,"props":33990,"children":33991},{"style":1780},[33992],{"type":40,"value":33993},"null",{"type":30,"tag":1046,"props":33995,"children":33996},{"style":1070},[33997],{"type":40,"value":4457},{"type":30,"tag":1046,"props":33999,"children":34000},{"class":1048,"line":1201},[34001],{"type":30,"tag":1046,"props":34002,"children":34003},{"style":1070},[34004],{"type":40,"value":1423},{"type":30,"tag":43,"props":34006,"children":34007},{},[34008],{"type":40,"value":34009},"Cette approche vous permet de toujours valider la logique de vos méthodes.",{"type":30,"tag":43,"props":34011,"children":34012},{},[34013,34017,34019,34024],{"type":30,"tag":36,"props":34014,"children":34015},{},[34016],{"type":40,"value":32584},{"type":40,"value":34018}," Mettez en place un environnement de tests ",{"type":30,"tag":36,"props":34020,"children":34021},{},[34022],{"type":40,"value":34023},"continu",{"type":40,"value":34025}," (CI/CD). Cela automatise les tests à chaque modification de code et vous permet de repérer les erreurs rapidement.",{"type":30,"tag":84,"props":34027,"children":34028},{},[],{"type":30,"tag":2339,"props":34030,"children":34032},{"id":34031},"_3-refactoring-améliorer-sans-casser",[34033],{"type":40,"value":34034},"3. Refactoring : Améliorer sans casser",{"type":30,"tag":43,"props":34036,"children":34037},{},[34038,34040,34045,34047,34052],{"type":40,"value":34039},"Le refactoring fait partie intégrante du Software Craftsmanship. Je vous recommande de ",{"type":30,"tag":36,"props":34041,"children":34042},{},[34043],{"type":40,"value":34044},"nettoyer",{"type":40,"value":34046}," votre code sans modifier son comportement, par exemple en remplaçant une boucle classique par des méthodes de la bibliothèque ",{"type":30,"tag":36,"props":34048,"children":34049},{},[34050],{"type":40,"value":34051},"Java Stream",{"type":40,"value":34053},", comme vu plus haut.",{"type":30,"tag":43,"props":34055,"children":34056},{},[34057],{"type":40,"value":34058},"Voici un autre exemple de refactoring classique :",{"type":30,"tag":43,"props":34060,"children":34061},{},[34062],{"type":30,"tag":36,"props":34063,"children":34064},{},[34065],{"type":40,"value":32885},{"type":30,"tag":1035,"props":34067,"children":34069},{"className":1039,"code":34068,"language":1038,"meta":8,"style":8},"public String construireMessage(String nom, int age) {\n    return \"Nom: \" + nom + \", Age: \" + age;\n}\n",[34070],{"type":30,"tag":1042,"props":34071,"children":34072},{"__ignoreMap":8},[34073,34121,34163],{"type":30,"tag":1046,"props":34074,"children":34075},{"class":1048,"line":1049},[34076,34080,34084,34089,34093,34097,34101,34105,34109,34113,34117],{"type":30,"tag":1046,"props":34077,"children":34078},{"style":1053},[34079],{"type":40,"value":1056},{"type":30,"tag":1046,"props":34081,"children":34082},{"style":1084},[34083],{"type":40,"value":2067},{"type":30,"tag":1046,"props":34085,"children":34086},{"style":1138},[34087],{"type":40,"value":34088}," construireMessage",{"type":30,"tag":1046,"props":34090,"children":34091},{"style":1070},[34092],{"type":40,"value":1146},{"type":30,"tag":1046,"props":34094,"children":34095},{"style":1084},[34096],{"type":40,"value":2882},{"type":30,"tag":1046,"props":34098,"children":34099},{"style":1105},[34100],{"type":40,"value":16990},{"type":30,"tag":1046,"props":34102,"children":34103},{"style":1070},[34104],{"type":40,"value":2891},{"type":30,"tag":1046,"props":34106,"children":34107},{"style":1053},[34108],{"type":40,"value":10265},{"type":30,"tag":1046,"props":34110,"children":34111},{"style":1105},[34112],{"type":40,"value":30924},{"type":30,"tag":1046,"props":34114,"children":34115},{"style":1070},[34116],{"type":40,"value":1161},{"type":30,"tag":1046,"props":34118,"children":34119},{"style":1070},[34120],{"type":40,"value":1073},{"type":30,"tag":1046,"props":34122,"children":34123},{"class":1048,"line":675},[34124,34128,34133,34137,34142,34146,34151,34155,34159],{"type":30,"tag":1046,"props":34125,"children":34126},{"style":1053},[34127],{"type":40,"value":7894},{"type":30,"tag":1046,"props":34129,"children":34130},{"style":1675},[34131],{"type":40,"value":34132}," \"Nom: \"",{"type":30,"tag":1046,"props":34134,"children":34135},{"style":1795},[34136],{"type":40,"value":7261},{"type":30,"tag":1046,"props":34138,"children":34139},{"style":1105},[34140],{"type":40,"value":34141}," nom ",{"type":30,"tag":1046,"props":34143,"children":34144},{"style":1795},[34145],{"type":40,"value":12595},{"type":30,"tag":1046,"props":34147,"children":34148},{"style":1675},[34149],{"type":40,"value":34150}," \", Age: \"",{"type":30,"tag":1046,"props":34152,"children":34153},{"style":1795},[34154],{"type":40,"value":7261},{"type":30,"tag":1046,"props":34156,"children":34157},{"style":1105},[34158],{"type":40,"value":30924},{"type":30,"tag":1046,"props":34160,"children":34161},{"style":1070},[34162],{"type":40,"value":1113},{"type":30,"tag":1046,"props":34164,"children":34165},{"class":1048,"line":681},[34166],{"type":30,"tag":1046,"props":34167,"children":34168},{"style":1070},[34169],{"type":40,"value":1423},{"type":30,"tag":43,"props":34171,"children":34172},{},[34173],{"type":30,"tag":36,"props":34174,"children":34175},{},[34176],{"type":40,"value":33058},{"type":30,"tag":1035,"props":34178,"children":34180},{"className":1039,"code":34179,"language":1038,"meta":8,"style":8},"public String construireMessage(String nom, int age) {\n    return String.format(\"Nom: %s, Age: %d\", nom, age);\n}\n",[34181],{"type":30,"tag":1042,"props":34182,"children":34183},{"__ignoreMap":8},[34184,34231,34280],{"type":30,"tag":1046,"props":34185,"children":34186},{"class":1048,"line":1049},[34187,34191,34195,34199,34203,34207,34211,34215,34219,34223,34227],{"type":30,"tag":1046,"props":34188,"children":34189},{"style":1053},[34190],{"type":40,"value":1056},{"type":30,"tag":1046,"props":34192,"children":34193},{"style":1084},[34194],{"type":40,"value":2067},{"type":30,"tag":1046,"props":34196,"children":34197},{"style":1138},[34198],{"type":40,"value":34088},{"type":30,"tag":1046,"props":34200,"children":34201},{"style":1070},[34202],{"type":40,"value":1146},{"type":30,"tag":1046,"props":34204,"children":34205},{"style":1084},[34206],{"type":40,"value":2882},{"type":30,"tag":1046,"props":34208,"children":34209},{"style":1105},[34210],{"type":40,"value":16990},{"type":30,"tag":1046,"props":34212,"children":34213},{"style":1070},[34214],{"type":40,"value":2891},{"type":30,"tag":1046,"props":34216,"children":34217},{"style":1053},[34218],{"type":40,"value":10265},{"type":30,"tag":1046,"props":34220,"children":34221},{"style":1105},[34222],{"type":40,"value":30924},{"type":30,"tag":1046,"props":34224,"children":34225},{"style":1070},[34226],{"type":40,"value":1161},{"type":30,"tag":1046,"props":34228,"children":34229},{"style":1070},[34230],{"type":40,"value":1073},{"type":30,"tag":1046,"props":34232,"children":34233},{"class":1048,"line":675},[34234,34238,34242,34246,34251,34255,34260,34264,34268,34272,34276],{"type":30,"tag":1046,"props":34235,"children":34236},{"style":1053},[34237],{"type":40,"value":7894},{"type":30,"tag":1046,"props":34239,"children":34240},{"style":1105},[34241],{"type":40,"value":2067},{"type":30,"tag":1046,"props":34243,"children":34244},{"style":1070},[34245],{"type":40,"value":1179},{"type":30,"tag":1046,"props":34247,"children":34248},{"style":1138},[34249],{"type":40,"value":34250},"format",{"type":30,"tag":1046,"props":34252,"children":34253},{"style":1070},[34254],{"type":40,"value":1146},{"type":30,"tag":1046,"props":34256,"children":34257},{"style":1675},[34258],{"type":40,"value":34259},"\"Nom: %s, Age: %d\"",{"type":30,"tag":1046,"props":34261,"children":34262},{"style":1070},[34263],{"type":40,"value":2891},{"type":30,"tag":1046,"props":34265,"children":34266},{"style":1105},[34267],{"type":40,"value":16990},{"type":30,"tag":1046,"props":34269,"children":34270},{"style":1070},[34271],{"type":40,"value":2891},{"type":30,"tag":1046,"props":34273,"children":34274},{"style":1105},[34275],{"type":40,"value":30924},{"type":30,"tag":1046,"props":34277,"children":34278},{"style":1070},[34279],{"type":40,"value":1198},{"type":30,"tag":1046,"props":34281,"children":34282},{"class":1048,"line":681},[34283],{"type":30,"tag":1046,"props":34284,"children":34285},{"style":1070},[34286],{"type":40,"value":1423},{"type":30,"tag":43,"props":34288,"children":34289},{},[34290],{"type":40,"value":34291},"Cette méthode est non seulement plus concise, mais elle utilise également une fonctionnalité plus robuste de Java.",{"type":30,"tag":43,"props":34293,"children":34294},{},[34295,34299,34301,34306],{"type":30,"tag":36,"props":34296,"children":34297},{},[34298],{"type":40,"value":18421},{"type":40,"value":34300}," Le refactoring sans tests peut être risqué. Assurez-vous d’avoir une couverture de tests ",{"type":30,"tag":36,"props":34302,"children":34303},{},[34304],{"type":40,"value":34305},"suffisante",{"type":40,"value":34307}," avant de refactorer votre code.",{"type":30,"tag":84,"props":34309,"children":34310},{},[],{"type":30,"tag":2339,"props":34312,"children":34314},{"id":34313},"_4-apprentissage-continu-et-pair-programming",[34315],{"type":40,"value":34316},"4. Apprentissage continu et Pair Programming",{"type":30,"tag":43,"props":34318,"children":34319},{},[34320,34322,34331,34333,34340],{"type":40,"value":34321},"L’une des meilleures façons d’améliorer votre code est de travailler avec d’autres développeurs. Le ",{"type":30,"tag":36,"props":34323,"children":34324},{},[34325],{"type":30,"tag":75,"props":34326,"children":34328},{"href":34327},"/fr/dette-technique/pair-programming-roi-conditions",[34329],{"type":40,"value":34330},"pair programming",{"type":40,"value":34332}," ou la ",{"type":30,"tag":36,"props":34334,"children":34335},{},[34336],{"type":30,"tag":75,"props":34337,"children":34338},{"href":349},[34339],{"type":40,"value":352},{"type":40,"value":34341}," vous permet de découvrir des astuces, des patterns que vous ne connaissiez pas et d’améliorer la qualité globale du projet.",{"type":30,"tag":84,"props":34343,"children":34344},{},[],{"type":30,"tag":116,"props":34346,"children":34348},{"id":34347},"outils-et-pratiques-recommandés",[34349],{"type":40,"value":34350},"Outils et pratiques recommandés",{"type":30,"tag":43,"props":34352,"children":34353},{},[34354,34356,34361,34363,34367],{"type":40,"value":34355},"Pour devenir un véritable ",{"type":30,"tag":36,"props":34357,"children":34358},{},[34359],{"type":40,"value":34360},"artisan logiciel",{"type":40,"value":34362},", je vous recommande de vous appuyer sur les bons outils et de suivre les bonnes pratiques. Voici une sélection d'outils qui peuvent vous aider à appliquer les principes du ",{"type":30,"tag":36,"props":34364,"children":34365},{},[34366],{"type":40,"value":13173},{"type":40,"value":34368}," dans votre quotidien.",{"type":30,"tag":2339,"props":34370,"children":34372},{"id":34371},"_1-outils-pour-écrire-du-code-propre",[34373],{"type":40,"value":34374},"1. Outils pour écrire du code propre",{"type":30,"tag":163,"props":34376,"children":34377},{},[34378],{"type":30,"tag":167,"props":34379,"children":34380},{},[34381,34386],{"type":30,"tag":36,"props":34382,"children":34383},{},[34384],{"type":40,"value":34385},"SonarLint",{"type":40,"value":34387},"\nCet outil gratuit vous aide à identifier les problèmes dans votre code en temps réel. Il analyse le code directement dans votre IDE et vous propose des améliorations pour rendre votre code plus propre et sécurisé.",{"type":30,"tag":43,"props":34389,"children":34390},{},[34391,34395],{"type":30,"tag":36,"props":34392,"children":34393},{},[34394],{"type":40,"value":32584},{"type":40,"value":34396}," Intégrez SonarLint à votre environnement de développement pour détecter rapidement les mauvaises pratiques (duplications de code, bugs potentiels, etc.).",{"type":30,"tag":163,"props":34398,"children":34399},{},[34400],{"type":30,"tag":167,"props":34401,"children":34402},{},[34403,34408,34410,34415],{"type":30,"tag":36,"props":34404,"children":34405},{},[34406],{"type":40,"value":34407},"Checkstyle",{"type":40,"value":34409},"\nCheckstyle vous permet de vérifier si votre code suit les conventions de style Java, ce qui est essentiel pour rendre votre code plus lisible et maintenable. Il est souvent utilisé dans les ",{"type":30,"tag":36,"props":34411,"children":34412},{},[34413],{"type":40,"value":34414},"revues de code",{"type":40,"value":34416}," pour standardiser les pratiques au sein d’une équipe.",{"type":30,"tag":43,"props":34418,"children":34419},{},[34420,34424],{"type":30,"tag":36,"props":34421,"children":34422},{},[34423],{"type":40,"value":18421},{"type":40,"value":34425}," Ne vous contentez pas de suivre les règles par défaut. Personnalisez les règles de Checkstyle en fonction des standards de votre équipe.",{"type":30,"tag":2339,"props":34427,"children":34429},{"id":34428},"_2-outils-pour-les-tests-automatisés",[34430],{"type":40,"value":34431},"2. Outils pour les tests automatisés",{"type":30,"tag":163,"props":34433,"children":34434},{},[34435,34451],{"type":30,"tag":167,"props":34436,"children":34437},{},[34438,34442,34444,34449],{"type":30,"tag":36,"props":34439,"children":34440},{},[34441],{"type":40,"value":12965},{"type":40,"value":34443},"\nC’est la ",{"type":30,"tag":36,"props":34445,"children":34446},{},[34447],{"type":40,"value":34448},"bibliothèque de test unitaire",{"type":40,"value":34450}," la plus utilisée en Java. Elle vous permet d’écrire des tests de manière fluide et d’assurer que chaque partie de votre code fonctionne comme prévu.",{"type":30,"tag":167,"props":34452,"children":34453},{},[34454,34458,34460,34464],{"type":30,"tag":36,"props":34455,"children":34456},{},[34457],{"type":40,"value":12971},{"type":40,"value":34459},"\nParfois, vous aurez besoin de tester des composants qui dépendent de systèmes externes, comme des bases de données ou des services web. ",{"type":30,"tag":36,"props":34461,"children":34462},{},[34463],{"type":40,"value":12971},{"type":40,"value":34465}," vous permet de simuler ces dépendances pour isoler les parties que vous souhaitez tester.",{"type":30,"tag":43,"props":34467,"children":34468},{},[34469],{"type":30,"tag":872,"props":34470,"children":34471},{},[34472],{"type":40,"value":34473},"Exemple d’utilisation :",{"type":30,"tag":1035,"props":34475,"children":34477},{"className":1039,"code":34476,"language":1038,"meta":8,"style":8},"@Test\npublic void testAvecMock() {\n    MyService service = mock(MyService.class);\n    when(service.calculer()).thenReturn(42);\n\n    assertEquals(42, service.calculer());\n}\n",[34478],{"type":30,"tag":1042,"props":34479,"children":34480},{"__ignoreMap":8},[34481,34492,34516,34559,34607,34614,34650],{"type":30,"tag":1046,"props":34482,"children":34483},{"class":1048,"line":1049},[34484,34488],{"type":30,"tag":1046,"props":34485,"children":34486},{"style":1647},[34487],{"type":40,"value":1650},{"type":30,"tag":1046,"props":34489,"children":34490},{"style":1653},[34491],{"type":40,"value":13736},{"type":30,"tag":1046,"props":34493,"children":34494},{"class":1048,"line":675},[34495,34499,34503,34508,34512],{"type":30,"tag":1046,"props":34496,"children":34497},{"style":1053},[34498],{"type":40,"value":1056},{"type":30,"tag":1046,"props":34500,"children":34501},{"style":1053},[34502],{"type":40,"value":1135},{"type":30,"tag":1046,"props":34504,"children":34505},{"style":1138},[34506],{"type":40,"value":34507}," testAvecMock",{"type":30,"tag":1046,"props":34509,"children":34510},{"style":1070},[34511],{"type":40,"value":1320},{"type":30,"tag":1046,"props":34513,"children":34514},{"style":1070},[34515],{"type":40,"value":1073},{"type":30,"tag":1046,"props":34517,"children":34518},{"class":1048,"line":681},[34519,34524,34529,34533,34538,34542,34547,34551,34555],{"type":30,"tag":1046,"props":34520,"children":34521},{"style":1084},[34522],{"type":40,"value":34523},"    MyService",{"type":30,"tag":1046,"props":34525,"children":34526},{"style":1105},[34527],{"type":40,"value":34528}," service ",{"type":30,"tag":1046,"props":34530,"children":34531},{"style":1795},[34532],{"type":40,"value":1798},{"type":30,"tag":1046,"props":34534,"children":34535},{"style":1138},[34536],{"type":40,"value":34537}," mock",{"type":30,"tag":1046,"props":34539,"children":34540},{"style":1070},[34541],{"type":40,"value":1146},{"type":30,"tag":1046,"props":34543,"children":34544},{"style":1105},[34545],{"type":40,"value":34546},"MyService",{"type":30,"tag":1046,"props":34548,"children":34549},{"style":1070},[34550],{"type":40,"value":1179},{"type":30,"tag":1046,"props":34552,"children":34553},{"style":1105},[34554],{"type":40,"value":7282},{"type":30,"tag":1046,"props":34556,"children":34557},{"style":1070},[34558],{"type":40,"value":1198},{"type":30,"tag":1046,"props":34560,"children":34561},{"class":1048,"line":1124},[34562,34567,34571,34576,34580,34584,34589,34594,34598,34603],{"type":30,"tag":1046,"props":34563,"children":34564},{"style":1138},[34565],{"type":40,"value":34566},"    when",{"type":30,"tag":1046,"props":34568,"children":34569},{"style":1070},[34570],{"type":40,"value":1146},{"type":30,"tag":1046,"props":34572,"children":34573},{"style":1105},[34574],{"type":40,"value":34575},"service",{"type":30,"tag":1046,"props":34577,"children":34578},{"style":1070},[34579],{"type":40,"value":1179},{"type":30,"tag":1046,"props":34581,"children":34582},{"style":1138},[34583],{"type":40,"value":29690},{"type":30,"tag":1046,"props":34585,"children":34586},{"style":1070},[34587],{"type":40,"value":34588},"()).",{"type":30,"tag":1046,"props":34590,"children":34591},{"style":1138},[34592],{"type":40,"value":34593},"thenReturn",{"type":30,"tag":1046,"props":34595,"children":34596},{"style":1070},[34597],{"type":40,"value":1146},{"type":30,"tag":1046,"props":34599,"children":34600},{"style":6886},[34601],{"type":40,"value":34602},"42",{"type":30,"tag":1046,"props":34604,"children":34605},{"style":1070},[34606],{"type":40,"value":1198},{"type":30,"tag":1046,"props":34608,"children":34609},{"class":1048,"line":1168},[34610],{"type":30,"tag":1046,"props":34611,"children":34612},{"emptyLinePlaceholder":13},[34613],{"type":40,"value":1121},{"type":30,"tag":1046,"props":34615,"children":34616},{"class":1048,"line":1201},[34617,34621,34625,34629,34633,34638,34642,34646],{"type":30,"tag":1046,"props":34618,"children":34619},{"style":1138},[34620],{"type":40,"value":31360},{"type":30,"tag":1046,"props":34622,"children":34623},{"style":1070},[34624],{"type":40,"value":1146},{"type":30,"tag":1046,"props":34626,"children":34627},{"style":6886},[34628],{"type":40,"value":34602},{"type":30,"tag":1046,"props":34630,"children":34631},{"style":1070},[34632],{"type":40,"value":2891},{"type":30,"tag":1046,"props":34634,"children":34635},{"style":1105},[34636],{"type":40,"value":34637}," service",{"type":30,"tag":1046,"props":34639,"children":34640},{"style":1070},[34641],{"type":40,"value":1179},{"type":30,"tag":1046,"props":34643,"children":34644},{"style":1138},[34645],{"type":40,"value":29690},{"type":30,"tag":1046,"props":34647,"children":34648},{"style":1070},[34649],{"type":40,"value":3340},{"type":30,"tag":1046,"props":34651,"children":34652},{"class":1048,"line":1210},[34653],{"type":30,"tag":1046,"props":34654,"children":34655},{"style":1070},[34656],{"type":40,"value":1423},{"type":30,"tag":2339,"props":34658,"children":34660},{"id":34659},"_3-outils-pour-le-refactoring",[34661],{"type":40,"value":34662},"3. Outils pour le refactoring",{"type":30,"tag":163,"props":34664,"children":34665},{},[34666],{"type":30,"tag":167,"props":34667,"children":34668},{},[34669,34674],{"type":30,"tag":36,"props":34670,"children":34671},{},[34672],{"type":40,"value":34673},"IntelliJ IDEA",{"type":40,"value":34675},"\nCet IDE dispose de puissants outils de refactoring intégrés. Vous pouvez facilement renommer des variables, extraire des méthodes, ou restructurer du code tout en maintenant sa fonctionnalité intacte.",{"type":30,"tag":43,"props":34677,"children":34678},{},[34679,34683],{"type":30,"tag":36,"props":34680,"children":34681},{},[34682],{"type":40,"value":32584},{"type":40,"value":34684}," Apprenez les raccourcis de refactoring de votre IDE pour gagner du temps et éviter les erreurs manuelles.",{"type":30,"tag":163,"props":34686,"children":34687},{},[34688],{"type":30,"tag":167,"props":34689,"children":34690},{},[34691,34696],{"type":30,"tag":36,"props":34692,"children":34693},{},[34694],{"type":40,"value":34695},"PMD",{"type":40,"value":34697},"\nC’est un autre outil d’analyse statique qui permet de repérer les mauvaises pratiques dans votre code et propose des recommandations pour l’améliorer. Il peut aussi être utilisé pour identifier les endroits où un refactoring est nécessaire.",{"type":30,"tag":84,"props":34699,"children":34700},{},[],{"type":30,"tag":116,"props":34702,"children":34704},{"id":34703},"les-erreurs-à-éviter",[34705],{"type":40,"value":34706},"Les erreurs à éviter",{"type":30,"tag":43,"props":34708,"children":34709},{},[34710],{"type":40,"value":34711},"Voici quelques erreurs communes que de nombreux développeurs commettent en essayant de mettre en œuvre les principes du Software Craftsmanship, et comment les éviter.",{"type":30,"tag":2339,"props":34713,"children":34715},{"id":34714},"_1-négliger-les-tests",[34716],{"type":40,"value":34717},"1. Négliger les tests",{"type":30,"tag":43,"props":34719,"children":34720},{},[34721],{"type":40,"value":34722},"Écrire du code sans tests, ou avec des tests insuffisants, mène à des bugs et à des régressions fréquentes. Un code non testé n’est pas digne d’un artisan logiciel.",{"type":30,"tag":43,"props":34724,"children":34725},{},[34726,34730],{"type":30,"tag":36,"props":34727,"children":34728},{},[34729],{"type":40,"value":18421},{"type":40,"value":34731}," Ne remettez jamais à plus tard l’écriture des tests. Adoptez la règle du \"test d’abord\" avec TDD.",{"type":30,"tag":2339,"props":34733,"children":34735},{"id":34734},"_2-refactoring-sans-filet",[34736],{"type":40,"value":34737},"2. Refactoring sans filet",{"type":30,"tag":43,"props":34739,"children":34740},{},[34741],{"type":40,"value":34742},"Faire du refactoring sans tests est risqué. Si vous modifiez votre code sans garantir qu’il fonctionne toujours comme prévu, vous risquez d’introduire des erreurs difficiles à détecter.",{"type":30,"tag":43,"props":34744,"children":34745},{},[34746,34750],{"type":30,"tag":36,"props":34747,"children":34748},{},[34749],{"type":40,"value":32584},{"type":40,"value":34751}," Avant de refactorer, assurez-vous que chaque fonctionnalité est couverte par des tests automatisés.",{"type":30,"tag":2339,"props":34753,"children":34755},{"id":34754},"_3-code-sans-lisibilité",[34756],{"type":40,"value":34757},"3. Code sans lisibilité",{"type":30,"tag":43,"props":34759,"children":34760},{},[34761],{"type":40,"value":34762},"Même si votre code fonctionne, il doit rester lisible et compréhensible. Utiliser des raccourcis dans le nommage des variables ou écrire des méthodes trop longues nuira à la maintenabilité.",{"type":30,"tag":84,"props":34764,"children":34765},{},[],{"type":30,"tag":116,"props":34767,"children":34769},{"id":34768},"tips-astuces-pour-devenir-un-meilleur-artisan-logiciel",[34770],{"type":40,"value":34771},"Tips & Astuces pour devenir un meilleur artisan logiciel",{"type":30,"tag":1518,"props":34773,"children":34774},{},[34775,34785,34795,34805],{"type":30,"tag":167,"props":34776,"children":34777},{},[34778,34783],{"type":30,"tag":36,"props":34779,"children":34780},{},[34781],{"type":40,"value":34782},"Écrivez du code dont vous serez fier de montrer.",{"type":40,"value":34784},"\nSi vous vous demandez si votre code est suffisamment propre, imaginez devoir l’expliquer à un collègue. S’il semble compliqué à expliquer, c’est un signe que vous devez le simplifier.",{"type":30,"tag":167,"props":34786,"children":34787},{},[34788,34793],{"type":30,"tag":36,"props":34789,"children":34790},{},[34791],{"type":40,"value":34792},"Refactorisez régulièrement, pas seulement en cas de besoin.",{"type":40,"value":34794},"\nLe refactoring est un processus continu. N’attendez pas qu’un code devienne difficile à gérer pour commencer à l’améliorer.",{"type":30,"tag":167,"props":34796,"children":34797},{},[34798,34803],{"type":30,"tag":36,"props":34799,"children":34800},{},[34801],{"type":40,"value":34802},"Participez aux revues de code.",{"type":40,"value":34804},"\nTravailler en équipe et échanger des points de vue sur le code permet d’apprendre et d’améliorer votre propre façon de coder.",{"type":30,"tag":167,"props":34806,"children":34807},{},[34808,34813],{"type":30,"tag":36,"props":34809,"children":34810},{},[34811],{"type":40,"value":34812},"Restez à jour.",{"type":40,"value":34814},"\nLe développement logiciel évolue rapidement. Lisez des blogs, participez à des conférences, et soyez ouvert aux nouvelles idées pour continuer à affiner vos compétences.",{"type":30,"tag":84,"props":34816,"children":34817},{},[],{"type":30,"tag":116,"props":34819,"children":34821},{"id":34820},"faq",[34822],{"type":40,"value":23840},{"type":30,"tag":530,"props":34824,"children":34825},{},[34826,34831],{"type":30,"tag":534,"props":34827,"children":34828},{},[34829],{"type":40,"value":34830},"1. Quelle est la différence entre Software Craftsmanship et les méthodes agiles ?",{"type":30,"tag":43,"props":34832,"children":34833},{},[34834],{"type":40,"value":34835},"Les méthodes agiles se concentrent sur les processus de gestion de projet et l’optimisation des interactions au sein de l’équipe, tandis que le Software Craftsmanship met l’accent sur la qualité du code, la maintenabilité et l’amélioration continue des compétences du développeur.",{"type":30,"tag":530,"props":34837,"children":34838},{},[34839,34844],{"type":30,"tag":534,"props":34840,"children":34841},{},[34842],{"type":40,"value":34843},"2. Est-ce que TDD ralentit le développement ?",{"type":30,"tag":43,"props":34845,"children":34846},{},[34847],{"type":40,"value":34848},"Cela peut sembler ralentir les premières étapes du développement, mais à long terme, TDD permet de gagner du temps en réduisant les bugs et les régressions. De plus, cela vous permet de refactorer sans crainte.",{"type":30,"tag":530,"props":34850,"children":34851},{},[34852,34857],{"type":30,"tag":534,"props":34853,"children":34854},{},[34855],{"type":40,"value":34856},"3. Puis-je appliquer ces principes même si je travaille seul ?",{"type":30,"tag":43,"props":34858,"children":34859},{},[34860],{"type":40,"value":34861},"Absolument ! Même en tant que développeur indépendant, le Software Craftsmanship vous aidera à produire du code de meilleure qualité, plus maintenable et plus évolutif.",{"type":30,"tag":530,"props":34863,"children":34864},{},[34865,34870],{"type":30,"tag":534,"props":34866,"children":34867},{},[34868],{"type":40,"value":34869},"4. Dois-je tout tester ?",{"type":30,"tag":43,"props":34871,"children":34872},{},[34873,34875,34880],{"type":40,"value":34874},"Non, je vous recommande de tester les ",{"type":30,"tag":36,"props":34876,"children":34877},{},[34878],{"type":40,"value":34879},"composants critiques",{"type":40,"value":34881}," et les fonctionnalités essentielles. Toutefois, plus vous testez, plus vous réduisez les risques d’erreurs à long terme.",{"type":30,"tag":84,"props":34883,"children":34884},{},[],{"type":30,"tag":116,"props":34886,"children":34887},{"id":24018},[34888],{"type":40,"value":24024},{"type":30,"tag":43,"props":34890,"children":34891},{},[34892,34893,34897,34899,34903,34904,34908],{"type":40,"value":143},{"type":30,"tag":36,"props":34894,"children":34895},{},[34896],{"type":40,"value":13173},{"type":40,"value":34898}," n'est pas une simple méthodologie, c'est une philosophie qui pousse à devenir un meilleur développeur en se concentrant sur la ",{"type":30,"tag":36,"props":34900,"children":34901},{},[34902],{"type":40,"value":18},{"type":40,"value":32210},{"type":30,"tag":36,"props":34905,"children":34906},{},[34907],{"type":40,"value":32215},{"type":40,"value":34909},". Que vous soyez débutant ou développeur expérimenté, ces principes vous permettront d'améliorer vos compétences et de produire du code plus propre et maintenable.",{"type":30,"tag":43,"props":34911,"children":34912},{},[34913],{"type":40,"value":34914},"En adoptant des outils adaptés, en testant régulièrement votre code, et en pratiquant un refactoring constant, vous pourrez non seulement améliorer la qualité de vos projets, mais aussi renforcer votre expertise en tant que développeur.",{"type":30,"tag":211,"props":34916,"children":34917},{"cta":12975,"href":639,"title":12976,"type":641},[34918],{"type":30,"tag":43,"props":34919,"children":34920},{},[34921],{"type":40,"value":12982},{"type":30,"tag":6456,"props":34923,"children":34924},{},[34925],{"type":40,"value":6460},{"title":8,"searchDepth":675,"depth":675,"links":34927},[34928,34929,34930,34931,34932,34933,34934,34935,34936],{"id":32177,"depth":681,"text":32180},{"id":32233,"depth":681,"text":32236},{"id":32358,"depth":681,"text":32361},{"id":33219,"depth":681,"text":33222},{"id":34347,"depth":681,"text":34350},{"id":34703,"depth":681,"text":34706},{"id":34768,"depth":681,"text":34771},{"id":34820,"depth":681,"text":23840},{"id":24018,"depth":681,"text":24024},"content:fr:dette-technique:software-craftsmanship-principes-exemples-java.md","fr/dette-technique/software-craftsmanship-principes-exemples-java.md","fr/dette-technique/software-craftsmanship-principes-exemples-java",{"_path":12830,"_dir":717,"_draft":7,"_partial":7,"_locale":8,"title":34941,"description":34942,"id":10495,"date":34943,"listed":13,"nocomments":7,"hidden":7,"categories":34944,"tags":34945,"--cover":34946,"readingTime":34947,"body":34952,"_type":709,"_id":41062,"_source":711,"_file":41063,"_stem":41064,"_extension":714},"Principes SOLID en Java, Comprendre et Appliquer pour un Code plus Propre","Découvrez comment appliquer les principes SOLID en Java pour améliorer la structure, la maintenabilité et la modularité de votre code. Avec des exemples...","2024-05-22",[15],[17,18],"covers/articles/solid-principles.jpg",{"text":34948,"minutes":34949,"time":34950,"words":34951},"17 min read",16.295,977700,3259,{"type":27,"children":34953,"toc":41037},[34954,34960,34965,34970,34975,34993,34998,35056,35061,35067,35071,35076,35080,35095,35100,35103,35109,35121,35127,35132,35138,35158,35164,35483,35494,35500,35505,35857,35860,35873,35882,35888,35907,35912,35917,35922,35927,35933,35946,36208,36235,36241,36246,36654,36665,36792,36803,37130,37133,37146,37152,37157,37162,37167,37172,37193,37199,37217,37797,37831,37837,37842,38333,38336,38349,38355,38360,38365,38370,38375,38388,38394,38399,38481,38509,38514,38773,38792,38798,38810,38981,38986,39421,39424,39437,39443,39448,39453,39458,39463,39475,39481,39493,39812,39838,39844,39857,40440,40487,40794,40797,40810,40816,40961,40964,40970,40983,40996,41009,41022,41025,41033],{"type":30,"tag":31,"props":34955,"children":34957},{"id":34956},"principes-solid-les-fondements-de-la-programmation-orientée-objet",[34958],{"type":40,"value":34959},"Principes SOLID : Les fondements de la programmation orientée objet",{"type":30,"tag":43,"props":34961,"children":34962},{},[34963],{"type":40,"value":34964},"Si vous êtes développeur ou étudiant en informatique, vous avez peut-être entendu parler des principes SOLID sans vraiment comprendre comment les appliquer dans vos projets. Et c’est tout à fait normal. Souvent, au début de notre parcours, on se concentre plus sur la fonctionnalité que sur la structure de notre code. Mais à un certain point, les choses commencent à se compliquer : notre code devient de plus en plus difficile à maintenir, les bugs se multiplient, et chaque nouvelle fonctionnalité semble briser quelque chose d'autre.",{"type":30,"tag":43,"props":34966,"children":34967},{},[34968],{"type":40,"value":34969},"C’est ici que les principes SOLID deviennent essentiels. Ces cinq principes de conception orientée objet, formalisés par Robert C. Martin dans \"Agile Software Development: Principles, Patterns, and Practices\", peuvent vous aider à écrire du code plus clair, plus modulable, et surtout, plus facile à maintenir. Et je parle en connaissance de cause. Quand j’ai commencé à les appliquer, mon code est devenu beaucoup plus propre, et j’ai pu développer des fonctionnalités plus rapidement sans avoir à craindre de casser l’existant.",{"type":30,"tag":43,"props":34971,"children":34972},{},[34973],{"type":40,"value":34974},"Dans cet article, vous allez découvrir :",{"type":30,"tag":163,"props":34976,"children":34977},{},[34978,34983,34988],{"type":30,"tag":167,"props":34979,"children":34980},{},[34981],{"type":40,"value":34982},"Ce que sont les principes SOLID.",{"type":30,"tag":167,"props":34984,"children":34985},{},[34986],{"type":40,"value":34987},"Pourquoi ils sont essentiels à une bonne architecture de votre code.",{"type":30,"tag":167,"props":34989,"children":34990},{},[34991],{"type":40,"value":34992},"Comment les appliquer concrètement dans des projets Java avec des exemples clairs.",{"type":30,"tag":43,"props":34994,"children":34995},{},[34996],{"type":40,"value":34997},"Les principes SOLID sont les suivants :",{"type":30,"tag":1518,"props":34999,"children":35000},{},[35001,35012,35023,35034,35045],{"type":30,"tag":167,"props":35002,"children":35003},{},[35004,35010],{"type":30,"tag":75,"props":35005,"children":35007},{"href":35006},"/fr/architecture-craft/principe-srp-software-craftsmanship-exemples-java",[35008],{"type":40,"value":35009},"Le principe de responsabilité unique (SRP)",{"type":40,"value":35011}," : une classe ne doit avoir qu'une seule raison de changer. Cela signifie qu'une classe ne doit avoir qu'une seule responsabilité et qu'elle ne doit pas être surchargée de fonctionnalités.",{"type":30,"tag":167,"props":35013,"children":35014},{},[35015,35021],{"type":30,"tag":75,"props":35016,"children":35018},{"href":35017},"/fr/architecture-craft/principe-ocp-software-craftsmanship-exemples-java",[35019],{"type":40,"value":35020},"Le principe d'ouverture/fermeture (OCP)",{"type":40,"value":35022}," : les entités logicielles (classes, modules, fonctions, etc.) doivent être ouvertes à l'extension mais fermées à la modification. Cela signifie qu'il est possible d'ajouter de nouvelles fonctionnalités sans modifier le code existant.",{"type":30,"tag":167,"props":35024,"children":35025},{},[35026,35032],{"type":30,"tag":75,"props":35027,"children":35029},{"href":35028},"/fr/architecture-craft/principe-substitution-liskov-lsp-java",[35030],{"type":40,"value":35031},"Le principe de substitution de Liskov (LSP)",{"type":40,"value":35033}," : les objets d'une classe dérivée doivent pouvoir être utilisés en remplacement des objets de la classe de base sans altérer la cohérence du programme.",{"type":30,"tag":167,"props":35035,"children":35036},{},[35037,35043],{"type":30,"tag":75,"props":35038,"children":35040},{"href":35039},"/fr/architecture-craft/principe-isp-software-craftsmanship-exemples-java",[35041],{"type":40,"value":35042},"Le principe de ségrégation des interfaces (ISP)",{"type":40,"value":35044}," : les interfaces doivent être spécifiques aux besoins des clients. Cela signifie qu'il vaut mieux avoir plusieurs interfaces spécialisées plutôt qu'une seule interface générale.",{"type":30,"tag":167,"props":35046,"children":35047},{},[35048,35054],{"type":30,"tag":75,"props":35049,"children":35051},{"href":35050},"/fr/architecture-craft/principe-inversion-dependances-dip-java-guide-complet",[35052],{"type":40,"value":35053},"Le principe d'inversion de dépendance (DIP)",{"type":40,"value":35055}," : les modules de haut niveau ne doivent pas dépendre des modules de bas niveau. Les deux doivent dépendre d'abstractions. Cela favorise la modularité et la facilité de test.",{"type":30,"tag":43,"props":35057,"children":35058},{},[35059],{"type":40,"value":35060},"A la fin de cet article, vous aurez une bien meilleure compréhension de ces principes fondamentaux.",{"type":30,"tag":6505,"props":35062,"children":35064},{"id":35063},"comprendre-et-appliquer-les-principes-solid-en-java",[35065],{"type":40,"value":35066},"Comprendre et appliquer les principes SOLID en Java",{"type":30,"tag":43,"props":35068,"children":35069},{},[35070],{"type":40,"value":34964},{"type":30,"tag":43,"props":35072,"children":35073},{},[35074],{"type":40,"value":35075},"C'est ici que les principes SOLID deviennent essentiels. Ces cinq principes de conception orientée objet peuvent vous aider à écrire du code plus clair, plus modulable, et surtout, plus facile à maintenir. Et je parle en connaissance de cause. Quand j’ai commencé à les appliquer, mon code est devenu beaucoup plus propre, et j'ai pu développer des fonctionnalités plus rapidement sans avoir à craindre de casser l’existant.",{"type":30,"tag":43,"props":35077,"children":35078},{},[35079],{"type":40,"value":34974},{"type":30,"tag":163,"props":35081,"children":35082},{},[35083,35087,35091],{"type":30,"tag":167,"props":35084,"children":35085},{},[35086],{"type":40,"value":34982},{"type":30,"tag":167,"props":35088,"children":35089},{},[35090],{"type":40,"value":34987},{"type":30,"tag":167,"props":35092,"children":35093},{},[35094],{"type":40,"value":34992},{"type":30,"tag":43,"props":35096,"children":35097},{},[35098],{"type":40,"value":35099},"Attachez vos ceintures, car à la fin de cet article, vous aurez une bien meilleure compréhension de ces principes fondamentaux.",{"type":30,"tag":84,"props":35101,"children":35102},{},[],{"type":30,"tag":31,"props":35104,"children":35106},{"id":35105},"_1-principe-de-responsabilité-unique-single-responsibility-principle-srp",[35107],{"type":40,"value":35108},"1. Principe de Responsabilité Unique (Single Responsibility Principle - SRP)",{"type":30,"tag":43,"props":35110,"children":35111},{},[35112,35114,35119],{"type":40,"value":35113},"Le principe de responsabilité unique, ou SRP, est probablement l’un des plus simples à comprendre, mais aussi l’un des plus importants. L'idée est qu'une classe ne devrait avoir ",{"type":30,"tag":36,"props":35115,"children":35116},{},[35117],{"type":40,"value":35118},"qu'une seule raison de changer",{"type":40,"value":35120},". En d'autres termes, chaque classe doit se concentrer sur une seule tâche ou responsabilité.",{"type":30,"tag":116,"props":35122,"children":35124},{"id":35123},"pourquoi-cest-important",[35125],{"type":40,"value":35126},"Pourquoi c'est important ?",{"type":30,"tag":43,"props":35128,"children":35129},{},[35130],{"type":40,"value":35131},"Quand une classe a plusieurs responsabilités, cela peut rapidement mener à une situation où un changement dans une partie de la classe impacte d'autres parties qui n'ont rien à voir avec ce changement. Cela rend le code difficile à maintenir et augmente les risques de bugs. En respectant le SRP, vous minimisez le couplage dans votre code et facilitez la maintenance.",{"type":30,"tag":116,"props":35133,"children":35135},{"id":35134},"exemple-concret-en-java",[35136],{"type":40,"value":35137},"Exemple concret en Java",{"type":30,"tag":43,"props":35139,"children":35140},{},[35141,35143,35149,35151,35156],{"type":40,"value":35142},"Imaginons un système qui gère des rapports. Nous avons une classe ",{"type":30,"tag":1042,"props":35144,"children":35146},{"className":35145},[],[35147],{"type":40,"value":35148},"Report",{"type":40,"value":35150}," qui s'occupe à la fois de la génération du rapport et de son enregistrement au format PDF. À première vue, cela peut sembler correct. Cependant, cette classe enfreint le principe de responsabilité unique, car elle fait deux choses différentes : générer un rapport ",{"type":30,"tag":36,"props":35152,"children":35153},{},[35154],{"type":40,"value":35155},"et",{"type":40,"value":35157}," le sauvegarder en PDF.",{"type":30,"tag":2339,"props":35159,"children":35161},{"id":35160},"exemple-sans-srp",[35162],{"type":40,"value":35163},"Exemple sans SRP :",{"type":30,"tag":1035,"props":35165,"children":35167},{"className":1039,"code":35166,"language":1038,"meta":8,"style":8},"public class Report {\n    private String content;\n\n    public Report(String content) {\n        this.content = content;\n    }\n\n    public void generateReport() {\n        // Logique de génération de rapport\n        System.out.println(\"Génération du rapport : \" + content);\n    }\n\n    public void saveToPDF(String filename) {\n        // Logique d'enregistrement en PDF\n        System.out.println(\"Enregistrement du rapport en PDF sous : \" + filename);\n    }\n}\n",[35168],{"type":30,"tag":1042,"props":35169,"children":35170},{"__ignoreMap":8},[35171,35191,35211,35218,35249,35277,35284,35291,35314,35322,35366,35373,35380,35417,35425,35469,35476],{"type":30,"tag":1046,"props":35172,"children":35173},{"class":1048,"line":1049},[35174,35178,35182,35187],{"type":30,"tag":1046,"props":35175,"children":35176},{"style":1053},[35177],{"type":40,"value":1056},{"type":30,"tag":1046,"props":35179,"children":35180},{"style":1053},[35181],{"type":40,"value":1061},{"type":30,"tag":1046,"props":35183,"children":35184},{"style":1064},[35185],{"type":40,"value":35186}," Report",{"type":30,"tag":1046,"props":35188,"children":35189},{"style":1070},[35190],{"type":40,"value":1073},{"type":30,"tag":1046,"props":35192,"children":35193},{"class":1048,"line":675},[35194,35198,35202,35207],{"type":30,"tag":1046,"props":35195,"children":35196},{"style":1053},[35197],{"type":40,"value":1081},{"type":30,"tag":1046,"props":35199,"children":35200},{"style":1084},[35201],{"type":40,"value":2067},{"type":30,"tag":1046,"props":35203,"children":35204},{"style":1105},[35205],{"type":40,"value":35206}," content",{"type":30,"tag":1046,"props":35208,"children":35209},{"style":1070},[35210],{"type":40,"value":1113},{"type":30,"tag":1046,"props":35212,"children":35213},{"class":1048,"line":681},[35214],{"type":30,"tag":1046,"props":35215,"children":35216},{"emptyLinePlaceholder":13},[35217],{"type":40,"value":1121},{"type":30,"tag":1046,"props":35219,"children":35220},{"class":1048,"line":1124},[35221,35225,35229,35233,35237,35241,35245],{"type":30,"tag":1046,"props":35222,"children":35223},{"style":1053},[35224],{"type":40,"value":1130},{"type":30,"tag":1046,"props":35226,"children":35227},{"style":1138},[35228],{"type":40,"value":35186},{"type":30,"tag":1046,"props":35230,"children":35231},{"style":1070},[35232],{"type":40,"value":1146},{"type":30,"tag":1046,"props":35234,"children":35235},{"style":1084},[35236],{"type":40,"value":2882},{"type":30,"tag":1046,"props":35238,"children":35239},{"style":1153},[35240],{"type":40,"value":35206},{"type":30,"tag":1046,"props":35242,"children":35243},{"style":1070},[35244],{"type":40,"value":1161},{"type":30,"tag":1046,"props":35246,"children":35247},{"style":1070},[35248],{"type":40,"value":1073},{"type":30,"tag":1046,"props":35250,"children":35251},{"class":1048,"line":1168},[35252,35256,35260,35265,35269,35273],{"type":30,"tag":1046,"props":35253,"children":35254},{"style":1780},[35255],{"type":40,"value":1783},{"type":30,"tag":1046,"props":35257,"children":35258},{"style":1070},[35259],{"type":40,"value":1179},{"type":30,"tag":1046,"props":35261,"children":35262},{"style":1105},[35263],{"type":40,"value":35264},"content ",{"type":30,"tag":1046,"props":35266,"children":35267},{"style":1795},[35268],{"type":40,"value":1798},{"type":30,"tag":1046,"props":35270,"children":35271},{"style":1105},[35272],{"type":40,"value":35206},{"type":30,"tag":1046,"props":35274,"children":35275},{"style":1070},[35276],{"type":40,"value":1113},{"type":30,"tag":1046,"props":35278,"children":35279},{"class":1048,"line":1201},[35280],{"type":30,"tag":1046,"props":35281,"children":35282},{"style":1070},[35283],{"type":40,"value":1207},{"type":30,"tag":1046,"props":35285,"children":35286},{"class":1048,"line":1210},[35287],{"type":30,"tag":1046,"props":35288,"children":35289},{"emptyLinePlaceholder":13},[35290],{"type":40,"value":1121},{"type":30,"tag":1046,"props":35292,"children":35293},{"class":1048,"line":1218},[35294,35298,35302,35306,35310],{"type":30,"tag":1046,"props":35295,"children":35296},{"style":1053},[35297],{"type":40,"value":1130},{"type":30,"tag":1046,"props":35299,"children":35300},{"style":1053},[35301],{"type":40,"value":1135},{"type":30,"tag":1046,"props":35303,"children":35304},{"style":1138},[35305],{"type":40,"value":24359},{"type":30,"tag":1046,"props":35307,"children":35308},{"style":1070},[35309],{"type":40,"value":1320},{"type":30,"tag":1046,"props":35311,"children":35312},{"style":1070},[35313],{"type":40,"value":1073},{"type":30,"tag":1046,"props":35315,"children":35316},{"class":1048,"line":1255},[35317],{"type":30,"tag":1046,"props":35318,"children":35319},{"style":3961},[35320],{"type":40,"value":35321},"        // Logique de génération de rapport\n",{"type":30,"tag":1046,"props":35323,"children":35324},{"class":1048,"line":1284},[35325,35329,35333,35337,35341,35345,35349,35354,35358,35362],{"type":30,"tag":1046,"props":35326,"children":35327},{"style":1105},[35328],{"type":40,"value":12555},{"type":30,"tag":1046,"props":35330,"children":35331},{"style":1070},[35332],{"type":40,"value":1179},{"type":30,"tag":1046,"props":35334,"children":35335},{"style":1105},[35336],{"type":40,"value":12564},{"type":30,"tag":1046,"props":35338,"children":35339},{"style":1070},[35340],{"type":40,"value":1179},{"type":30,"tag":1046,"props":35342,"children":35343},{"style":1138},[35344],{"type":40,"value":12573},{"type":30,"tag":1046,"props":35346,"children":35347},{"style":1070},[35348],{"type":40,"value":1146},{"type":30,"tag":1046,"props":35350,"children":35351},{"style":1675},[35352],{"type":40,"value":35353},"\"Génération du rapport : \"",{"type":30,"tag":1046,"props":35355,"children":35356},{"style":1795},[35357],{"type":40,"value":7261},{"type":30,"tag":1046,"props":35359,"children":35360},{"style":1105},[35361],{"type":40,"value":35206},{"type":30,"tag":1046,"props":35363,"children":35364},{"style":1070},[35365],{"type":40,"value":1198},{"type":30,"tag":1046,"props":35367,"children":35368},{"class":1048,"line":1292},[35369],{"type":30,"tag":1046,"props":35370,"children":35371},{"style":1070},[35372],{"type":40,"value":1207},{"type":30,"tag":1046,"props":35374,"children":35375},{"class":1048,"line":1300},[35376],{"type":30,"tag":1046,"props":35377,"children":35378},{"emptyLinePlaceholder":13},[35379],{"type":40,"value":1121},{"type":30,"tag":1046,"props":35381,"children":35382},{"class":1048,"line":1327},[35383,35387,35391,35396,35400,35404,35409,35413],{"type":30,"tag":1046,"props":35384,"children":35385},{"style":1053},[35386],{"type":40,"value":1130},{"type":30,"tag":1046,"props":35388,"children":35389},{"style":1053},[35390],{"type":40,"value":1135},{"type":30,"tag":1046,"props":35392,"children":35393},{"style":1138},[35394],{"type":40,"value":35395}," saveToPDF",{"type":30,"tag":1046,"props":35397,"children":35398},{"style":1070},[35399],{"type":40,"value":1146},{"type":30,"tag":1046,"props":35401,"children":35402},{"style":1084},[35403],{"type":40,"value":2882},{"type":30,"tag":1046,"props":35405,"children":35406},{"style":1153},[35407],{"type":40,"value":35408}," filename",{"type":30,"tag":1046,"props":35410,"children":35411},{"style":1070},[35412],{"type":40,"value":1161},{"type":30,"tag":1046,"props":35414,"children":35415},{"style":1070},[35416],{"type":40,"value":1073},{"type":30,"tag":1046,"props":35418,"children":35419},{"class":1048,"line":1354},[35420],{"type":30,"tag":1046,"props":35421,"children":35422},{"style":3961},[35423],{"type":40,"value":35424},"        // Logique d'enregistrement en PDF\n",{"type":30,"tag":1046,"props":35426,"children":35427},{"class":1048,"line":1391},[35428,35432,35436,35440,35444,35448,35452,35457,35461,35465],{"type":30,"tag":1046,"props":35429,"children":35430},{"style":1105},[35431],{"type":40,"value":12555},{"type":30,"tag":1046,"props":35433,"children":35434},{"style":1070},[35435],{"type":40,"value":1179},{"type":30,"tag":1046,"props":35437,"children":35438},{"style":1105},[35439],{"type":40,"value":12564},{"type":30,"tag":1046,"props":35441,"children":35442},{"style":1070},[35443],{"type":40,"value":1179},{"type":30,"tag":1046,"props":35445,"children":35446},{"style":1138},[35447],{"type":40,"value":12573},{"type":30,"tag":1046,"props":35449,"children":35450},{"style":1070},[35451],{"type":40,"value":1146},{"type":30,"tag":1046,"props":35453,"children":35454},{"style":1675},[35455],{"type":40,"value":35456},"\"Enregistrement du rapport en PDF sous : \"",{"type":30,"tag":1046,"props":35458,"children":35459},{"style":1795},[35460],{"type":40,"value":7261},{"type":30,"tag":1046,"props":35462,"children":35463},{"style":1105},[35464],{"type":40,"value":35408},{"type":30,"tag":1046,"props":35466,"children":35467},{"style":1070},[35468],{"type":40,"value":1198},{"type":30,"tag":1046,"props":35470,"children":35471},{"class":1048,"line":1409},[35472],{"type":30,"tag":1046,"props":35473,"children":35474},{"style":1070},[35475],{"type":40,"value":1207},{"type":30,"tag":1046,"props":35477,"children":35478},{"class":1048,"line":1417},[35479],{"type":30,"tag":1046,"props":35480,"children":35481},{"style":1070},[35482],{"type":40,"value":1423},{"type":30,"tag":43,"props":35484,"children":35485},{},[35486,35487,35492],{"type":40,"value":24558},{"type":30,"tag":1042,"props":35488,"children":35490},{"className":35489},[],[35491],{"type":40,"value":35148},{"type":40,"value":35493}," enfreint le SRP. Elle est responsable de deux tâches distinctes : générer un rapport et l'enregistrer sous forme de fichier PDF. Si un jour on décide de changer la méthode de génération des rapports ou d'enregistrer le fichier dans un autre format (par exemple, JSON), il faudra modifier cette classe, ce qui peut introduire des bugs ou rendre les modifications plus difficiles.",{"type":30,"tag":2339,"props":35495,"children":35497},{"id":35496},"exemple-avec-srp-appliqué",[35498],{"type":40,"value":35499},"Exemple avec SRP appliqué :",{"type":30,"tag":43,"props":35501,"children":35502},{},[35503],{"type":40,"value":35504},"Pour corriger cela, on peut diviser les responsabilités en deux classes distinctes.",{"type":30,"tag":1035,"props":35506,"children":35508},{"className":1039,"code":35507,"language":1038,"meta":8,"style":8},"// Classe qui se charge uniquement de la génération du rapport\npublic class Report {\n    private String content;\n\n    public Report(String content) {\n        this.content = content;\n    }\n\n    public void generateReport() {\n        System.out.println(\"Génération du rapport : \" + content);\n    }\n}\n\n// Classe qui se charge uniquement de l'enregistrement du rapport\npublic class ReportSaver {\n    public void saveToPDF(Report report, String filename) {\n        System.out.println(\"Enregistrement du rapport en PDF sous : \" + filename);\n    }\n}\n",[35509],{"type":30,"tag":1042,"props":35510,"children":35511},{"__ignoreMap":8},[35512,35520,35539,35558,35565,35596,35623,35630,35637,35660,35703,35710,35717,35724,35732,35752,35800,35843,35850],{"type":30,"tag":1046,"props":35513,"children":35514},{"class":1048,"line":1049},[35515],{"type":30,"tag":1046,"props":35516,"children":35517},{"style":3961},[35518],{"type":40,"value":35519},"// Classe qui se charge uniquement de la génération du rapport\n",{"type":30,"tag":1046,"props":35521,"children":35522},{"class":1048,"line":675},[35523,35527,35531,35535],{"type":30,"tag":1046,"props":35524,"children":35525},{"style":1053},[35526],{"type":40,"value":1056},{"type":30,"tag":1046,"props":35528,"children":35529},{"style":1053},[35530],{"type":40,"value":1061},{"type":30,"tag":1046,"props":35532,"children":35533},{"style":1064},[35534],{"type":40,"value":35186},{"type":30,"tag":1046,"props":35536,"children":35537},{"style":1070},[35538],{"type":40,"value":1073},{"type":30,"tag":1046,"props":35540,"children":35541},{"class":1048,"line":681},[35542,35546,35550,35554],{"type":30,"tag":1046,"props":35543,"children":35544},{"style":1053},[35545],{"type":40,"value":1081},{"type":30,"tag":1046,"props":35547,"children":35548},{"style":1084},[35549],{"type":40,"value":2067},{"type":30,"tag":1046,"props":35551,"children":35552},{"style":1105},[35553],{"type":40,"value":35206},{"type":30,"tag":1046,"props":35555,"children":35556},{"style":1070},[35557],{"type":40,"value":1113},{"type":30,"tag":1046,"props":35559,"children":35560},{"class":1048,"line":1124},[35561],{"type":30,"tag":1046,"props":35562,"children":35563},{"emptyLinePlaceholder":13},[35564],{"type":40,"value":1121},{"type":30,"tag":1046,"props":35566,"children":35567},{"class":1048,"line":1168},[35568,35572,35576,35580,35584,35588,35592],{"type":30,"tag":1046,"props":35569,"children":35570},{"style":1053},[35571],{"type":40,"value":1130},{"type":30,"tag":1046,"props":35573,"children":35574},{"style":1138},[35575],{"type":40,"value":35186},{"type":30,"tag":1046,"props":35577,"children":35578},{"style":1070},[35579],{"type":40,"value":1146},{"type":30,"tag":1046,"props":35581,"children":35582},{"style":1084},[35583],{"type":40,"value":2882},{"type":30,"tag":1046,"props":35585,"children":35586},{"style":1153},[35587],{"type":40,"value":35206},{"type":30,"tag":1046,"props":35589,"children":35590},{"style":1070},[35591],{"type":40,"value":1161},{"type":30,"tag":1046,"props":35593,"children":35594},{"style":1070},[35595],{"type":40,"value":1073},{"type":30,"tag":1046,"props":35597,"children":35598},{"class":1048,"line":1201},[35599,35603,35607,35611,35615,35619],{"type":30,"tag":1046,"props":35600,"children":35601},{"style":1780},[35602],{"type":40,"value":1783},{"type":30,"tag":1046,"props":35604,"children":35605},{"style":1070},[35606],{"type":40,"value":1179},{"type":30,"tag":1046,"props":35608,"children":35609},{"style":1105},[35610],{"type":40,"value":35264},{"type":30,"tag":1046,"props":35612,"children":35613},{"style":1795},[35614],{"type":40,"value":1798},{"type":30,"tag":1046,"props":35616,"children":35617},{"style":1105},[35618],{"type":40,"value":35206},{"type":30,"tag":1046,"props":35620,"children":35621},{"style":1070},[35622],{"type":40,"value":1113},{"type":30,"tag":1046,"props":35624,"children":35625},{"class":1048,"line":1210},[35626],{"type":30,"tag":1046,"props":35627,"children":35628},{"style":1070},[35629],{"type":40,"value":1207},{"type":30,"tag":1046,"props":35631,"children":35632},{"class":1048,"line":1218},[35633],{"type":30,"tag":1046,"props":35634,"children":35635},{"emptyLinePlaceholder":13},[35636],{"type":40,"value":1121},{"type":30,"tag":1046,"props":35638,"children":35639},{"class":1048,"line":1255},[35640,35644,35648,35652,35656],{"type":30,"tag":1046,"props":35641,"children":35642},{"style":1053},[35643],{"type":40,"value":1130},{"type":30,"tag":1046,"props":35645,"children":35646},{"style":1053},[35647],{"type":40,"value":1135},{"type":30,"tag":1046,"props":35649,"children":35650},{"style":1138},[35651],{"type":40,"value":24359},{"type":30,"tag":1046,"props":35653,"children":35654},{"style":1070},[35655],{"type":40,"value":1320},{"type":30,"tag":1046,"props":35657,"children":35658},{"style":1070},[35659],{"type":40,"value":1073},{"type":30,"tag":1046,"props":35661,"children":35662},{"class":1048,"line":1284},[35663,35667,35671,35675,35679,35683,35687,35691,35695,35699],{"type":30,"tag":1046,"props":35664,"children":35665},{"style":1105},[35666],{"type":40,"value":12555},{"type":30,"tag":1046,"props":35668,"children":35669},{"style":1070},[35670],{"type":40,"value":1179},{"type":30,"tag":1046,"props":35672,"children":35673},{"style":1105},[35674],{"type":40,"value":12564},{"type":30,"tag":1046,"props":35676,"children":35677},{"style":1070},[35678],{"type":40,"value":1179},{"type":30,"tag":1046,"props":35680,"children":35681},{"style":1138},[35682],{"type":40,"value":12573},{"type":30,"tag":1046,"props":35684,"children":35685},{"style":1070},[35686],{"type":40,"value":1146},{"type":30,"tag":1046,"props":35688,"children":35689},{"style":1675},[35690],{"type":40,"value":35353},{"type":30,"tag":1046,"props":35692,"children":35693},{"style":1795},[35694],{"type":40,"value":7261},{"type":30,"tag":1046,"props":35696,"children":35697},{"style":1105},[35698],{"type":40,"value":35206},{"type":30,"tag":1046,"props":35700,"children":35701},{"style":1070},[35702],{"type":40,"value":1198},{"type":30,"tag":1046,"props":35704,"children":35705},{"class":1048,"line":1292},[35706],{"type":30,"tag":1046,"props":35707,"children":35708},{"style":1070},[35709],{"type":40,"value":1207},{"type":30,"tag":1046,"props":35711,"children":35712},{"class":1048,"line":1300},[35713],{"type":30,"tag":1046,"props":35714,"children":35715},{"style":1070},[35716],{"type":40,"value":1423},{"type":30,"tag":1046,"props":35718,"children":35719},{"class":1048,"line":1327},[35720],{"type":30,"tag":1046,"props":35721,"children":35722},{"emptyLinePlaceholder":13},[35723],{"type":40,"value":1121},{"type":30,"tag":1046,"props":35725,"children":35726},{"class":1048,"line":1354},[35727],{"type":30,"tag":1046,"props":35728,"children":35729},{"style":3961},[35730],{"type":40,"value":35731},"// Classe qui se charge uniquement de l'enregistrement du rapport\n",{"type":30,"tag":1046,"props":35733,"children":35734},{"class":1048,"line":1391},[35735,35739,35743,35748],{"type":30,"tag":1046,"props":35736,"children":35737},{"style":1053},[35738],{"type":40,"value":1056},{"type":30,"tag":1046,"props":35740,"children":35741},{"style":1053},[35742],{"type":40,"value":1061},{"type":30,"tag":1046,"props":35744,"children":35745},{"style":1064},[35746],{"type":40,"value":35747}," ReportSaver",{"type":30,"tag":1046,"props":35749,"children":35750},{"style":1070},[35751],{"type":40,"value":1073},{"type":30,"tag":1046,"props":35753,"children":35754},{"class":1048,"line":1409},[35755,35759,35763,35767,35771,35775,35780,35784,35788,35792,35796],{"type":30,"tag":1046,"props":35756,"children":35757},{"style":1053},[35758],{"type":40,"value":1130},{"type":30,"tag":1046,"props":35760,"children":35761},{"style":1053},[35762],{"type":40,"value":1135},{"type":30,"tag":1046,"props":35764,"children":35765},{"style":1138},[35766],{"type":40,"value":35395},{"type":30,"tag":1046,"props":35768,"children":35769},{"style":1070},[35770],{"type":40,"value":1146},{"type":30,"tag":1046,"props":35772,"children":35773},{"style":1084},[35774],{"type":40,"value":35148},{"type":30,"tag":1046,"props":35776,"children":35777},{"style":1153},[35778],{"type":40,"value":35779}," report",{"type":30,"tag":1046,"props":35781,"children":35782},{"style":1070},[35783],{"type":40,"value":2891},{"type":30,"tag":1046,"props":35785,"children":35786},{"style":1084},[35787],{"type":40,"value":2067},{"type":30,"tag":1046,"props":35789,"children":35790},{"style":1153},[35791],{"type":40,"value":35408},{"type":30,"tag":1046,"props":35793,"children":35794},{"style":1070},[35795],{"type":40,"value":1161},{"type":30,"tag":1046,"props":35797,"children":35798},{"style":1070},[35799],{"type":40,"value":1073},{"type":30,"tag":1046,"props":35801,"children":35802},{"class":1048,"line":1417},[35803,35807,35811,35815,35819,35823,35827,35831,35835,35839],{"type":30,"tag":1046,"props":35804,"children":35805},{"style":1105},[35806],{"type":40,"value":12555},{"type":30,"tag":1046,"props":35808,"children":35809},{"style":1070},[35810],{"type":40,"value":1179},{"type":30,"tag":1046,"props":35812,"children":35813},{"style":1105},[35814],{"type":40,"value":12564},{"type":30,"tag":1046,"props":35816,"children":35817},{"style":1070},[35818],{"type":40,"value":1179},{"type":30,"tag":1046,"props":35820,"children":35821},{"style":1138},[35822],{"type":40,"value":12573},{"type":30,"tag":1046,"props":35824,"children":35825},{"style":1070},[35826],{"type":40,"value":1146},{"type":30,"tag":1046,"props":35828,"children":35829},{"style":1675},[35830],{"type":40,"value":35456},{"type":30,"tag":1046,"props":35832,"children":35833},{"style":1795},[35834],{"type":40,"value":7261},{"type":30,"tag":1046,"props":35836,"children":35837},{"style":1105},[35838],{"type":40,"value":35408},{"type":30,"tag":1046,"props":35840,"children":35841},{"style":1070},[35842],{"type":40,"value":1198},{"type":30,"tag":1046,"props":35844,"children":35845},{"class":1048,"line":2023},[35846],{"type":30,"tag":1046,"props":35847,"children":35848},{"style":1070},[35849],{"type":40,"value":1207},{"type":30,"tag":1046,"props":35851,"children":35852},{"class":1048,"line":2083},[35853],{"type":30,"tag":1046,"props":35854,"children":35855},{"style":1070},[35856],{"type":40,"value":1423},{"type":30,"tag":84,"props":35858,"children":35859},{},[],{"type":30,"tag":19673,"props":35861,"children":35862},{"type":19675},[35863],{"type":30,"tag":43,"props":35864,"children":35865},{},[35866,35871],{"type":30,"tag":36,"props":35867,"children":35868},{},[35869],{"type":40,"value":35870},"Gardez vos classes petites",{"type":40,"value":35872},". Si vous trouvez qu'une classe fait plusieurs choses non liées, envisagez de la diviser en plusieurs classes plus petites. Cela rendra le code plus lisible et plus facile à maintenir.",{"type":30,"tag":211,"props":35874,"children":35876},{"cta":213,"href":214,"title":35875,"type":216},"Votre code est si couplé que changer quelque chose à un endroit casse tout le reste ?",[35877],{"type":30,"tag":43,"props":35878,"children":35879},{},[35880],{"type":40,"value":35881},"Les tests sont impossibles à écrire parce que tout dépend de tout, chaque refactoring est un projet en soi, et votre équipe a peur de toucher au code legacy. Réservons 30 minutes pour évaluer le niveau de couplage de votre architecture et prioriser les refactorings à fort impact.",{"type":30,"tag":31,"props":35883,"children":35885},{"id":35884},"_2-principe-ouvertfermé-openclosed-principle-ocp",[35886],{"type":40,"value":35887},"2. Principe Ouvert/Fermé (Open/Closed Principle - OCP)",{"type":30,"tag":43,"props":35889,"children":35890},{},[35891,35893,35898,35900,35905],{"type":40,"value":35892},"Le principe Ouvert/Fermé stipule qu’une entité (classe, module, fonction, etc.) doit être ",{"type":30,"tag":36,"props":35894,"children":35895},{},[35896],{"type":40,"value":35897},"ouverte à l’extension",{"type":40,"value":35899}," mais ",{"type":30,"tag":36,"props":35901,"children":35902},{},[35903],{"type":40,"value":35904},"fermée à la modification",{"type":40,"value":35906},". Cela signifie qu’il devrait être possible d’ajouter de nouvelles fonctionnalités sans avoir à modifier le code existant. En d’autres termes, je vous recommande de concevoir le code de manière à ce qu’il puisse évoluer par des extensions plutôt que par des modifications internes.",{"type":30,"tag":116,"props":35908,"children":35910},{"id":35909},"pourquoi-cest-important-1",[35911],{"type":40,"value":35126},{"type":30,"tag":43,"props":35913,"children":35914},{},[35915],{"type":40,"value":35916},"En suivant ce principe, vous évitez de toucher au code stable et déjà testé, minimisant ainsi les risques d'introduire des bugs. Cela permet aussi d'ajouter de nouvelles fonctionnalités plus facilement et rend votre code plus flexible à long terme.",{"type":30,"tag":116,"props":35918,"children":35920},{"id":35919},"exemple-concret-en-java-1",[35921],{"type":40,"value":35137},{"type":30,"tag":43,"props":35923,"children":35924},{},[35925],{"type":40,"value":35926},"Imaginons que nous travaillions sur un système de paiement qui supporte plusieurs méthodes de paiement comme la carte bancaire et PayPal. Si l’on veut ajouter une nouvelle méthode de paiement, par exemple via un portefeuille électronique (e-wallet), on ne veut pas devoir modifier chaque partie du code. Cela enfreindrait le principe OCP.",{"type":30,"tag":2339,"props":35928,"children":35930},{"id":35929},"exemple-sans-ocp",[35931],{"type":40,"value":35932},"Exemple sans OCP :",{"type":30,"tag":43,"props":35934,"children":35935},{},[35936,35938,35944],{"type":40,"value":35937},"Voici une implémentation où la classe ",{"type":30,"tag":1042,"props":35939,"children":35941},{"className":35940},[],[35942],{"type":40,"value":35943},"PaymentProcessor",{"type":40,"value":35945}," gère directement les différentes méthodes de paiement :",{"type":30,"tag":1035,"props":35947,"children":35949},{"className":1039,"code":35948,"language":1038,"meta":8,"style":8},"public class PaymentProcessor {\n    public void processPayment(String type) {\n        if (type.equals(\"creditCard\")) {\n            // Traitement paiement par carte bancaire\n            System.out.println(\"Paiement par carte bancaire\");\n        } else if (type.equals(\"paypal\")) {\n            // Traitement paiement PayPal\n            System.out.println(\"Paiement via PayPal\");\n        }\n    }\n}\n",[35950],{"type":30,"tag":1042,"props":35951,"children":35952},{"__ignoreMap":8},[35953,35973,36009,36050,36058,36094,36143,36151,36187,36194,36201],{"type":30,"tag":1046,"props":35954,"children":35955},{"class":1048,"line":1049},[35956,35960,35964,35969],{"type":30,"tag":1046,"props":35957,"children":35958},{"style":1053},[35959],{"type":40,"value":1056},{"type":30,"tag":1046,"props":35961,"children":35962},{"style":1053},[35963],{"type":40,"value":1061},{"type":30,"tag":1046,"props":35965,"children":35966},{"style":1064},[35967],{"type":40,"value":35968}," PaymentProcessor",{"type":30,"tag":1046,"props":35970,"children":35971},{"style":1070},[35972],{"type":40,"value":1073},{"type":30,"tag":1046,"props":35974,"children":35975},{"class":1048,"line":675},[35976,35980,35984,35988,35992,35996,36001,36005],{"type":30,"tag":1046,"props":35977,"children":35978},{"style":1053},[35979],{"type":40,"value":1130},{"type":30,"tag":1046,"props":35981,"children":35982},{"style":1053},[35983],{"type":40,"value":1135},{"type":30,"tag":1046,"props":35985,"children":35986},{"style":1138},[35987],{"type":40,"value":20317},{"type":30,"tag":1046,"props":35989,"children":35990},{"style":1070},[35991],{"type":40,"value":1146},{"type":30,"tag":1046,"props":35993,"children":35994},{"style":1084},[35995],{"type":40,"value":2882},{"type":30,"tag":1046,"props":35997,"children":35998},{"style":1153},[35999],{"type":40,"value":36000}," type",{"type":30,"tag":1046,"props":36002,"children":36003},{"style":1070},[36004],{"type":40,"value":1161},{"type":30,"tag":1046,"props":36006,"children":36007},{"style":1070},[36008],{"type":40,"value":1073},{"type":30,"tag":1046,"props":36010,"children":36011},{"class":1048,"line":681},[36012,36016,36020,36025,36029,36033,36037,36042,36046],{"type":30,"tag":1046,"props":36013,"children":36014},{"style":1053},[36015],{"type":40,"value":11856},{"type":30,"tag":1046,"props":36017,"children":36018},{"style":1070},[36019],{"type":40,"value":11861},{"type":30,"tag":1046,"props":36021,"children":36022},{"style":1105},[36023],{"type":40,"value":36024},"type",{"type":30,"tag":1046,"props":36026,"children":36027},{"style":1070},[36028],{"type":40,"value":1179},{"type":30,"tag":1046,"props":36030,"children":36031},{"style":1138},[36032],{"type":40,"value":17741},{"type":30,"tag":1046,"props":36034,"children":36035},{"style":1070},[36036],{"type":40,"value":1146},{"type":30,"tag":1046,"props":36038,"children":36039},{"style":1675},[36040],{"type":40,"value":36041},"\"creditCard\"",{"type":30,"tag":1046,"props":36043,"children":36044},{"style":1070},[36045],{"type":40,"value":9913},{"type":30,"tag":1046,"props":36047,"children":36048},{"style":1070},[36049],{"type":40,"value":1073},{"type":30,"tag":1046,"props":36051,"children":36052},{"class":1048,"line":1124},[36053],{"type":30,"tag":1046,"props":36054,"children":36055},{"style":3961},[36056],{"type":40,"value":36057},"            // Traitement paiement par carte bancaire\n",{"type":30,"tag":1046,"props":36059,"children":36060},{"class":1048,"line":1168},[36061,36065,36069,36073,36077,36081,36085,36090],{"type":30,"tag":1046,"props":36062,"children":36063},{"style":1105},[36064],{"type":40,"value":33428},{"type":30,"tag":1046,"props":36066,"children":36067},{"style":1070},[36068],{"type":40,"value":1179},{"type":30,"tag":1046,"props":36070,"children":36071},{"style":1105},[36072],{"type":40,"value":12564},{"type":30,"tag":1046,"props":36074,"children":36075},{"style":1070},[36076],{"type":40,"value":1179},{"type":30,"tag":1046,"props":36078,"children":36079},{"style":1138},[36080],{"type":40,"value":12573},{"type":30,"tag":1046,"props":36082,"children":36083},{"style":1070},[36084],{"type":40,"value":1146},{"type":30,"tag":1046,"props":36086,"children":36087},{"style":1675},[36088],{"type":40,"value":36089},"\"Paiement par carte bancaire\"",{"type":30,"tag":1046,"props":36091,"children":36092},{"style":1070},[36093],{"type":40,"value":1198},{"type":30,"tag":1046,"props":36095,"children":36096},{"class":1048,"line":1201},[36097,36101,36105,36110,36114,36118,36122,36126,36130,36135,36139],{"type":30,"tag":1046,"props":36098,"children":36099},{"style":1070},[36100],{"type":40,"value":31663},{"type":30,"tag":1046,"props":36102,"children":36103},{"style":1053},[36104],{"type":40,"value":19948},{"type":30,"tag":1046,"props":36106,"children":36107},{"style":1053},[36108],{"type":40,"value":36109}," if",{"type":30,"tag":1046,"props":36111,"children":36112},{"style":1070},[36113],{"type":40,"value":11861},{"type":30,"tag":1046,"props":36115,"children":36116},{"style":1105},[36117],{"type":40,"value":36024},{"type":30,"tag":1046,"props":36119,"children":36120},{"style":1070},[36121],{"type":40,"value":1179},{"type":30,"tag":1046,"props":36123,"children":36124},{"style":1138},[36125],{"type":40,"value":17741},{"type":30,"tag":1046,"props":36127,"children":36128},{"style":1070},[36129],{"type":40,"value":1146},{"type":30,"tag":1046,"props":36131,"children":36132},{"style":1675},[36133],{"type":40,"value":36134},"\"paypal\"",{"type":30,"tag":1046,"props":36136,"children":36137},{"style":1070},[36138],{"type":40,"value":9913},{"type":30,"tag":1046,"props":36140,"children":36141},{"style":1070},[36142],{"type":40,"value":1073},{"type":30,"tag":1046,"props":36144,"children":36145},{"class":1048,"line":1210},[36146],{"type":30,"tag":1046,"props":36147,"children":36148},{"style":3961},[36149],{"type":40,"value":36150},"            // Traitement paiement PayPal\n",{"type":30,"tag":1046,"props":36152,"children":36153},{"class":1048,"line":1218},[36154,36158,36162,36166,36170,36174,36178,36183],{"type":30,"tag":1046,"props":36155,"children":36156},{"style":1105},[36157],{"type":40,"value":33428},{"type":30,"tag":1046,"props":36159,"children":36160},{"style":1070},[36161],{"type":40,"value":1179},{"type":30,"tag":1046,"props":36163,"children":36164},{"style":1105},[36165],{"type":40,"value":12564},{"type":30,"tag":1046,"props":36167,"children":36168},{"style":1070},[36169],{"type":40,"value":1179},{"type":30,"tag":1046,"props":36171,"children":36172},{"style":1138},[36173],{"type":40,"value":12573},{"type":30,"tag":1046,"props":36175,"children":36176},{"style":1070},[36177],{"type":40,"value":1146},{"type":30,"tag":1046,"props":36179,"children":36180},{"style":1675},[36181],{"type":40,"value":36182},"\"Paiement via PayPal\"",{"type":30,"tag":1046,"props":36184,"children":36185},{"style":1070},[36186],{"type":40,"value":1198},{"type":30,"tag":1046,"props":36188,"children":36189},{"class":1048,"line":1255},[36190],{"type":30,"tag":1046,"props":36191,"children":36192},{"style":1070},[36193],{"type":40,"value":11922},{"type":30,"tag":1046,"props":36195,"children":36196},{"class":1048,"line":1284},[36197],{"type":30,"tag":1046,"props":36198,"children":36199},{"style":1070},[36200],{"type":40,"value":1207},{"type":30,"tag":1046,"props":36202,"children":36203},{"class":1048,"line":1292},[36204],{"type":30,"tag":1046,"props":36205,"children":36206},{"style":1070},[36207],{"type":40,"value":1423},{"type":30,"tag":43,"props":36209,"children":36210},{},[36211,36213,36218,36220,36225,36227,36233],{"type":40,"value":36212},"Dans ce cas, si l'on veut ajouter un nouveau moyen de paiement, comme un portefeuille électronique, il faudrait ",{"type":30,"tag":36,"props":36214,"children":36215},{},[36216],{"type":40,"value":36217},"modifier la classe",{"type":40,"value":36219}," ",{"type":30,"tag":1042,"props":36221,"children":36223},{"className":36222},[],[36224],{"type":40,"value":35943},{"type":40,"value":36226}," en ajoutant une nouvelle condition ",{"type":30,"tag":1042,"props":36228,"children":36230},{"className":36229},[],[36231],{"type":40,"value":36232},"else if",{"type":40,"value":36234},". Cela enfreint le principe OCP, car on doit toucher au code existant pour ajouter une nouvelle fonctionnalité.",{"type":30,"tag":2339,"props":36236,"children":36238},{"id":36237},"exemple-avec-ocp-appliqué",[36239],{"type":40,"value":36240},"Exemple avec OCP appliqué :",{"type":30,"tag":43,"props":36242,"children":36243},{},[36244],{"type":40,"value":36245},"Voyons maintenant une solution où la classe est ouverte à l'extension mais fermée à la modification en utilisant l’héritage et le polymorphisme.",{"type":30,"tag":1035,"props":36247,"children":36249},{"className":1039,"code":36248,"language":1038,"meta":8,"style":8},"// Interface de stratégie de paiement\npublic interface PaymentMethod {\n    void processPayment();\n}\n\n// Implémentation pour la carte bancaire\npublic class CreditCardPayment implements PaymentMethod {\n    @Override\n    public void processPayment() {\n        System.out.println(\"Paiement par carte bancaire\");\n    }\n}\n\n// Implémentation pour PayPal\npublic class PayPalPayment implements PaymentMethod {\n    @Override\n    public void processPayment() {\n        System.out.println(\"Paiement via PayPal\");\n    }\n}\n\n// Classe de traitement des paiements qui respecte OCP\npublic class PaymentProcessor {\n    public void processPayment(PaymentMethod paymentMethod) {\n        paymentMethod.processPayment();\n    }\n}\n",[36250],{"type":30,"tag":1042,"props":36251,"children":36252},{"__ignoreMap":8},[36253,36261,36280,36295,36302,36309,36317,36344,36355,36378,36413,36420,36427,36434,36442,36469,36480,36503,36538,36545,36552,36559,36567,36586,36621,36640,36647],{"type":30,"tag":1046,"props":36254,"children":36255},{"class":1048,"line":1049},[36256],{"type":30,"tag":1046,"props":36257,"children":36258},{"style":3961},[36259],{"type":40,"value":36260},"// Interface de stratégie de paiement\n",{"type":30,"tag":1046,"props":36262,"children":36263},{"class":1048,"line":675},[36264,36268,36272,36276],{"type":30,"tag":1046,"props":36265,"children":36266},{"style":1053},[36267],{"type":40,"value":1056},{"type":30,"tag":1046,"props":36269,"children":36270},{"style":1053},[36271],{"type":40,"value":4852},{"type":30,"tag":1046,"props":36273,"children":36274},{"style":1064},[36275],{"type":40,"value":25151},{"type":30,"tag":1046,"props":36277,"children":36278},{"style":1070},[36279],{"type":40,"value":1073},{"type":30,"tag":1046,"props":36281,"children":36282},{"class":1048,"line":681},[36283,36287,36291],{"type":30,"tag":1046,"props":36284,"children":36285},{"style":1053},[36286],{"type":40,"value":4908},{"type":30,"tag":1046,"props":36288,"children":36289},{"style":1138},[36290],{"type":40,"value":20317},{"type":30,"tag":1046,"props":36292,"children":36293},{"style":1070},[36294],{"type":40,"value":1406},{"type":30,"tag":1046,"props":36296,"children":36297},{"class":1048,"line":1124},[36298],{"type":30,"tag":1046,"props":36299,"children":36300},{"style":1070},[36301],{"type":40,"value":1423},{"type":30,"tag":1046,"props":36303,"children":36304},{"class":1048,"line":1168},[36305],{"type":30,"tag":1046,"props":36306,"children":36307},{"emptyLinePlaceholder":13},[36308],{"type":40,"value":1121},{"type":30,"tag":1046,"props":36310,"children":36311},{"class":1048,"line":1201},[36312],{"type":30,"tag":1046,"props":36313,"children":36314},{"style":3961},[36315],{"type":40,"value":36316},"// Implémentation pour la carte bancaire\n",{"type":30,"tag":1046,"props":36318,"children":36319},{"class":1048,"line":1210},[36320,36324,36328,36332,36336,36340],{"type":30,"tag":1046,"props":36321,"children":36322},{"style":1053},[36323],{"type":40,"value":1056},{"type":30,"tag":1046,"props":36325,"children":36326},{"style":1053},[36327],{"type":40,"value":1061},{"type":30,"tag":1046,"props":36329,"children":36330},{"style":1064},[36331],{"type":40,"value":25214},{"type":30,"tag":1046,"props":36333,"children":36334},{"style":1053},[36335],{"type":40,"value":3166},{"type":30,"tag":1046,"props":36337,"children":36338},{"style":1064},[36339],{"type":40,"value":25151},{"type":30,"tag":1046,"props":36341,"children":36342},{"style":1070},[36343],{"type":40,"value":1073},{"type":30,"tag":1046,"props":36345,"children":36346},{"class":1048,"line":1218},[36347,36351],{"type":30,"tag":1046,"props":36348,"children":36349},{"style":1647},[36350],{"type":40,"value":1828},{"type":30,"tag":1046,"props":36352,"children":36353},{"style":1653},[36354],{"type":40,"value":3258},{"type":30,"tag":1046,"props":36356,"children":36357},{"class":1048,"line":1255},[36358,36362,36366,36370,36374],{"type":30,"tag":1046,"props":36359,"children":36360},{"style":1053},[36361],{"type":40,"value":1130},{"type":30,"tag":1046,"props":36363,"children":36364},{"style":1053},[36365],{"type":40,"value":1135},{"type":30,"tag":1046,"props":36367,"children":36368},{"style":1138},[36369],{"type":40,"value":20317},{"type":30,"tag":1046,"props":36371,"children":36372},{"style":1070},[36373],{"type":40,"value":1320},{"type":30,"tag":1046,"props":36375,"children":36376},{"style":1070},[36377],{"type":40,"value":1073},{"type":30,"tag":1046,"props":36379,"children":36380},{"class":1048,"line":1284},[36381,36385,36389,36393,36397,36401,36405,36409],{"type":30,"tag":1046,"props":36382,"children":36383},{"style":1105},[36384],{"type":40,"value":12555},{"type":30,"tag":1046,"props":36386,"children":36387},{"style":1070},[36388],{"type":40,"value":1179},{"type":30,"tag":1046,"props":36390,"children":36391},{"style":1105},[36392],{"type":40,"value":12564},{"type":30,"tag":1046,"props":36394,"children":36395},{"style":1070},[36396],{"type":40,"value":1179},{"type":30,"tag":1046,"props":36398,"children":36399},{"style":1138},[36400],{"type":40,"value":12573},{"type":30,"tag":1046,"props":36402,"children":36403},{"style":1070},[36404],{"type":40,"value":1146},{"type":30,"tag":1046,"props":36406,"children":36407},{"style":1675},[36408],{"type":40,"value":36089},{"type":30,"tag":1046,"props":36410,"children":36411},{"style":1070},[36412],{"type":40,"value":1198},{"type":30,"tag":1046,"props":36414,"children":36415},{"class":1048,"line":1292},[36416],{"type":30,"tag":1046,"props":36417,"children":36418},{"style":1070},[36419],{"type":40,"value":1207},{"type":30,"tag":1046,"props":36421,"children":36422},{"class":1048,"line":1300},[36423],{"type":30,"tag":1046,"props":36424,"children":36425},{"style":1070},[36426],{"type":40,"value":1423},{"type":30,"tag":1046,"props":36428,"children":36429},{"class":1048,"line":1327},[36430],{"type":30,"tag":1046,"props":36431,"children":36432},{"emptyLinePlaceholder":13},[36433],{"type":40,"value":1121},{"type":30,"tag":1046,"props":36435,"children":36436},{"class":1048,"line":1354},[36437],{"type":30,"tag":1046,"props":36438,"children":36439},{"style":3961},[36440],{"type":40,"value":36441},"// Implémentation pour PayPal\n",{"type":30,"tag":1046,"props":36443,"children":36444},{"class":1048,"line":1391},[36445,36449,36453,36457,36461,36465],{"type":30,"tag":1046,"props":36446,"children":36447},{"style":1053},[36448],{"type":40,"value":1056},{"type":30,"tag":1046,"props":36450,"children":36451},{"style":1053},[36452],{"type":40,"value":1061},{"type":30,"tag":1046,"props":36454,"children":36455},{"style":1064},[36456],{"type":40,"value":25306},{"type":30,"tag":1046,"props":36458,"children":36459},{"style":1053},[36460],{"type":40,"value":3166},{"type":30,"tag":1046,"props":36462,"children":36463},{"style":1064},[36464],{"type":40,"value":25151},{"type":30,"tag":1046,"props":36466,"children":36467},{"style":1070},[36468],{"type":40,"value":1073},{"type":30,"tag":1046,"props":36470,"children":36471},{"class":1048,"line":1409},[36472,36476],{"type":30,"tag":1046,"props":36473,"children":36474},{"style":1647},[36475],{"type":40,"value":1828},{"type":30,"tag":1046,"props":36477,"children":36478},{"style":1653},[36479],{"type":40,"value":3258},{"type":30,"tag":1046,"props":36481,"children":36482},{"class":1048,"line":1417},[36483,36487,36491,36495,36499],{"type":30,"tag":1046,"props":36484,"children":36485},{"style":1053},[36486],{"type":40,"value":1130},{"type":30,"tag":1046,"props":36488,"children":36489},{"style":1053},[36490],{"type":40,"value":1135},{"type":30,"tag":1046,"props":36492,"children":36493},{"style":1138},[36494],{"type":40,"value":20317},{"type":30,"tag":1046,"props":36496,"children":36497},{"style":1070},[36498],{"type":40,"value":1320},{"type":30,"tag":1046,"props":36500,"children":36501},{"style":1070},[36502],{"type":40,"value":1073},{"type":30,"tag":1046,"props":36504,"children":36505},{"class":1048,"line":2023},[36506,36510,36514,36518,36522,36526,36530,36534],{"type":30,"tag":1046,"props":36507,"children":36508},{"style":1105},[36509],{"type":40,"value":12555},{"type":30,"tag":1046,"props":36511,"children":36512},{"style":1070},[36513],{"type":40,"value":1179},{"type":30,"tag":1046,"props":36515,"children":36516},{"style":1105},[36517],{"type":40,"value":12564},{"type":30,"tag":1046,"props":36519,"children":36520},{"style":1070},[36521],{"type":40,"value":1179},{"type":30,"tag":1046,"props":36523,"children":36524},{"style":1138},[36525],{"type":40,"value":12573},{"type":30,"tag":1046,"props":36527,"children":36528},{"style":1070},[36529],{"type":40,"value":1146},{"type":30,"tag":1046,"props":36531,"children":36532},{"style":1675},[36533],{"type":40,"value":36182},{"type":30,"tag":1046,"props":36535,"children":36536},{"style":1070},[36537],{"type":40,"value":1198},{"type":30,"tag":1046,"props":36539,"children":36540},{"class":1048,"line":2083},[36541],{"type":30,"tag":1046,"props":36542,"children":36543},{"style":1070},[36544],{"type":40,"value":1207},{"type":30,"tag":1046,"props":36546,"children":36547},{"class":1048,"line":2126},[36548],{"type":30,"tag":1046,"props":36549,"children":36550},{"style":1070},[36551],{"type":40,"value":1423},{"type":30,"tag":1046,"props":36553,"children":36554},{"class":1048,"line":2159},[36555],{"type":30,"tag":1046,"props":36556,"children":36557},{"emptyLinePlaceholder":13},[36558],{"type":40,"value":1121},{"type":30,"tag":1046,"props":36560,"children":36561},{"class":1048,"line":2167},[36562],{"type":30,"tag":1046,"props":36563,"children":36564},{"style":3961},[36565],{"type":40,"value":36566},"// Classe de traitement des paiements qui respecte OCP\n",{"type":30,"tag":1046,"props":36568,"children":36569},{"class":1048,"line":4537},[36570,36574,36578,36582],{"type":30,"tag":1046,"props":36571,"children":36572},{"style":1053},[36573],{"type":40,"value":1056},{"type":30,"tag":1046,"props":36575,"children":36576},{"style":1053},[36577],{"type":40,"value":1061},{"type":30,"tag":1046,"props":36579,"children":36580},{"style":1064},[36581],{"type":40,"value":35968},{"type":30,"tag":1046,"props":36583,"children":36584},{"style":1070},[36585],{"type":40,"value":1073},{"type":30,"tag":1046,"props":36587,"children":36588},{"class":1048,"line":4545},[36589,36593,36597,36601,36605,36609,36613,36617],{"type":30,"tag":1046,"props":36590,"children":36591},{"style":1053},[36592],{"type":40,"value":1130},{"type":30,"tag":1046,"props":36594,"children":36595},{"style":1053},[36596],{"type":40,"value":1135},{"type":30,"tag":1046,"props":36598,"children":36599},{"style":1138},[36600],{"type":40,"value":20317},{"type":30,"tag":1046,"props":36602,"children":36603},{"style":1070},[36604],{"type":40,"value":1146},{"type":30,"tag":1046,"props":36606,"children":36607},{"style":1084},[36608],{"type":40,"value":25386},{"type":30,"tag":1046,"props":36610,"children":36611},{"style":1153},[36612],{"type":40,"value":26322},{"type":30,"tag":1046,"props":36614,"children":36615},{"style":1070},[36616],{"type":40,"value":1161},{"type":30,"tag":1046,"props":36618,"children":36619},{"style":1070},[36620],{"type":40,"value":1073},{"type":30,"tag":1046,"props":36622,"children":36623},{"class":1048,"line":4582},[36624,36628,36632,36636],{"type":30,"tag":1046,"props":36625,"children":36626},{"style":1105},[36627],{"type":40,"value":26450},{"type":30,"tag":1046,"props":36629,"children":36630},{"style":1070},[36631],{"type":40,"value":1179},{"type":30,"tag":1046,"props":36633,"children":36634},{"style":1138},[36635],{"type":40,"value":20857},{"type":30,"tag":1046,"props":36637,"children":36638},{"style":1070},[36639],{"type":40,"value":1406},{"type":30,"tag":1046,"props":36641,"children":36642},{"class":1048,"line":4622},[36643],{"type":30,"tag":1046,"props":36644,"children":36645},{"style":1070},[36646],{"type":40,"value":1207},{"type":30,"tag":1046,"props":36648,"children":36649},{"class":1048,"line":4662},[36650],{"type":30,"tag":1046,"props":36651,"children":36652},{"style":1070},[36653],{"type":40,"value":1423},{"type":30,"tag":43,"props":36655,"children":36656},{},[36657,36659,36664],{"type":40,"value":36658},"Pour ajouter une nouvelle méthode de paiement, il suffit simplement de créer une nouvelle classe qui implémente l'interface ",{"type":30,"tag":1042,"props":36660,"children":36662},{"className":36661},[],[36663],{"type":40,"value":25386},{"type":40,"value":6296},{"type":30,"tag":1035,"props":36666,"children":36668},{"className":1039,"code":36667,"language":1038,"meta":8,"style":8},"// Nouvelle implémentation pour portefeuille électronique (e-wallet)\npublic class EWalletPayment implements PaymentMethod {\n    @Override\n    public void processPayment() {\n        System.out.println(\"Paiement via portefeuille électronique\");\n    }\n}\n",[36669],{"type":30,"tag":1042,"props":36670,"children":36671},{"__ignoreMap":8},[36672,36680,36708,36719,36742,36778,36785],{"type":30,"tag":1046,"props":36673,"children":36674},{"class":1048,"line":1049},[36675],{"type":30,"tag":1046,"props":36676,"children":36677},{"style":3961},[36678],{"type":40,"value":36679},"// Nouvelle implémentation pour portefeuille électronique (e-wallet)\n",{"type":30,"tag":1046,"props":36681,"children":36682},{"class":1048,"line":675},[36683,36687,36691,36696,36700,36704],{"type":30,"tag":1046,"props":36684,"children":36685},{"style":1053},[36686],{"type":40,"value":1056},{"type":30,"tag":1046,"props":36688,"children":36689},{"style":1053},[36690],{"type":40,"value":1061},{"type":30,"tag":1046,"props":36692,"children":36693},{"style":1064},[36694],{"type":40,"value":36695}," EWalletPayment",{"type":30,"tag":1046,"props":36697,"children":36698},{"style":1053},[36699],{"type":40,"value":3166},{"type":30,"tag":1046,"props":36701,"children":36702},{"style":1064},[36703],{"type":40,"value":25151},{"type":30,"tag":1046,"props":36705,"children":36706},{"style":1070},[36707],{"type":40,"value":1073},{"type":30,"tag":1046,"props":36709,"children":36710},{"class":1048,"line":681},[36711,36715],{"type":30,"tag":1046,"props":36712,"children":36713},{"style":1647},[36714],{"type":40,"value":1828},{"type":30,"tag":1046,"props":36716,"children":36717},{"style":1653},[36718],{"type":40,"value":3258},{"type":30,"tag":1046,"props":36720,"children":36721},{"class":1048,"line":1124},[36722,36726,36730,36734,36738],{"type":30,"tag":1046,"props":36723,"children":36724},{"style":1053},[36725],{"type":40,"value":1130},{"type":30,"tag":1046,"props":36727,"children":36728},{"style":1053},[36729],{"type":40,"value":1135},{"type":30,"tag":1046,"props":36731,"children":36732},{"style":1138},[36733],{"type":40,"value":20317},{"type":30,"tag":1046,"props":36735,"children":36736},{"style":1070},[36737],{"type":40,"value":1320},{"type":30,"tag":1046,"props":36739,"children":36740},{"style":1070},[36741],{"type":40,"value":1073},{"type":30,"tag":1046,"props":36743,"children":36744},{"class":1048,"line":1168},[36745,36749,36753,36757,36761,36765,36769,36774],{"type":30,"tag":1046,"props":36746,"children":36747},{"style":1105},[36748],{"type":40,"value":12555},{"type":30,"tag":1046,"props":36750,"children":36751},{"style":1070},[36752],{"type":40,"value":1179},{"type":30,"tag":1046,"props":36754,"children":36755},{"style":1105},[36756],{"type":40,"value":12564},{"type":30,"tag":1046,"props":36758,"children":36759},{"style":1070},[36760],{"type":40,"value":1179},{"type":30,"tag":1046,"props":36762,"children":36763},{"style":1138},[36764],{"type":40,"value":12573},{"type":30,"tag":1046,"props":36766,"children":36767},{"style":1070},[36768],{"type":40,"value":1146},{"type":30,"tag":1046,"props":36770,"children":36771},{"style":1675},[36772],{"type":40,"value":36773},"\"Paiement via portefeuille électronique\"",{"type":30,"tag":1046,"props":36775,"children":36776},{"style":1070},[36777],{"type":40,"value":1198},{"type":30,"tag":1046,"props":36779,"children":36780},{"class":1048,"line":1201},[36781],{"type":30,"tag":1046,"props":36782,"children":36783},{"style":1070},[36784],{"type":40,"value":1207},{"type":30,"tag":1046,"props":36786,"children":36787},{"class":1048,"line":1210},[36788],{"type":30,"tag":1046,"props":36789,"children":36790},{"style":1070},[36791],{"type":40,"value":1423},{"type":30,"tag":43,"props":36793,"children":36794},{},[36795,36797,36802],{"type":40,"value":36796},"On peut maintenant utiliser cette nouvelle méthode de paiement sans toucher à la classe ",{"type":30,"tag":1042,"props":36798,"children":36800},{"className":36799},[],[36801],{"type":40,"value":35943},{"type":40,"value":6296},{"type":30,"tag":1035,"props":36804,"children":36806},{"className":1039,"code":36805,"language":1038,"meta":8,"style":8},"public class Main {\n    public static void main(String[] args) {\n        PaymentProcessor processor = new PaymentProcessor();\n\n        // Utilisation de la carte bancaire\n        PaymentMethod creditCard = new CreditCardPayment();\n        processor.processPayment(creditCard);\n\n        // Utilisation de PayPal\n        PaymentMethod paypal = new PayPalPayment();\n        processor.processPayment(paypal);\n\n        // Utilisation d'un portefeuille électronique\n        PaymentMethod ewallet = new EWalletPayment();\n        processor.processPayment(ewallet);\n    }\n}\n",[36807],{"type":30,"tag":1042,"props":36808,"children":36809},{"__ignoreMap":8},[36810,36829,36872,36901,36908,36916,36945,36974,36981,36989,37017,37045,37052,37060,37088,37116,37123],{"type":30,"tag":1046,"props":36811,"children":36812},{"class":1048,"line":1049},[36813,36817,36821,36825],{"type":30,"tag":1046,"props":36814,"children":36815},{"style":1053},[36816],{"type":40,"value":1056},{"type":30,"tag":1046,"props":36818,"children":36819},{"style":1053},[36820],{"type":40,"value":1061},{"type":30,"tag":1046,"props":36822,"children":36823},{"style":1064},[36824],{"type":40,"value":12347},{"type":30,"tag":1046,"props":36826,"children":36827},{"style":1070},[36828],{"type":40,"value":1073},{"type":30,"tag":1046,"props":36830,"children":36831},{"class":1048,"line":675},[36832,36836,36840,36844,36848,36852,36856,36860,36864,36868],{"type":30,"tag":1046,"props":36833,"children":36834},{"style":1053},[36835],{"type":40,"value":1130},{"type":30,"tag":1046,"props":36837,"children":36838},{"style":1053},[36839],{"type":40,"value":12363},{"type":30,"tag":1046,"props":36841,"children":36842},{"style":1053},[36843],{"type":40,"value":1135},{"type":30,"tag":1046,"props":36845,"children":36846},{"style":1138},[36847],{"type":40,"value":12372},{"type":30,"tag":1046,"props":36849,"children":36850},{"style":1070},[36851],{"type":40,"value":1146},{"type":30,"tag":1046,"props":36853,"children":36854},{"style":1053},[36855],{"type":40,"value":2882},{"type":30,"tag":1046,"props":36857,"children":36858},{"style":1070},[36859],{"type":40,"value":12385},{"type":30,"tag":1046,"props":36861,"children":36862},{"style":1153},[36863],{"type":40,"value":12390},{"type":30,"tag":1046,"props":36865,"children":36866},{"style":1070},[36867],{"type":40,"value":1161},{"type":30,"tag":1046,"props":36869,"children":36870},{"style":1070},[36871],{"type":40,"value":1073},{"type":30,"tag":1046,"props":36873,"children":36874},{"class":1048,"line":681},[36875,36880,36885,36889,36893,36897],{"type":30,"tag":1046,"props":36876,"children":36877},{"style":1084},[36878],{"type":40,"value":36879},"        PaymentProcessor",{"type":30,"tag":1046,"props":36881,"children":36882},{"style":1105},[36883],{"type":40,"value":36884}," processor ",{"type":30,"tag":1046,"props":36886,"children":36887},{"style":1795},[36888],{"type":40,"value":1798},{"type":30,"tag":1046,"props":36890,"children":36891},{"style":1053},[36892],{"type":40,"value":2480},{"type":30,"tag":1046,"props":36894,"children":36895},{"style":1138},[36896],{"type":40,"value":35968},{"type":30,"tag":1046,"props":36898,"children":36899},{"style":1070},[36900],{"type":40,"value":1406},{"type":30,"tag":1046,"props":36902,"children":36903},{"class":1048,"line":1124},[36904],{"type":30,"tag":1046,"props":36905,"children":36906},{"emptyLinePlaceholder":13},[36907],{"type":40,"value":1121},{"type":30,"tag":1046,"props":36909,"children":36910},{"class":1048,"line":1168},[36911],{"type":30,"tag":1046,"props":36912,"children":36913},{"style":3961},[36914],{"type":40,"value":36915},"        // Utilisation de la carte bancaire\n",{"type":30,"tag":1046,"props":36917,"children":36918},{"class":1048,"line":1201},[36919,36924,36929,36933,36937,36941],{"type":30,"tag":1046,"props":36920,"children":36921},{"style":1084},[36922],{"type":40,"value":36923},"        PaymentMethod",{"type":30,"tag":1046,"props":36925,"children":36926},{"style":1105},[36927],{"type":40,"value":36928}," creditCard ",{"type":30,"tag":1046,"props":36930,"children":36931},{"style":1795},[36932],{"type":40,"value":1798},{"type":30,"tag":1046,"props":36934,"children":36935},{"style":1053},[36936],{"type":40,"value":2480},{"type":30,"tag":1046,"props":36938,"children":36939},{"style":1138},[36940],{"type":40,"value":25214},{"type":30,"tag":1046,"props":36942,"children":36943},{"style":1070},[36944],{"type":40,"value":1406},{"type":30,"tag":1046,"props":36946,"children":36947},{"class":1048,"line":1210},[36948,36953,36957,36961,36965,36970],{"type":30,"tag":1046,"props":36949,"children":36950},{"style":1105},[36951],{"type":40,"value":36952},"        processor",{"type":30,"tag":1046,"props":36954,"children":36955},{"style":1070},[36956],{"type":40,"value":1179},{"type":30,"tag":1046,"props":36958,"children":36959},{"style":1138},[36960],{"type":40,"value":20857},{"type":30,"tag":1046,"props":36962,"children":36963},{"style":1070},[36964],{"type":40,"value":1146},{"type":30,"tag":1046,"props":36966,"children":36967},{"style":1105},[36968],{"type":40,"value":36969},"creditCard",{"type":30,"tag":1046,"props":36971,"children":36972},{"style":1070},[36973],{"type":40,"value":1198},{"type":30,"tag":1046,"props":36975,"children":36976},{"class":1048,"line":1218},[36977],{"type":30,"tag":1046,"props":36978,"children":36979},{"emptyLinePlaceholder":13},[36980],{"type":40,"value":1121},{"type":30,"tag":1046,"props":36982,"children":36983},{"class":1048,"line":1255},[36984],{"type":30,"tag":1046,"props":36985,"children":36986},{"style":3961},[36987],{"type":40,"value":36988},"        // Utilisation de PayPal\n",{"type":30,"tag":1046,"props":36990,"children":36991},{"class":1048,"line":1284},[36992,36996,37001,37005,37009,37013],{"type":30,"tag":1046,"props":36993,"children":36994},{"style":1084},[36995],{"type":40,"value":36923},{"type":30,"tag":1046,"props":36997,"children":36998},{"style":1105},[36999],{"type":40,"value":37000}," paypal ",{"type":30,"tag":1046,"props":37002,"children":37003},{"style":1795},[37004],{"type":40,"value":1798},{"type":30,"tag":1046,"props":37006,"children":37007},{"style":1053},[37008],{"type":40,"value":2480},{"type":30,"tag":1046,"props":37010,"children":37011},{"style":1138},[37012],{"type":40,"value":25306},{"type":30,"tag":1046,"props":37014,"children":37015},{"style":1070},[37016],{"type":40,"value":1406},{"type":30,"tag":1046,"props":37018,"children":37019},{"class":1048,"line":1292},[37020,37024,37028,37032,37036,37041],{"type":30,"tag":1046,"props":37021,"children":37022},{"style":1105},[37023],{"type":40,"value":36952},{"type":30,"tag":1046,"props":37025,"children":37026},{"style":1070},[37027],{"type":40,"value":1179},{"type":30,"tag":1046,"props":37029,"children":37030},{"style":1138},[37031],{"type":40,"value":20857},{"type":30,"tag":1046,"props":37033,"children":37034},{"style":1070},[37035],{"type":40,"value":1146},{"type":30,"tag":1046,"props":37037,"children":37038},{"style":1105},[37039],{"type":40,"value":37040},"paypal",{"type":30,"tag":1046,"props":37042,"children":37043},{"style":1070},[37044],{"type":40,"value":1198},{"type":30,"tag":1046,"props":37046,"children":37047},{"class":1048,"line":1300},[37048],{"type":30,"tag":1046,"props":37049,"children":37050},{"emptyLinePlaceholder":13},[37051],{"type":40,"value":1121},{"type":30,"tag":1046,"props":37053,"children":37054},{"class":1048,"line":1327},[37055],{"type":30,"tag":1046,"props":37056,"children":37057},{"style":3961},[37058],{"type":40,"value":37059},"        // Utilisation d'un portefeuille électronique\n",{"type":30,"tag":1046,"props":37061,"children":37062},{"class":1048,"line":1354},[37063,37067,37072,37076,37080,37084],{"type":30,"tag":1046,"props":37064,"children":37065},{"style":1084},[37066],{"type":40,"value":36923},{"type":30,"tag":1046,"props":37068,"children":37069},{"style":1105},[37070],{"type":40,"value":37071}," ewallet ",{"type":30,"tag":1046,"props":37073,"children":37074},{"style":1795},[37075],{"type":40,"value":1798},{"type":30,"tag":1046,"props":37077,"children":37078},{"style":1053},[37079],{"type":40,"value":2480},{"type":30,"tag":1046,"props":37081,"children":37082},{"style":1138},[37083],{"type":40,"value":36695},{"type":30,"tag":1046,"props":37085,"children":37086},{"style":1070},[37087],{"type":40,"value":1406},{"type":30,"tag":1046,"props":37089,"children":37090},{"class":1048,"line":1391},[37091,37095,37099,37103,37107,37112],{"type":30,"tag":1046,"props":37092,"children":37093},{"style":1105},[37094],{"type":40,"value":36952},{"type":30,"tag":1046,"props":37096,"children":37097},{"style":1070},[37098],{"type":40,"value":1179},{"type":30,"tag":1046,"props":37100,"children":37101},{"style":1138},[37102],{"type":40,"value":20857},{"type":30,"tag":1046,"props":37104,"children":37105},{"style":1070},[37106],{"type":40,"value":1146},{"type":30,"tag":1046,"props":37108,"children":37109},{"style":1105},[37110],{"type":40,"value":37111},"ewallet",{"type":30,"tag":1046,"props":37113,"children":37114},{"style":1070},[37115],{"type":40,"value":1198},{"type":30,"tag":1046,"props":37117,"children":37118},{"class":1048,"line":1409},[37119],{"type":30,"tag":1046,"props":37120,"children":37121},{"style":1070},[37122],{"type":40,"value":1207},{"type":30,"tag":1046,"props":37124,"children":37125},{"class":1048,"line":1417},[37126],{"type":30,"tag":1046,"props":37127,"children":37128},{"style":1070},[37129],{"type":40,"value":1423},{"type":30,"tag":84,"props":37131,"children":37132},{},[],{"type":30,"tag":19673,"props":37134,"children":37135},{"type":19675},[37136],{"type":30,"tag":43,"props":37137,"children":37138},{},[37139,37144],{"type":30,"tag":36,"props":37140,"children":37141},{},[37142],{"type":40,"value":37143},"Utilisez des interfaces ou des classes abstraites",{"type":40,"value":37145}," pour éviter de devoir modifier des classes déjà existantes. Cela facilitera l'extension de votre application avec de nouvelles fonctionnalités à l'avenir.",{"type":30,"tag":31,"props":37147,"children":37149},{"id":37148},"_3-principe-de-substitution-de-liskov-liskov-substitution-principle-lsp",[37150],{"type":40,"value":37151},"3. Principe de Substitution de Liskov (Liskov Substitution Principle - LSP)",{"type":30,"tag":43,"props":37153,"children":37154},{},[37155],{"type":40,"value":37156},"Le principe de substitution de Liskov (LSP) stipule que les sous-classes doivent pouvoir être substituées à leurs classes mères sans que cela ne perturbe le bon fonctionnement du programme. Autrement dit, une classe dérivée doit pouvoir remplacer la classe parente sans modifier le comportement attendu du système.",{"type":30,"tag":116,"props":37158,"children":37160},{"id":37159},"pourquoi-cest-important-2",[37161],{"type":40,"value":35126},{"type":30,"tag":43,"props":37163,"children":37164},{},[37165],{"type":40,"value":37166},"Si vous brisez ce principe, l'héritage peut causer des problèmes inattendus. Par exemple, certaines méthodes ou comportements pourraient ne pas fonctionner correctement, ce qui peut engendrer des bugs subtils et rendre le système imprévisible.",{"type":30,"tag":116,"props":37168,"children":37170},{"id":37169},"exemple-concret-en-java-2",[37171],{"type":40,"value":35137},{"type":30,"tag":43,"props":37173,"children":37174},{},[37175,37177,37183,37185,37191],{"type":40,"value":37176},"Imaginons que nous ayons une classe ",{"type":30,"tag":1042,"props":37178,"children":37180},{"className":37179},[],[37181],{"type":40,"value":37182},"Rectangle",{"type":40,"value":37184}," et une sous-classe ",{"type":30,"tag":1042,"props":37186,"children":37188},{"className":37187},[],[37189],{"type":40,"value":37190},"Square",{"type":40,"value":37192}," (carré), puisque, mathématiquement, un carré est un cas particulier de rectangle.",{"type":30,"tag":2339,"props":37194,"children":37196},{"id":37195},"exemple-sans-lsp",[37197],{"type":40,"value":37198},"Exemple sans LSP :",{"type":30,"tag":43,"props":37200,"children":37201},{},[37202,37204,37209,37211,37216],{"type":40,"value":37203},"Voici une implémentation basique où ",{"type":30,"tag":1042,"props":37205,"children":37207},{"className":37206},[],[37208],{"type":40,"value":37190},{"type":40,"value":37210}," hérite de ",{"type":30,"tag":1042,"props":37212,"children":37214},{"className":37213},[],[37215],{"type":40,"value":37182},{"type":40,"value":6296},{"type":30,"tag":1035,"props":37218,"children":37220},{"className":1039,"code":37219,"language":1038,"meta":8,"style":8},"public class Rectangle {\n    protected int width;\n    protected int height;\n\n    public void setWidth(int width) {\n        this.width = width;\n    }\n\n\n\n    public void setHeight(int height) {\n        this.height = height;\n    }\n\n    public int getArea() {\n        return width * height;\n    }\n}\n\npublic class Square extends Rectangle {\n    @Override\n    public void setWidth(int width) {\n        this.width = width;\n        this.height = width; // Contraintes du carré\n    }\n\n    @Override\n    public void setHeight(int height) {\n        this.height = height;\n        this.width = height; // Contraintes du carré\n    }\n}\n",[37221],{"type":30,"tag":1042,"props":37222,"children":37223},{"__ignoreMap":8},[37224,37244,37265,37285,37292,37328,37356,37363,37370,37377,37384,37420,37448,37455,37462,37486,37510,37517,37524,37531,37560,37571,37606,37633,37665,37672,37679,37690,37725,37752,37783,37790],{"type":30,"tag":1046,"props":37225,"children":37226},{"class":1048,"line":1049},[37227,37231,37235,37240],{"type":30,"tag":1046,"props":37228,"children":37229},{"style":1053},[37230],{"type":40,"value":1056},{"type":30,"tag":1046,"props":37232,"children":37233},{"style":1053},[37234],{"type":40,"value":1061},{"type":30,"tag":1046,"props":37236,"children":37237},{"style":1064},[37238],{"type":40,"value":37239}," Rectangle",{"type":30,"tag":1046,"props":37241,"children":37242},{"style":1070},[37243],{"type":40,"value":1073},{"type":30,"tag":1046,"props":37245,"children":37246},{"class":1048,"line":675},[37247,37252,37256,37261],{"type":30,"tag":1046,"props":37248,"children":37249},{"style":1053},[37250],{"type":40,"value":37251},"    protected",{"type":30,"tag":1046,"props":37253,"children":37254},{"style":1053},[37255],{"type":40,"value":10265},{"type":30,"tag":1046,"props":37257,"children":37258},{"style":1105},[37259],{"type":40,"value":37260}," width",{"type":30,"tag":1046,"props":37262,"children":37263},{"style":1070},[37264],{"type":40,"value":1113},{"type":30,"tag":1046,"props":37266,"children":37267},{"class":1048,"line":681},[37268,37272,37276,37281],{"type":30,"tag":1046,"props":37269,"children":37270},{"style":1053},[37271],{"type":40,"value":37251},{"type":30,"tag":1046,"props":37273,"children":37274},{"style":1053},[37275],{"type":40,"value":10265},{"type":30,"tag":1046,"props":37277,"children":37278},{"style":1105},[37279],{"type":40,"value":37280}," height",{"type":30,"tag":1046,"props":37282,"children":37283},{"style":1070},[37284],{"type":40,"value":1113},{"type":30,"tag":1046,"props":37286,"children":37287},{"class":1048,"line":1124},[37288],{"type":30,"tag":1046,"props":37289,"children":37290},{"emptyLinePlaceholder":13},[37291],{"type":40,"value":1121},{"type":30,"tag":1046,"props":37293,"children":37294},{"class":1048,"line":1168},[37295,37299,37303,37308,37312,37316,37320,37324],{"type":30,"tag":1046,"props":37296,"children":37297},{"style":1053},[37298],{"type":40,"value":1130},{"type":30,"tag":1046,"props":37300,"children":37301},{"style":1053},[37302],{"type":40,"value":1135},{"type":30,"tag":1046,"props":37304,"children":37305},{"style":1138},[37306],{"type":40,"value":37307}," setWidth",{"type":30,"tag":1046,"props":37309,"children":37310},{"style":1070},[37311],{"type":40,"value":1146},{"type":30,"tag":1046,"props":37313,"children":37314},{"style":1053},[37315],{"type":40,"value":10323},{"type":30,"tag":1046,"props":37317,"children":37318},{"style":1153},[37319],{"type":40,"value":37260},{"type":30,"tag":1046,"props":37321,"children":37322},{"style":1070},[37323],{"type":40,"value":1161},{"type":30,"tag":1046,"props":37325,"children":37326},{"style":1070},[37327],{"type":40,"value":1073},{"type":30,"tag":1046,"props":37329,"children":37330},{"class":1048,"line":1201},[37331,37335,37339,37344,37348,37352],{"type":30,"tag":1046,"props":37332,"children":37333},{"style":1780},[37334],{"type":40,"value":1783},{"type":30,"tag":1046,"props":37336,"children":37337},{"style":1070},[37338],{"type":40,"value":1179},{"type":30,"tag":1046,"props":37340,"children":37341},{"style":1105},[37342],{"type":40,"value":37343},"width ",{"type":30,"tag":1046,"props":37345,"children":37346},{"style":1795},[37347],{"type":40,"value":1798},{"type":30,"tag":1046,"props":37349,"children":37350},{"style":1105},[37351],{"type":40,"value":37260},{"type":30,"tag":1046,"props":37353,"children":37354},{"style":1070},[37355],{"type":40,"value":1113},{"type":30,"tag":1046,"props":37357,"children":37358},{"class":1048,"line":1210},[37359],{"type":30,"tag":1046,"props":37360,"children":37361},{"style":1070},[37362],{"type":40,"value":1207},{"type":30,"tag":1046,"props":37364,"children":37365},{"class":1048,"line":1218},[37366],{"type":30,"tag":1046,"props":37367,"children":37368},{"emptyLinePlaceholder":13},[37369],{"type":40,"value":1121},{"type":30,"tag":1046,"props":37371,"children":37372},{"class":1048,"line":1255},[37373],{"type":30,"tag":1046,"props":37374,"children":37375},{"emptyLinePlaceholder":13},[37376],{"type":40,"value":1121},{"type":30,"tag":1046,"props":37378,"children":37379},{"class":1048,"line":1284},[37380],{"type":30,"tag":1046,"props":37381,"children":37382},{"emptyLinePlaceholder":13},[37383],{"type":40,"value":1121},{"type":30,"tag":1046,"props":37385,"children":37386},{"class":1048,"line":1292},[37387,37391,37395,37400,37404,37408,37412,37416],{"type":30,"tag":1046,"props":37388,"children":37389},{"style":1053},[37390],{"type":40,"value":1130},{"type":30,"tag":1046,"props":37392,"children":37393},{"style":1053},[37394],{"type":40,"value":1135},{"type":30,"tag":1046,"props":37396,"children":37397},{"style":1138},[37398],{"type":40,"value":37399}," setHeight",{"type":30,"tag":1046,"props":37401,"children":37402},{"style":1070},[37403],{"type":40,"value":1146},{"type":30,"tag":1046,"props":37405,"children":37406},{"style":1053},[37407],{"type":40,"value":10323},{"type":30,"tag":1046,"props":37409,"children":37410},{"style":1153},[37411],{"type":40,"value":37280},{"type":30,"tag":1046,"props":37413,"children":37414},{"style":1070},[37415],{"type":40,"value":1161},{"type":30,"tag":1046,"props":37417,"children":37418},{"style":1070},[37419],{"type":40,"value":1073},{"type":30,"tag":1046,"props":37421,"children":37422},{"class":1048,"line":1300},[37423,37427,37431,37436,37440,37444],{"type":30,"tag":1046,"props":37424,"children":37425},{"style":1780},[37426],{"type":40,"value":1783},{"type":30,"tag":1046,"props":37428,"children":37429},{"style":1070},[37430],{"type":40,"value":1179},{"type":30,"tag":1046,"props":37432,"children":37433},{"style":1105},[37434],{"type":40,"value":37435},"height ",{"type":30,"tag":1046,"props":37437,"children":37438},{"style":1795},[37439],{"type":40,"value":1798},{"type":30,"tag":1046,"props":37441,"children":37442},{"style":1105},[37443],{"type":40,"value":37280},{"type":30,"tag":1046,"props":37445,"children":37446},{"style":1070},[37447],{"type":40,"value":1113},{"type":30,"tag":1046,"props":37449,"children":37450},{"class":1048,"line":1327},[37451],{"type":30,"tag":1046,"props":37452,"children":37453},{"style":1070},[37454],{"type":40,"value":1207},{"type":30,"tag":1046,"props":37456,"children":37457},{"class":1048,"line":1354},[37458],{"type":30,"tag":1046,"props":37459,"children":37460},{"emptyLinePlaceholder":13},[37461],{"type":40,"value":1121},{"type":30,"tag":1046,"props":37463,"children":37464},{"class":1048,"line":1391},[37465,37469,37473,37478,37482],{"type":30,"tag":1046,"props":37466,"children":37467},{"style":1053},[37468],{"type":40,"value":1130},{"type":30,"tag":1046,"props":37470,"children":37471},{"style":1053},[37472],{"type":40,"value":10265},{"type":30,"tag":1046,"props":37474,"children":37475},{"style":1138},[37476],{"type":40,"value":37477}," getArea",{"type":30,"tag":1046,"props":37479,"children":37480},{"style":1070},[37481],{"type":40,"value":1320},{"type":30,"tag":1046,"props":37483,"children":37484},{"style":1070},[37485],{"type":40,"value":1073},{"type":30,"tag":1046,"props":37487,"children":37488},{"class":1048,"line":1409},[37489,37493,37498,37502,37506],{"type":30,"tag":1046,"props":37490,"children":37491},{"style":1053},[37492],{"type":40,"value":1333},{"type":30,"tag":1046,"props":37494,"children":37495},{"style":1105},[37496],{"type":40,"value":37497}," width ",{"type":30,"tag":1046,"props":37499,"children":37500},{"style":1795},[37501],{"type":40,"value":21197},{"type":30,"tag":1046,"props":37503,"children":37504},{"style":1105},[37505],{"type":40,"value":37280},{"type":30,"tag":1046,"props":37507,"children":37508},{"style":1070},[37509],{"type":40,"value":1113},{"type":30,"tag":1046,"props":37511,"children":37512},{"class":1048,"line":1417},[37513],{"type":30,"tag":1046,"props":37514,"children":37515},{"style":1070},[37516],{"type":40,"value":1207},{"type":30,"tag":1046,"props":37518,"children":37519},{"class":1048,"line":2023},[37520],{"type":30,"tag":1046,"props":37521,"children":37522},{"style":1070},[37523],{"type":40,"value":1423},{"type":30,"tag":1046,"props":37525,"children":37526},{"class":1048,"line":2083},[37527],{"type":30,"tag":1046,"props":37528,"children":37529},{"emptyLinePlaceholder":13},[37530],{"type":40,"value":1121},{"type":30,"tag":1046,"props":37532,"children":37533},{"class":1048,"line":2126},[37534,37538,37542,37547,37552,37556],{"type":30,"tag":1046,"props":37535,"children":37536},{"style":1053},[37537],{"type":40,"value":1056},{"type":30,"tag":1046,"props":37539,"children":37540},{"style":1053},[37541],{"type":40,"value":1061},{"type":30,"tag":1046,"props":37543,"children":37544},{"style":1064},[37545],{"type":40,"value":37546}," Square",{"type":30,"tag":1046,"props":37548,"children":37549},{"style":1053},[37550],{"type":40,"value":37551}," extends",{"type":30,"tag":1046,"props":37553,"children":37554},{"style":1064},[37555],{"type":40,"value":37239},{"type":30,"tag":1046,"props":37557,"children":37558},{"style":1070},[37559],{"type":40,"value":1073},{"type":30,"tag":1046,"props":37561,"children":37562},{"class":1048,"line":2159},[37563,37567],{"type":30,"tag":1046,"props":37564,"children":37565},{"style":1647},[37566],{"type":40,"value":1828},{"type":30,"tag":1046,"props":37568,"children":37569},{"style":1653},[37570],{"type":40,"value":3258},{"type":30,"tag":1046,"props":37572,"children":37573},{"class":1048,"line":2167},[37574,37578,37582,37586,37590,37594,37598,37602],{"type":30,"tag":1046,"props":37575,"children":37576},{"style":1053},[37577],{"type":40,"value":1130},{"type":30,"tag":1046,"props":37579,"children":37580},{"style":1053},[37581],{"type":40,"value":1135},{"type":30,"tag":1046,"props":37583,"children":37584},{"style":1138},[37585],{"type":40,"value":37307},{"type":30,"tag":1046,"props":37587,"children":37588},{"style":1070},[37589],{"type":40,"value":1146},{"type":30,"tag":1046,"props":37591,"children":37592},{"style":1053},[37593],{"type":40,"value":10323},{"type":30,"tag":1046,"props":37595,"children":37596},{"style":1153},[37597],{"type":40,"value":37260},{"type":30,"tag":1046,"props":37599,"children":37600},{"style":1070},[37601],{"type":40,"value":1161},{"type":30,"tag":1046,"props":37603,"children":37604},{"style":1070},[37605],{"type":40,"value":1073},{"type":30,"tag":1046,"props":37607,"children":37608},{"class":1048,"line":4537},[37609,37613,37617,37621,37625,37629],{"type":30,"tag":1046,"props":37610,"children":37611},{"style":1780},[37612],{"type":40,"value":1783},{"type":30,"tag":1046,"props":37614,"children":37615},{"style":1070},[37616],{"type":40,"value":1179},{"type":30,"tag":1046,"props":37618,"children":37619},{"style":1105},[37620],{"type":40,"value":37343},{"type":30,"tag":1046,"props":37622,"children":37623},{"style":1795},[37624],{"type":40,"value":1798},{"type":30,"tag":1046,"props":37626,"children":37627},{"style":1105},[37628],{"type":40,"value":37260},{"type":30,"tag":1046,"props":37630,"children":37631},{"style":1070},[37632],{"type":40,"value":1113},{"type":30,"tag":1046,"props":37634,"children":37635},{"class":1048,"line":4545},[37636,37640,37644,37648,37652,37656,37660],{"type":30,"tag":1046,"props":37637,"children":37638},{"style":1780},[37639],{"type":40,"value":1783},{"type":30,"tag":1046,"props":37641,"children":37642},{"style":1070},[37643],{"type":40,"value":1179},{"type":30,"tag":1046,"props":37645,"children":37646},{"style":1105},[37647],{"type":40,"value":37435},{"type":30,"tag":1046,"props":37649,"children":37650},{"style":1795},[37651],{"type":40,"value":1798},{"type":30,"tag":1046,"props":37653,"children":37654},{"style":1105},[37655],{"type":40,"value":37260},{"type":30,"tag":1046,"props":37657,"children":37658},{"style":1070},[37659],{"type":40,"value":13298},{"type":30,"tag":1046,"props":37661,"children":37662},{"style":3961},[37663],{"type":40,"value":37664}," // Contraintes du carré\n",{"type":30,"tag":1046,"props":37666,"children":37667},{"class":1048,"line":4582},[37668],{"type":30,"tag":1046,"props":37669,"children":37670},{"style":1070},[37671],{"type":40,"value":1207},{"type":30,"tag":1046,"props":37673,"children":37674},{"class":1048,"line":4622},[37675],{"type":30,"tag":1046,"props":37676,"children":37677},{"emptyLinePlaceholder":13},[37678],{"type":40,"value":1121},{"type":30,"tag":1046,"props":37680,"children":37681},{"class":1048,"line":4662},[37682,37686],{"type":30,"tag":1046,"props":37683,"children":37684},{"style":1647},[37685],{"type":40,"value":1828},{"type":30,"tag":1046,"props":37687,"children":37688},{"style":1653},[37689],{"type":40,"value":3258},{"type":30,"tag":1046,"props":37691,"children":37692},{"class":1048,"line":4687},[37693,37697,37701,37705,37709,37713,37717,37721],{"type":30,"tag":1046,"props":37694,"children":37695},{"style":1053},[37696],{"type":40,"value":1130},{"type":30,"tag":1046,"props":37698,"children":37699},{"style":1053},[37700],{"type":40,"value":1135},{"type":30,"tag":1046,"props":37702,"children":37703},{"style":1138},[37704],{"type":40,"value":37399},{"type":30,"tag":1046,"props":37706,"children":37707},{"style":1070},[37708],{"type":40,"value":1146},{"type":30,"tag":1046,"props":37710,"children":37711},{"style":1053},[37712],{"type":40,"value":10323},{"type":30,"tag":1046,"props":37714,"children":37715},{"style":1153},[37716],{"type":40,"value":37280},{"type":30,"tag":1046,"props":37718,"children":37719},{"style":1070},[37720],{"type":40,"value":1161},{"type":30,"tag":1046,"props":37722,"children":37723},{"style":1070},[37724],{"type":40,"value":1073},{"type":30,"tag":1046,"props":37726,"children":37727},{"class":1048,"line":4695},[37728,37732,37736,37740,37744,37748],{"type":30,"tag":1046,"props":37729,"children":37730},{"style":1780},[37731],{"type":40,"value":1783},{"type":30,"tag":1046,"props":37733,"children":37734},{"style":1070},[37735],{"type":40,"value":1179},{"type":30,"tag":1046,"props":37737,"children":37738},{"style":1105},[37739],{"type":40,"value":37435},{"type":30,"tag":1046,"props":37741,"children":37742},{"style":1795},[37743],{"type":40,"value":1798},{"type":30,"tag":1046,"props":37745,"children":37746},{"style":1105},[37747],{"type":40,"value":37280},{"type":30,"tag":1046,"props":37749,"children":37750},{"style":1070},[37751],{"type":40,"value":1113},{"type":30,"tag":1046,"props":37753,"children":37754},{"class":1048,"line":4703},[37755,37759,37763,37767,37771,37775,37779],{"type":30,"tag":1046,"props":37756,"children":37757},{"style":1780},[37758],{"type":40,"value":1783},{"type":30,"tag":1046,"props":37760,"children":37761},{"style":1070},[37762],{"type":40,"value":1179},{"type":30,"tag":1046,"props":37764,"children":37765},{"style":1105},[37766],{"type":40,"value":37343},{"type":30,"tag":1046,"props":37768,"children":37769},{"style":1795},[37770],{"type":40,"value":1798},{"type":30,"tag":1046,"props":37772,"children":37773},{"style":1105},[37774],{"type":40,"value":37280},{"type":30,"tag":1046,"props":37776,"children":37777},{"style":1070},[37778],{"type":40,"value":13298},{"type":30,"tag":1046,"props":37780,"children":37781},{"style":3961},[37782],{"type":40,"value":37664},{"type":30,"tag":1046,"props":37784,"children":37785},{"class":1048,"line":4739},[37786],{"type":30,"tag":1046,"props":37787,"children":37788},{"style":1070},[37789],{"type":40,"value":1207},{"type":30,"tag":1046,"props":37791,"children":37792},{"class":1048,"line":4771},[37793],{"type":30,"tag":1046,"props":37794,"children":37795},{"style":1070},[37796],{"type":40,"value":1423},{"type":30,"tag":43,"props":37798,"children":37799},{},[37800,37802,37807,37809,37814,37816,37822,37823,37829],{"type":40,"value":37801},"À première vue, cela semble correct. Cependant, cette implémentation brise le principe de substitution de Liskov. Si l'on remplace un ",{"type":30,"tag":1042,"props":37803,"children":37805},{"className":37804},[],[37806],{"type":40,"value":37182},{"type":40,"value":37808}," par un ",{"type":30,"tag":1042,"props":37810,"children":37812},{"className":37811},[],[37813],{"type":40,"value":37190},{"type":40,"value":37815},", le comportement de la méthode ",{"type":30,"tag":1042,"props":37817,"children":37819},{"className":37818},[],[37820],{"type":40,"value":37821},"setWidth()",{"type":40,"value":1573},{"type":30,"tag":1042,"props":37824,"children":37826},{"className":37825},[],[37827],{"type":40,"value":37828},"setHeight()",{"type":40,"value":37830}," devient imprévisible. Un carré ne peut pas fonctionner exactement comme un rectangle, car modifier la largeur affecte également la hauteur (et vice versa). Cela peut causer des bugs, notamment si on essaye de modifier indépendamment la largeur et la hauteur d’un carré en tant que rectangle.",{"type":30,"tag":2339,"props":37832,"children":37834},{"id":37833},"exemple-avec-lsp-appliqué",[37835],{"type":40,"value":37836},"Exemple avec LSP appliqué :",{"type":30,"tag":43,"props":37838,"children":37839},{},[37840],{"type":40,"value":37841},"Pour respecter le principe de substitution de Liskov, il est préférable d’éviter d’utiliser l’héritage ici, car un carré n'est pas un rectangle en termes de comportement. Nous devrions plutôt créer des classes distinctes qui n’essaient pas d’être substituées l'une à l'autre.",{"type":30,"tag":1035,"props":37843,"children":37845},{"className":1039,"code":37844,"language":1038,"meta":8,"style":8},"// Classe Rectangle\npublic class Rectangle {\n    private int width;\n    private int height;\n\n    public void setWidth(int width) {\n        this.width = width;\n    }\n\n    public void setHeight(int height) {\n        this.height = height;\n    }\n\n    public int getArea() {\n        return width * height;\n    }\n}\n\n// Classe Square avec son propre comportement\npublic class Square {\n    private int side;\n\n    public void setSide(int side) {\n        this.side = side;\n    }\n\n    public int getArea() {\n        return side * side;\n    }\n}\n",[37846],{"type":30,"tag":1042,"props":37847,"children":37848},{"__ignoreMap":8},[37849,37857,37876,37895,37914,37921,37956,37983,37990,37997,38032,38059,38066,38073,38096,38119,38126,38133,38140,38148,38167,38187,38194,38230,38258,38265,38272,38295,38319,38326],{"type":30,"tag":1046,"props":37850,"children":37851},{"class":1048,"line":1049},[37852],{"type":30,"tag":1046,"props":37853,"children":37854},{"style":3961},[37855],{"type":40,"value":37856},"// Classe Rectangle\n",{"type":30,"tag":1046,"props":37858,"children":37859},{"class":1048,"line":675},[37860,37864,37868,37872],{"type":30,"tag":1046,"props":37861,"children":37862},{"style":1053},[37863],{"type":40,"value":1056},{"type":30,"tag":1046,"props":37865,"children":37866},{"style":1053},[37867],{"type":40,"value":1061},{"type":30,"tag":1046,"props":37869,"children":37870},{"style":1064},[37871],{"type":40,"value":37239},{"type":30,"tag":1046,"props":37873,"children":37874},{"style":1070},[37875],{"type":40,"value":1073},{"type":30,"tag":1046,"props":37877,"children":37878},{"class":1048,"line":681},[37879,37883,37887,37891],{"type":30,"tag":1046,"props":37880,"children":37881},{"style":1053},[37882],{"type":40,"value":1081},{"type":30,"tag":1046,"props":37884,"children":37885},{"style":1053},[37886],{"type":40,"value":10265},{"type":30,"tag":1046,"props":37888,"children":37889},{"style":1105},[37890],{"type":40,"value":37260},{"type":30,"tag":1046,"props":37892,"children":37893},{"style":1070},[37894],{"type":40,"value":1113},{"type":30,"tag":1046,"props":37896,"children":37897},{"class":1048,"line":1124},[37898,37902,37906,37910],{"type":30,"tag":1046,"props":37899,"children":37900},{"style":1053},[37901],{"type":40,"value":1081},{"type":30,"tag":1046,"props":37903,"children":37904},{"style":1053},[37905],{"type":40,"value":10265},{"type":30,"tag":1046,"props":37907,"children":37908},{"style":1105},[37909],{"type":40,"value":37280},{"type":30,"tag":1046,"props":37911,"children":37912},{"style":1070},[37913],{"type":40,"value":1113},{"type":30,"tag":1046,"props":37915,"children":37916},{"class":1048,"line":1168},[37917],{"type":30,"tag":1046,"props":37918,"children":37919},{"emptyLinePlaceholder":13},[37920],{"type":40,"value":1121},{"type":30,"tag":1046,"props":37922,"children":37923},{"class":1048,"line":1201},[37924,37928,37932,37936,37940,37944,37948,37952],{"type":30,"tag":1046,"props":37925,"children":37926},{"style":1053},[37927],{"type":40,"value":1130},{"type":30,"tag":1046,"props":37929,"children":37930},{"style":1053},[37931],{"type":40,"value":1135},{"type":30,"tag":1046,"props":37933,"children":37934},{"style":1138},[37935],{"type":40,"value":37307},{"type":30,"tag":1046,"props":37937,"children":37938},{"style":1070},[37939],{"type":40,"value":1146},{"type":30,"tag":1046,"props":37941,"children":37942},{"style":1053},[37943],{"type":40,"value":10323},{"type":30,"tag":1046,"props":37945,"children":37946},{"style":1153},[37947],{"type":40,"value":37260},{"type":30,"tag":1046,"props":37949,"children":37950},{"style":1070},[37951],{"type":40,"value":1161},{"type":30,"tag":1046,"props":37953,"children":37954},{"style":1070},[37955],{"type":40,"value":1073},{"type":30,"tag":1046,"props":37957,"children":37958},{"class":1048,"line":1210},[37959,37963,37967,37971,37975,37979],{"type":30,"tag":1046,"props":37960,"children":37961},{"style":1780},[37962],{"type":40,"value":1783},{"type":30,"tag":1046,"props":37964,"children":37965},{"style":1070},[37966],{"type":40,"value":1179},{"type":30,"tag":1046,"props":37968,"children":37969},{"style":1105},[37970],{"type":40,"value":37343},{"type":30,"tag":1046,"props":37972,"children":37973},{"style":1795},[37974],{"type":40,"value":1798},{"type":30,"tag":1046,"props":37976,"children":37977},{"style":1105},[37978],{"type":40,"value":37260},{"type":30,"tag":1046,"props":37980,"children":37981},{"style":1070},[37982],{"type":40,"value":1113},{"type":30,"tag":1046,"props":37984,"children":37985},{"class":1048,"line":1218},[37986],{"type":30,"tag":1046,"props":37987,"children":37988},{"style":1070},[37989],{"type":40,"value":1207},{"type":30,"tag":1046,"props":37991,"children":37992},{"class":1048,"line":1255},[37993],{"type":30,"tag":1046,"props":37994,"children":37995},{"emptyLinePlaceholder":13},[37996],{"type":40,"value":1121},{"type":30,"tag":1046,"props":37998,"children":37999},{"class":1048,"line":1284},[38000,38004,38008,38012,38016,38020,38024,38028],{"type":30,"tag":1046,"props":38001,"children":38002},{"style":1053},[38003],{"type":40,"value":1130},{"type":30,"tag":1046,"props":38005,"children":38006},{"style":1053},[38007],{"type":40,"value":1135},{"type":30,"tag":1046,"props":38009,"children":38010},{"style":1138},[38011],{"type":40,"value":37399},{"type":30,"tag":1046,"props":38013,"children":38014},{"style":1070},[38015],{"type":40,"value":1146},{"type":30,"tag":1046,"props":38017,"children":38018},{"style":1053},[38019],{"type":40,"value":10323},{"type":30,"tag":1046,"props":38021,"children":38022},{"style":1153},[38023],{"type":40,"value":37280},{"type":30,"tag":1046,"props":38025,"children":38026},{"style":1070},[38027],{"type":40,"value":1161},{"type":30,"tag":1046,"props":38029,"children":38030},{"style":1070},[38031],{"type":40,"value":1073},{"type":30,"tag":1046,"props":38033,"children":38034},{"class":1048,"line":1292},[38035,38039,38043,38047,38051,38055],{"type":30,"tag":1046,"props":38036,"children":38037},{"style":1780},[38038],{"type":40,"value":1783},{"type":30,"tag":1046,"props":38040,"children":38041},{"style":1070},[38042],{"type":40,"value":1179},{"type":30,"tag":1046,"props":38044,"children":38045},{"style":1105},[38046],{"type":40,"value":37435},{"type":30,"tag":1046,"props":38048,"children":38049},{"style":1795},[38050],{"type":40,"value":1798},{"type":30,"tag":1046,"props":38052,"children":38053},{"style":1105},[38054],{"type":40,"value":37280},{"type":30,"tag":1046,"props":38056,"children":38057},{"style":1070},[38058],{"type":40,"value":1113},{"type":30,"tag":1046,"props":38060,"children":38061},{"class":1048,"line":1300},[38062],{"type":30,"tag":1046,"props":38063,"children":38064},{"style":1070},[38065],{"type":40,"value":1207},{"type":30,"tag":1046,"props":38067,"children":38068},{"class":1048,"line":1327},[38069],{"type":30,"tag":1046,"props":38070,"children":38071},{"emptyLinePlaceholder":13},[38072],{"type":40,"value":1121},{"type":30,"tag":1046,"props":38074,"children":38075},{"class":1048,"line":1354},[38076,38080,38084,38088,38092],{"type":30,"tag":1046,"props":38077,"children":38078},{"style":1053},[38079],{"type":40,"value":1130},{"type":30,"tag":1046,"props":38081,"children":38082},{"style":1053},[38083],{"type":40,"value":10265},{"type":30,"tag":1046,"props":38085,"children":38086},{"style":1138},[38087],{"type":40,"value":37477},{"type":30,"tag":1046,"props":38089,"children":38090},{"style":1070},[38091],{"type":40,"value":1320},{"type":30,"tag":1046,"props":38093,"children":38094},{"style":1070},[38095],{"type":40,"value":1073},{"type":30,"tag":1046,"props":38097,"children":38098},{"class":1048,"line":1391},[38099,38103,38107,38111,38115],{"type":30,"tag":1046,"props":38100,"children":38101},{"style":1053},[38102],{"type":40,"value":1333},{"type":30,"tag":1046,"props":38104,"children":38105},{"style":1105},[38106],{"type":40,"value":37497},{"type":30,"tag":1046,"props":38108,"children":38109},{"style":1795},[38110],{"type":40,"value":21197},{"type":30,"tag":1046,"props":38112,"children":38113},{"style":1105},[38114],{"type":40,"value":37280},{"type":30,"tag":1046,"props":38116,"children":38117},{"style":1070},[38118],{"type":40,"value":1113},{"type":30,"tag":1046,"props":38120,"children":38121},{"class":1048,"line":1409},[38122],{"type":30,"tag":1046,"props":38123,"children":38124},{"style":1070},[38125],{"type":40,"value":1207},{"type":30,"tag":1046,"props":38127,"children":38128},{"class":1048,"line":1417},[38129],{"type":30,"tag":1046,"props":38130,"children":38131},{"style":1070},[38132],{"type":40,"value":1423},{"type":30,"tag":1046,"props":38134,"children":38135},{"class":1048,"line":2023},[38136],{"type":30,"tag":1046,"props":38137,"children":38138},{"emptyLinePlaceholder":13},[38139],{"type":40,"value":1121},{"type":30,"tag":1046,"props":38141,"children":38142},{"class":1048,"line":2083},[38143],{"type":30,"tag":1046,"props":38144,"children":38145},{"style":3961},[38146],{"type":40,"value":38147},"// Classe Square avec son propre comportement\n",{"type":30,"tag":1046,"props":38149,"children":38150},{"class":1048,"line":2126},[38151,38155,38159,38163],{"type":30,"tag":1046,"props":38152,"children":38153},{"style":1053},[38154],{"type":40,"value":1056},{"type":30,"tag":1046,"props":38156,"children":38157},{"style":1053},[38158],{"type":40,"value":1061},{"type":30,"tag":1046,"props":38160,"children":38161},{"style":1064},[38162],{"type":40,"value":37546},{"type":30,"tag":1046,"props":38164,"children":38165},{"style":1070},[38166],{"type":40,"value":1073},{"type":30,"tag":1046,"props":38168,"children":38169},{"class":1048,"line":2159},[38170,38174,38178,38183],{"type":30,"tag":1046,"props":38171,"children":38172},{"style":1053},[38173],{"type":40,"value":1081},{"type":30,"tag":1046,"props":38175,"children":38176},{"style":1053},[38177],{"type":40,"value":10265},{"type":30,"tag":1046,"props":38179,"children":38180},{"style":1105},[38181],{"type":40,"value":38182}," side",{"type":30,"tag":1046,"props":38184,"children":38185},{"style":1070},[38186],{"type":40,"value":1113},{"type":30,"tag":1046,"props":38188,"children":38189},{"class":1048,"line":2167},[38190],{"type":30,"tag":1046,"props":38191,"children":38192},{"emptyLinePlaceholder":13},[38193],{"type":40,"value":1121},{"type":30,"tag":1046,"props":38195,"children":38196},{"class":1048,"line":4537},[38197,38201,38205,38210,38214,38218,38222,38226],{"type":30,"tag":1046,"props":38198,"children":38199},{"style":1053},[38200],{"type":40,"value":1130},{"type":30,"tag":1046,"props":38202,"children":38203},{"style":1053},[38204],{"type":40,"value":1135},{"type":30,"tag":1046,"props":38206,"children":38207},{"style":1138},[38208],{"type":40,"value":38209}," setSide",{"type":30,"tag":1046,"props":38211,"children":38212},{"style":1070},[38213],{"type":40,"value":1146},{"type":30,"tag":1046,"props":38215,"children":38216},{"style":1053},[38217],{"type":40,"value":10323},{"type":30,"tag":1046,"props":38219,"children":38220},{"style":1153},[38221],{"type":40,"value":38182},{"type":30,"tag":1046,"props":38223,"children":38224},{"style":1070},[38225],{"type":40,"value":1161},{"type":30,"tag":1046,"props":38227,"children":38228},{"style":1070},[38229],{"type":40,"value":1073},{"type":30,"tag":1046,"props":38231,"children":38232},{"class":1048,"line":4545},[38233,38237,38241,38246,38250,38254],{"type":30,"tag":1046,"props":38234,"children":38235},{"style":1780},[38236],{"type":40,"value":1783},{"type":30,"tag":1046,"props":38238,"children":38239},{"style":1070},[38240],{"type":40,"value":1179},{"type":30,"tag":1046,"props":38242,"children":38243},{"style":1105},[38244],{"type":40,"value":38245},"side ",{"type":30,"tag":1046,"props":38247,"children":38248},{"style":1795},[38249],{"type":40,"value":1798},{"type":30,"tag":1046,"props":38251,"children":38252},{"style":1105},[38253],{"type":40,"value":38182},{"type":30,"tag":1046,"props":38255,"children":38256},{"style":1070},[38257],{"type":40,"value":1113},{"type":30,"tag":1046,"props":38259,"children":38260},{"class":1048,"line":4582},[38261],{"type":30,"tag":1046,"props":38262,"children":38263},{"style":1070},[38264],{"type":40,"value":1207},{"type":30,"tag":1046,"props":38266,"children":38267},{"class":1048,"line":4622},[38268],{"type":30,"tag":1046,"props":38269,"children":38270},{"emptyLinePlaceholder":13},[38271],{"type":40,"value":1121},{"type":30,"tag":1046,"props":38273,"children":38274},{"class":1048,"line":4662},[38275,38279,38283,38287,38291],{"type":30,"tag":1046,"props":38276,"children":38277},{"style":1053},[38278],{"type":40,"value":1130},{"type":30,"tag":1046,"props":38280,"children":38281},{"style":1053},[38282],{"type":40,"value":10265},{"type":30,"tag":1046,"props":38284,"children":38285},{"style":1138},[38286],{"type":40,"value":37477},{"type":30,"tag":1046,"props":38288,"children":38289},{"style":1070},[38290],{"type":40,"value":1320},{"type":30,"tag":1046,"props":38292,"children":38293},{"style":1070},[38294],{"type":40,"value":1073},{"type":30,"tag":1046,"props":38296,"children":38297},{"class":1048,"line":4687},[38298,38302,38307,38311,38315],{"type":30,"tag":1046,"props":38299,"children":38300},{"style":1053},[38301],{"type":40,"value":1333},{"type":30,"tag":1046,"props":38303,"children":38304},{"style":1105},[38305],{"type":40,"value":38306}," side ",{"type":30,"tag":1046,"props":38308,"children":38309},{"style":1795},[38310],{"type":40,"value":21197},{"type":30,"tag":1046,"props":38312,"children":38313},{"style":1105},[38314],{"type":40,"value":38182},{"type":30,"tag":1046,"props":38316,"children":38317},{"style":1070},[38318],{"type":40,"value":1113},{"type":30,"tag":1046,"props":38320,"children":38321},{"class":1048,"line":4695},[38322],{"type":30,"tag":1046,"props":38323,"children":38324},{"style":1070},[38325],{"type":40,"value":1207},{"type":30,"tag":1046,"props":38327,"children":38328},{"class":1048,"line":4703},[38329],{"type":30,"tag":1046,"props":38330,"children":38331},{"style":1070},[38332],{"type":40,"value":1423},{"type":30,"tag":84,"props":38334,"children":38335},{},[],{"type":30,"tag":19673,"props":38337,"children":38338},{"type":19675},[38339],{"type":30,"tag":43,"props":38340,"children":38341},{},[38342,38347],{"type":30,"tag":36,"props":38343,"children":38344},{},[38345],{"type":40,"value":38346},"Évitez l'héritage si les comportements diffèrent",{"type":40,"value":38348}," trop entre la classe parente et la sous-classe. Utilisez des classes séparées ou le polymorphisme si nécessaire, pour éviter les surprises lors de l'exécution du programme.",{"type":30,"tag":31,"props":38350,"children":38352},{"id":38351},"_4-principe-de-ségrégation-des-interfaces-interface-segregation-principle-isp",[38353],{"type":40,"value":38354},"4. Principe de Ségrégation des Interfaces (Interface Segregation Principle - ISP)",{"type":30,"tag":43,"props":38356,"children":38357},{},[38358],{"type":40,"value":38359},"Le principe de ségrégation des interfaces stipule qu'un client ne doit pas être forcé d'implémenter des interfaces dont il n'a pas besoin. Cela signifie qu’il vaut mieux avoir plusieurs petites interfaces spécifiques à des besoins qu'une seule interface générale contenant des méthodes inutiles pour certains clients.",{"type":30,"tag":116,"props":38361,"children":38363},{"id":38362},"pourquoi-cest-important-3",[38364],{"type":40,"value":35126},{"type":30,"tag":43,"props":38366,"children":38367},{},[38368],{"type":40,"value":38369},"Lorsqu'une interface devient trop grande et généraliste, cela force les classes qui l'implémentent à supporter des méthodes dont elles n'ont pas besoin. Cela conduit à un couplage excessif et rend le code plus difficile à maintenir. En divisant une interface en plusieurs interfaces plus petites et spécifiques, chaque classe implémente uniquement ce dont elle a réellement besoin, rendant le système plus flexible et modulaire.",{"type":30,"tag":116,"props":38371,"children":38373},{"id":38372},"exemple-concret-en-java-3",[38374],{"type":40,"value":35137},{"type":30,"tag":43,"props":38376,"children":38377},{},[38378,38380,38386],{"type":40,"value":38379},"Imaginons que nous ayons un système qui gère différentes sortes d'oiseaux. Nous avons une interface ",{"type":30,"tag":1042,"props":38381,"children":38383},{"className":38382},[],[38384],{"type":40,"value":38385},"Bird",{"type":40,"value":38387}," qui contient des méthodes communes pour les oiseaux.",{"type":30,"tag":2339,"props":38389,"children":38391},{"id":38390},"exemple-sans-isp",[38392],{"type":40,"value":38393},"Exemple sans ISP :",{"type":30,"tag":43,"props":38395,"children":38396},{},[38397],{"type":40,"value":38398},"Voici une interface qui regroupe trop de responsabilités :",{"type":30,"tag":1035,"props":38400,"children":38402},{"className":1039,"code":38401,"language":1038,"meta":8,"style":8},"public interface Bird {\n    void fly();\n    void swim();\n    void makeSound();\n}\n",[38403],{"type":30,"tag":1042,"props":38404,"children":38405},{"__ignoreMap":8},[38406,38426,38442,38458,38474],{"type":30,"tag":1046,"props":38407,"children":38408},{"class":1048,"line":1049},[38409,38413,38417,38422],{"type":30,"tag":1046,"props":38410,"children":38411},{"style":1053},[38412],{"type":40,"value":1056},{"type":30,"tag":1046,"props":38414,"children":38415},{"style":1053},[38416],{"type":40,"value":4852},{"type":30,"tag":1046,"props":38418,"children":38419},{"style":1064},[38420],{"type":40,"value":38421}," Bird",{"type":30,"tag":1046,"props":38423,"children":38424},{"style":1070},[38425],{"type":40,"value":1073},{"type":30,"tag":1046,"props":38427,"children":38428},{"class":1048,"line":675},[38429,38433,38438],{"type":30,"tag":1046,"props":38430,"children":38431},{"style":1053},[38432],{"type":40,"value":4908},{"type":30,"tag":1046,"props":38434,"children":38435},{"style":1138},[38436],{"type":40,"value":38437}," fly",{"type":30,"tag":1046,"props":38439,"children":38440},{"style":1070},[38441],{"type":40,"value":1406},{"type":30,"tag":1046,"props":38443,"children":38444},{"class":1048,"line":681},[38445,38449,38454],{"type":30,"tag":1046,"props":38446,"children":38447},{"style":1053},[38448],{"type":40,"value":4908},{"type":30,"tag":1046,"props":38450,"children":38451},{"style":1138},[38452],{"type":40,"value":38453}," swim",{"type":30,"tag":1046,"props":38455,"children":38456},{"style":1070},[38457],{"type":40,"value":1406},{"type":30,"tag":1046,"props":38459,"children":38460},{"class":1048,"line":1124},[38461,38465,38470],{"type":30,"tag":1046,"props":38462,"children":38463},{"style":1053},[38464],{"type":40,"value":4908},{"type":30,"tag":1046,"props":38466,"children":38467},{"style":1138},[38468],{"type":40,"value":38469}," makeSound",{"type":30,"tag":1046,"props":38471,"children":38472},{"style":1070},[38473],{"type":40,"value":1406},{"type":30,"tag":1046,"props":38475,"children":38476},{"class":1048,"line":1168},[38477],{"type":30,"tag":1046,"props":38478,"children":38479},{"style":1070},[38480],{"type":40,"value":1423},{"type":30,"tag":43,"props":38482,"children":38483},{},[38484,38486,38492,38493,38499,38501,38507],{"type":40,"value":38485},"Toutes les classes qui implémentent cette interface devront fournir des implémentations pour ",{"type":30,"tag":1042,"props":38487,"children":38489},{"className":38488},[],[38490],{"type":40,"value":38491},"fly()",{"type":40,"value":19457},{"type":30,"tag":1042,"props":38494,"children":38496},{"className":38495},[],[38497],{"type":40,"value":38498},"swim()",{"type":40,"value":38500},", et ",{"type":30,"tag":1042,"props":38502,"children":38504},{"className":38503},[],[38505],{"type":40,"value":38506},"makeSound()",{"type":40,"value":38508},". Cela peut poser problème pour des oiseaux comme les pingouins, qui ne volent pas mais nagent, ou les autruches, qui ne nagent ni ne volent.",{"type":30,"tag":43,"props":38510,"children":38511},{},[38512],{"type":40,"value":38513},"Voici une implémentation pour un pingouin, qui enfreint clairement l'ISP :",{"type":30,"tag":1035,"props":38515,"children":38517},{"className":1039,"code":38516,"language":1038,"meta":8,"style":8},"public class Penguin implements Bird {\n    @Override\n    public void fly() {\n        // Pingouin ne peut pas voler, on laisse la méthode vide\n    }\n\n    @Override\n    public void swim() {\n        System.out.println(\"Le pingouin nage.\");\n    }\n\n    @Override\n    public void makeSound() {\n        System.out.println(\"Le pingouin émet un son.\");\n    }\n}\n",[38518],{"type":30,"tag":1042,"props":38519,"children":38520},{"__ignoreMap":8},[38521,38549,38560,38583,38591,38598,38605,38616,38639,38675,38682,38689,38700,38723,38759,38766],{"type":30,"tag":1046,"props":38522,"children":38523},{"class":1048,"line":1049},[38524,38528,38532,38537,38541,38545],{"type":30,"tag":1046,"props":38525,"children":38526},{"style":1053},[38527],{"type":40,"value":1056},{"type":30,"tag":1046,"props":38529,"children":38530},{"style":1053},[38531],{"type":40,"value":1061},{"type":30,"tag":1046,"props":38533,"children":38534},{"style":1064},[38535],{"type":40,"value":38536}," Penguin",{"type":30,"tag":1046,"props":38538,"children":38539},{"style":1053},[38540],{"type":40,"value":3166},{"type":30,"tag":1046,"props":38542,"children":38543},{"style":1064},[38544],{"type":40,"value":38421},{"type":30,"tag":1046,"props":38546,"children":38547},{"style":1070},[38548],{"type":40,"value":1073},{"type":30,"tag":1046,"props":38550,"children":38551},{"class":1048,"line":675},[38552,38556],{"type":30,"tag":1046,"props":38553,"children":38554},{"style":1647},[38555],{"type":40,"value":1828},{"type":30,"tag":1046,"props":38557,"children":38558},{"style":1653},[38559],{"type":40,"value":3258},{"type":30,"tag":1046,"props":38561,"children":38562},{"class":1048,"line":681},[38563,38567,38571,38575,38579],{"type":30,"tag":1046,"props":38564,"children":38565},{"style":1053},[38566],{"type":40,"value":1130},{"type":30,"tag":1046,"props":38568,"children":38569},{"style":1053},[38570],{"type":40,"value":1135},{"type":30,"tag":1046,"props":38572,"children":38573},{"style":1138},[38574],{"type":40,"value":38437},{"type":30,"tag":1046,"props":38576,"children":38577},{"style":1070},[38578],{"type":40,"value":1320},{"type":30,"tag":1046,"props":38580,"children":38581},{"style":1070},[38582],{"type":40,"value":1073},{"type":30,"tag":1046,"props":38584,"children":38585},{"class":1048,"line":1124},[38586],{"type":30,"tag":1046,"props":38587,"children":38588},{"style":3961},[38589],{"type":40,"value":38590},"        // Pingouin ne peut pas voler, on laisse la méthode vide\n",{"type":30,"tag":1046,"props":38592,"children":38593},{"class":1048,"line":1168},[38594],{"type":30,"tag":1046,"props":38595,"children":38596},{"style":1070},[38597],{"type":40,"value":1207},{"type":30,"tag":1046,"props":38599,"children":38600},{"class":1048,"line":1201},[38601],{"type":30,"tag":1046,"props":38602,"children":38603},{"emptyLinePlaceholder":13},[38604],{"type":40,"value":1121},{"type":30,"tag":1046,"props":38606,"children":38607},{"class":1048,"line":1210},[38608,38612],{"type":30,"tag":1046,"props":38609,"children":38610},{"style":1647},[38611],{"type":40,"value":1828},{"type":30,"tag":1046,"props":38613,"children":38614},{"style":1653},[38615],{"type":40,"value":3258},{"type":30,"tag":1046,"props":38617,"children":38618},{"class":1048,"line":1218},[38619,38623,38627,38631,38635],{"type":30,"tag":1046,"props":38620,"children":38621},{"style":1053},[38622],{"type":40,"value":1130},{"type":30,"tag":1046,"props":38624,"children":38625},{"style":1053},[38626],{"type":40,"value":1135},{"type":30,"tag":1046,"props":38628,"children":38629},{"style":1138},[38630],{"type":40,"value":38453},{"type":30,"tag":1046,"props":38632,"children":38633},{"style":1070},[38634],{"type":40,"value":1320},{"type":30,"tag":1046,"props":38636,"children":38637},{"style":1070},[38638],{"type":40,"value":1073},{"type":30,"tag":1046,"props":38640,"children":38641},{"class":1048,"line":1255},[38642,38646,38650,38654,38658,38662,38666,38671],{"type":30,"tag":1046,"props":38643,"children":38644},{"style":1105},[38645],{"type":40,"value":12555},{"type":30,"tag":1046,"props":38647,"children":38648},{"style":1070},[38649],{"type":40,"value":1179},{"type":30,"tag":1046,"props":38651,"children":38652},{"style":1105},[38653],{"type":40,"value":12564},{"type":30,"tag":1046,"props":38655,"children":38656},{"style":1070},[38657],{"type":40,"value":1179},{"type":30,"tag":1046,"props":38659,"children":38660},{"style":1138},[38661],{"type":40,"value":12573},{"type":30,"tag":1046,"props":38663,"children":38664},{"style":1070},[38665],{"type":40,"value":1146},{"type":30,"tag":1046,"props":38667,"children":38668},{"style":1675},[38669],{"type":40,"value":38670},"\"Le pingouin nage.\"",{"type":30,"tag":1046,"props":38672,"children":38673},{"style":1070},[38674],{"type":40,"value":1198},{"type":30,"tag":1046,"props":38676,"children":38677},{"class":1048,"line":1284},[38678],{"type":30,"tag":1046,"props":38679,"children":38680},{"style":1070},[38681],{"type":40,"value":1207},{"type":30,"tag":1046,"props":38683,"children":38684},{"class":1048,"line":1292},[38685],{"type":30,"tag":1046,"props":38686,"children":38687},{"emptyLinePlaceholder":13},[38688],{"type":40,"value":1121},{"type":30,"tag":1046,"props":38690,"children":38691},{"class":1048,"line":1300},[38692,38696],{"type":30,"tag":1046,"props":38693,"children":38694},{"style":1647},[38695],{"type":40,"value":1828},{"type":30,"tag":1046,"props":38697,"children":38698},{"style":1653},[38699],{"type":40,"value":3258},{"type":30,"tag":1046,"props":38701,"children":38702},{"class":1048,"line":1327},[38703,38707,38711,38715,38719],{"type":30,"tag":1046,"props":38704,"children":38705},{"style":1053},[38706],{"type":40,"value":1130},{"type":30,"tag":1046,"props":38708,"children":38709},{"style":1053},[38710],{"type":40,"value":1135},{"type":30,"tag":1046,"props":38712,"children":38713},{"style":1138},[38714],{"type":40,"value":38469},{"type":30,"tag":1046,"props":38716,"children":38717},{"style":1070},[38718],{"type":40,"value":1320},{"type":30,"tag":1046,"props":38720,"children":38721},{"style":1070},[38722],{"type":40,"value":1073},{"type":30,"tag":1046,"props":38724,"children":38725},{"class":1048,"line":1354},[38726,38730,38734,38738,38742,38746,38750,38755],{"type":30,"tag":1046,"props":38727,"children":38728},{"style":1105},[38729],{"type":40,"value":12555},{"type":30,"tag":1046,"props":38731,"children":38732},{"style":1070},[38733],{"type":40,"value":1179},{"type":30,"tag":1046,"props":38735,"children":38736},{"style":1105},[38737],{"type":40,"value":12564},{"type":30,"tag":1046,"props":38739,"children":38740},{"style":1070},[38741],{"type":40,"value":1179},{"type":30,"tag":1046,"props":38743,"children":38744},{"style":1138},[38745],{"type":40,"value":12573},{"type":30,"tag":1046,"props":38747,"children":38748},{"style":1070},[38749],{"type":40,"value":1146},{"type":30,"tag":1046,"props":38751,"children":38752},{"style":1675},[38753],{"type":40,"value":38754},"\"Le pingouin émet un son.\"",{"type":30,"tag":1046,"props":38756,"children":38757},{"style":1070},[38758],{"type":40,"value":1198},{"type":30,"tag":1046,"props":38760,"children":38761},{"class":1048,"line":1391},[38762],{"type":30,"tag":1046,"props":38763,"children":38764},{"style":1070},[38765],{"type":40,"value":1207},{"type":30,"tag":1046,"props":38767,"children":38768},{"class":1048,"line":1409},[38769],{"type":30,"tag":1046,"props":38770,"children":38771},{"style":1070},[38772],{"type":40,"value":1423},{"type":30,"tag":43,"props":38774,"children":38775},{},[38776,38778,38783,38785,38790],{"type":40,"value":38777},"La méthode ",{"type":30,"tag":1042,"props":38779,"children":38781},{"className":38780},[],[38782],{"type":40,"value":38491},{"type":40,"value":38784}," est ici inutile, mais nous devons quand même la définir parce que l'interface ",{"type":30,"tag":1042,"props":38786,"children":38788},{"className":38787},[],[38789],{"type":40,"value":38385},{"type":40,"value":38791}," l'impose. Cela entraîne du code mort et une mauvaise conception.",{"type":30,"tag":2339,"props":38793,"children":38795},{"id":38794},"exemple-avec-isp-appliqué",[38796],{"type":40,"value":38797},"Exemple avec ISP appliqué :",{"type":30,"tag":43,"props":38799,"children":38800},{},[38801,38803,38808],{"type":40,"value":38802},"Pour corriger cela, nous allons séparer l'interface ",{"type":30,"tag":1042,"props":38804,"children":38806},{"className":38805},[],[38807],{"type":40,"value":38385},{"type":40,"value":38809}," en plusieurs petites interfaces spécifiques à des capacités d’oiseaux.",{"type":30,"tag":1035,"props":38811,"children":38813},{"className":1039,"code":38812,"language":1038,"meta":8,"style":8},"// Interface pour les oiseaux qui volent\npublic interface FlyingBird {\n    void fly();\n}\n\n// Interface pour les oiseaux qui nagent\npublic interface SwimmingBird {\n    void swim();\n}\n\n// Interface pour les oiseaux qui émettent des sons\npublic interface SoundingBird {\n    void makeSound();\n}\n",[38814],{"type":30,"tag":1042,"props":38815,"children":38816},{"__ignoreMap":8},[38817,38825,38845,38860,38867,38874,38882,38902,38917,38924,38931,38939,38959,38974],{"type":30,"tag":1046,"props":38818,"children":38819},{"class":1048,"line":1049},[38820],{"type":30,"tag":1046,"props":38821,"children":38822},{"style":3961},[38823],{"type":40,"value":38824},"// Interface pour les oiseaux qui volent\n",{"type":30,"tag":1046,"props":38826,"children":38827},{"class":1048,"line":675},[38828,38832,38836,38841],{"type":30,"tag":1046,"props":38829,"children":38830},{"style":1053},[38831],{"type":40,"value":1056},{"type":30,"tag":1046,"props":38833,"children":38834},{"style":1053},[38835],{"type":40,"value":4852},{"type":30,"tag":1046,"props":38837,"children":38838},{"style":1064},[38839],{"type":40,"value":38840}," FlyingBird",{"type":30,"tag":1046,"props":38842,"children":38843},{"style":1070},[38844],{"type":40,"value":1073},{"type":30,"tag":1046,"props":38846,"children":38847},{"class":1048,"line":681},[38848,38852,38856],{"type":30,"tag":1046,"props":38849,"children":38850},{"style":1053},[38851],{"type":40,"value":4908},{"type":30,"tag":1046,"props":38853,"children":38854},{"style":1138},[38855],{"type":40,"value":38437},{"type":30,"tag":1046,"props":38857,"children":38858},{"style":1070},[38859],{"type":40,"value":1406},{"type":30,"tag":1046,"props":38861,"children":38862},{"class":1048,"line":1124},[38863],{"type":30,"tag":1046,"props":38864,"children":38865},{"style":1070},[38866],{"type":40,"value":1423},{"type":30,"tag":1046,"props":38868,"children":38869},{"class":1048,"line":1168},[38870],{"type":30,"tag":1046,"props":38871,"children":38872},{"emptyLinePlaceholder":13},[38873],{"type":40,"value":1121},{"type":30,"tag":1046,"props":38875,"children":38876},{"class":1048,"line":1201},[38877],{"type":30,"tag":1046,"props":38878,"children":38879},{"style":3961},[38880],{"type":40,"value":38881},"// Interface pour les oiseaux qui nagent\n",{"type":30,"tag":1046,"props":38883,"children":38884},{"class":1048,"line":1210},[38885,38889,38893,38898],{"type":30,"tag":1046,"props":38886,"children":38887},{"style":1053},[38888],{"type":40,"value":1056},{"type":30,"tag":1046,"props":38890,"children":38891},{"style":1053},[38892],{"type":40,"value":4852},{"type":30,"tag":1046,"props":38894,"children":38895},{"style":1064},[38896],{"type":40,"value":38897}," SwimmingBird",{"type":30,"tag":1046,"props":38899,"children":38900},{"style":1070},[38901],{"type":40,"value":1073},{"type":30,"tag":1046,"props":38903,"children":38904},{"class":1048,"line":1218},[38905,38909,38913],{"type":30,"tag":1046,"props":38906,"children":38907},{"style":1053},[38908],{"type":40,"value":4908},{"type":30,"tag":1046,"props":38910,"children":38911},{"style":1138},[38912],{"type":40,"value":38453},{"type":30,"tag":1046,"props":38914,"children":38915},{"style":1070},[38916],{"type":40,"value":1406},{"type":30,"tag":1046,"props":38918,"children":38919},{"class":1048,"line":1255},[38920],{"type":30,"tag":1046,"props":38921,"children":38922},{"style":1070},[38923],{"type":40,"value":1423},{"type":30,"tag":1046,"props":38925,"children":38926},{"class":1048,"line":1284},[38927],{"type":30,"tag":1046,"props":38928,"children":38929},{"emptyLinePlaceholder":13},[38930],{"type":40,"value":1121},{"type":30,"tag":1046,"props":38932,"children":38933},{"class":1048,"line":1292},[38934],{"type":30,"tag":1046,"props":38935,"children":38936},{"style":3961},[38937],{"type":40,"value":38938},"// Interface pour les oiseaux qui émettent des sons\n",{"type":30,"tag":1046,"props":38940,"children":38941},{"class":1048,"line":1300},[38942,38946,38950,38955],{"type":30,"tag":1046,"props":38943,"children":38944},{"style":1053},[38945],{"type":40,"value":1056},{"type":30,"tag":1046,"props":38947,"children":38948},{"style":1053},[38949],{"type":40,"value":4852},{"type":30,"tag":1046,"props":38951,"children":38952},{"style":1064},[38953],{"type":40,"value":38954}," SoundingBird",{"type":30,"tag":1046,"props":38956,"children":38957},{"style":1070},[38958],{"type":40,"value":1073},{"type":30,"tag":1046,"props":38960,"children":38961},{"class":1048,"line":1327},[38962,38966,38970],{"type":30,"tag":1046,"props":38963,"children":38964},{"style":1053},[38965],{"type":40,"value":4908},{"type":30,"tag":1046,"props":38967,"children":38968},{"style":1138},[38969],{"type":40,"value":38469},{"type":30,"tag":1046,"props":38971,"children":38972},{"style":1070},[38973],{"type":40,"value":1406},{"type":30,"tag":1046,"props":38975,"children":38976},{"class":1048,"line":1354},[38977],{"type":30,"tag":1046,"props":38978,"children":38979},{"style":1070},[38980],{"type":40,"value":1423},{"type":30,"tag":43,"props":38982,"children":38983},{},[38984],{"type":40,"value":38985},"Maintenant, nous pouvons créer des classes qui implémentent uniquement les interfaces dont elles ont besoin :",{"type":30,"tag":1035,"props":38987,"children":38989},{"className":1039,"code":38988,"language":1038,"meta":8,"style":8},"// Le pingouin nage et émet des sons, mais ne vole pas\npublic class Penguin implements SwimmingBird, SoundingBird {\n    @Override\n    public void swim() {\n        System.out.println(\"Le pingouin nage.\");\n    }\n\n    @Override\n    public void makeSound() {\n        System.out.println(\"Le pingouin émet un son.\");\n    }\n}\n\n// L'aigle vole et émet des sons\npublic class Eagle implements FlyingBird, SoundingBird {\n    @Override\n    public void fly() {\n        System.out.println(\"L'aigle vole.\");\n    }\n\n    @Override\n    public void makeSound() {\n        System.out.println(\"L'aigle émet un son.\");\n    }\n}\n",[38990],{"type":30,"tag":1042,"props":38991,"children":38992},{"__ignoreMap":8},[38993,39001,39036,39047,39070,39105,39112,39119,39130,39153,39188,39195,39202,39209,39217,39253,39264,39287,39323,39330,39337,39348,39371,39407,39414],{"type":30,"tag":1046,"props":38994,"children":38995},{"class":1048,"line":1049},[38996],{"type":30,"tag":1046,"props":38997,"children":38998},{"style":3961},[38999],{"type":40,"value":39000},"// Le pingouin nage et émet des sons, mais ne vole pas\n",{"type":30,"tag":1046,"props":39002,"children":39003},{"class":1048,"line":675},[39004,39008,39012,39016,39020,39024,39028,39032],{"type":30,"tag":1046,"props":39005,"children":39006},{"style":1053},[39007],{"type":40,"value":1056},{"type":30,"tag":1046,"props":39009,"children":39010},{"style":1053},[39011],{"type":40,"value":1061},{"type":30,"tag":1046,"props":39013,"children":39014},{"style":1064},[39015],{"type":40,"value":38536},{"type":30,"tag":1046,"props":39017,"children":39018},{"style":1053},[39019],{"type":40,"value":3166},{"type":30,"tag":1046,"props":39021,"children":39022},{"style":1064},[39023],{"type":40,"value":38897},{"type":30,"tag":1046,"props":39025,"children":39026},{"style":1070},[39027],{"type":40,"value":2891},{"type":30,"tag":1046,"props":39029,"children":39030},{"style":1064},[39031],{"type":40,"value":38954},{"type":30,"tag":1046,"props":39033,"children":39034},{"style":1070},[39035],{"type":40,"value":1073},{"type":30,"tag":1046,"props":39037,"children":39038},{"class":1048,"line":681},[39039,39043],{"type":30,"tag":1046,"props":39040,"children":39041},{"style":1647},[39042],{"type":40,"value":1828},{"type":30,"tag":1046,"props":39044,"children":39045},{"style":1653},[39046],{"type":40,"value":3258},{"type":30,"tag":1046,"props":39048,"children":39049},{"class":1048,"line":1124},[39050,39054,39058,39062,39066],{"type":30,"tag":1046,"props":39051,"children":39052},{"style":1053},[39053],{"type":40,"value":1130},{"type":30,"tag":1046,"props":39055,"children":39056},{"style":1053},[39057],{"type":40,"value":1135},{"type":30,"tag":1046,"props":39059,"children":39060},{"style":1138},[39061],{"type":40,"value":38453},{"type":30,"tag":1046,"props":39063,"children":39064},{"style":1070},[39065],{"type":40,"value":1320},{"type":30,"tag":1046,"props":39067,"children":39068},{"style":1070},[39069],{"type":40,"value":1073},{"type":30,"tag":1046,"props":39071,"children":39072},{"class":1048,"line":1168},[39073,39077,39081,39085,39089,39093,39097,39101],{"type":30,"tag":1046,"props":39074,"children":39075},{"style":1105},[39076],{"type":40,"value":12555},{"type":30,"tag":1046,"props":39078,"children":39079},{"style":1070},[39080],{"type":40,"value":1179},{"type":30,"tag":1046,"props":39082,"children":39083},{"style":1105},[39084],{"type":40,"value":12564},{"type":30,"tag":1046,"props":39086,"children":39087},{"style":1070},[39088],{"type":40,"value":1179},{"type":30,"tag":1046,"props":39090,"children":39091},{"style":1138},[39092],{"type":40,"value":12573},{"type":30,"tag":1046,"props":39094,"children":39095},{"style":1070},[39096],{"type":40,"value":1146},{"type":30,"tag":1046,"props":39098,"children":39099},{"style":1675},[39100],{"type":40,"value":38670},{"type":30,"tag":1046,"props":39102,"children":39103},{"style":1070},[39104],{"type":40,"value":1198},{"type":30,"tag":1046,"props":39106,"children":39107},{"class":1048,"line":1201},[39108],{"type":30,"tag":1046,"props":39109,"children":39110},{"style":1070},[39111],{"type":40,"value":1207},{"type":30,"tag":1046,"props":39113,"children":39114},{"class":1048,"line":1210},[39115],{"type":30,"tag":1046,"props":39116,"children":39117},{"emptyLinePlaceholder":13},[39118],{"type":40,"value":1121},{"type":30,"tag":1046,"props":39120,"children":39121},{"class":1048,"line":1218},[39122,39126],{"type":30,"tag":1046,"props":39123,"children":39124},{"style":1647},[39125],{"type":40,"value":1828},{"type":30,"tag":1046,"props":39127,"children":39128},{"style":1653},[39129],{"type":40,"value":3258},{"type":30,"tag":1046,"props":39131,"children":39132},{"class":1048,"line":1255},[39133,39137,39141,39145,39149],{"type":30,"tag":1046,"props":39134,"children":39135},{"style":1053},[39136],{"type":40,"value":1130},{"type":30,"tag":1046,"props":39138,"children":39139},{"style":1053},[39140],{"type":40,"value":1135},{"type":30,"tag":1046,"props":39142,"children":39143},{"style":1138},[39144],{"type":40,"value":38469},{"type":30,"tag":1046,"props":39146,"children":39147},{"style":1070},[39148],{"type":40,"value":1320},{"type":30,"tag":1046,"props":39150,"children":39151},{"style":1070},[39152],{"type":40,"value":1073},{"type":30,"tag":1046,"props":39154,"children":39155},{"class":1048,"line":1284},[39156,39160,39164,39168,39172,39176,39180,39184],{"type":30,"tag":1046,"props":39157,"children":39158},{"style":1105},[39159],{"type":40,"value":12555},{"type":30,"tag":1046,"props":39161,"children":39162},{"style":1070},[39163],{"type":40,"value":1179},{"type":30,"tag":1046,"props":39165,"children":39166},{"style":1105},[39167],{"type":40,"value":12564},{"type":30,"tag":1046,"props":39169,"children":39170},{"style":1070},[39171],{"type":40,"value":1179},{"type":30,"tag":1046,"props":39173,"children":39174},{"style":1138},[39175],{"type":40,"value":12573},{"type":30,"tag":1046,"props":39177,"children":39178},{"style":1070},[39179],{"type":40,"value":1146},{"type":30,"tag":1046,"props":39181,"children":39182},{"style":1675},[39183],{"type":40,"value":38754},{"type":30,"tag":1046,"props":39185,"children":39186},{"style":1070},[39187],{"type":40,"value":1198},{"type":30,"tag":1046,"props":39189,"children":39190},{"class":1048,"line":1292},[39191],{"type":30,"tag":1046,"props":39192,"children":39193},{"style":1070},[39194],{"type":40,"value":1207},{"type":30,"tag":1046,"props":39196,"children":39197},{"class":1048,"line":1300},[39198],{"type":30,"tag":1046,"props":39199,"children":39200},{"style":1070},[39201],{"type":40,"value":1423},{"type":30,"tag":1046,"props":39203,"children":39204},{"class":1048,"line":1327},[39205],{"type":30,"tag":1046,"props":39206,"children":39207},{"emptyLinePlaceholder":13},[39208],{"type":40,"value":1121},{"type":30,"tag":1046,"props":39210,"children":39211},{"class":1048,"line":1354},[39212],{"type":30,"tag":1046,"props":39213,"children":39214},{"style":3961},[39215],{"type":40,"value":39216},"// L'aigle vole et émet des sons\n",{"type":30,"tag":1046,"props":39218,"children":39219},{"class":1048,"line":1391},[39220,39224,39228,39233,39237,39241,39245,39249],{"type":30,"tag":1046,"props":39221,"children":39222},{"style":1053},[39223],{"type":40,"value":1056},{"type":30,"tag":1046,"props":39225,"children":39226},{"style":1053},[39227],{"type":40,"value":1061},{"type":30,"tag":1046,"props":39229,"children":39230},{"style":1064},[39231],{"type":40,"value":39232}," Eagle",{"type":30,"tag":1046,"props":39234,"children":39235},{"style":1053},[39236],{"type":40,"value":3166},{"type":30,"tag":1046,"props":39238,"children":39239},{"style":1064},[39240],{"type":40,"value":38840},{"type":30,"tag":1046,"props":39242,"children":39243},{"style":1070},[39244],{"type":40,"value":2891},{"type":30,"tag":1046,"props":39246,"children":39247},{"style":1064},[39248],{"type":40,"value":38954},{"type":30,"tag":1046,"props":39250,"children":39251},{"style":1070},[39252],{"type":40,"value":1073},{"type":30,"tag":1046,"props":39254,"children":39255},{"class":1048,"line":1409},[39256,39260],{"type":30,"tag":1046,"props":39257,"children":39258},{"style":1647},[39259],{"type":40,"value":1828},{"type":30,"tag":1046,"props":39261,"children":39262},{"style":1653},[39263],{"type":40,"value":3258},{"type":30,"tag":1046,"props":39265,"children":39266},{"class":1048,"line":1417},[39267,39271,39275,39279,39283],{"type":30,"tag":1046,"props":39268,"children":39269},{"style":1053},[39270],{"type":40,"value":1130},{"type":30,"tag":1046,"props":39272,"children":39273},{"style":1053},[39274],{"type":40,"value":1135},{"type":30,"tag":1046,"props":39276,"children":39277},{"style":1138},[39278],{"type":40,"value":38437},{"type":30,"tag":1046,"props":39280,"children":39281},{"style":1070},[39282],{"type":40,"value":1320},{"type":30,"tag":1046,"props":39284,"children":39285},{"style":1070},[39286],{"type":40,"value":1073},{"type":30,"tag":1046,"props":39288,"children":39289},{"class":1048,"line":2023},[39290,39294,39298,39302,39306,39310,39314,39319],{"type":30,"tag":1046,"props":39291,"children":39292},{"style":1105},[39293],{"type":40,"value":12555},{"type":30,"tag":1046,"props":39295,"children":39296},{"style":1070},[39297],{"type":40,"value":1179},{"type":30,"tag":1046,"props":39299,"children":39300},{"style":1105},[39301],{"type":40,"value":12564},{"type":30,"tag":1046,"props":39303,"children":39304},{"style":1070},[39305],{"type":40,"value":1179},{"type":30,"tag":1046,"props":39307,"children":39308},{"style":1138},[39309],{"type":40,"value":12573},{"type":30,"tag":1046,"props":39311,"children":39312},{"style":1070},[39313],{"type":40,"value":1146},{"type":30,"tag":1046,"props":39315,"children":39316},{"style":1675},[39317],{"type":40,"value":39318},"\"L'aigle vole.\"",{"type":30,"tag":1046,"props":39320,"children":39321},{"style":1070},[39322],{"type":40,"value":1198},{"type":30,"tag":1046,"props":39324,"children":39325},{"class":1048,"line":2083},[39326],{"type":30,"tag":1046,"props":39327,"children":39328},{"style":1070},[39329],{"type":40,"value":1207},{"type":30,"tag":1046,"props":39331,"children":39332},{"class":1048,"line":2126},[39333],{"type":30,"tag":1046,"props":39334,"children":39335},{"emptyLinePlaceholder":13},[39336],{"type":40,"value":1121},{"type":30,"tag":1046,"props":39338,"children":39339},{"class":1048,"line":2159},[39340,39344],{"type":30,"tag":1046,"props":39341,"children":39342},{"style":1647},[39343],{"type":40,"value":1828},{"type":30,"tag":1046,"props":39345,"children":39346},{"style":1653},[39347],{"type":40,"value":3258},{"type":30,"tag":1046,"props":39349,"children":39350},{"class":1048,"line":2167},[39351,39355,39359,39363,39367],{"type":30,"tag":1046,"props":39352,"children":39353},{"style":1053},[39354],{"type":40,"value":1130},{"type":30,"tag":1046,"props":39356,"children":39357},{"style":1053},[39358],{"type":40,"value":1135},{"type":30,"tag":1046,"props":39360,"children":39361},{"style":1138},[39362],{"type":40,"value":38469},{"type":30,"tag":1046,"props":39364,"children":39365},{"style":1070},[39366],{"type":40,"value":1320},{"type":30,"tag":1046,"props":39368,"children":39369},{"style":1070},[39370],{"type":40,"value":1073},{"type":30,"tag":1046,"props":39372,"children":39373},{"class":1048,"line":4537},[39374,39378,39382,39386,39390,39394,39398,39403],{"type":30,"tag":1046,"props":39375,"children":39376},{"style":1105},[39377],{"type":40,"value":12555},{"type":30,"tag":1046,"props":39379,"children":39380},{"style":1070},[39381],{"type":40,"value":1179},{"type":30,"tag":1046,"props":39383,"children":39384},{"style":1105},[39385],{"type":40,"value":12564},{"type":30,"tag":1046,"props":39387,"children":39388},{"style":1070},[39389],{"type":40,"value":1179},{"type":30,"tag":1046,"props":39391,"children":39392},{"style":1138},[39393],{"type":40,"value":12573},{"type":30,"tag":1046,"props":39395,"children":39396},{"style":1070},[39397],{"type":40,"value":1146},{"type":30,"tag":1046,"props":39399,"children":39400},{"style":1675},[39401],{"type":40,"value":39402},"\"L'aigle émet un son.\"",{"type":30,"tag":1046,"props":39404,"children":39405},{"style":1070},[39406],{"type":40,"value":1198},{"type":30,"tag":1046,"props":39408,"children":39409},{"class":1048,"line":4545},[39410],{"type":30,"tag":1046,"props":39411,"children":39412},{"style":1070},[39413],{"type":40,"value":1207},{"type":30,"tag":1046,"props":39415,"children":39416},{"class":1048,"line":4582},[39417],{"type":30,"tag":1046,"props":39418,"children":39419},{"style":1070},[39420],{"type":40,"value":1423},{"type":30,"tag":84,"props":39422,"children":39423},{},[],{"type":30,"tag":19673,"props":39425,"children":39426},{"type":19675},[39427],{"type":30,"tag":43,"props":39428,"children":39429},{},[39430,39435],{"type":30,"tag":36,"props":39431,"children":39432},{},[39433],{"type":40,"value":39434},"Divisez vos interfaces selon les besoins réels",{"type":40,"value":39436},". Ne regroupez pas des méthodes non liées dans une même interface. Cela rendra vos classes plus légères et plus faciles à tester.",{"type":30,"tag":31,"props":39438,"children":39440},{"id":39439},"_5-principe-dinversion-des-dépendances-dependency-inversion-principle-dip",[39441],{"type":40,"value":39442},"5. Principe d'Inversion des Dépendances (Dependency Inversion Principle - DIP)",{"type":30,"tag":43,"props":39444,"children":39445},{},[39446],{"type":40,"value":39447},"Le principe d'inversion des dépendances stipule que les modules de haut niveau ne doivent pas dépendre des modules de bas niveau. Tous deux doivent dépendre d'abstractions. En d'autres termes, plutôt que de lier directement des classes concrètes, il est préférable de dépendre d'interfaces ou de classes abstraites.",{"type":30,"tag":116,"props":39449,"children":39451},{"id":39450},"pourquoi-cest-important-4",[39452],{"type":40,"value":35126},{"type":30,"tag":43,"props":39454,"children":39455},{},[39456],{"type":40,"value":39457},"Lorsque des modules de haut niveau dépendent directement de modules de bas niveau, cela crée un fort couplage entre les composants du système. Cela rend le code rigide, difficile à modifier ou à tester. En introduisant des abstractions, on peut rendre le code plus flexible et facilitant le changement des implémentations de bas niveau sans impacter le reste du système.",{"type":30,"tag":116,"props":39459,"children":39461},{"id":39460},"exemple-concret-en-java-4",[39462],{"type":40,"value":35137},{"type":30,"tag":43,"props":39464,"children":39465},{},[39466,39467,39473],{"type":40,"value":37176},{"type":30,"tag":1042,"props":39468,"children":39470},{"className":39469},[],[39471],{"type":40,"value":39472},"NotificationService",{"type":40,"value":39474}," qui envoie des notifications par email. Si cette classe dépend directement d'une implémentation concrète d'email, nous brisons le DIP.",{"type":30,"tag":2339,"props":39476,"children":39478},{"id":39477},"exemple-sans-dip",[39479],{"type":40,"value":39480},"Exemple sans DIP :",{"type":30,"tag":43,"props":39482,"children":39483},{},[39484,39486,39492],{"type":40,"value":39485},"Voici une implémentation où le service de notification dépend directement de la classe ",{"type":30,"tag":1042,"props":39487,"children":39489},{"className":39488},[],[39490],{"type":40,"value":39491},"EmailService",{"type":40,"value":6296},{"type":30,"tag":1035,"props":39494,"children":39496},{"className":1039,"code":39495,"language":1038,"meta":8,"style":8},"public class EmailService {\n    public void sendEmail(String message) {\n        System.out.println(\"Envoi de l'email : \" + message);\n    }\n}\n\npublic class NotificationService {\n    private EmailService emailService;\n\n    public NotificationService() {\n        this.emailService = new EmailService();\n    }\n\n    public void sendNotification(String message) {\n        emailService.sendEmail(message);\n    }\n}\n",[39497],{"type":30,"tag":1042,"props":39498,"children":39499},{"__ignoreMap":8},[39500,39520,39556,39600,39607,39614,39621,39640,39660,39667,39686,39718,39725,39732,39768,39798,39805],{"type":30,"tag":1046,"props":39501,"children":39502},{"class":1048,"line":1049},[39503,39507,39511,39516],{"type":30,"tag":1046,"props":39504,"children":39505},{"style":1053},[39506],{"type":40,"value":1056},{"type":30,"tag":1046,"props":39508,"children":39509},{"style":1053},[39510],{"type":40,"value":1061},{"type":30,"tag":1046,"props":39512,"children":39513},{"style":1064},[39514],{"type":40,"value":39515}," EmailService",{"type":30,"tag":1046,"props":39517,"children":39518},{"style":1070},[39519],{"type":40,"value":1073},{"type":30,"tag":1046,"props":39521,"children":39522},{"class":1048,"line":675},[39523,39527,39531,39536,39540,39544,39548,39552],{"type":30,"tag":1046,"props":39524,"children":39525},{"style":1053},[39526],{"type":40,"value":1130},{"type":30,"tag":1046,"props":39528,"children":39529},{"style":1053},[39530],{"type":40,"value":1135},{"type":30,"tag":1046,"props":39532,"children":39533},{"style":1138},[39534],{"type":40,"value":39535}," sendEmail",{"type":30,"tag":1046,"props":39537,"children":39538},{"style":1070},[39539],{"type":40,"value":1146},{"type":30,"tag":1046,"props":39541,"children":39542},{"style":1084},[39543],{"type":40,"value":2882},{"type":30,"tag":1046,"props":39545,"children":39546},{"style":1153},[39547],{"type":40,"value":21315},{"type":30,"tag":1046,"props":39549,"children":39550},{"style":1070},[39551],{"type":40,"value":1161},{"type":30,"tag":1046,"props":39553,"children":39554},{"style":1070},[39555],{"type":40,"value":1073},{"type":30,"tag":1046,"props":39557,"children":39558},{"class":1048,"line":681},[39559,39563,39567,39571,39575,39579,39583,39588,39592,39596],{"type":30,"tag":1046,"props":39560,"children":39561},{"style":1105},[39562],{"type":40,"value":12555},{"type":30,"tag":1046,"props":39564,"children":39565},{"style":1070},[39566],{"type":40,"value":1179},{"type":30,"tag":1046,"props":39568,"children":39569},{"style":1105},[39570],{"type":40,"value":12564},{"type":30,"tag":1046,"props":39572,"children":39573},{"style":1070},[39574],{"type":40,"value":1179},{"type":30,"tag":1046,"props":39576,"children":39577},{"style":1138},[39578],{"type":40,"value":12573},{"type":30,"tag":1046,"props":39580,"children":39581},{"style":1070},[39582],{"type":40,"value":1146},{"type":30,"tag":1046,"props":39584,"children":39585},{"style":1675},[39586],{"type":40,"value":39587},"\"Envoi de l'email : \"",{"type":30,"tag":1046,"props":39589,"children":39590},{"style":1795},[39591],{"type":40,"value":7261},{"type":30,"tag":1046,"props":39593,"children":39594},{"style":1105},[39595],{"type":40,"value":21315},{"type":30,"tag":1046,"props":39597,"children":39598},{"style":1070},[39599],{"type":40,"value":1198},{"type":30,"tag":1046,"props":39601,"children":39602},{"class":1048,"line":1124},[39603],{"type":30,"tag":1046,"props":39604,"children":39605},{"style":1070},[39606],{"type":40,"value":1207},{"type":30,"tag":1046,"props":39608,"children":39609},{"class":1048,"line":1168},[39610],{"type":30,"tag":1046,"props":39611,"children":39612},{"style":1070},[39613],{"type":40,"value":1423},{"type":30,"tag":1046,"props":39615,"children":39616},{"class":1048,"line":1201},[39617],{"type":30,"tag":1046,"props":39618,"children":39619},{"emptyLinePlaceholder":13},[39620],{"type":40,"value":1121},{"type":30,"tag":1046,"props":39622,"children":39623},{"class":1048,"line":1210},[39624,39628,39632,39636],{"type":30,"tag":1046,"props":39625,"children":39626},{"style":1053},[39627],{"type":40,"value":1056},{"type":30,"tag":1046,"props":39629,"children":39630},{"style":1053},[39631],{"type":40,"value":1061},{"type":30,"tag":1046,"props":39633,"children":39634},{"style":1064},[39635],{"type":40,"value":22349},{"type":30,"tag":1046,"props":39637,"children":39638},{"style":1070},[39639],{"type":40,"value":1073},{"type":30,"tag":1046,"props":39641,"children":39642},{"class":1048,"line":1218},[39643,39647,39651,39656],{"type":30,"tag":1046,"props":39644,"children":39645},{"style":1053},[39646],{"type":40,"value":1081},{"type":30,"tag":1046,"props":39648,"children":39649},{"style":1084},[39650],{"type":40,"value":39515},{"type":30,"tag":1046,"props":39652,"children":39653},{"style":1105},[39654],{"type":40,"value":39655}," emailService",{"type":30,"tag":1046,"props":39657,"children":39658},{"style":1070},[39659],{"type":40,"value":1113},{"type":30,"tag":1046,"props":39661,"children":39662},{"class":1048,"line":1255},[39663],{"type":30,"tag":1046,"props":39664,"children":39665},{"emptyLinePlaceholder":13},[39666],{"type":40,"value":1121},{"type":30,"tag":1046,"props":39668,"children":39669},{"class":1048,"line":1284},[39670,39674,39678,39682],{"type":30,"tag":1046,"props":39671,"children":39672},{"style":1053},[39673],{"type":40,"value":1130},{"type":30,"tag":1046,"props":39675,"children":39676},{"style":1138},[39677],{"type":40,"value":22349},{"type":30,"tag":1046,"props":39679,"children":39680},{"style":1070},[39681],{"type":40,"value":1320},{"type":30,"tag":1046,"props":39683,"children":39684},{"style":1070},[39685],{"type":40,"value":1073},{"type":30,"tag":1046,"props":39687,"children":39688},{"class":1048,"line":1292},[39689,39693,39697,39702,39706,39710,39714],{"type":30,"tag":1046,"props":39690,"children":39691},{"style":1780},[39692],{"type":40,"value":1783},{"type":30,"tag":1046,"props":39694,"children":39695},{"style":1070},[39696],{"type":40,"value":1179},{"type":30,"tag":1046,"props":39698,"children":39699},{"style":1105},[39700],{"type":40,"value":39701},"emailService ",{"type":30,"tag":1046,"props":39703,"children":39704},{"style":1795},[39705],{"type":40,"value":1798},{"type":30,"tag":1046,"props":39707,"children":39708},{"style":1053},[39709],{"type":40,"value":2480},{"type":30,"tag":1046,"props":39711,"children":39712},{"style":1138},[39713],{"type":40,"value":39515},{"type":30,"tag":1046,"props":39715,"children":39716},{"style":1070},[39717],{"type":40,"value":1406},{"type":30,"tag":1046,"props":39719,"children":39720},{"class":1048,"line":1300},[39721],{"type":30,"tag":1046,"props":39722,"children":39723},{"style":1070},[39724],{"type":40,"value":1207},{"type":30,"tag":1046,"props":39726,"children":39727},{"class":1048,"line":1327},[39728],{"type":30,"tag":1046,"props":39729,"children":39730},{"emptyLinePlaceholder":13},[39731],{"type":40,"value":1121},{"type":30,"tag":1046,"props":39733,"children":39734},{"class":1048,"line":1354},[39735,39739,39743,39748,39752,39756,39760,39764],{"type":30,"tag":1046,"props":39736,"children":39737},{"style":1053},[39738],{"type":40,"value":1130},{"type":30,"tag":1046,"props":39740,"children":39741},{"style":1053},[39742],{"type":40,"value":1135},{"type":30,"tag":1046,"props":39744,"children":39745},{"style":1138},[39746],{"type":40,"value":39747}," sendNotification",{"type":30,"tag":1046,"props":39749,"children":39750},{"style":1070},[39751],{"type":40,"value":1146},{"type":30,"tag":1046,"props":39753,"children":39754},{"style":1084},[39755],{"type":40,"value":2882},{"type":30,"tag":1046,"props":39757,"children":39758},{"style":1153},[39759],{"type":40,"value":21315},{"type":30,"tag":1046,"props":39761,"children":39762},{"style":1070},[39763],{"type":40,"value":1161},{"type":30,"tag":1046,"props":39765,"children":39766},{"style":1070},[39767],{"type":40,"value":1073},{"type":30,"tag":1046,"props":39769,"children":39770},{"class":1048,"line":1391},[39771,39776,39780,39785,39789,39794],{"type":30,"tag":1046,"props":39772,"children":39773},{"style":1105},[39774],{"type":40,"value":39775},"        emailService",{"type":30,"tag":1046,"props":39777,"children":39778},{"style":1070},[39779],{"type":40,"value":1179},{"type":30,"tag":1046,"props":39781,"children":39782},{"style":1138},[39783],{"type":40,"value":39784},"sendEmail",{"type":30,"tag":1046,"props":39786,"children":39787},{"style":1070},[39788],{"type":40,"value":1146},{"type":30,"tag":1046,"props":39790,"children":39791},{"style":1105},[39792],{"type":40,"value":39793},"message",{"type":30,"tag":1046,"props":39795,"children":39796},{"style":1070},[39797],{"type":40,"value":1198},{"type":30,"tag":1046,"props":39799,"children":39800},{"class":1048,"line":1409},[39801],{"type":30,"tag":1046,"props":39802,"children":39803},{"style":1070},[39804],{"type":40,"value":1207},{"type":30,"tag":1046,"props":39806,"children":39807},{"class":1048,"line":1417},[39808],{"type":30,"tag":1046,"props":39809,"children":39810},{"style":1070},[39811],{"type":40,"value":1423},{"type":30,"tag":43,"props":39813,"children":39814},{},[39815,39817,39822,39824,39829,39831,39836],{"type":40,"value":39816},"Dans cet exemple, ",{"type":30,"tag":1042,"props":39818,"children":39820},{"className":39819},[],[39821],{"type":40,"value":39472},{"type":40,"value":39823}," est étroitement couplé à ",{"type":30,"tag":1042,"props":39825,"children":39827},{"className":39826},[],[39828],{"type":40,"value":39491},{"type":40,"value":39830},". Si nous voulions envoyer une notification par SMS au lieu d’un email, nous devrions modifier la classe ",{"type":30,"tag":1042,"props":39832,"children":39834},{"className":39833},[],[39835],{"type":40,"value":39472},{"type":40,"value":39837},", ce qui va à l'encontre du principe DIP.",{"type":30,"tag":2339,"props":39839,"children":39841},{"id":39840},"exemple-avec-dip-appliqué",[39842],{"type":40,"value":39843},"Exemple avec DIP appliqué :",{"type":30,"tag":43,"props":39845,"children":39846},{},[39847,39849,39855],{"type":40,"value":39848},"Pour respecter le principe d'inversion des dépendances, nous allons introduire une abstraction sous forme d'une interface ",{"type":30,"tag":1042,"props":39850,"children":39852},{"className":39851},[],[39853],{"type":40,"value":39854},"NotificationSender",{"type":40,"value":39856}," que toutes les implémentations concrètes (Email, SMS, etc.) respecteront.",{"type":30,"tag":1035,"props":39858,"children":39860},{"className":1039,"code":39859,"language":1038,"meta":8,"style":8},"// Interface pour les services d'envoi de notifications\npublic interface NotificationSender {\n    void send(String message);\n}\n\n// Implémentation pour l'email\npublic class EmailSender implements NotificationSender {\n    @Override\n    public void send(String message) {\n        System.out.println(\"Envoi de l'email : \" + message);\n    }\n}\n\n// Implémentation pour SMS\npublic class SMSSender implements NotificationSender {\n    @Override\n    public void send(String message) {\n        System.out.println(\"Envoi du SMS : \" + message);\n    }\n}\n\n// Service de notification utilisant l'interface NotificationSender\npublic class NotificationService {\n    private NotificationSender sender;\n\n    // Injection de dépendance via le constructeur\n    public NotificationService(NotificationSender sender) {\n        this.sender = sender;\n    }\n\n    public void sendNotification(String message) {\n        sender.send(message);\n    }\n}\n",[39861],{"type":30,"tag":1042,"props":39862,"children":39863},{"__ignoreMap":8},[39864,39872,39892,39920,39927,39934,39942,39970,39981,40016,40059,40066,40073,40080,40088,40116,40127,40162,40206,40213,40220,40227,40235,40254,40274,40281,40289,40320,40348,40355,40362,40397,40426,40433],{"type":30,"tag":1046,"props":39865,"children":39866},{"class":1048,"line":1049},[39867],{"type":30,"tag":1046,"props":39868,"children":39869},{"style":3961},[39870],{"type":40,"value":39871},"// Interface pour les services d'envoi de notifications\n",{"type":30,"tag":1046,"props":39873,"children":39874},{"class":1048,"line":675},[39875,39879,39883,39888],{"type":30,"tag":1046,"props":39876,"children":39877},{"style":1053},[39878],{"type":40,"value":1056},{"type":30,"tag":1046,"props":39880,"children":39881},{"style":1053},[39882],{"type":40,"value":4852},{"type":30,"tag":1046,"props":39884,"children":39885},{"style":1064},[39886],{"type":40,"value":39887}," NotificationSender",{"type":30,"tag":1046,"props":39889,"children":39890},{"style":1070},[39891],{"type":40,"value":1073},{"type":30,"tag":1046,"props":39893,"children":39894},{"class":1048,"line":681},[39895,39899,39904,39908,39912,39916],{"type":30,"tag":1046,"props":39896,"children":39897},{"style":1053},[39898],{"type":40,"value":4908},{"type":30,"tag":1046,"props":39900,"children":39901},{"style":1138},[39902],{"type":40,"value":39903}," send",{"type":30,"tag":1046,"props":39905,"children":39906},{"style":1070},[39907],{"type":40,"value":1146},{"type":30,"tag":1046,"props":39909,"children":39910},{"style":1084},[39911],{"type":40,"value":2882},{"type":30,"tag":1046,"props":39913,"children":39914},{"style":1153},[39915],{"type":40,"value":21315},{"type":30,"tag":1046,"props":39917,"children":39918},{"style":1070},[39919],{"type":40,"value":1198},{"type":30,"tag":1046,"props":39921,"children":39922},{"class":1048,"line":1124},[39923],{"type":30,"tag":1046,"props":39924,"children":39925},{"style":1070},[39926],{"type":40,"value":1423},{"type":30,"tag":1046,"props":39928,"children":39929},{"class":1048,"line":1168},[39930],{"type":30,"tag":1046,"props":39931,"children":39932},{"emptyLinePlaceholder":13},[39933],{"type":40,"value":1121},{"type":30,"tag":1046,"props":39935,"children":39936},{"class":1048,"line":1201},[39937],{"type":30,"tag":1046,"props":39938,"children":39939},{"style":3961},[39940],{"type":40,"value":39941},"// Implémentation pour l'email\n",{"type":30,"tag":1046,"props":39943,"children":39944},{"class":1048,"line":1210},[39945,39949,39953,39958,39962,39966],{"type":30,"tag":1046,"props":39946,"children":39947},{"style":1053},[39948],{"type":40,"value":1056},{"type":30,"tag":1046,"props":39950,"children":39951},{"style":1053},[39952],{"type":40,"value":1061},{"type":30,"tag":1046,"props":39954,"children":39955},{"style":1064},[39956],{"type":40,"value":39957}," EmailSender",{"type":30,"tag":1046,"props":39959,"children":39960},{"style":1053},[39961],{"type":40,"value":3166},{"type":30,"tag":1046,"props":39963,"children":39964},{"style":1064},[39965],{"type":40,"value":39887},{"type":30,"tag":1046,"props":39967,"children":39968},{"style":1070},[39969],{"type":40,"value":1073},{"type":30,"tag":1046,"props":39971,"children":39972},{"class":1048,"line":1218},[39973,39977],{"type":30,"tag":1046,"props":39974,"children":39975},{"style":1647},[39976],{"type":40,"value":1828},{"type":30,"tag":1046,"props":39978,"children":39979},{"style":1653},[39980],{"type":40,"value":3258},{"type":30,"tag":1046,"props":39982,"children":39983},{"class":1048,"line":1255},[39984,39988,39992,39996,40000,40004,40008,40012],{"type":30,"tag":1046,"props":39985,"children":39986},{"style":1053},[39987],{"type":40,"value":1130},{"type":30,"tag":1046,"props":39989,"children":39990},{"style":1053},[39991],{"type":40,"value":1135},{"type":30,"tag":1046,"props":39993,"children":39994},{"style":1138},[39995],{"type":40,"value":39903},{"type":30,"tag":1046,"props":39997,"children":39998},{"style":1070},[39999],{"type":40,"value":1146},{"type":30,"tag":1046,"props":40001,"children":40002},{"style":1084},[40003],{"type":40,"value":2882},{"type":30,"tag":1046,"props":40005,"children":40006},{"style":1153},[40007],{"type":40,"value":21315},{"type":30,"tag":1046,"props":40009,"children":40010},{"style":1070},[40011],{"type":40,"value":1161},{"type":30,"tag":1046,"props":40013,"children":40014},{"style":1070},[40015],{"type":40,"value":1073},{"type":30,"tag":1046,"props":40017,"children":40018},{"class":1048,"line":1284},[40019,40023,40027,40031,40035,40039,40043,40047,40051,40055],{"type":30,"tag":1046,"props":40020,"children":40021},{"style":1105},[40022],{"type":40,"value":12555},{"type":30,"tag":1046,"props":40024,"children":40025},{"style":1070},[40026],{"type":40,"value":1179},{"type":30,"tag":1046,"props":40028,"children":40029},{"style":1105},[40030],{"type":40,"value":12564},{"type":30,"tag":1046,"props":40032,"children":40033},{"style":1070},[40034],{"type":40,"value":1179},{"type":30,"tag":1046,"props":40036,"children":40037},{"style":1138},[40038],{"type":40,"value":12573},{"type":30,"tag":1046,"props":40040,"children":40041},{"style":1070},[40042],{"type":40,"value":1146},{"type":30,"tag":1046,"props":40044,"children":40045},{"style":1675},[40046],{"type":40,"value":39587},{"type":30,"tag":1046,"props":40048,"children":40049},{"style":1795},[40050],{"type":40,"value":7261},{"type":30,"tag":1046,"props":40052,"children":40053},{"style":1105},[40054],{"type":40,"value":21315},{"type":30,"tag":1046,"props":40056,"children":40057},{"style":1070},[40058],{"type":40,"value":1198},{"type":30,"tag":1046,"props":40060,"children":40061},{"class":1048,"line":1292},[40062],{"type":30,"tag":1046,"props":40063,"children":40064},{"style":1070},[40065],{"type":40,"value":1207},{"type":30,"tag":1046,"props":40067,"children":40068},{"class":1048,"line":1300},[40069],{"type":30,"tag":1046,"props":40070,"children":40071},{"style":1070},[40072],{"type":40,"value":1423},{"type":30,"tag":1046,"props":40074,"children":40075},{"class":1048,"line":1327},[40076],{"type":30,"tag":1046,"props":40077,"children":40078},{"emptyLinePlaceholder":13},[40079],{"type":40,"value":1121},{"type":30,"tag":1046,"props":40081,"children":40082},{"class":1048,"line":1354},[40083],{"type":30,"tag":1046,"props":40084,"children":40085},{"style":3961},[40086],{"type":40,"value":40087},"// Implémentation pour SMS\n",{"type":30,"tag":1046,"props":40089,"children":40090},{"class":1048,"line":1391},[40091,40095,40099,40104,40108,40112],{"type":30,"tag":1046,"props":40092,"children":40093},{"style":1053},[40094],{"type":40,"value":1056},{"type":30,"tag":1046,"props":40096,"children":40097},{"style":1053},[40098],{"type":40,"value":1061},{"type":30,"tag":1046,"props":40100,"children":40101},{"style":1064},[40102],{"type":40,"value":40103}," SMSSender",{"type":30,"tag":1046,"props":40105,"children":40106},{"style":1053},[40107],{"type":40,"value":3166},{"type":30,"tag":1046,"props":40109,"children":40110},{"style":1064},[40111],{"type":40,"value":39887},{"type":30,"tag":1046,"props":40113,"children":40114},{"style":1070},[40115],{"type":40,"value":1073},{"type":30,"tag":1046,"props":40117,"children":40118},{"class":1048,"line":1409},[40119,40123],{"type":30,"tag":1046,"props":40120,"children":40121},{"style":1647},[40122],{"type":40,"value":1828},{"type":30,"tag":1046,"props":40124,"children":40125},{"style":1653},[40126],{"type":40,"value":3258},{"type":30,"tag":1046,"props":40128,"children":40129},{"class":1048,"line":1417},[40130,40134,40138,40142,40146,40150,40154,40158],{"type":30,"tag":1046,"props":40131,"children":40132},{"style":1053},[40133],{"type":40,"value":1130},{"type":30,"tag":1046,"props":40135,"children":40136},{"style":1053},[40137],{"type":40,"value":1135},{"type":30,"tag":1046,"props":40139,"children":40140},{"style":1138},[40141],{"type":40,"value":39903},{"type":30,"tag":1046,"props":40143,"children":40144},{"style":1070},[40145],{"type":40,"value":1146},{"type":30,"tag":1046,"props":40147,"children":40148},{"style":1084},[40149],{"type":40,"value":2882},{"type":30,"tag":1046,"props":40151,"children":40152},{"style":1153},[40153],{"type":40,"value":21315},{"type":30,"tag":1046,"props":40155,"children":40156},{"style":1070},[40157],{"type":40,"value":1161},{"type":30,"tag":1046,"props":40159,"children":40160},{"style":1070},[40161],{"type":40,"value":1073},{"type":30,"tag":1046,"props":40163,"children":40164},{"class":1048,"line":2023},[40165,40169,40173,40177,40181,40185,40189,40194,40198,40202],{"type":30,"tag":1046,"props":40166,"children":40167},{"style":1105},[40168],{"type":40,"value":12555},{"type":30,"tag":1046,"props":40170,"children":40171},{"style":1070},[40172],{"type":40,"value":1179},{"type":30,"tag":1046,"props":40174,"children":40175},{"style":1105},[40176],{"type":40,"value":12564},{"type":30,"tag":1046,"props":40178,"children":40179},{"style":1070},[40180],{"type":40,"value":1179},{"type":30,"tag":1046,"props":40182,"children":40183},{"style":1138},[40184],{"type":40,"value":12573},{"type":30,"tag":1046,"props":40186,"children":40187},{"style":1070},[40188],{"type":40,"value":1146},{"type":30,"tag":1046,"props":40190,"children":40191},{"style":1675},[40192],{"type":40,"value":40193},"\"Envoi du SMS : \"",{"type":30,"tag":1046,"props":40195,"children":40196},{"style":1795},[40197],{"type":40,"value":7261},{"type":30,"tag":1046,"props":40199,"children":40200},{"style":1105},[40201],{"type":40,"value":21315},{"type":30,"tag":1046,"props":40203,"children":40204},{"style":1070},[40205],{"type":40,"value":1198},{"type":30,"tag":1046,"props":40207,"children":40208},{"class":1048,"line":2083},[40209],{"type":30,"tag":1046,"props":40210,"children":40211},{"style":1070},[40212],{"type":40,"value":1207},{"type":30,"tag":1046,"props":40214,"children":40215},{"class":1048,"line":2126},[40216],{"type":30,"tag":1046,"props":40217,"children":40218},{"style":1070},[40219],{"type":40,"value":1423},{"type":30,"tag":1046,"props":40221,"children":40222},{"class":1048,"line":2159},[40223],{"type":30,"tag":1046,"props":40224,"children":40225},{"emptyLinePlaceholder":13},[40226],{"type":40,"value":1121},{"type":30,"tag":1046,"props":40228,"children":40229},{"class":1048,"line":2167},[40230],{"type":30,"tag":1046,"props":40231,"children":40232},{"style":3961},[40233],{"type":40,"value":40234},"// Service de notification utilisant l'interface NotificationSender\n",{"type":30,"tag":1046,"props":40236,"children":40237},{"class":1048,"line":4537},[40238,40242,40246,40250],{"type":30,"tag":1046,"props":40239,"children":40240},{"style":1053},[40241],{"type":40,"value":1056},{"type":30,"tag":1046,"props":40243,"children":40244},{"style":1053},[40245],{"type":40,"value":1061},{"type":30,"tag":1046,"props":40247,"children":40248},{"style":1064},[40249],{"type":40,"value":22349},{"type":30,"tag":1046,"props":40251,"children":40252},{"style":1070},[40253],{"type":40,"value":1073},{"type":30,"tag":1046,"props":40255,"children":40256},{"class":1048,"line":4545},[40257,40261,40265,40270],{"type":30,"tag":1046,"props":40258,"children":40259},{"style":1053},[40260],{"type":40,"value":1081},{"type":30,"tag":1046,"props":40262,"children":40263},{"style":1084},[40264],{"type":40,"value":39887},{"type":30,"tag":1046,"props":40266,"children":40267},{"style":1105},[40268],{"type":40,"value":40269}," sender",{"type":30,"tag":1046,"props":40271,"children":40272},{"style":1070},[40273],{"type":40,"value":1113},{"type":30,"tag":1046,"props":40275,"children":40276},{"class":1048,"line":4582},[40277],{"type":30,"tag":1046,"props":40278,"children":40279},{"emptyLinePlaceholder":13},[40280],{"type":40,"value":1121},{"type":30,"tag":1046,"props":40282,"children":40283},{"class":1048,"line":4622},[40284],{"type":30,"tag":1046,"props":40285,"children":40286},{"style":3961},[40287],{"type":40,"value":40288},"    // Injection de dépendance via le constructeur\n",{"type":30,"tag":1046,"props":40290,"children":40291},{"class":1048,"line":4662},[40292,40296,40300,40304,40308,40312,40316],{"type":30,"tag":1046,"props":40293,"children":40294},{"style":1053},[40295],{"type":40,"value":1130},{"type":30,"tag":1046,"props":40297,"children":40298},{"style":1138},[40299],{"type":40,"value":22349},{"type":30,"tag":1046,"props":40301,"children":40302},{"style":1070},[40303],{"type":40,"value":1146},{"type":30,"tag":1046,"props":40305,"children":40306},{"style":1084},[40307],{"type":40,"value":39854},{"type":30,"tag":1046,"props":40309,"children":40310},{"style":1153},[40311],{"type":40,"value":40269},{"type":30,"tag":1046,"props":40313,"children":40314},{"style":1070},[40315],{"type":40,"value":1161},{"type":30,"tag":1046,"props":40317,"children":40318},{"style":1070},[40319],{"type":40,"value":1073},{"type":30,"tag":1046,"props":40321,"children":40322},{"class":1048,"line":4687},[40323,40327,40331,40336,40340,40344],{"type":30,"tag":1046,"props":40324,"children":40325},{"style":1780},[40326],{"type":40,"value":1783},{"type":30,"tag":1046,"props":40328,"children":40329},{"style":1070},[40330],{"type":40,"value":1179},{"type":30,"tag":1046,"props":40332,"children":40333},{"style":1105},[40334],{"type":40,"value":40335},"sender ",{"type":30,"tag":1046,"props":40337,"children":40338},{"style":1795},[40339],{"type":40,"value":1798},{"type":30,"tag":1046,"props":40341,"children":40342},{"style":1105},[40343],{"type":40,"value":40269},{"type":30,"tag":1046,"props":40345,"children":40346},{"style":1070},[40347],{"type":40,"value":1113},{"type":30,"tag":1046,"props":40349,"children":40350},{"class":1048,"line":4695},[40351],{"type":30,"tag":1046,"props":40352,"children":40353},{"style":1070},[40354],{"type":40,"value":1207},{"type":30,"tag":1046,"props":40356,"children":40357},{"class":1048,"line":4703},[40358],{"type":30,"tag":1046,"props":40359,"children":40360},{"emptyLinePlaceholder":13},[40361],{"type":40,"value":1121},{"type":30,"tag":1046,"props":40363,"children":40364},{"class":1048,"line":4739},[40365,40369,40373,40377,40381,40385,40389,40393],{"type":30,"tag":1046,"props":40366,"children":40367},{"style":1053},[40368],{"type":40,"value":1130},{"type":30,"tag":1046,"props":40370,"children":40371},{"style":1053},[40372],{"type":40,"value":1135},{"type":30,"tag":1046,"props":40374,"children":40375},{"style":1138},[40376],{"type":40,"value":39747},{"type":30,"tag":1046,"props":40378,"children":40379},{"style":1070},[40380],{"type":40,"value":1146},{"type":30,"tag":1046,"props":40382,"children":40383},{"style":1084},[40384],{"type":40,"value":2882},{"type":30,"tag":1046,"props":40386,"children":40387},{"style":1153},[40388],{"type":40,"value":21315},{"type":30,"tag":1046,"props":40390,"children":40391},{"style":1070},[40392],{"type":40,"value":1161},{"type":30,"tag":1046,"props":40394,"children":40395},{"style":1070},[40396],{"type":40,"value":1073},{"type":30,"tag":1046,"props":40398,"children":40399},{"class":1048,"line":4771},[40400,40405,40409,40414,40418,40422],{"type":30,"tag":1046,"props":40401,"children":40402},{"style":1105},[40403],{"type":40,"value":40404},"        sender",{"type":30,"tag":1046,"props":40406,"children":40407},{"style":1070},[40408],{"type":40,"value":1179},{"type":30,"tag":1046,"props":40410,"children":40411},{"style":1138},[40412],{"type":40,"value":40413},"send",{"type":30,"tag":1046,"props":40415,"children":40416},{"style":1070},[40417],{"type":40,"value":1146},{"type":30,"tag":1046,"props":40419,"children":40420},{"style":1105},[40421],{"type":40,"value":39793},{"type":30,"tag":1046,"props":40423,"children":40424},{"style":1070},[40425],{"type":40,"value":1198},{"type":30,"tag":1046,"props":40427,"children":40428},{"class":1048,"line":4811},[40429],{"type":30,"tag":1046,"props":40430,"children":40431},{"style":1070},[40432],{"type":40,"value":1207},{"type":30,"tag":1046,"props":40434,"children":40435},{"class":1048,"line":4819},[40436],{"type":30,"tag":1046,"props":40437,"children":40438},{"style":1070},[40439],{"type":40,"value":1423},{"type":30,"tag":43,"props":40441,"children":40442},{},[40443,40444,40449,40451,40457,40459,40464,40466,40471,40473,40479,40481,40486],{"type":40,"value":28231},{"type":30,"tag":1042,"props":40445,"children":40447},{"className":40446},[],[40448],{"type":40,"value":39472},{"type":40,"value":40450}," ne dépend plus d'une implémentation concrète comme ",{"type":30,"tag":1042,"props":40452,"children":40454},{"className":40453},[],[40455],{"type":40,"value":40456},"EmailSender",{"type":40,"value":40458},", mais d'une abstraction (",{"type":30,"tag":1042,"props":40460,"children":40462},{"className":40461},[],[40463],{"type":40,"value":39854},{"type":40,"value":40465},"). Cela permet de changer facilement l'implémentation sans toucher à la classe ",{"type":30,"tag":1042,"props":40467,"children":40469},{"className":40468},[],[40470],{"type":40,"value":39472},{"type":40,"value":40472},". Par exemple, pour envoyer des SMS à la place des emails, il suffit de passer un ",{"type":30,"tag":1042,"props":40474,"children":40476},{"className":40475},[],[40477],{"type":40,"value":40478},"SMSSender",{"type":40,"value":40480}," au lieu d’un ",{"type":30,"tag":1042,"props":40482,"children":40484},{"className":40483},[],[40485],{"type":40,"value":40456},{"type":40,"value":6296},{"type":30,"tag":1035,"props":40488,"children":40490},{"className":1039,"code":40489,"language":1038,"meta":8,"style":8},"public class Main {\n    public static void main(String[] args) {\n        // Envoi de notification par email\n        NotificationSender emailSender = new EmailSender();\n        NotificationService notificationService = new NotificationService(emailSender);\n        notificationService.sendNotification(\"Message par email\");\n\n        // Envoi de notification par SMS\n        NotificationSender smsSender = new SMSSender();\n        NotificationService smsNotificationService\n\n = new NotificationService(smsSender);\n        smsNotificationService.sendNotification(\"Message par SMS\");\n    }\n}\n",[40491],{"type":30,"tag":1042,"props":40492,"children":40493},{"__ignoreMap":8},[40494,40513,40556,40564,40593,40631,40661,40668,40676,40704,40716,40723,40751,40780,40787],{"type":30,"tag":1046,"props":40495,"children":40496},{"class":1048,"line":1049},[40497,40501,40505,40509],{"type":30,"tag":1046,"props":40498,"children":40499},{"style":1053},[40500],{"type":40,"value":1056},{"type":30,"tag":1046,"props":40502,"children":40503},{"style":1053},[40504],{"type":40,"value":1061},{"type":30,"tag":1046,"props":40506,"children":40507},{"style":1064},[40508],{"type":40,"value":12347},{"type":30,"tag":1046,"props":40510,"children":40511},{"style":1070},[40512],{"type":40,"value":1073},{"type":30,"tag":1046,"props":40514,"children":40515},{"class":1048,"line":675},[40516,40520,40524,40528,40532,40536,40540,40544,40548,40552],{"type":30,"tag":1046,"props":40517,"children":40518},{"style":1053},[40519],{"type":40,"value":1130},{"type":30,"tag":1046,"props":40521,"children":40522},{"style":1053},[40523],{"type":40,"value":12363},{"type":30,"tag":1046,"props":40525,"children":40526},{"style":1053},[40527],{"type":40,"value":1135},{"type":30,"tag":1046,"props":40529,"children":40530},{"style":1138},[40531],{"type":40,"value":12372},{"type":30,"tag":1046,"props":40533,"children":40534},{"style":1070},[40535],{"type":40,"value":1146},{"type":30,"tag":1046,"props":40537,"children":40538},{"style":1053},[40539],{"type":40,"value":2882},{"type":30,"tag":1046,"props":40541,"children":40542},{"style":1070},[40543],{"type":40,"value":12385},{"type":30,"tag":1046,"props":40545,"children":40546},{"style":1153},[40547],{"type":40,"value":12390},{"type":30,"tag":1046,"props":40549,"children":40550},{"style":1070},[40551],{"type":40,"value":1161},{"type":30,"tag":1046,"props":40553,"children":40554},{"style":1070},[40555],{"type":40,"value":1073},{"type":30,"tag":1046,"props":40557,"children":40558},{"class":1048,"line":681},[40559],{"type":30,"tag":1046,"props":40560,"children":40561},{"style":3961},[40562],{"type":40,"value":40563},"        // Envoi de notification par email\n",{"type":30,"tag":1046,"props":40565,"children":40566},{"class":1048,"line":1124},[40567,40572,40577,40581,40585,40589],{"type":30,"tag":1046,"props":40568,"children":40569},{"style":1084},[40570],{"type":40,"value":40571},"        NotificationSender",{"type":30,"tag":1046,"props":40573,"children":40574},{"style":1105},[40575],{"type":40,"value":40576}," emailSender ",{"type":30,"tag":1046,"props":40578,"children":40579},{"style":1795},[40580],{"type":40,"value":1798},{"type":30,"tag":1046,"props":40582,"children":40583},{"style":1053},[40584],{"type":40,"value":2480},{"type":30,"tag":1046,"props":40586,"children":40587},{"style":1138},[40588],{"type":40,"value":39957},{"type":30,"tag":1046,"props":40590,"children":40591},{"style":1070},[40592],{"type":40,"value":1406},{"type":30,"tag":1046,"props":40594,"children":40595},{"class":1048,"line":1168},[40596,40601,40606,40610,40614,40618,40622,40627],{"type":30,"tag":1046,"props":40597,"children":40598},{"style":1084},[40599],{"type":40,"value":40600},"        NotificationService",{"type":30,"tag":1046,"props":40602,"children":40603},{"style":1105},[40604],{"type":40,"value":40605}," notificationService ",{"type":30,"tag":1046,"props":40607,"children":40608},{"style":1795},[40609],{"type":40,"value":1798},{"type":30,"tag":1046,"props":40611,"children":40612},{"style":1053},[40613],{"type":40,"value":2480},{"type":30,"tag":1046,"props":40615,"children":40616},{"style":1138},[40617],{"type":40,"value":22349},{"type":30,"tag":1046,"props":40619,"children":40620},{"style":1070},[40621],{"type":40,"value":1146},{"type":30,"tag":1046,"props":40623,"children":40624},{"style":1105},[40625],{"type":40,"value":40626},"emailSender",{"type":30,"tag":1046,"props":40628,"children":40629},{"style":1070},[40630],{"type":40,"value":1198},{"type":30,"tag":1046,"props":40632,"children":40633},{"class":1048,"line":1201},[40634,40639,40643,40648,40652,40657],{"type":30,"tag":1046,"props":40635,"children":40636},{"style":1105},[40637],{"type":40,"value":40638},"        notificationService",{"type":30,"tag":1046,"props":40640,"children":40641},{"style":1070},[40642],{"type":40,"value":1179},{"type":30,"tag":1046,"props":40644,"children":40645},{"style":1138},[40646],{"type":40,"value":40647},"sendNotification",{"type":30,"tag":1046,"props":40649,"children":40650},{"style":1070},[40651],{"type":40,"value":1146},{"type":30,"tag":1046,"props":40653,"children":40654},{"style":1675},[40655],{"type":40,"value":40656},"\"Message par email\"",{"type":30,"tag":1046,"props":40658,"children":40659},{"style":1070},[40660],{"type":40,"value":1198},{"type":30,"tag":1046,"props":40662,"children":40663},{"class":1048,"line":1210},[40664],{"type":30,"tag":1046,"props":40665,"children":40666},{"emptyLinePlaceholder":13},[40667],{"type":40,"value":1121},{"type":30,"tag":1046,"props":40669,"children":40670},{"class":1048,"line":1218},[40671],{"type":30,"tag":1046,"props":40672,"children":40673},{"style":3961},[40674],{"type":40,"value":40675},"        // Envoi de notification par SMS\n",{"type":30,"tag":1046,"props":40677,"children":40678},{"class":1048,"line":1255},[40679,40683,40688,40692,40696,40700],{"type":30,"tag":1046,"props":40680,"children":40681},{"style":1084},[40682],{"type":40,"value":40571},{"type":30,"tag":1046,"props":40684,"children":40685},{"style":1105},[40686],{"type":40,"value":40687}," smsSender ",{"type":30,"tag":1046,"props":40689,"children":40690},{"style":1795},[40691],{"type":40,"value":1798},{"type":30,"tag":1046,"props":40693,"children":40694},{"style":1053},[40695],{"type":40,"value":2480},{"type":30,"tag":1046,"props":40697,"children":40698},{"style":1138},[40699],{"type":40,"value":40103},{"type":30,"tag":1046,"props":40701,"children":40702},{"style":1070},[40703],{"type":40,"value":1406},{"type":30,"tag":1046,"props":40705,"children":40706},{"class":1048,"line":1284},[40707,40711],{"type":30,"tag":1046,"props":40708,"children":40709},{"style":1084},[40710],{"type":40,"value":40600},{"type":30,"tag":1046,"props":40712,"children":40713},{"style":1105},[40714],{"type":40,"value":40715}," smsNotificationService\n",{"type":30,"tag":1046,"props":40717,"children":40718},{"class":1048,"line":1292},[40719],{"type":30,"tag":1046,"props":40720,"children":40721},{"emptyLinePlaceholder":13},[40722],{"type":40,"value":1121},{"type":30,"tag":1046,"props":40724,"children":40725},{"class":1048,"line":1300},[40726,40730,40734,40738,40742,40747],{"type":30,"tag":1046,"props":40727,"children":40728},{"style":1795},[40729],{"type":40,"value":9725},{"type":30,"tag":1046,"props":40731,"children":40732},{"style":1053},[40733],{"type":40,"value":2480},{"type":30,"tag":1046,"props":40735,"children":40736},{"style":1138},[40737],{"type":40,"value":22349},{"type":30,"tag":1046,"props":40739,"children":40740},{"style":1070},[40741],{"type":40,"value":1146},{"type":30,"tag":1046,"props":40743,"children":40744},{"style":1105},[40745],{"type":40,"value":40746},"smsSender",{"type":30,"tag":1046,"props":40748,"children":40749},{"style":1070},[40750],{"type":40,"value":1198},{"type":30,"tag":1046,"props":40752,"children":40753},{"class":1048,"line":1327},[40754,40759,40763,40767,40771,40776],{"type":30,"tag":1046,"props":40755,"children":40756},{"style":1105},[40757],{"type":40,"value":40758},"        smsNotificationService",{"type":30,"tag":1046,"props":40760,"children":40761},{"style":1070},[40762],{"type":40,"value":1179},{"type":30,"tag":1046,"props":40764,"children":40765},{"style":1138},[40766],{"type":40,"value":40647},{"type":30,"tag":1046,"props":40768,"children":40769},{"style":1070},[40770],{"type":40,"value":1146},{"type":30,"tag":1046,"props":40772,"children":40773},{"style":1675},[40774],{"type":40,"value":40775},"\"Message par SMS\"",{"type":30,"tag":1046,"props":40777,"children":40778},{"style":1070},[40779],{"type":40,"value":1198},{"type":30,"tag":1046,"props":40781,"children":40782},{"class":1048,"line":1354},[40783],{"type":30,"tag":1046,"props":40784,"children":40785},{"style":1070},[40786],{"type":40,"value":1207},{"type":30,"tag":1046,"props":40788,"children":40789},{"class":1048,"line":1391},[40790],{"type":30,"tag":1046,"props":40791,"children":40792},{"style":1070},[40793],{"type":40,"value":1423},{"type":30,"tag":84,"props":40795,"children":40796},{},[],{"type":30,"tag":19673,"props":40798,"children":40799},{"type":19675},[40800],{"type":30,"tag":43,"props":40801,"children":40802},{},[40803,40808],{"type":30,"tag":36,"props":40804,"children":40805},{},[40806],{"type":40,"value":40807},"Injectez vos dépendances",{"type":40,"value":40809}," via des interfaces ou des classes abstraites plutôt que d'utiliser des classes concrètes. Cela rendra vos modules de haut niveau plus flexibles et plus faciles à modifier à l'avenir.",{"type":30,"tag":31,"props":40811,"children":40813},{"id":40812},"_6-exemples-concrets-de-chaque-principe-en-java",[40814],{"type":40,"value":40815},"6. Exemples concrets de chaque principe en Java",{"type":30,"tag":1518,"props":40817,"children":40818},{},[40819,40843,40860,40891,40930],{"type":30,"tag":167,"props":40820,"children":40821},{},[40822,40827,40828],{"type":30,"tag":36,"props":40823,"children":40824},{},[40825],{"type":40,"value":40826},"Single Responsibility Principle (SRP)",{"type":40,"value":6296},{"type":30,"tag":163,"props":40829,"children":40830},{},[40831],{"type":30,"tag":167,"props":40832,"children":40833},{},[40834,40836,40841],{"type":40,"value":40835},"Exemple : Une classe ",{"type":30,"tag":1042,"props":40837,"children":40839},{"className":40838},[],[40840],{"type":40,"value":35148},{"type":40,"value":40842}," qui génère des rapports ne doit pas aussi gérer l'enregistrement des fichiers PDF. Divisez ces responsabilités en deux classes distinctes.",{"type":30,"tag":167,"props":40844,"children":40845},{},[40846,40851,40852],{"type":30,"tag":36,"props":40847,"children":40848},{},[40849],{"type":40,"value":40850},"Open/Closed Principle (OCP)",{"type":40,"value":6296},{"type":30,"tag":163,"props":40853,"children":40854},{},[40855],{"type":30,"tag":167,"props":40856,"children":40857},{},[40858],{"type":40,"value":40859},"Exemple : Une classe de traitement de paiements qui supporte plusieurs méthodes de paiement (carte bancaire, PayPal, e-wallet) doit être extensible via de nouvelles implémentations de méthodes de paiement sans modifier la classe de base.",{"type":30,"tag":167,"props":40861,"children":40862},{},[40863,40868,40869],{"type":30,"tag":36,"props":40864,"children":40865},{},[40866],{"type":40,"value":40867},"Liskov Substitution Principle (LSP)",{"type":40,"value":6296},{"type":30,"tag":163,"props":40870,"children":40871},{},[40872],{"type":30,"tag":167,"props":40873,"children":40874},{},[40875,40877,40882,40884,40889],{"type":40,"value":40876},"Exemple : Évitez d'utiliser l'héritage entre une classe ",{"type":30,"tag":1042,"props":40878,"children":40880},{"className":40879},[],[40881],{"type":40,"value":37182},{"type":40,"value":40883}," et une classe ",{"type":30,"tag":1042,"props":40885,"children":40887},{"className":40886},[],[40888],{"type":40,"value":37190},{"type":40,"value":40890}," si leurs comportements sont fondamentalement différents (comme les changements indépendants de largeur et de hauteur).",{"type":30,"tag":167,"props":40892,"children":40893},{},[40894,40899,40900],{"type":30,"tag":36,"props":40895,"children":40896},{},[40897],{"type":40,"value":40898},"Interface Segregation Principle (ISP)",{"type":40,"value":6296},{"type":30,"tag":163,"props":40901,"children":40902},{},[40903],{"type":30,"tag":167,"props":40904,"children":40905},{},[40906,40908,40914,40915,40921,40923,40928],{"type":40,"value":40907},"Exemple : Créez des interfaces spécifiques (",{"type":30,"tag":1042,"props":40909,"children":40911},{"className":40910},[],[40912],{"type":40,"value":40913},"FlyingBird",{"type":40,"value":19457},{"type":30,"tag":1042,"props":40916,"children":40918},{"className":40917},[],[40919],{"type":40,"value":40920},"SwimmingBird",{"type":40,"value":40922},", etc.) au lieu d'une seule interface générale ",{"type":30,"tag":1042,"props":40924,"children":40926},{"className":40925},[],[40927],{"type":40,"value":38385},{"type":40,"value":40929}," qui oblige toutes les classes à implémenter des méthodes non pertinentes.",{"type":30,"tag":167,"props":40931,"children":40932},{},[40933,40938,40939],{"type":30,"tag":36,"props":40934,"children":40935},{},[40936],{"type":40,"value":40937},"Dependency Inversion Principle (DIP)",{"type":40,"value":6296},{"type":30,"tag":163,"props":40940,"children":40941},{},[40942],{"type":30,"tag":167,"props":40943,"children":40944},{},[40945,40947,40952,40954,40959],{"type":40,"value":40946},"Exemple : Au lieu de dépendre directement d'une classe ",{"type":30,"tag":1042,"props":40948,"children":40950},{"className":40949},[],[40951],{"type":40,"value":39491},{"type":40,"value":40953},", utilisez une interface ",{"type":30,"tag":1042,"props":40955,"children":40957},{"className":40956},[],[40958],{"type":40,"value":39854},{"type":40,"value":40960}," pour injecter des services d'envoi de notifications par email, SMS, etc.",{"type":30,"tag":84,"props":40962,"children":40963},{},[],{"type":30,"tag":31,"props":40965,"children":40967},{"id":40966},"_7-faq-sur-les-principes-solid-en-java",[40968],{"type":40,"value":40969},"7. FAQ sur les principes SOLID en Java",{"type":30,"tag":530,"props":40971,"children":40972},{},[40973,40978],{"type":30,"tag":534,"props":40974,"children":40975},{},[40976],{"type":40,"value":40977},"Pourquoi appliquer les principes SOLID en Java ?",{"type":30,"tag":43,"props":40979,"children":40980},{},[40981],{"type":40,"value":40982},"Les principes SOLID permettent d’écrire un code plus propre, plus modulaire et plus maintenable. Ils réduisent les risques de bugs lors des modifications et facilitent l’ajout de nouvelles fonctionnalités sans impacter le code existant.",{"type":30,"tag":530,"props":40984,"children":40985},{},[40986,40991],{"type":30,"tag":534,"props":40987,"children":40988},{},[40989],{"type":40,"value":40990},"Est-ce que les principes SOLID sont applicables à tous les projets Java ?",{"type":30,"tag":43,"props":40992,"children":40993},{},[40994],{"type":40,"value":40995},"Oui, que vous travailliez sur de petits projets ou de grands systèmes, les principes SOLID sont bénéfiques pour maintenir la qualité du code. Cependant, je vous recommande de ne pas les appliquer à l’excès : comme toujours, utilisez le bon outil pour le bon problème.",{"type":30,"tag":530,"props":40997,"children":40998},{},[40999,41004],{"type":30,"tag":534,"props":41000,"children":41001},{},[41002],{"type":40,"value":41003},"Quel est le principe SOLID le plus important ?",{"type":30,"tag":43,"props":41005,"children":41006},{},[41007],{"type":40,"value":41008},"Tous les principes sont importants, mais si vous débutez, le SRP (principe de responsabilité unique) et le OCP (principe ouvert/fermé) sont souvent les plus critiques pour améliorer la maintenabilité de votre code.",{"type":30,"tag":530,"props":41010,"children":41011},{},[41012,41017],{"type":30,"tag":534,"props":41013,"children":41014},{},[41015],{"type":40,"value":41016},"Comment appliquer SOLID dans un projet existant ?",{"type":30,"tag":43,"props":41018,"children":41019},{},[41020],{"type":40,"value":41021},"Appliquez progressivement les principes en identifiant les endroits où le code est fortement couplé ou difficile à maintenir. Refactorisez au fur et à mesure, en créant des abstractions et en séparant les responsabilités lorsque nécessaire.",{"type":30,"tag":84,"props":41023,"children":41024},{},[],{"type":30,"tag":211,"props":41026,"children":41027},{"cta":12975,"href":639,"title":12976,"type":641},[41028],{"type":30,"tag":43,"props":41029,"children":41030},{},[41031],{"type":40,"value":41032},"30 questions, 5 dimensions, score sur 100. Mesurez la maturité engineering de votre équipe et identifiez les 3 chantiers qui débloquent immédiatement votre vélocité.",{"type":30,"tag":6456,"props":41034,"children":41035},{},[41036],{"type":40,"value":6460},{"title":8,"searchDepth":675,"depth":675,"links":41038},[41039,41040,41044,41048,41052,41056,41060,41061],{"id":34956,"depth":675,"text":34959},{"id":35105,"depth":675,"text":35108,"children":41041},[41042,41043],{"id":35123,"depth":681,"text":35126},{"id":35134,"depth":681,"text":35137},{"id":35884,"depth":675,"text":35887,"children":41045},[41046,41047],{"id":35909,"depth":681,"text":35126},{"id":35919,"depth":681,"text":35137},{"id":37148,"depth":675,"text":37151,"children":41049},[41050,41051],{"id":37159,"depth":681,"text":35126},{"id":37169,"depth":681,"text":35137},{"id":38351,"depth":675,"text":38354,"children":41053},[41054,41055],{"id":38362,"depth":681,"text":35126},{"id":38372,"depth":681,"text":35137},{"id":39439,"depth":675,"text":39442,"children":41057},[41058,41059],{"id":39450,"depth":681,"text":35126},{"id":39460,"depth":681,"text":35137},{"id":40812,"depth":675,"text":40815},{"id":40966,"depth":675,"text":40969},"content:fr:architecture-craft:principes-solid-java-exemples.md","fr/architecture-craft/principes-solid-java-exemples.md","fr/architecture-craft/principes-solid-java-exemples",{"_path":35050,"_dir":717,"_draft":7,"_partial":7,"_locale":8,"title":41066,"description":41067,"id":10446,"date":41068,"listed":13,"nocomments":7,"hidden":7,"categories":41069,"tags":41070,"--cover":41071,"readingTime":41072,"body":41076,"_type":709,"_id":44417,"_source":711,"_file":44418,"_stem":44419,"_extension":714},"Comprendre et appliquer le principe DIP en Java pour un code plus flexible","Découvrez comment le principe DIP (Dependency Inversion Principle) améliore la flexibilité et la maintenabilité de votre code Java. Apprenez à...","2024-04-01",[15],[17,18],"covers/articles/principe-dip.jpg",{"text":729,"minutes":41073,"time":41074,"words":41075},13.085,785100,2617,{"type":27,"children":41077,"toc":44398},[41078,41084,41090,41095,41114,41119,41130,41133,41139,41155,41167,41178,41221,41230,41233,41242,41248,41264,41270,41275,41287,41293,41298,41320,41323,41366,41369,41375,41386,41392,41397,41706,41737,41743,41768,42350,42383,42671,42677,42688,42699,42714,42729,42732,42738,42761,42767,42785,42808,42811,42817,42822,42834,43191,43203,43229,43464,43476,43481,43736,43743,43836,43842,43878,44102,44115,44123,44126,44132,44150,44182,44208,44233,44246,44283,44327,44330,44334,44350,44367,44387,44394],{"type":30,"tag":6505,"props":41079,"children":41081},{"id":41080},"principe-dip-en-software-craftsmanship-comment-et-pourquoi-lappliquer-en-java",[41082],{"type":40,"value":41083},"Principe DIP en Software Craftsmanship : Comment et pourquoi l'appliquer en Java",{"type":30,"tag":31,"props":41085,"children":41087},{"id":41086},"introduction-au-dip-dependency-inversion-principle",[41088],{"type":40,"value":41089},"Introduction au DIP (Dependency Inversion Principle)",{"type":30,"tag":43,"props":41091,"children":41092},{},[41093],{"type":40,"value":41094},"Arrêtez-moi si vous avez déjà vécu ça : vous effectuez une petite modification dans une classe bas niveau, peut-être un service ou une couche d’accès aux données, et tout à coup, une cascade de changements s’enclenche dans votre projet. Des tests cassés, des modules qui ne se compilent plus, et une dépendance quasi obsessionnelle entre les classes de haut et de bas niveau. Si oui, vous n’êtes pas seul.",{"type":30,"tag":43,"props":41096,"children":41097},{},[41098,41100,41105,41107,41112],{"type":40,"value":41099},"C’est là qu’intervient le principe de l’inversion des dépendances, plus connu sous le nom de ",{"type":30,"tag":36,"props":41101,"children":41102},{},[41103],{"type":40,"value":41104},"DIP",{"type":40,"value":41106}," (Dependency Inversion Principle). Si vous voulez améliorer la modularité de votre code, le rendre plus testable et réduire cette fameuse ",{"type":30,"tag":36,"props":41108,"children":41109},{},[41110],{"type":40,"value":41111},"rigidité",{"type":40,"value":41113}," qui rend chaque modification coûteuse, alors le DIP pourrait bien être la solution que vous cherchez.",{"type":30,"tag":43,"props":41115,"children":41116},{},[41117],{"type":40,"value":41118},"En tant que développeur, j’ai souvent été confronté à des systèmes où les modules étaient fortement couplés, ce qui rendait leur maintenance extrêmement compliquée. En appliquant le principe DIP, j’ai pu découpler ces systèmes, rendant le code plus flexible et facile à maintenir. C’est exactement ce que j’ai observé dans une grande DSI du secteur assurance : un couplage fort entre les services métier et l’infrastructure retardait chaque livraison de plusieurs semaines. Aujourd’hui, je vais vous expliquer comment ce principe fonctionne, pourquoi il est essentiel dans une démarche de Software Craftsmanship (formalisée notamment par Robert C. Martin dans \"Agile Software Development: Principles, Patterns, and Practices\"), et surtout, comment vous pouvez l’appliquer concrètement dans vos projets Java.",{"type":30,"tag":43,"props":41120,"children":41121},{},[41122,41124,41128],{"type":40,"value":41123},"À la fin de cet article, vous comprendrez non seulement ce qu’est le ",{"type":30,"tag":36,"props":41125,"children":41126},{},[41127],{"type":40,"value":41104},{"type":40,"value":41129},", mais vous saurez aussi l’utiliser pour améliorer la qualité de votre code.",{"type":30,"tag":84,"props":41131,"children":41132},{},[],{"type":30,"tag":31,"props":41134,"children":41136},{"id":41135},"pourquoi-le-dip-est-essentiel-dans-le-software-craftsmanship",[41137],{"type":40,"value":41138},"Pourquoi le DIP est essentiel dans le Software Craftsmanship",{"type":30,"tag":43,"props":41140,"children":41141},{},[41142,41143,41147,41149,41153],{"type":40,"value":143},{"type":30,"tag":36,"props":41144,"children":41145},{},[41146],{"type":40,"value":13173},{"type":40,"value":41148}," repose sur l'idée que le code doit être traité comme un artisanat. Un bon code ne se limite pas à fonctionner ; il doit être propre, maintenable et flexible. C'est ici que le ",{"type":30,"tag":36,"props":41150,"children":41151},{},[41152],{"type":40,"value":41104},{"type":40,"value":41154}," joue un rôle crucial.",{"type":30,"tag":43,"props":41156,"children":41157},{},[41158,41160,41165],{"type":40,"value":41159},"Le principe de l'inversion des dépendances nous apprend que les modules de haut niveau ne doivent pas dépendre des modules de bas niveau. Au lieu de cela, tous deux doivent dépendre d’abstractions. De plus, ces abstractions ne doivent pas dépendre des détails d'implémentation, mais c'est plutôt ces détails qui doivent dépendre d’abstractions. Autrement dit, le DIP encourage la ",{"type":30,"tag":36,"props":41161,"children":41162},{},[41163],{"type":40,"value":41164},"séparation des préoccupations",{"type":40,"value":41166}," et aide à découpler les différentes parties du système.",{"type":30,"tag":43,"props":41168,"children":41169},{},[41170,41172,41176],{"type":40,"value":41171},"Voici pourquoi le DIP est essentiel dans une démarche de ",{"type":30,"tag":36,"props":41173,"children":41174},{},[41175],{"type":40,"value":13173},{"type":40,"value":41177}," :",{"type":30,"tag":163,"props":41179,"children":41180},{},[41181,41191,41201,41211],{"type":30,"tag":167,"props":41182,"children":41183},{},[41184,41189],{"type":30,"tag":36,"props":41185,"children":41186},{},[41187],{"type":40,"value":41188},"Réduction des couplages forts",{"type":40,"value":41190}," : Le couplage fort entre modules est l’une des principales causes des bugs et des difficultés de maintenance. Le DIP réduit cette dépendance en introduisant des interfaces et des abstractions qui facilitent l’évolution du code.",{"type":30,"tag":167,"props":41192,"children":41193},{},[41194,41199],{"type":30,"tag":36,"props":41195,"children":41196},{},[41197],{"type":40,"value":41198},"Facilite les tests",{"type":40,"value":41200}," : Quand votre code suit le DIP, il devient plus facile à tester, car vous pouvez facilement remplacer des implémentations concrètes par des mocks ou des stubs, sans impacter les modules de haut niveau.",{"type":30,"tag":167,"props":41202,"children":41203},{},[41204,41209],{"type":30,"tag":36,"props":41205,"children":41206},{},[41207],{"type":40,"value":41208},"Encourage la réutilisabilité",{"type":40,"value":41210}," : En découplant les modules de haut et de bas niveau, il devient plus facile de réutiliser certains composants sans avoir à modifier d'autres parties du système.",{"type":30,"tag":167,"props":41212,"children":41213},{},[41214,41219],{"type":30,"tag":36,"props":41215,"children":41216},{},[41217],{"type":40,"value":41218},"Simplification des évolutions",{"type":40,"value":41220}," : Le DIP permet de faire évoluer les implémentations sans affecter le reste du code. Si une classe de bas niveau doit être modifiée ou remplacée, les modules de haut niveau n'ont pas besoin d'être touchés, ce qui accélère les cycles de développement.",{"type":30,"tag":19673,"props":41222,"children":41224},{"type":41223},"warning",[41225],{"type":30,"tag":43,"props":41226,"children":41227},{},[41228],{"type":40,"value":41229},"Si vous négligez d’appliquer le DIP, vous risquez d’avoir un code rigide où la moindre modification entraînera des effets secondaires inattendus dans plusieurs modules. Cela rendra votre code difficile à maintenir à long terme.",{"type":30,"tag":84,"props":41231,"children":41232},{},[],{"type":30,"tag":211,"props":41234,"children":41236},{"cta":213,"href":214,"title":41235,"type":216},"Votre domaine métier est collé à l’infrastructure et impossible à tester sans démarrer toute la stack ?",[41237],{"type":30,"tag":43,"props":41238,"children":41239},{},[41240],{"type":40,"value":41241},"Chaque test d’intégration prend plusieurs secondes, personne ne peut tester la logique métier de manière isolée, et changer de base de données ou de framework est un projet de plusieurs semaines. Réservons 30 minutes pour identifier les couplages critiques de votre architecture et construire un plan de découplage.",{"type":30,"tag":31,"props":41243,"children":41245},{"id":41244},"les-deux-règles-principales-du-dip",[41246],{"type":40,"value":41247},"Les deux règles principales du DIP",{"type":30,"tag":43,"props":41249,"children":41250},{},[41251,41252,41256,41258,41262],{"type":40,"value":143},{"type":30,"tag":36,"props":41253,"children":41254},{},[41255],{"type":40,"value":41104},{"type":40,"value":41257}," (Dependency Inversion Principle) repose sur deux règles simples mais puissantes. En les respectant, vous pourrez transformer votre code en un ensemble de modules bien découplés et faciles à maintenir. C'est ce même principe qui est au cœur de la ",{"type":30,"tag":75,"props":41259,"children":41260},{"href":2274},[41261],{"type":40,"value":2277},{"type":40,"value":41263}," : les flèches de dépendance pointent toujours vers le domaine métier, jamais vers l'infrastructure. Voyons ces deux règles en détail :",{"type":30,"tag":116,"props":41265,"children":41267},{"id":41266},"_1-les-modules-de-haut-niveau-ne-doivent-pas-dépendre-des-modules-de-bas-niveau-tous-deux-doivent-dépendre-dabstractions",[41268],{"type":40,"value":41269},"1. Les modules de haut niveau ne doivent pas dépendre des modules de bas niveau. Tous deux doivent dépendre d'abstractions.",{"type":30,"tag":43,"props":41271,"children":41272},{},[41273],{"type":40,"value":41274},"Dans un système classique, les classes de haut niveau (comme les contrôleurs ou les services principaux) ont souvent des dépendances directes sur des classes de bas niveau (par exemple, les couches d’accès aux données). Cela crée une forte interdépendance entre ces différentes couches. Le problème ici, c'est que toute modification dans les détails d'implémentation des classes de bas niveau va entraîner des changements dans les classes de haut niveau.",{"type":30,"tag":43,"props":41276,"children":41277},{},[41278,41280,41285],{"type":40,"value":41279},"En appliquant le DIP, vous devez introduire des ",{"type":30,"tag":36,"props":41281,"children":41282},{},[41283],{"type":40,"value":41284},"interfaces ou des abstractions",{"type":40,"value":41286}," entre ces couches. Ainsi, les classes de haut et de bas niveau ne communiquent plus directement. Par exemple, une classe de service ne devrait pas connaître la classe d’accès aux données spécifique, mais plutôt dépendre d’une interface générale pour interagir avec la base de données.",{"type":30,"tag":116,"props":41288,"children":41290},{"id":41289},"_2-les-abstractions-ne-doivent-pas-dépendre-des-détails-ce-sont-les-détails-qui-doivent-dépendre-des-abstractions",[41291],{"type":40,"value":41292},"2. Les abstractions ne doivent pas dépendre des détails. Ce sont les détails qui doivent dépendre des abstractions.",{"type":30,"tag":43,"props":41294,"children":41295},{},[41296],{"type":40,"value":41297},"Dans cette seconde règle, il s’agit d’inverser la dépendance traditionnelle. Autrement dit, les interfaces et abstractions doivent être stables et définir des comportements génériques, tandis que les classes concrètes (les \"détails\") doivent dépendre de ces abstractions.",{"type":30,"tag":19673,"props":41299,"children":41300},{"type":19675},[41301],{"type":30,"tag":43,"props":41302,"children":41303},{},[41304,41306,41311,41313,41318],{"type":40,"value":41305},"Pour respecter ces deux règles, je vous recommande de toujours concevoir des ",{"type":30,"tag":36,"props":41307,"children":41308},{},[41309],{"type":40,"value":41310},"interfaces",{"type":40,"value":41312}," ou des ",{"type":30,"tag":36,"props":41314,"children":41315},{},[41316],{"type":40,"value":41317},"abstractions",{"type":40,"value":41319}," avant de créer des implémentations concrètes. Cela vous permet d’anticiper les changements et d’introduire de la flexibilité dans votre code.",{"type":30,"tag":84,"props":41321,"children":41322},{},[],{"type":30,"tag":43,"props":41324,"children":41325},{},[41326,41328,41334,41336,41342,41343,41349,41351,41357,41358,41364],{"type":40,"value":41327},"Prenons un exemple concret : si vous avez une interface ",{"type":30,"tag":1042,"props":41329,"children":41331},{"className":41330},[],[41332],{"type":40,"value":41333},"IDatabase",{"type":40,"value":41335}," qui définit les méthodes ",{"type":30,"tag":1042,"props":41337,"children":41339},{"className":41338},[],[41340],{"type":40,"value":41341},"save()",{"type":40,"value":8328},{"type":30,"tag":1042,"props":41344,"children":41346},{"className":41345},[],[41347],{"type":40,"value":41348},"find()",{"type":40,"value":41350},", ce sont les classes implémentant cette interface (comme ",{"type":30,"tag":1042,"props":41352,"children":41354},{"className":41353},[],[41355],{"type":40,"value":41356},"MySQLDatabase",{"type":40,"value":1573},{"type":30,"tag":1042,"props":41359,"children":41361},{"className":41360},[],[41362],{"type":40,"value":41363},"MongoDatabase",{"type":40,"value":41365},") qui doivent adapter leur comportement à cette abstraction, et non l’inverse. Cela vous permet de changer facilement d’implémentation (par exemple, passer de MySQL à MongoDB) sans impacter le reste du système.",{"type":30,"tag":84,"props":41367,"children":41368},{},[],{"type":30,"tag":31,"props":41370,"children":41372},{"id":41371},"exemples-concrets-de-violation-et-application-du-dip-en-java",[41373],{"type":40,"value":41374},"Exemples concrets de violation et application du DIP en Java",{"type":30,"tag":43,"props":41376,"children":41377},{},[41378,41380,41384],{"type":40,"value":41379},"Pour bien comprendre le ",{"type":30,"tag":36,"props":41381,"children":41382},{},[41383],{"type":40,"value":41104},{"type":40,"value":41385},", il est utile de voir à quoi ressemble une violation de ce principe et comment on peut corriger cela. Voici un exemple en Java pour illustrer à la fois le problème et la solution.",{"type":30,"tag":116,"props":41387,"children":41389},{"id":41388},"exemple-de-violation-du-dip",[41390],{"type":40,"value":41391},"Exemple de violation du DIP",{"type":30,"tag":43,"props":41393,"children":41394},{},[41395],{"type":40,"value":41396},"Voici un cas simple où une classe de service dépend directement d’une classe de bas niveau, comme un service de messagerie qui envoie des emails :",{"type":30,"tag":1035,"props":41398,"children":41400},{"className":1039,"code":41399,"language":1038,"meta":8,"style":8},"public class NotificationService {\n    private EmailSender emailSender;\n\n    public NotificationService() {\n        this.emailSender = new EmailSender();\n    }\n\n    public void sendNotification(String message) {\n        emailSender.sendEmail(message);\n    }\n}\n\nclass EmailSender {\n    public void sendEmail(String message) {\n        System.out.println(\"Envoi de l'email : \" + message);\n    }\n}\n",[41401],{"type":30,"tag":1042,"props":41402,"children":41403},{"__ignoreMap":8},[41404,41423,41443,41450,41469,41501,41508,41515,41550,41578,41585,41592,41599,41614,41649,41692,41699],{"type":30,"tag":1046,"props":41405,"children":41406},{"class":1048,"line":1049},[41407,41411,41415,41419],{"type":30,"tag":1046,"props":41408,"children":41409},{"style":1053},[41410],{"type":40,"value":1056},{"type":30,"tag":1046,"props":41412,"children":41413},{"style":1053},[41414],{"type":40,"value":1061},{"type":30,"tag":1046,"props":41416,"children":41417},{"style":1064},[41418],{"type":40,"value":22349},{"type":30,"tag":1046,"props":41420,"children":41421},{"style":1070},[41422],{"type":40,"value":1073},{"type":30,"tag":1046,"props":41424,"children":41425},{"class":1048,"line":675},[41426,41430,41434,41439],{"type":30,"tag":1046,"props":41427,"children":41428},{"style":1053},[41429],{"type":40,"value":1081},{"type":30,"tag":1046,"props":41431,"children":41432},{"style":1084},[41433],{"type":40,"value":39957},{"type":30,"tag":1046,"props":41435,"children":41436},{"style":1105},[41437],{"type":40,"value":41438}," emailSender",{"type":30,"tag":1046,"props":41440,"children":41441},{"style":1070},[41442],{"type":40,"value":1113},{"type":30,"tag":1046,"props":41444,"children":41445},{"class":1048,"line":681},[41446],{"type":30,"tag":1046,"props":41447,"children":41448},{"emptyLinePlaceholder":13},[41449],{"type":40,"value":1121},{"type":30,"tag":1046,"props":41451,"children":41452},{"class":1048,"line":1124},[41453,41457,41461,41465],{"type":30,"tag":1046,"props":41454,"children":41455},{"style":1053},[41456],{"type":40,"value":1130},{"type":30,"tag":1046,"props":41458,"children":41459},{"style":1138},[41460],{"type":40,"value":22349},{"type":30,"tag":1046,"props":41462,"children":41463},{"style":1070},[41464],{"type":40,"value":1320},{"type":30,"tag":1046,"props":41466,"children":41467},{"style":1070},[41468],{"type":40,"value":1073},{"type":30,"tag":1046,"props":41470,"children":41471},{"class":1048,"line":1168},[41472,41476,41480,41485,41489,41493,41497],{"type":30,"tag":1046,"props":41473,"children":41474},{"style":1780},[41475],{"type":40,"value":1783},{"type":30,"tag":1046,"props":41477,"children":41478},{"style":1070},[41479],{"type":40,"value":1179},{"type":30,"tag":1046,"props":41481,"children":41482},{"style":1105},[41483],{"type":40,"value":41484},"emailSender ",{"type":30,"tag":1046,"props":41486,"children":41487},{"style":1795},[41488],{"type":40,"value":1798},{"type":30,"tag":1046,"props":41490,"children":41491},{"style":1053},[41492],{"type":40,"value":2480},{"type":30,"tag":1046,"props":41494,"children":41495},{"style":1138},[41496],{"type":40,"value":39957},{"type":30,"tag":1046,"props":41498,"children":41499},{"style":1070},[41500],{"type":40,"value":1406},{"type":30,"tag":1046,"props":41502,"children":41503},{"class":1048,"line":1201},[41504],{"type":30,"tag":1046,"props":41505,"children":41506},{"style":1070},[41507],{"type":40,"value":1207},{"type":30,"tag":1046,"props":41509,"children":41510},{"class":1048,"line":1210},[41511],{"type":30,"tag":1046,"props":41512,"children":41513},{"emptyLinePlaceholder":13},[41514],{"type":40,"value":1121},{"type":30,"tag":1046,"props":41516,"children":41517},{"class":1048,"line":1218},[41518,41522,41526,41530,41534,41538,41542,41546],{"type":30,"tag":1046,"props":41519,"children":41520},{"style":1053},[41521],{"type":40,"value":1130},{"type":30,"tag":1046,"props":41523,"children":41524},{"style":1053},[41525],{"type":40,"value":1135},{"type":30,"tag":1046,"props":41527,"children":41528},{"style":1138},[41529],{"type":40,"value":39747},{"type":30,"tag":1046,"props":41531,"children":41532},{"style":1070},[41533],{"type":40,"value":1146},{"type":30,"tag":1046,"props":41535,"children":41536},{"style":1084},[41537],{"type":40,"value":2882},{"type":30,"tag":1046,"props":41539,"children":41540},{"style":1153},[41541],{"type":40,"value":21315},{"type":30,"tag":1046,"props":41543,"children":41544},{"style":1070},[41545],{"type":40,"value":1161},{"type":30,"tag":1046,"props":41547,"children":41548},{"style":1070},[41549],{"type":40,"value":1073},{"type":30,"tag":1046,"props":41551,"children":41552},{"class":1048,"line":1255},[41553,41558,41562,41566,41570,41574],{"type":30,"tag":1046,"props":41554,"children":41555},{"style":1105},[41556],{"type":40,"value":41557},"        emailSender",{"type":30,"tag":1046,"props":41559,"children":41560},{"style":1070},[41561],{"type":40,"value":1179},{"type":30,"tag":1046,"props":41563,"children":41564},{"style":1138},[41565],{"type":40,"value":39784},{"type":30,"tag":1046,"props":41567,"children":41568},{"style":1070},[41569],{"type":40,"value":1146},{"type":30,"tag":1046,"props":41571,"children":41572},{"style":1105},[41573],{"type":40,"value":39793},{"type":30,"tag":1046,"props":41575,"children":41576},{"style":1070},[41577],{"type":40,"value":1198},{"type":30,"tag":1046,"props":41579,"children":41580},{"class":1048,"line":1284},[41581],{"type":30,"tag":1046,"props":41582,"children":41583},{"style":1070},[41584],{"type":40,"value":1207},{"type":30,"tag":1046,"props":41586,"children":41587},{"class":1048,"line":1292},[41588],{"type":30,"tag":1046,"props":41589,"children":41590},{"style":1070},[41591],{"type":40,"value":1423},{"type":30,"tag":1046,"props":41593,"children":41594},{"class":1048,"line":1300},[41595],{"type":30,"tag":1046,"props":41596,"children":41597},{"emptyLinePlaceholder":13},[41598],{"type":40,"value":1121},{"type":30,"tag":1046,"props":41600,"children":41601},{"class":1048,"line":1327},[41602,41606,41610],{"type":30,"tag":1046,"props":41603,"children":41604},{"style":1053},[41605],{"type":40,"value":7282},{"type":30,"tag":1046,"props":41607,"children":41608},{"style":1064},[41609],{"type":40,"value":39957},{"type":30,"tag":1046,"props":41611,"children":41612},{"style":1070},[41613],{"type":40,"value":1073},{"type":30,"tag":1046,"props":41615,"children":41616},{"class":1048,"line":1354},[41617,41621,41625,41629,41633,41637,41641,41645],{"type":30,"tag":1046,"props":41618,"children":41619},{"style":1053},[41620],{"type":40,"value":1130},{"type":30,"tag":1046,"props":41622,"children":41623},{"style":1053},[41624],{"type":40,"value":1135},{"type":30,"tag":1046,"props":41626,"children":41627},{"style":1138},[41628],{"type":40,"value":39535},{"type":30,"tag":1046,"props":41630,"children":41631},{"style":1070},[41632],{"type":40,"value":1146},{"type":30,"tag":1046,"props":41634,"children":41635},{"style":1084},[41636],{"type":40,"value":2882},{"type":30,"tag":1046,"props":41638,"children":41639},{"style":1153},[41640],{"type":40,"value":21315},{"type":30,"tag":1046,"props":41642,"children":41643},{"style":1070},[41644],{"type":40,"value":1161},{"type":30,"tag":1046,"props":41646,"children":41647},{"style":1070},[41648],{"type":40,"value":1073},{"type":30,"tag":1046,"props":41650,"children":41651},{"class":1048,"line":1391},[41652,41656,41660,41664,41668,41672,41676,41680,41684,41688],{"type":30,"tag":1046,"props":41653,"children":41654},{"style":1105},[41655],{"type":40,"value":12555},{"type":30,"tag":1046,"props":41657,"children":41658},{"style":1070},[41659],{"type":40,"value":1179},{"type":30,"tag":1046,"props":41661,"children":41662},{"style":1105},[41663],{"type":40,"value":12564},{"type":30,"tag":1046,"props":41665,"children":41666},{"style":1070},[41667],{"type":40,"value":1179},{"type":30,"tag":1046,"props":41669,"children":41670},{"style":1138},[41671],{"type":40,"value":12573},{"type":30,"tag":1046,"props":41673,"children":41674},{"style":1070},[41675],{"type":40,"value":1146},{"type":30,"tag":1046,"props":41677,"children":41678},{"style":1675},[41679],{"type":40,"value":39587},{"type":30,"tag":1046,"props":41681,"children":41682},{"style":1795},[41683],{"type":40,"value":7261},{"type":30,"tag":1046,"props":41685,"children":41686},{"style":1105},[41687],{"type":40,"value":21315},{"type":30,"tag":1046,"props":41689,"children":41690},{"style":1070},[41691],{"type":40,"value":1198},{"type":30,"tag":1046,"props":41693,"children":41694},{"class":1048,"line":1409},[41695],{"type":30,"tag":1046,"props":41696,"children":41697},{"style":1070},[41698],{"type":40,"value":1207},{"type":30,"tag":1046,"props":41700,"children":41701},{"class":1048,"line":1417},[41702],{"type":30,"tag":1046,"props":41703,"children":41704},{"style":1070},[41705],{"type":40,"value":1423},{"type":30,"tag":43,"props":41707,"children":41708},{},[41709,41710,41715,41717,41722,41724,41728,41730,41735],{"type":40,"value":24558},{"type":30,"tag":1042,"props":41711,"children":41713},{"className":41712},[],[41714],{"type":40,"value":39472},{"type":40,"value":41716}," dépend directement de ",{"type":30,"tag":1042,"props":41718,"children":41720},{"className":41719},[],[41721],{"type":40,"value":40456},{"type":40,"value":41723},", ce qui viole le ",{"type":30,"tag":36,"props":41725,"children":41726},{},[41727],{"type":40,"value":41104},{"type":40,"value":41729},". Si un jour on veut changer le mode de notification (par exemple, passer à un SMS ou à un système de notifications push), il faudrait modifier ",{"type":30,"tag":1042,"props":41731,"children":41733},{"className":41732},[],[41734],{"type":40,"value":39472},{"type":40,"value":41736},", ce qui n’est pas optimal.",{"type":30,"tag":116,"props":41738,"children":41740},{"id":41739},"correction-avec-le-dip",[41741],{"type":40,"value":41742},"Correction avec le DIP",{"type":30,"tag":43,"props":41744,"children":41745},{},[41746,41748,41752,41754,41759,41761,41766],{"type":40,"value":41747},"Pour appliquer le ",{"type":30,"tag":36,"props":41749,"children":41750},{},[41751],{"type":40,"value":41104},{"type":40,"value":41753},", nous allons introduire une ",{"type":30,"tag":36,"props":41755,"children":41756},{},[41757],{"type":40,"value":41758},"interface",{"type":40,"value":41760}," pour définir le comportement attendu d'un système d'envoi de notifications, et faire en sorte que ",{"type":30,"tag":1042,"props":41762,"children":41764},{"className":41763},[],[41765],{"type":40,"value":39472},{"type":40,"value":41767}," dépende de cette abstraction :",{"type":30,"tag":1035,"props":41769,"children":41771},{"className":1039,"code":41770,"language":1038,"meta":8,"style":8},"// Interface qui respecte le DIP\npublic interface MessageSender {\n    void sendMessage(String message);\n}\n\n// Implémentation pour l'envoi d'emails\npublic class EmailSender implements MessageSender {\n    @Override\n    public void sendMessage(String message) {\n        System.out.println(\"Envoi de l'email : \" + message);\n    }\n}\n\n// Implémentation pour l'envoi de SMS\npublic class SmsSender implements MessageSender {\n    @Override\n    public void sendMessage(String message) {\n        System.out.println(\"Envoi du SMS : \" + message);\n    }\n}\n\n// Service de notification respectant le DIP\npublic class NotificationService {\n    private MessageSender messageSender;\n\n    // Injection de la dépendance via le constructeur\n    public NotificationService(MessageSender messageSender) {\n        this.messageSender = messageSender;\n    }\n\n    public void sendNotification(String message) {\n        messageSender.sendMessage(message);\n    }\n}\n",[41772],{"type":30,"tag":1042,"props":41773,"children":41774},{"__ignoreMap":8},[41775,41783,41803,41831,41838,41845,41853,41880,41891,41926,41969,41976,41983,41990,41998,42026,42037,42072,42115,42122,42129,42136,42144,42163,42183,42190,42198,42230,42258,42265,42272,42307,42336,42343],{"type":30,"tag":1046,"props":41776,"children":41777},{"class":1048,"line":1049},[41778],{"type":30,"tag":1046,"props":41779,"children":41780},{"style":3961},[41781],{"type":40,"value":41782},"// Interface qui respecte le DIP\n",{"type":30,"tag":1046,"props":41784,"children":41785},{"class":1048,"line":675},[41786,41790,41794,41799],{"type":30,"tag":1046,"props":41787,"children":41788},{"style":1053},[41789],{"type":40,"value":1056},{"type":30,"tag":1046,"props":41791,"children":41792},{"style":1053},[41793],{"type":40,"value":4852},{"type":30,"tag":1046,"props":41795,"children":41796},{"style":1064},[41797],{"type":40,"value":41798}," MessageSender",{"type":30,"tag":1046,"props":41800,"children":41801},{"style":1070},[41802],{"type":40,"value":1073},{"type":30,"tag":1046,"props":41804,"children":41805},{"class":1048,"line":681},[41806,41810,41815,41819,41823,41827],{"type":30,"tag":1046,"props":41807,"children":41808},{"style":1053},[41809],{"type":40,"value":4908},{"type":30,"tag":1046,"props":41811,"children":41812},{"style":1138},[41813],{"type":40,"value":41814}," sendMessage",{"type":30,"tag":1046,"props":41816,"children":41817},{"style":1070},[41818],{"type":40,"value":1146},{"type":30,"tag":1046,"props":41820,"children":41821},{"style":1084},[41822],{"type":40,"value":2882},{"type":30,"tag":1046,"props":41824,"children":41825},{"style":1153},[41826],{"type":40,"value":21315},{"type":30,"tag":1046,"props":41828,"children":41829},{"style":1070},[41830],{"type":40,"value":1198},{"type":30,"tag":1046,"props":41832,"children":41833},{"class":1048,"line":1124},[41834],{"type":30,"tag":1046,"props":41835,"children":41836},{"style":1070},[41837],{"type":40,"value":1423},{"type":30,"tag":1046,"props":41839,"children":41840},{"class":1048,"line":1168},[41841],{"type":30,"tag":1046,"props":41842,"children":41843},{"emptyLinePlaceholder":13},[41844],{"type":40,"value":1121},{"type":30,"tag":1046,"props":41846,"children":41847},{"class":1048,"line":1201},[41848],{"type":30,"tag":1046,"props":41849,"children":41850},{"style":3961},[41851],{"type":40,"value":41852},"// Implémentation pour l'envoi d'emails\n",{"type":30,"tag":1046,"props":41854,"children":41855},{"class":1048,"line":1210},[41856,41860,41864,41868,41872,41876],{"type":30,"tag":1046,"props":41857,"children":41858},{"style":1053},[41859],{"type":40,"value":1056},{"type":30,"tag":1046,"props":41861,"children":41862},{"style":1053},[41863],{"type":40,"value":1061},{"type":30,"tag":1046,"props":41865,"children":41866},{"style":1064},[41867],{"type":40,"value":39957},{"type":30,"tag":1046,"props":41869,"children":41870},{"style":1053},[41871],{"type":40,"value":3166},{"type":30,"tag":1046,"props":41873,"children":41874},{"style":1064},[41875],{"type":40,"value":41798},{"type":30,"tag":1046,"props":41877,"children":41878},{"style":1070},[41879],{"type":40,"value":1073},{"type":30,"tag":1046,"props":41881,"children":41882},{"class":1048,"line":1218},[41883,41887],{"type":30,"tag":1046,"props":41884,"children":41885},{"style":1647},[41886],{"type":40,"value":1828},{"type":30,"tag":1046,"props":41888,"children":41889},{"style":1653},[41890],{"type":40,"value":3258},{"type":30,"tag":1046,"props":41892,"children":41893},{"class":1048,"line":1255},[41894,41898,41902,41906,41910,41914,41918,41922],{"type":30,"tag":1046,"props":41895,"children":41896},{"style":1053},[41897],{"type":40,"value":1130},{"type":30,"tag":1046,"props":41899,"children":41900},{"style":1053},[41901],{"type":40,"value":1135},{"type":30,"tag":1046,"props":41903,"children":41904},{"style":1138},[41905],{"type":40,"value":41814},{"type":30,"tag":1046,"props":41907,"children":41908},{"style":1070},[41909],{"type":40,"value":1146},{"type":30,"tag":1046,"props":41911,"children":41912},{"style":1084},[41913],{"type":40,"value":2882},{"type":30,"tag":1046,"props":41915,"children":41916},{"style":1153},[41917],{"type":40,"value":21315},{"type":30,"tag":1046,"props":41919,"children":41920},{"style":1070},[41921],{"type":40,"value":1161},{"type":30,"tag":1046,"props":41923,"children":41924},{"style":1070},[41925],{"type":40,"value":1073},{"type":30,"tag":1046,"props":41927,"children":41928},{"class":1048,"line":1284},[41929,41933,41937,41941,41945,41949,41953,41957,41961,41965],{"type":30,"tag":1046,"props":41930,"children":41931},{"style":1105},[41932],{"type":40,"value":12555},{"type":30,"tag":1046,"props":41934,"children":41935},{"style":1070},[41936],{"type":40,"value":1179},{"type":30,"tag":1046,"props":41938,"children":41939},{"style":1105},[41940],{"type":40,"value":12564},{"type":30,"tag":1046,"props":41942,"children":41943},{"style":1070},[41944],{"type":40,"value":1179},{"type":30,"tag":1046,"props":41946,"children":41947},{"style":1138},[41948],{"type":40,"value":12573},{"type":30,"tag":1046,"props":41950,"children":41951},{"style":1070},[41952],{"type":40,"value":1146},{"type":30,"tag":1046,"props":41954,"children":41955},{"style":1675},[41956],{"type":40,"value":39587},{"type":30,"tag":1046,"props":41958,"children":41959},{"style":1795},[41960],{"type":40,"value":7261},{"type":30,"tag":1046,"props":41962,"children":41963},{"style":1105},[41964],{"type":40,"value":21315},{"type":30,"tag":1046,"props":41966,"children":41967},{"style":1070},[41968],{"type":40,"value":1198},{"type":30,"tag":1046,"props":41970,"children":41971},{"class":1048,"line":1292},[41972],{"type":30,"tag":1046,"props":41973,"children":41974},{"style":1070},[41975],{"type":40,"value":1207},{"type":30,"tag":1046,"props":41977,"children":41978},{"class":1048,"line":1300},[41979],{"type":30,"tag":1046,"props":41980,"children":41981},{"style":1070},[41982],{"type":40,"value":1423},{"type":30,"tag":1046,"props":41984,"children":41985},{"class":1048,"line":1327},[41986],{"type":30,"tag":1046,"props":41987,"children":41988},{"emptyLinePlaceholder":13},[41989],{"type":40,"value":1121},{"type":30,"tag":1046,"props":41991,"children":41992},{"class":1048,"line":1354},[41993],{"type":30,"tag":1046,"props":41994,"children":41995},{"style":3961},[41996],{"type":40,"value":41997},"// Implémentation pour l'envoi de SMS\n",{"type":30,"tag":1046,"props":41999,"children":42000},{"class":1048,"line":1391},[42001,42005,42009,42014,42018,42022],{"type":30,"tag":1046,"props":42002,"children":42003},{"style":1053},[42004],{"type":40,"value":1056},{"type":30,"tag":1046,"props":42006,"children":42007},{"style":1053},[42008],{"type":40,"value":1061},{"type":30,"tag":1046,"props":42010,"children":42011},{"style":1064},[42012],{"type":40,"value":42013}," SmsSender",{"type":30,"tag":1046,"props":42015,"children":42016},{"style":1053},[42017],{"type":40,"value":3166},{"type":30,"tag":1046,"props":42019,"children":42020},{"style":1064},[42021],{"type":40,"value":41798},{"type":30,"tag":1046,"props":42023,"children":42024},{"style":1070},[42025],{"type":40,"value":1073},{"type":30,"tag":1046,"props":42027,"children":42028},{"class":1048,"line":1409},[42029,42033],{"type":30,"tag":1046,"props":42030,"children":42031},{"style":1647},[42032],{"type":40,"value":1828},{"type":30,"tag":1046,"props":42034,"children":42035},{"style":1653},[42036],{"type":40,"value":3258},{"type":30,"tag":1046,"props":42038,"children":42039},{"class":1048,"line":1417},[42040,42044,42048,42052,42056,42060,42064,42068],{"type":30,"tag":1046,"props":42041,"children":42042},{"style":1053},[42043],{"type":40,"value":1130},{"type":30,"tag":1046,"props":42045,"children":42046},{"style":1053},[42047],{"type":40,"value":1135},{"type":30,"tag":1046,"props":42049,"children":42050},{"style":1138},[42051],{"type":40,"value":41814},{"type":30,"tag":1046,"props":42053,"children":42054},{"style":1070},[42055],{"type":40,"value":1146},{"type":30,"tag":1046,"props":42057,"children":42058},{"style":1084},[42059],{"type":40,"value":2882},{"type":30,"tag":1046,"props":42061,"children":42062},{"style":1153},[42063],{"type":40,"value":21315},{"type":30,"tag":1046,"props":42065,"children":42066},{"style":1070},[42067],{"type":40,"value":1161},{"type":30,"tag":1046,"props":42069,"children":42070},{"style":1070},[42071],{"type":40,"value":1073},{"type":30,"tag":1046,"props":42073,"children":42074},{"class":1048,"line":2023},[42075,42079,42083,42087,42091,42095,42099,42103,42107,42111],{"type":30,"tag":1046,"props":42076,"children":42077},{"style":1105},[42078],{"type":40,"value":12555},{"type":30,"tag":1046,"props":42080,"children":42081},{"style":1070},[42082],{"type":40,"value":1179},{"type":30,"tag":1046,"props":42084,"children":42085},{"style":1105},[42086],{"type":40,"value":12564},{"type":30,"tag":1046,"props":42088,"children":42089},{"style":1070},[42090],{"type":40,"value":1179},{"type":30,"tag":1046,"props":42092,"children":42093},{"style":1138},[42094],{"type":40,"value":12573},{"type":30,"tag":1046,"props":42096,"children":42097},{"style":1070},[42098],{"type":40,"value":1146},{"type":30,"tag":1046,"props":42100,"children":42101},{"style":1675},[42102],{"type":40,"value":40193},{"type":30,"tag":1046,"props":42104,"children":42105},{"style":1795},[42106],{"type":40,"value":7261},{"type":30,"tag":1046,"props":42108,"children":42109},{"style":1105},[42110],{"type":40,"value":21315},{"type":30,"tag":1046,"props":42112,"children":42113},{"style":1070},[42114],{"type":40,"value":1198},{"type":30,"tag":1046,"props":42116,"children":42117},{"class":1048,"line":2083},[42118],{"type":30,"tag":1046,"props":42119,"children":42120},{"style":1070},[42121],{"type":40,"value":1207},{"type":30,"tag":1046,"props":42123,"children":42124},{"class":1048,"line":2126},[42125],{"type":30,"tag":1046,"props":42126,"children":42127},{"style":1070},[42128],{"type":40,"value":1423},{"type":30,"tag":1046,"props":42130,"children":42131},{"class":1048,"line":2159},[42132],{"type":30,"tag":1046,"props":42133,"children":42134},{"emptyLinePlaceholder":13},[42135],{"type":40,"value":1121},{"type":30,"tag":1046,"props":42137,"children":42138},{"class":1048,"line":2167},[42139],{"type":30,"tag":1046,"props":42140,"children":42141},{"style":3961},[42142],{"type":40,"value":42143},"// Service de notification respectant le DIP\n",{"type":30,"tag":1046,"props":42145,"children":42146},{"class":1048,"line":4537},[42147,42151,42155,42159],{"type":30,"tag":1046,"props":42148,"children":42149},{"style":1053},[42150],{"type":40,"value":1056},{"type":30,"tag":1046,"props":42152,"children":42153},{"style":1053},[42154],{"type":40,"value":1061},{"type":30,"tag":1046,"props":42156,"children":42157},{"style":1064},[42158],{"type":40,"value":22349},{"type":30,"tag":1046,"props":42160,"children":42161},{"style":1070},[42162],{"type":40,"value":1073},{"type":30,"tag":1046,"props":42164,"children":42165},{"class":1048,"line":4545},[42166,42170,42174,42179],{"type":30,"tag":1046,"props":42167,"children":42168},{"style":1053},[42169],{"type":40,"value":1081},{"type":30,"tag":1046,"props":42171,"children":42172},{"style":1084},[42173],{"type":40,"value":41798},{"type":30,"tag":1046,"props":42175,"children":42176},{"style":1105},[42177],{"type":40,"value":42178}," messageSender",{"type":30,"tag":1046,"props":42180,"children":42181},{"style":1070},[42182],{"type":40,"value":1113},{"type":30,"tag":1046,"props":42184,"children":42185},{"class":1048,"line":4582},[42186],{"type":30,"tag":1046,"props":42187,"children":42188},{"emptyLinePlaceholder":13},[42189],{"type":40,"value":1121},{"type":30,"tag":1046,"props":42191,"children":42192},{"class":1048,"line":4622},[42193],{"type":30,"tag":1046,"props":42194,"children":42195},{"style":3961},[42196],{"type":40,"value":42197},"    // Injection de la dépendance via le constructeur\n",{"type":30,"tag":1046,"props":42199,"children":42200},{"class":1048,"line":4662},[42201,42205,42209,42213,42218,42222,42226],{"type":30,"tag":1046,"props":42202,"children":42203},{"style":1053},[42204],{"type":40,"value":1130},{"type":30,"tag":1046,"props":42206,"children":42207},{"style":1138},[42208],{"type":40,"value":22349},{"type":30,"tag":1046,"props":42210,"children":42211},{"style":1070},[42212],{"type":40,"value":1146},{"type":30,"tag":1046,"props":42214,"children":42215},{"style":1084},[42216],{"type":40,"value":42217},"MessageSender",{"type":30,"tag":1046,"props":42219,"children":42220},{"style":1153},[42221],{"type":40,"value":42178},{"type":30,"tag":1046,"props":42223,"children":42224},{"style":1070},[42225],{"type":40,"value":1161},{"type":30,"tag":1046,"props":42227,"children":42228},{"style":1070},[42229],{"type":40,"value":1073},{"type":30,"tag":1046,"props":42231,"children":42232},{"class":1048,"line":4687},[42233,42237,42241,42246,42250,42254],{"type":30,"tag":1046,"props":42234,"children":42235},{"style":1780},[42236],{"type":40,"value":1783},{"type":30,"tag":1046,"props":42238,"children":42239},{"style":1070},[42240],{"type":40,"value":1179},{"type":30,"tag":1046,"props":42242,"children":42243},{"style":1105},[42244],{"type":40,"value":42245},"messageSender ",{"type":30,"tag":1046,"props":42247,"children":42248},{"style":1795},[42249],{"type":40,"value":1798},{"type":30,"tag":1046,"props":42251,"children":42252},{"style":1105},[42253],{"type":40,"value":42178},{"type":30,"tag":1046,"props":42255,"children":42256},{"style":1070},[42257],{"type":40,"value":1113},{"type":30,"tag":1046,"props":42259,"children":42260},{"class":1048,"line":4695},[42261],{"type":30,"tag":1046,"props":42262,"children":42263},{"style":1070},[42264],{"type":40,"value":1207},{"type":30,"tag":1046,"props":42266,"children":42267},{"class":1048,"line":4703},[42268],{"type":30,"tag":1046,"props":42269,"children":42270},{"emptyLinePlaceholder":13},[42271],{"type":40,"value":1121},{"type":30,"tag":1046,"props":42273,"children":42274},{"class":1048,"line":4739},[42275,42279,42283,42287,42291,42295,42299,42303],{"type":30,"tag":1046,"props":42276,"children":42277},{"style":1053},[42278],{"type":40,"value":1130},{"type":30,"tag":1046,"props":42280,"children":42281},{"style":1053},[42282],{"type":40,"value":1135},{"type":30,"tag":1046,"props":42284,"children":42285},{"style":1138},[42286],{"type":40,"value":39747},{"type":30,"tag":1046,"props":42288,"children":42289},{"style":1070},[42290],{"type":40,"value":1146},{"type":30,"tag":1046,"props":42292,"children":42293},{"style":1084},[42294],{"type":40,"value":2882},{"type":30,"tag":1046,"props":42296,"children":42297},{"style":1153},[42298],{"type":40,"value":21315},{"type":30,"tag":1046,"props":42300,"children":42301},{"style":1070},[42302],{"type":40,"value":1161},{"type":30,"tag":1046,"props":42304,"children":42305},{"style":1070},[42306],{"type":40,"value":1073},{"type":30,"tag":1046,"props":42308,"children":42309},{"class":1048,"line":4771},[42310,42315,42319,42324,42328,42332],{"type":30,"tag":1046,"props":42311,"children":42312},{"style":1105},[42313],{"type":40,"value":42314},"        messageSender",{"type":30,"tag":1046,"props":42316,"children":42317},{"style":1070},[42318],{"type":40,"value":1179},{"type":30,"tag":1046,"props":42320,"children":42321},{"style":1138},[42322],{"type":40,"value":42323},"sendMessage",{"type":30,"tag":1046,"props":42325,"children":42326},{"style":1070},[42327],{"type":40,"value":1146},{"type":30,"tag":1046,"props":42329,"children":42330},{"style":1105},[42331],{"type":40,"value":39793},{"type":30,"tag":1046,"props":42333,"children":42334},{"style":1070},[42335],{"type":40,"value":1198},{"type":30,"tag":1046,"props":42337,"children":42338},{"class":1048,"line":4811},[42339],{"type":30,"tag":1046,"props":42340,"children":42341},{"style":1070},[42342],{"type":40,"value":1207},{"type":30,"tag":1046,"props":42344,"children":42345},{"class":1048,"line":4819},[42346],{"type":30,"tag":1046,"props":42347,"children":42348},{"style":1070},[42349],{"type":40,"value":1423},{"type":30,"tag":43,"props":42351,"children":42352},{},[42353,42355,42360,42362,42367,42369,42374,42376,42381],{"type":40,"value":42354},"Dans ce nouvel exemple, la classe ",{"type":30,"tag":1042,"props":42356,"children":42358},{"className":42357},[],[42359],{"type":40,"value":39472},{"type":40,"value":42361}," dépend d'une abstraction (",{"type":30,"tag":1042,"props":42363,"children":42365},{"className":42364},[],[42366],{"type":40,"value":42217},{"type":40,"value":42368},"), et non plus d'une implémentation concrète comme ",{"type":30,"tag":1042,"props":42370,"children":42372},{"className":42371},[],[42373],{"type":40,"value":40456},{"type":40,"value":42375},". Cela signifie que nous pourrions facilement changer le comportement d'envoi de messages sans avoir à toucher la classe ",{"type":30,"tag":1042,"props":42377,"children":42379},{"className":42378},[],[42380],{"type":40,"value":39472},{"type":40,"value":42382},". Par exemple, nous pourrions envoyer des SMS à la place d'emails :",{"type":30,"tag":1035,"props":42384,"children":42386},{"className":1039,"code":42385,"language":1038,"meta":8,"style":8},"public class Main {\n    public static void main(String[] args) {\n        // Injection d'une implémentation concrète\n        MessageSender emailSender = new EmailSender();\n        NotificationService notificationService = new NotificationService(emailSender);\n        notificationService.sendNotification(\"Hello par Email!\");\n\n        // Changement facile d'implémentation sans modifier NotificationService\n        MessageSender smsSender = new SmsSender();\n        NotificationService smsNotificationService = new NotificationService(smsSender);\n        smsNotificationService.sendNotification(\"Hello par SMS!\");\n    }\n}\n",[42387],{"type":30,"tag":1042,"props":42388,"children":42389},{"__ignoreMap":8},[42390,42409,42452,42460,42488,42523,42551,42558,42566,42593,42629,42657,42664],{"type":30,"tag":1046,"props":42391,"children":42392},{"class":1048,"line":1049},[42393,42397,42401,42405],{"type":30,"tag":1046,"props":42394,"children":42395},{"style":1053},[42396],{"type":40,"value":1056},{"type":30,"tag":1046,"props":42398,"children":42399},{"style":1053},[42400],{"type":40,"value":1061},{"type":30,"tag":1046,"props":42402,"children":42403},{"style":1064},[42404],{"type":40,"value":12347},{"type":30,"tag":1046,"props":42406,"children":42407},{"style":1070},[42408],{"type":40,"value":1073},{"type":30,"tag":1046,"props":42410,"children":42411},{"class":1048,"line":675},[42412,42416,42420,42424,42428,42432,42436,42440,42444,42448],{"type":30,"tag":1046,"props":42413,"children":42414},{"style":1053},[42415],{"type":40,"value":1130},{"type":30,"tag":1046,"props":42417,"children":42418},{"style":1053},[42419],{"type":40,"value":12363},{"type":30,"tag":1046,"props":42421,"children":42422},{"style":1053},[42423],{"type":40,"value":1135},{"type":30,"tag":1046,"props":42425,"children":42426},{"style":1138},[42427],{"type":40,"value":12372},{"type":30,"tag":1046,"props":42429,"children":42430},{"style":1070},[42431],{"type":40,"value":1146},{"type":30,"tag":1046,"props":42433,"children":42434},{"style":1053},[42435],{"type":40,"value":2882},{"type":30,"tag":1046,"props":42437,"children":42438},{"style":1070},[42439],{"type":40,"value":12385},{"type":30,"tag":1046,"props":42441,"children":42442},{"style":1153},[42443],{"type":40,"value":12390},{"type":30,"tag":1046,"props":42445,"children":42446},{"style":1070},[42447],{"type":40,"value":1161},{"type":30,"tag":1046,"props":42449,"children":42450},{"style":1070},[42451],{"type":40,"value":1073},{"type":30,"tag":1046,"props":42453,"children":42454},{"class":1048,"line":681},[42455],{"type":30,"tag":1046,"props":42456,"children":42457},{"style":3961},[42458],{"type":40,"value":42459},"        // Injection d'une implémentation concrète\n",{"type":30,"tag":1046,"props":42461,"children":42462},{"class":1048,"line":1124},[42463,42468,42472,42476,42480,42484],{"type":30,"tag":1046,"props":42464,"children":42465},{"style":1084},[42466],{"type":40,"value":42467},"        MessageSender",{"type":30,"tag":1046,"props":42469,"children":42470},{"style":1105},[42471],{"type":40,"value":40576},{"type":30,"tag":1046,"props":42473,"children":42474},{"style":1795},[42475],{"type":40,"value":1798},{"type":30,"tag":1046,"props":42477,"children":42478},{"style":1053},[42479],{"type":40,"value":2480},{"type":30,"tag":1046,"props":42481,"children":42482},{"style":1138},[42483],{"type":40,"value":39957},{"type":30,"tag":1046,"props":42485,"children":42486},{"style":1070},[42487],{"type":40,"value":1406},{"type":30,"tag":1046,"props":42489,"children":42490},{"class":1048,"line":1168},[42491,42495,42499,42503,42507,42511,42515,42519],{"type":30,"tag":1046,"props":42492,"children":42493},{"style":1084},[42494],{"type":40,"value":40600},{"type":30,"tag":1046,"props":42496,"children":42497},{"style":1105},[42498],{"type":40,"value":40605},{"type":30,"tag":1046,"props":42500,"children":42501},{"style":1795},[42502],{"type":40,"value":1798},{"type":30,"tag":1046,"props":42504,"children":42505},{"style":1053},[42506],{"type":40,"value":2480},{"type":30,"tag":1046,"props":42508,"children":42509},{"style":1138},[42510],{"type":40,"value":22349},{"type":30,"tag":1046,"props":42512,"children":42513},{"style":1070},[42514],{"type":40,"value":1146},{"type":30,"tag":1046,"props":42516,"children":42517},{"style":1105},[42518],{"type":40,"value":40626},{"type":30,"tag":1046,"props":42520,"children":42521},{"style":1070},[42522],{"type":40,"value":1198},{"type":30,"tag":1046,"props":42524,"children":42525},{"class":1048,"line":1201},[42526,42530,42534,42538,42542,42547],{"type":30,"tag":1046,"props":42527,"children":42528},{"style":1105},[42529],{"type":40,"value":40638},{"type":30,"tag":1046,"props":42531,"children":42532},{"style":1070},[42533],{"type":40,"value":1179},{"type":30,"tag":1046,"props":42535,"children":42536},{"style":1138},[42537],{"type":40,"value":40647},{"type":30,"tag":1046,"props":42539,"children":42540},{"style":1070},[42541],{"type":40,"value":1146},{"type":30,"tag":1046,"props":42543,"children":42544},{"style":1675},[42545],{"type":40,"value":42546},"\"Hello par Email!\"",{"type":30,"tag":1046,"props":42548,"children":42549},{"style":1070},[42550],{"type":40,"value":1198},{"type":30,"tag":1046,"props":42552,"children":42553},{"class":1048,"line":1210},[42554],{"type":30,"tag":1046,"props":42555,"children":42556},{"emptyLinePlaceholder":13},[42557],{"type":40,"value":1121},{"type":30,"tag":1046,"props":42559,"children":42560},{"class":1048,"line":1218},[42561],{"type":30,"tag":1046,"props":42562,"children":42563},{"style":3961},[42564],{"type":40,"value":42565},"        // Changement facile d'implémentation sans modifier NotificationService\n",{"type":30,"tag":1046,"props":42567,"children":42568},{"class":1048,"line":1255},[42569,42573,42577,42581,42585,42589],{"type":30,"tag":1046,"props":42570,"children":42571},{"style":1084},[42572],{"type":40,"value":42467},{"type":30,"tag":1046,"props":42574,"children":42575},{"style":1105},[42576],{"type":40,"value":40687},{"type":30,"tag":1046,"props":42578,"children":42579},{"style":1795},[42580],{"type":40,"value":1798},{"type":30,"tag":1046,"props":42582,"children":42583},{"style":1053},[42584],{"type":40,"value":2480},{"type":30,"tag":1046,"props":42586,"children":42587},{"style":1138},[42588],{"type":40,"value":42013},{"type":30,"tag":1046,"props":42590,"children":42591},{"style":1070},[42592],{"type":40,"value":1406},{"type":30,"tag":1046,"props":42594,"children":42595},{"class":1048,"line":1284},[42596,42600,42605,42609,42613,42617,42621,42625],{"type":30,"tag":1046,"props":42597,"children":42598},{"style":1084},[42599],{"type":40,"value":40600},{"type":30,"tag":1046,"props":42601,"children":42602},{"style":1105},[42603],{"type":40,"value":42604}," smsNotificationService ",{"type":30,"tag":1046,"props":42606,"children":42607},{"style":1795},[42608],{"type":40,"value":1798},{"type":30,"tag":1046,"props":42610,"children":42611},{"style":1053},[42612],{"type":40,"value":2480},{"type":30,"tag":1046,"props":42614,"children":42615},{"style":1138},[42616],{"type":40,"value":22349},{"type":30,"tag":1046,"props":42618,"children":42619},{"style":1070},[42620],{"type":40,"value":1146},{"type":30,"tag":1046,"props":42622,"children":42623},{"style":1105},[42624],{"type":40,"value":40746},{"type":30,"tag":1046,"props":42626,"children":42627},{"style":1070},[42628],{"type":40,"value":1198},{"type":30,"tag":1046,"props":42630,"children":42631},{"class":1048,"line":1292},[42632,42636,42640,42644,42648,42653],{"type":30,"tag":1046,"props":42633,"children":42634},{"style":1105},[42635],{"type":40,"value":40758},{"type":30,"tag":1046,"props":42637,"children":42638},{"style":1070},[42639],{"type":40,"value":1179},{"type":30,"tag":1046,"props":42641,"children":42642},{"style":1138},[42643],{"type":40,"value":40647},{"type":30,"tag":1046,"props":42645,"children":42646},{"style":1070},[42647],{"type":40,"value":1146},{"type":30,"tag":1046,"props":42649,"children":42650},{"style":1675},[42651],{"type":40,"value":42652},"\"Hello par SMS!\"",{"type":30,"tag":1046,"props":42654,"children":42655},{"style":1070},[42656],{"type":40,"value":1198},{"type":30,"tag":1046,"props":42658,"children":42659},{"class":1048,"line":1300},[42660],{"type":30,"tag":1046,"props":42661,"children":42662},{"style":1070},[42663],{"type":40,"value":1207},{"type":30,"tag":1046,"props":42665,"children":42666},{"class":1048,"line":1327},[42667],{"type":30,"tag":1046,"props":42668,"children":42669},{"style":1070},[42670],{"type":40,"value":1423},{"type":30,"tag":116,"props":42672,"children":42674},{"id":42673},"ce-que-nous-avons-corrigé",[42675],{"type":40,"value":42676},"Ce que nous avons corrigé :",{"type":30,"tag":163,"props":42678,"children":42679},{},[42680],{"type":30,"tag":167,"props":42681,"children":42682},{},[42683,42684],{"type":40,"value":52},{"type":30,"tag":36,"props":42685,"children":42686},{},[42687],{"type":40,"value":39472},{"type":30,"tag":43,"props":42689,"children":42690},{},[42691,42693,42698],{"type":40,"value":42692},"n’a plus besoin de connaître les détails d'implémentation de la manière dont les messages sont envoyés (email, SMS, etc.). Elle dépend uniquement d'une interface abstraite (",{"type":30,"tag":1042,"props":42694,"children":42696},{"className":42695},[],[42697],{"type":40,"value":42217},{"type":40,"value":6392},{"type":30,"tag":163,"props":42700,"children":42701},{},[42702],{"type":30,"tag":167,"props":42703,"children":42704},{},[42705,42707,42712],{"type":40,"value":42706},"Si nous devons un jour ajouter une nouvelle manière d'envoyer des notifications (par exemple via une API de notifications push), nous pourrons simplement créer une nouvelle classe qui implémente ",{"type":30,"tag":1042,"props":42708,"children":42710},{"className":42709},[],[42711],{"type":40,"value":42217},{"type":40,"value":42713}," sans toucher au code existant.",{"type":30,"tag":19673,"props":42715,"children":42717},{"type":42716},"tip",[42718],{"type":30,"tag":43,"props":42719,"children":42720},{},[42721,42723,42727],{"type":40,"value":42722},"Je vous recommande de toujours préférer l'injection de dépendances via des ",{"type":30,"tag":36,"props":42724,"children":42725},{},[42726],{"type":40,"value":41310},{"type":40,"value":42728},". Cela vous permettra de changer facilement les implémentations sans avoir à modifier plusieurs classes.",{"type":30,"tag":84,"props":42730,"children":42731},{},[],{"type":30,"tag":31,"props":42733,"children":42735},{"id":42734},"comment-appliquer-le-dip-dans-un-projet-java",[42736],{"type":40,"value":42737},"Comment appliquer le DIP dans un projet Java",{"type":30,"tag":43,"props":42739,"children":42740},{},[42741,42743,42747,42749,42753,42755,42760],{"type":40,"value":42742},"Le principe d'inversion des dépendances peut sembler simple en théorie, mais lorsqu'il s'agit de l'appliquer dans un projet Java de grande envergure, les choses peuvent se compliquer un peu. Heureusement, des frameworks comme ",{"type":30,"tag":36,"props":42744,"children":42745},{},[42746],{"type":40,"value":12958},{"type":40,"value":42748}," nous facilitent grandement l'implémentation du ",{"type":30,"tag":36,"props":42750,"children":42751},{},[42752],{"type":40,"value":41104},{"type":40,"value":42754}," grâce à des concepts comme l'",{"type":30,"tag":36,"props":42756,"children":42757},{},[42758],{"type":40,"value":42759},"injection de dépendances",{"type":40,"value":1179},{"type":30,"tag":116,"props":42762,"children":42764},{"id":42763},"utiliser-spring-pour-appliquer-le-dip",[42765],{"type":40,"value":42766},"Utiliser Spring pour appliquer le DIP",{"type":30,"tag":43,"props":42768,"children":42769},{},[42770,42772,42777,42779,42783],{"type":40,"value":42771},"Dans un projet Java classique, vous pourriez vous retrouver à instancier et gérer manuellement vos dépendances, comme dans les exemples précédents. Mais dans un projet de plus grande taille, cela peut devenir difficile à gérer. C’est là que le ",{"type":30,"tag":36,"props":42773,"children":42774},{},[42775],{"type":40,"value":42776},"framework Spring",{"type":40,"value":42778}," entre en jeu. Spring facilite l’application du ",{"type":30,"tag":36,"props":42780,"children":42781},{},[42782],{"type":40,"value":41104},{"type":40,"value":42784}," en fournissant un conteneur d’injection de dépendances qui gère la création et l’injection des objets à votre place.",{"type":30,"tag":19673,"props":42786,"children":42787},{"type":42716},[42788],{"type":30,"tag":43,"props":42789,"children":42790},{},[42791,42793,42799,42800,42806],{"type":40,"value":42792},"Utilisez les annotations ",{"type":30,"tag":1042,"props":42794,"children":42796},{"className":42795},[],[42797],{"type":40,"value":42798},"@Autowired",{"type":40,"value":8328},{"type":30,"tag":1042,"props":42801,"children":42803},{"className":42802},[],[42804],{"type":40,"value":42805},"@Component",{"type":40,"value":42807}," de Spring pour que le framework gère automatiquement l'injection des dépendances. Cela simplifie grandement la gestion des dépendances dans des projets complexes.",{"type":30,"tag":84,"props":42809,"children":42810},{},[],{"type":30,"tag":116,"props":42812,"children":42814},{"id":42813},"exemple-avec-spring",[42815],{"type":40,"value":42816},"Exemple avec Spring",{"type":30,"tag":43,"props":42818,"children":42819},{},[42820],{"type":40,"value":42821},"Supposons que nous ayons le même système de notification que dans l’exemple précédent, mais cette fois, nous allons utiliser Spring pour gérer les dépendances :",{"type":30,"tag":1518,"props":42823,"children":42824},{},[42825],{"type":30,"tag":167,"props":42826,"children":42827},{},[42828,42833],{"type":30,"tag":36,"props":42829,"children":42830},{},[42831],{"type":40,"value":42832},"Définir les interfaces et implémentations comme avant",{"type":40,"value":6296},{"type":30,"tag":1035,"props":42835,"children":42837},{"className":1039,"code":42836,"language":1038,"meta":8,"style":8},"public interface MessageSender {\n    void sendMessage(String message);\n}\n\n@Component\npublic class EmailSender implements MessageSender {\n    @Override\n    public void sendMessage(String message) {\n        System.out.println(\"Envoi de l'email : \" + message);\n    }\n}\n\n@Component\npublic class SmsSender implements MessageSender {\n    @Override\n    public void sendMessage(String message) {\n        System.out.println(\"Envoi du SMS : \" + message);\n    }\n}\n",[42838],{"type":30,"tag":1042,"props":42839,"children":42840},{"__ignoreMap":8},[42841,42860,42887,42894,42901,42913,42940,42951,42986,43029,43036,43043,43050,43061,43088,43099,43134,43177,43184],{"type":30,"tag":1046,"props":42842,"children":42843},{"class":1048,"line":1049},[42844,42848,42852,42856],{"type":30,"tag":1046,"props":42845,"children":42846},{"style":1053},[42847],{"type":40,"value":1056},{"type":30,"tag":1046,"props":42849,"children":42850},{"style":1053},[42851],{"type":40,"value":4852},{"type":30,"tag":1046,"props":42853,"children":42854},{"style":1064},[42855],{"type":40,"value":41798},{"type":30,"tag":1046,"props":42857,"children":42858},{"style":1070},[42859],{"type":40,"value":1073},{"type":30,"tag":1046,"props":42861,"children":42862},{"class":1048,"line":675},[42863,42867,42871,42875,42879,42883],{"type":30,"tag":1046,"props":42864,"children":42865},{"style":1053},[42866],{"type":40,"value":4908},{"type":30,"tag":1046,"props":42868,"children":42869},{"style":1138},[42870],{"type":40,"value":41814},{"type":30,"tag":1046,"props":42872,"children":42873},{"style":1070},[42874],{"type":40,"value":1146},{"type":30,"tag":1046,"props":42876,"children":42877},{"style":1084},[42878],{"type":40,"value":2882},{"type":30,"tag":1046,"props":42880,"children":42881},{"style":1153},[42882],{"type":40,"value":21315},{"type":30,"tag":1046,"props":42884,"children":42885},{"style":1070},[42886],{"type":40,"value":1198},{"type":30,"tag":1046,"props":42888,"children":42889},{"class":1048,"line":681},[42890],{"type":30,"tag":1046,"props":42891,"children":42892},{"style":1070},[42893],{"type":40,"value":1423},{"type":30,"tag":1046,"props":42895,"children":42896},{"class":1048,"line":1124},[42897],{"type":30,"tag":1046,"props":42898,"children":42899},{"emptyLinePlaceholder":13},[42900],{"type":40,"value":1121},{"type":30,"tag":1046,"props":42902,"children":42903},{"class":1048,"line":1168},[42904,42908],{"type":30,"tag":1046,"props":42905,"children":42906},{"style":1647},[42907],{"type":40,"value":1650},{"type":30,"tag":1046,"props":42909,"children":42910},{"style":1653},[42911],{"type":40,"value":42912},"Component\n",{"type":30,"tag":1046,"props":42914,"children":42915},{"class":1048,"line":1201},[42916,42920,42924,42928,42932,42936],{"type":30,"tag":1046,"props":42917,"children":42918},{"style":1053},[42919],{"type":40,"value":1056},{"type":30,"tag":1046,"props":42921,"children":42922},{"style":1053},[42923],{"type":40,"value":1061},{"type":30,"tag":1046,"props":42925,"children":42926},{"style":1064},[42927],{"type":40,"value":39957},{"type":30,"tag":1046,"props":42929,"children":42930},{"style":1053},[42931],{"type":40,"value":3166},{"type":30,"tag":1046,"props":42933,"children":42934},{"style":1064},[42935],{"type":40,"value":41798},{"type":30,"tag":1046,"props":42937,"children":42938},{"style":1070},[42939],{"type":40,"value":1073},{"type":30,"tag":1046,"props":42941,"children":42942},{"class":1048,"line":1210},[42943,42947],{"type":30,"tag":1046,"props":42944,"children":42945},{"style":1647},[42946],{"type":40,"value":1828},{"type":30,"tag":1046,"props":42948,"children":42949},{"style":1653},[42950],{"type":40,"value":3258},{"type":30,"tag":1046,"props":42952,"children":42953},{"class":1048,"line":1218},[42954,42958,42962,42966,42970,42974,42978,42982],{"type":30,"tag":1046,"props":42955,"children":42956},{"style":1053},[42957],{"type":40,"value":1130},{"type":30,"tag":1046,"props":42959,"children":42960},{"style":1053},[42961],{"type":40,"value":1135},{"type":30,"tag":1046,"props":42963,"children":42964},{"style":1138},[42965],{"type":40,"value":41814},{"type":30,"tag":1046,"props":42967,"children":42968},{"style":1070},[42969],{"type":40,"value":1146},{"type":30,"tag":1046,"props":42971,"children":42972},{"style":1084},[42973],{"type":40,"value":2882},{"type":30,"tag":1046,"props":42975,"children":42976},{"style":1153},[42977],{"type":40,"value":21315},{"type":30,"tag":1046,"props":42979,"children":42980},{"style":1070},[42981],{"type":40,"value":1161},{"type":30,"tag":1046,"props":42983,"children":42984},{"style":1070},[42985],{"type":40,"value":1073},{"type":30,"tag":1046,"props":42987,"children":42988},{"class":1048,"line":1255},[42989,42993,42997,43001,43005,43009,43013,43017,43021,43025],{"type":30,"tag":1046,"props":42990,"children":42991},{"style":1105},[42992],{"type":40,"value":12555},{"type":30,"tag":1046,"props":42994,"children":42995},{"style":1070},[42996],{"type":40,"value":1179},{"type":30,"tag":1046,"props":42998,"children":42999},{"style":1105},[43000],{"type":40,"value":12564},{"type":30,"tag":1046,"props":43002,"children":43003},{"style":1070},[43004],{"type":40,"value":1179},{"type":30,"tag":1046,"props":43006,"children":43007},{"style":1138},[43008],{"type":40,"value":12573},{"type":30,"tag":1046,"props":43010,"children":43011},{"style":1070},[43012],{"type":40,"value":1146},{"type":30,"tag":1046,"props":43014,"children":43015},{"style":1675},[43016],{"type":40,"value":39587},{"type":30,"tag":1046,"props":43018,"children":43019},{"style":1795},[43020],{"type":40,"value":7261},{"type":30,"tag":1046,"props":43022,"children":43023},{"style":1105},[43024],{"type":40,"value":21315},{"type":30,"tag":1046,"props":43026,"children":43027},{"style":1070},[43028],{"type":40,"value":1198},{"type":30,"tag":1046,"props":43030,"children":43031},{"class":1048,"line":1284},[43032],{"type":30,"tag":1046,"props":43033,"children":43034},{"style":1070},[43035],{"type":40,"value":1207},{"type":30,"tag":1046,"props":43037,"children":43038},{"class":1048,"line":1292},[43039],{"type":30,"tag":1046,"props":43040,"children":43041},{"style":1070},[43042],{"type":40,"value":1423},{"type":30,"tag":1046,"props":43044,"children":43045},{"class":1048,"line":1300},[43046],{"type":30,"tag":1046,"props":43047,"children":43048},{"emptyLinePlaceholder":13},[43049],{"type":40,"value":1121},{"type":30,"tag":1046,"props":43051,"children":43052},{"class":1048,"line":1327},[43053,43057],{"type":30,"tag":1046,"props":43054,"children":43055},{"style":1647},[43056],{"type":40,"value":1650},{"type":30,"tag":1046,"props":43058,"children":43059},{"style":1653},[43060],{"type":40,"value":42912},{"type":30,"tag":1046,"props":43062,"children":43063},{"class":1048,"line":1354},[43064,43068,43072,43076,43080,43084],{"type":30,"tag":1046,"props":43065,"children":43066},{"style":1053},[43067],{"type":40,"value":1056},{"type":30,"tag":1046,"props":43069,"children":43070},{"style":1053},[43071],{"type":40,"value":1061},{"type":30,"tag":1046,"props":43073,"children":43074},{"style":1064},[43075],{"type":40,"value":42013},{"type":30,"tag":1046,"props":43077,"children":43078},{"style":1053},[43079],{"type":40,"value":3166},{"type":30,"tag":1046,"props":43081,"children":43082},{"style":1064},[43083],{"type":40,"value":41798},{"type":30,"tag":1046,"props":43085,"children":43086},{"style":1070},[43087],{"type":40,"value":1073},{"type":30,"tag":1046,"props":43089,"children":43090},{"class":1048,"line":1391},[43091,43095],{"type":30,"tag":1046,"props":43092,"children":43093},{"style":1647},[43094],{"type":40,"value":1828},{"type":30,"tag":1046,"props":43096,"children":43097},{"style":1653},[43098],{"type":40,"value":3258},{"type":30,"tag":1046,"props":43100,"children":43101},{"class":1048,"line":1409},[43102,43106,43110,43114,43118,43122,43126,43130],{"type":30,"tag":1046,"props":43103,"children":43104},{"style":1053},[43105],{"type":40,"value":1130},{"type":30,"tag":1046,"props":43107,"children":43108},{"style":1053},[43109],{"type":40,"value":1135},{"type":30,"tag":1046,"props":43111,"children":43112},{"style":1138},[43113],{"type":40,"value":41814},{"type":30,"tag":1046,"props":43115,"children":43116},{"style":1070},[43117],{"type":40,"value":1146},{"type":30,"tag":1046,"props":43119,"children":43120},{"style":1084},[43121],{"type":40,"value":2882},{"type":30,"tag":1046,"props":43123,"children":43124},{"style":1153},[43125],{"type":40,"value":21315},{"type":30,"tag":1046,"props":43127,"children":43128},{"style":1070},[43129],{"type":40,"value":1161},{"type":30,"tag":1046,"props":43131,"children":43132},{"style":1070},[43133],{"type":40,"value":1073},{"type":30,"tag":1046,"props":43135,"children":43136},{"class":1048,"line":1417},[43137,43141,43145,43149,43153,43157,43161,43165,43169,43173],{"type":30,"tag":1046,"props":43138,"children":43139},{"style":1105},[43140],{"type":40,"value":12555},{"type":30,"tag":1046,"props":43142,"children":43143},{"style":1070},[43144],{"type":40,"value":1179},{"type":30,"tag":1046,"props":43146,"children":43147},{"style":1105},[43148],{"type":40,"value":12564},{"type":30,"tag":1046,"props":43150,"children":43151},{"style":1070},[43152],{"type":40,"value":1179},{"type":30,"tag":1046,"props":43154,"children":43155},{"style":1138},[43156],{"type":40,"value":12573},{"type":30,"tag":1046,"props":43158,"children":43159},{"style":1070},[43160],{"type":40,"value":1146},{"type":30,"tag":1046,"props":43162,"children":43163},{"style":1675},[43164],{"type":40,"value":40193},{"type":30,"tag":1046,"props":43166,"children":43167},{"style":1795},[43168],{"type":40,"value":7261},{"type":30,"tag":1046,"props":43170,"children":43171},{"style":1105},[43172],{"type":40,"value":21315},{"type":30,"tag":1046,"props":43174,"children":43175},{"style":1070},[43176],{"type":40,"value":1198},{"type":30,"tag":1046,"props":43178,"children":43179},{"class":1048,"line":2023},[43180],{"type":30,"tag":1046,"props":43181,"children":43182},{"style":1070},[43183],{"type":40,"value":1207},{"type":30,"tag":1046,"props":43185,"children":43186},{"class":1048,"line":2083},[43187],{"type":30,"tag":1046,"props":43188,"children":43189},{"style":1070},[43190],{"type":40,"value":1423},{"type":30,"tag":1518,"props":43192,"children":43193},{"start":675},[43194],{"type":30,"tag":167,"props":43195,"children":43196},{},[43197,43202],{"type":30,"tag":36,"props":43198,"children":43199},{},[43200],{"type":40,"value":43201},"Injection de dépendances avec Spring",{"type":40,"value":6296},{"type":30,"tag":43,"props":43204,"children":43205},{},[43206,43208,43213,43215,43220,43222,43227],{"type":40,"value":43207},"Nous allons maintenant utiliser l'annotation ",{"type":30,"tag":1042,"props":43209,"children":43211},{"className":43210},[],[43212],{"type":40,"value":42798},{"type":40,"value":43214}," de Spring pour injecter l'implémentation concrète de ",{"type":30,"tag":1042,"props":43216,"children":43218},{"className":43217},[],[43219],{"type":40,"value":42217},{"type":40,"value":43221}," dans ",{"type":30,"tag":1042,"props":43223,"children":43225},{"className":43224},[],[43226],{"type":40,"value":39472},{"type":40,"value":43228},", sans avoir à gérer manuellement l'instanciation.",{"type":30,"tag":1035,"props":43230,"children":43232},{"className":1039,"code":43231,"language":1038,"meta":8,"style":8},"@Component\npublic class NotificationService {\n    private final MessageSender messageSender;\n\n    // Injection de la dépendance par constructeur\n    @Autowired\n    public NotificationService(MessageSender messageSender) {\n        this.messageSender = messageSender;\n    }\n\n    public void sendNotification(String message) {\n        messageSender.sendMessage(message);\n    }\n}\n",[43233],{"type":30,"tag":1042,"props":43234,"children":43235},{"__ignoreMap":8},[43236,43247,43266,43289,43296,43304,43316,43347,43374,43381,43388,43423,43450,43457],{"type":30,"tag":1046,"props":43237,"children":43238},{"class":1048,"line":1049},[43239,43243],{"type":30,"tag":1046,"props":43240,"children":43241},{"style":1647},[43242],{"type":40,"value":1650},{"type":30,"tag":1046,"props":43244,"children":43245},{"style":1653},[43246],{"type":40,"value":42912},{"type":30,"tag":1046,"props":43248,"children":43249},{"class":1048,"line":675},[43250,43254,43258,43262],{"type":30,"tag":1046,"props":43251,"children":43252},{"style":1053},[43253],{"type":40,"value":1056},{"type":30,"tag":1046,"props":43255,"children":43256},{"style":1053},[43257],{"type":40,"value":1061},{"type":30,"tag":1046,"props":43259,"children":43260},{"style":1064},[43261],{"type":40,"value":22349},{"type":30,"tag":1046,"props":43263,"children":43264},{"style":1070},[43265],{"type":40,"value":1073},{"type":30,"tag":1046,"props":43267,"children":43268},{"class":1048,"line":681},[43269,43273,43277,43281,43285],{"type":30,"tag":1046,"props":43270,"children":43271},{"style":1053},[43272],{"type":40,"value":1081},{"type":30,"tag":1046,"props":43274,"children":43275},{"style":1053},[43276],{"type":40,"value":1721},{"type":30,"tag":1046,"props":43278,"children":43279},{"style":1084},[43280],{"type":40,"value":41798},{"type":30,"tag":1046,"props":43282,"children":43283},{"style":1105},[43284],{"type":40,"value":42178},{"type":30,"tag":1046,"props":43286,"children":43287},{"style":1070},[43288],{"type":40,"value":1113},{"type":30,"tag":1046,"props":43290,"children":43291},{"class":1048,"line":1124},[43292],{"type":30,"tag":1046,"props":43293,"children":43294},{"emptyLinePlaceholder":13},[43295],{"type":40,"value":1121},{"type":30,"tag":1046,"props":43297,"children":43298},{"class":1048,"line":1168},[43299],{"type":30,"tag":1046,"props":43300,"children":43301},{"style":3961},[43302],{"type":40,"value":43303},"    // Injection de la dépendance par constructeur\n",{"type":30,"tag":1046,"props":43305,"children":43306},{"class":1048,"line":1201},[43307,43311],{"type":30,"tag":1046,"props":43308,"children":43309},{"style":1647},[43310],{"type":40,"value":1828},{"type":30,"tag":1046,"props":43312,"children":43313},{"style":1653},[43314],{"type":40,"value":43315},"Autowired\n",{"type":30,"tag":1046,"props":43317,"children":43318},{"class":1048,"line":1210},[43319,43323,43327,43331,43335,43339,43343],{"type":30,"tag":1046,"props":43320,"children":43321},{"style":1053},[43322],{"type":40,"value":1130},{"type":30,"tag":1046,"props":43324,"children":43325},{"style":1138},[43326],{"type":40,"value":22349},{"type":30,"tag":1046,"props":43328,"children":43329},{"style":1070},[43330],{"type":40,"value":1146},{"type":30,"tag":1046,"props":43332,"children":43333},{"style":1084},[43334],{"type":40,"value":42217},{"type":30,"tag":1046,"props":43336,"children":43337},{"style":1153},[43338],{"type":40,"value":42178},{"type":30,"tag":1046,"props":43340,"children":43341},{"style":1070},[43342],{"type":40,"value":1161},{"type":30,"tag":1046,"props":43344,"children":43345},{"style":1070},[43346],{"type":40,"value":1073},{"type":30,"tag":1046,"props":43348,"children":43349},{"class":1048,"line":1218},[43350,43354,43358,43362,43366,43370],{"type":30,"tag":1046,"props":43351,"children":43352},{"style":1780},[43353],{"type":40,"value":1783},{"type":30,"tag":1046,"props":43355,"children":43356},{"style":1070},[43357],{"type":40,"value":1179},{"type":30,"tag":1046,"props":43359,"children":43360},{"style":1105},[43361],{"type":40,"value":42245},{"type":30,"tag":1046,"props":43363,"children":43364},{"style":1795},[43365],{"type":40,"value":1798},{"type":30,"tag":1046,"props":43367,"children":43368},{"style":1105},[43369],{"type":40,"value":42178},{"type":30,"tag":1046,"props":43371,"children":43372},{"style":1070},[43373],{"type":40,"value":1113},{"type":30,"tag":1046,"props":43375,"children":43376},{"class":1048,"line":1255},[43377],{"type":30,"tag":1046,"props":43378,"children":43379},{"style":1070},[43380],{"type":40,"value":1207},{"type":30,"tag":1046,"props":43382,"children":43383},{"class":1048,"line":1284},[43384],{"type":30,"tag":1046,"props":43385,"children":43386},{"emptyLinePlaceholder":13},[43387],{"type":40,"value":1121},{"type":30,"tag":1046,"props":43389,"children":43390},{"class":1048,"line":1292},[43391,43395,43399,43403,43407,43411,43415,43419],{"type":30,"tag":1046,"props":43392,"children":43393},{"style":1053},[43394],{"type":40,"value":1130},{"type":30,"tag":1046,"props":43396,"children":43397},{"style":1053},[43398],{"type":40,"value":1135},{"type":30,"tag":1046,"props":43400,"children":43401},{"style":1138},[43402],{"type":40,"value":39747},{"type":30,"tag":1046,"props":43404,"children":43405},{"style":1070},[43406],{"type":40,"value":1146},{"type":30,"tag":1046,"props":43408,"children":43409},{"style":1084},[43410],{"type":40,"value":2882},{"type":30,"tag":1046,"props":43412,"children":43413},{"style":1153},[43414],{"type":40,"value":21315},{"type":30,"tag":1046,"props":43416,"children":43417},{"style":1070},[43418],{"type":40,"value":1161},{"type":30,"tag":1046,"props":43420,"children":43421},{"style":1070},[43422],{"type":40,"value":1073},{"type":30,"tag":1046,"props":43424,"children":43425},{"class":1048,"line":1300},[43426,43430,43434,43438,43442,43446],{"type":30,"tag":1046,"props":43427,"children":43428},{"style":1105},[43429],{"type":40,"value":42314},{"type":30,"tag":1046,"props":43431,"children":43432},{"style":1070},[43433],{"type":40,"value":1179},{"type":30,"tag":1046,"props":43435,"children":43436},{"style":1138},[43437],{"type":40,"value":42323},{"type":30,"tag":1046,"props":43439,"children":43440},{"style":1070},[43441],{"type":40,"value":1146},{"type":30,"tag":1046,"props":43443,"children":43444},{"style":1105},[43445],{"type":40,"value":39793},{"type":30,"tag":1046,"props":43447,"children":43448},{"style":1070},[43449],{"type":40,"value":1198},{"type":30,"tag":1046,"props":43451,"children":43452},{"class":1048,"line":1327},[43453],{"type":30,"tag":1046,"props":43454,"children":43455},{"style":1070},[43456],{"type":40,"value":1207},{"type":30,"tag":1046,"props":43458,"children":43459},{"class":1048,"line":1354},[43460],{"type":30,"tag":1046,"props":43461,"children":43462},{"style":1070},[43463],{"type":40,"value":1423},{"type":30,"tag":1518,"props":43465,"children":43466},{"start":681},[43467],{"type":30,"tag":167,"props":43468,"children":43469},{},[43470,43475],{"type":30,"tag":36,"props":43471,"children":43472},{},[43473],{"type":40,"value":43474},"Configurer et exécuter l’application",{"type":40,"value":6296},{"type":30,"tag":43,"props":43477,"children":43478},{},[43479],{"type":40,"value":43480},"Enfin, vous n’avez plus qu’à configurer votre application Spring pour que le framework se charge d’injecter les dépendances au moment de l’exécution.",{"type":30,"tag":1035,"props":43482,"children":43484},{"className":1039,"code":43483,"language":1038,"meta":8,"style":8},"@SpringBootApplication\npublic class DipExampleApplication {\n\n    public static void main(String[] args) {\n        ApplicationContext context = SpringApplication.run(DipExampleApplication.class, args);\n\n        // Obtenir NotificationService du contexte Spring\n        NotificationService notificationService = context.getBean(NotificationService.class);\n        notificationService.sendNotification(\"Hello via Spring!\");\n    }\n}\n",[43485],{"type":30,"tag":1042,"props":43486,"children":43487},{"__ignoreMap":8},[43488,43500,43520,43527,43570,43630,43637,43645,43694,43722,43729],{"type":30,"tag":1046,"props":43489,"children":43490},{"class":1048,"line":1049},[43491,43495],{"type":30,"tag":1046,"props":43492,"children":43493},{"style":1647},[43494],{"type":40,"value":1650},{"type":30,"tag":1046,"props":43496,"children":43497},{"style":1653},[43498],{"type":40,"value":43499},"SpringBootApplication\n",{"type":30,"tag":1046,"props":43501,"children":43502},{"class":1048,"line":675},[43503,43507,43511,43516],{"type":30,"tag":1046,"props":43504,"children":43505},{"style":1053},[43506],{"type":40,"value":1056},{"type":30,"tag":1046,"props":43508,"children":43509},{"style":1053},[43510],{"type":40,"value":1061},{"type":30,"tag":1046,"props":43512,"children":43513},{"style":1064},[43514],{"type":40,"value":43515}," DipExampleApplication",{"type":30,"tag":1046,"props":43517,"children":43518},{"style":1070},[43519],{"type":40,"value":1073},{"type":30,"tag":1046,"props":43521,"children":43522},{"class":1048,"line":681},[43523],{"type":30,"tag":1046,"props":43524,"children":43525},{"emptyLinePlaceholder":13},[43526],{"type":40,"value":1121},{"type":30,"tag":1046,"props":43528,"children":43529},{"class":1048,"line":1124},[43530,43534,43538,43542,43546,43550,43554,43558,43562,43566],{"type":30,"tag":1046,"props":43531,"children":43532},{"style":1053},[43533],{"type":40,"value":1130},{"type":30,"tag":1046,"props":43535,"children":43536},{"style":1053},[43537],{"type":40,"value":12363},{"type":30,"tag":1046,"props":43539,"children":43540},{"style":1053},[43541],{"type":40,"value":1135},{"type":30,"tag":1046,"props":43543,"children":43544},{"style":1138},[43545],{"type":40,"value":12372},{"type":30,"tag":1046,"props":43547,"children":43548},{"style":1070},[43549],{"type":40,"value":1146},{"type":30,"tag":1046,"props":43551,"children":43552},{"style":1053},[43553],{"type":40,"value":2882},{"type":30,"tag":1046,"props":43555,"children":43556},{"style":1070},[43557],{"type":40,"value":12385},{"type":30,"tag":1046,"props":43559,"children":43560},{"style":1153},[43561],{"type":40,"value":12390},{"type":30,"tag":1046,"props":43563,"children":43564},{"style":1070},[43565],{"type":40,"value":1161},{"type":30,"tag":1046,"props":43567,"children":43568},{"style":1070},[43569],{"type":40,"value":1073},{"type":30,"tag":1046,"props":43571,"children":43572},{"class":1048,"line":1168},[43573,43578,43583,43587,43592,43596,43601,43605,43610,43614,43618,43622,43626],{"type":30,"tag":1046,"props":43574,"children":43575},{"style":1084},[43576],{"type":40,"value":43577},"        ApplicationContext",{"type":30,"tag":1046,"props":43579,"children":43580},{"style":1105},[43581],{"type":40,"value":43582}," context ",{"type":30,"tag":1046,"props":43584,"children":43585},{"style":1795},[43586],{"type":40,"value":1798},{"type":30,"tag":1046,"props":43588,"children":43589},{"style":1105},[43590],{"type":40,"value":43591}," SpringApplication",{"type":30,"tag":1046,"props":43593,"children":43594},{"style":1070},[43595],{"type":40,"value":1179},{"type":30,"tag":1046,"props":43597,"children":43598},{"style":1138},[43599],{"type":40,"value":43600},"run",{"type":30,"tag":1046,"props":43602,"children":43603},{"style":1070},[43604],{"type":40,"value":1146},{"type":30,"tag":1046,"props":43606,"children":43607},{"style":1105},[43608],{"type":40,"value":43609},"DipExampleApplication",{"type":30,"tag":1046,"props":43611,"children":43612},{"style":1070},[43613],{"type":40,"value":1179},{"type":30,"tag":1046,"props":43615,"children":43616},{"style":1105},[43617],{"type":40,"value":7282},{"type":30,"tag":1046,"props":43619,"children":43620},{"style":1070},[43621],{"type":40,"value":2891},{"type":30,"tag":1046,"props":43623,"children":43624},{"style":1105},[43625],{"type":40,"value":12390},{"type":30,"tag":1046,"props":43627,"children":43628},{"style":1070},[43629],{"type":40,"value":1198},{"type":30,"tag":1046,"props":43631,"children":43632},{"class":1048,"line":1201},[43633],{"type":30,"tag":1046,"props":43634,"children":43635},{"emptyLinePlaceholder":13},[43636],{"type":40,"value":1121},{"type":30,"tag":1046,"props":43638,"children":43639},{"class":1048,"line":1210},[43640],{"type":30,"tag":1046,"props":43641,"children":43642},{"style":3961},[43643],{"type":40,"value":43644},"        // Obtenir NotificationService du contexte Spring\n",{"type":30,"tag":1046,"props":43646,"children":43647},{"class":1048,"line":1218},[43648,43652,43656,43660,43665,43669,43674,43678,43682,43686,43690],{"type":30,"tag":1046,"props":43649,"children":43650},{"style":1084},[43651],{"type":40,"value":40600},{"type":30,"tag":1046,"props":43653,"children":43654},{"style":1105},[43655],{"type":40,"value":40605},{"type":30,"tag":1046,"props":43657,"children":43658},{"style":1795},[43659],{"type":40,"value":1798},{"type":30,"tag":1046,"props":43661,"children":43662},{"style":1105},[43663],{"type":40,"value":43664}," context",{"type":30,"tag":1046,"props":43666,"children":43667},{"style":1070},[43668],{"type":40,"value":1179},{"type":30,"tag":1046,"props":43670,"children":43671},{"style":1138},[43672],{"type":40,"value":43673},"getBean",{"type":30,"tag":1046,"props":43675,"children":43676},{"style":1070},[43677],{"type":40,"value":1146},{"type":30,"tag":1046,"props":43679,"children":43680},{"style":1105},[43681],{"type":40,"value":39472},{"type":30,"tag":1046,"props":43683,"children":43684},{"style":1070},[43685],{"type":40,"value":1179},{"type":30,"tag":1046,"props":43687,"children":43688},{"style":1105},[43689],{"type":40,"value":7282},{"type":30,"tag":1046,"props":43691,"children":43692},{"style":1070},[43693],{"type":40,"value":1198},{"type":30,"tag":1046,"props":43695,"children":43696},{"class":1048,"line":1255},[43697,43701,43705,43709,43713,43718],{"type":30,"tag":1046,"props":43698,"children":43699},{"style":1105},[43700],{"type":40,"value":40638},{"type":30,"tag":1046,"props":43702,"children":43703},{"style":1070},[43704],{"type":40,"value":1179},{"type":30,"tag":1046,"props":43706,"children":43707},{"style":1138},[43708],{"type":40,"value":40647},{"type":30,"tag":1046,"props":43710,"children":43711},{"style":1070},[43712],{"type":40,"value":1146},{"type":30,"tag":1046,"props":43714,"children":43715},{"style":1675},[43716],{"type":40,"value":43717},"\"Hello via Spring!\"",{"type":30,"tag":1046,"props":43719,"children":43720},{"style":1070},[43721],{"type":40,"value":1198},{"type":30,"tag":1046,"props":43723,"children":43724},{"class":1048,"line":1284},[43725],{"type":30,"tag":1046,"props":43726,"children":43727},{"style":1070},[43728],{"type":40,"value":1207},{"type":30,"tag":1046,"props":43730,"children":43731},{"class":1048,"line":1292},[43732],{"type":30,"tag":1046,"props":43733,"children":43734},{"style":1070},[43735],{"type":40,"value":1423},{"type":30,"tag":43737,"props":43738,"children":43740},"h5",{"id":43739},"ce-que-spring-fait-pour-vous",[43741],{"type":40,"value":43742},"Ce que Spring fait pour vous :",{"type":30,"tag":163,"props":43744,"children":43745},{},[43746,43783,43813],{"type":30,"tag":167,"props":43747,"children":43748},{},[43749,43754,43756,43761,43763,43768,43769,43775,43777,43782],{"type":30,"tag":36,"props":43750,"children":43751},{},[43752],{"type":40,"value":43753},"Gestion automatique des dépendances",{"type":40,"value":43755}," : Grâce à Spring, vous n’avez pas besoin de créer manuellement les objets de type ",{"type":30,"tag":1042,"props":43757,"children":43759},{"className":43758},[],[43760],{"type":40,"value":42217},{"type":40,"value":43762},". Spring instancie automatiquement la classe ",{"type":30,"tag":1042,"props":43764,"children":43766},{"className":43765},[],[43767],{"type":40,"value":40456},{"type":40,"value":1573},{"type":30,"tag":1042,"props":43770,"children":43772},{"className":43771},[],[43773],{"type":40,"value":43774},"SmsSender",{"type":40,"value":43776}," (selon la configuration) et l’injecte dans ",{"type":30,"tag":1042,"props":43778,"children":43780},{"className":43779},[],[43781],{"type":40,"value":39472},{"type":40,"value":1179},{"type":30,"tag":167,"props":43784,"children":43785},{},[43786,43791,43793,43798,43800,43805,43807,43812],{"type":30,"tag":36,"props":43787,"children":43788},{},[43789],{"type":40,"value":43790},"Découplage",{"type":40,"value":43792}," : Comme ",{"type":30,"tag":1042,"props":43794,"children":43796},{"className":43795},[],[43797],{"type":40,"value":39472},{"type":40,"value":43799}," dépend de l’interface ",{"type":30,"tag":1042,"props":43801,"children":43803},{"className":43802},[],[43804],{"type":40,"value":42217},{"type":40,"value":43806},", vous pouvez facilement changer l’implémentation injectée sans modifier le code de ",{"type":30,"tag":1042,"props":43808,"children":43810},{"className":43809},[],[43811],{"type":40,"value":39472},{"type":40,"value":1179},{"type":30,"tag":167,"props":43814,"children":43815},{},[43816,43821,43823,43828,43829,43834],{"type":30,"tag":36,"props":43817,"children":43818},{},[43819],{"type":40,"value":43820},"Facilité de configuration",{"type":40,"value":43822}," : Avec des annotations comme ",{"type":30,"tag":1042,"props":43824,"children":43826},{"className":43825},[],[43827],{"type":40,"value":42805},{"type":40,"value":8328},{"type":30,"tag":1042,"props":43830,"children":43832},{"className":43831},[],[43833],{"type":40,"value":42798},{"type":40,"value":43835},", la configuration des dépendances est claire et concise. Vous n’avez plus à vous soucier de l’instanciation manuelle ou de l’injection de dépendances au runtime.",{"type":30,"tag":2339,"props":43837,"children":43839},{"id":43838},"avantages-dappliquer-le-dip-dans-un-projet-spring",[43840],{"type":40,"value":43841},"Avantages d’appliquer le DIP dans un projet Spring",{"type":30,"tag":1518,"props":43843,"children":43844},{},[43845,43855],{"type":30,"tag":167,"props":43846,"children":43847},{},[43848,43853],{"type":30,"tag":36,"props":43849,"children":43850},{},[43851],{"type":40,"value":43852},"Flexibilité accrue",{"type":40,"value":43854}," : En définissant des interfaces et en les injectant, vous pouvez facilement remplacer des composants sans toucher au reste du système. Par exemple, passer d’un envoi d’emails à un envoi de notifications push devient simple.",{"type":30,"tag":167,"props":43856,"children":43857},{},[43858,43863,43865,43870,43872,43877],{"type":30,"tag":36,"props":43859,"children":43860},{},[43861],{"type":40,"value":43862},"Tests unitaires simplifiés",{"type":40,"value":43864}," : Grâce à l’utilisation d’abstractions, vous pouvez facilement mocker ou stubber vos dépendances lors des tests unitaires. Il devient très simple de tester ",{"type":30,"tag":1042,"props":43866,"children":43868},{"className":43867},[],[43869],{"type":40,"value":39472},{"type":40,"value":43871}," sans avoir besoin d’implémenter un vrai ",{"type":30,"tag":1042,"props":43873,"children":43875},{"className":43874},[],[43876],{"type":40,"value":42217},{"type":40,"value":6296},{"type":30,"tag":1035,"props":43879,"children":43881},{"className":1039,"code":43880,"language":1038,"meta":8,"style":8},"@Test\npublic void testSendNotification() {\n    MessageSender mockSender = Mockito.mock(MessageSender.class);\n    NotificationService service = new NotificationService(mockSender);\n\n    service.sendNotification(\"Test message\");\n\n    Mockito.verify(mockSender).sendMessage(\"Test message\");\n}\n",[43882],{"type":30,"tag":1042,"props":43883,"children":43884},{"__ignoreMap":8},[43885,43896,43920,43970,44007,44014,44043,44050,44095],{"type":30,"tag":1046,"props":43886,"children":43887},{"class":1048,"line":1049},[43888,43892],{"type":30,"tag":1046,"props":43889,"children":43890},{"style":1647},[43891],{"type":40,"value":1650},{"type":30,"tag":1046,"props":43893,"children":43894},{"style":1653},[43895],{"type":40,"value":13736},{"type":30,"tag":1046,"props":43897,"children":43898},{"class":1048,"line":675},[43899,43903,43907,43912,43916],{"type":30,"tag":1046,"props":43900,"children":43901},{"style":1053},[43902],{"type":40,"value":1056},{"type":30,"tag":1046,"props":43904,"children":43905},{"style":1053},[43906],{"type":40,"value":1135},{"type":30,"tag":1046,"props":43908,"children":43909},{"style":1138},[43910],{"type":40,"value":43911}," testSendNotification",{"type":30,"tag":1046,"props":43913,"children":43914},{"style":1070},[43915],{"type":40,"value":1320},{"type":30,"tag":1046,"props":43917,"children":43918},{"style":1070},[43919],{"type":40,"value":1073},{"type":30,"tag":1046,"props":43921,"children":43922},{"class":1048,"line":681},[43923,43928,43933,43937,43942,43946,43950,43954,43958,43962,43966],{"type":30,"tag":1046,"props":43924,"children":43925},{"style":1084},[43926],{"type":40,"value":43927},"    MessageSender",{"type":30,"tag":1046,"props":43929,"children":43930},{"style":1105},[43931],{"type":40,"value":43932}," mockSender ",{"type":30,"tag":1046,"props":43934,"children":43935},{"style":1795},[43936],{"type":40,"value":1798},{"type":30,"tag":1046,"props":43938,"children":43939},{"style":1105},[43940],{"type":40,"value":43941}," Mockito",{"type":30,"tag":1046,"props":43943,"children":43944},{"style":1070},[43945],{"type":40,"value":1179},{"type":30,"tag":1046,"props":43947,"children":43948},{"style":1138},[43949],{"type":40,"value":12712},{"type":30,"tag":1046,"props":43951,"children":43952},{"style":1070},[43953],{"type":40,"value":1146},{"type":30,"tag":1046,"props":43955,"children":43956},{"style":1105},[43957],{"type":40,"value":42217},{"type":30,"tag":1046,"props":43959,"children":43960},{"style":1070},[43961],{"type":40,"value":1179},{"type":30,"tag":1046,"props":43963,"children":43964},{"style":1105},[43965],{"type":40,"value":7282},{"type":30,"tag":1046,"props":43967,"children":43968},{"style":1070},[43969],{"type":40,"value":1198},{"type":30,"tag":1046,"props":43971,"children":43972},{"class":1048,"line":1124},[43973,43978,43982,43986,43990,43994,43998,44003],{"type":30,"tag":1046,"props":43974,"children":43975},{"style":1084},[43976],{"type":40,"value":43977},"    NotificationService",{"type":30,"tag":1046,"props":43979,"children":43980},{"style":1105},[43981],{"type":40,"value":34528},{"type":30,"tag":1046,"props":43983,"children":43984},{"style":1795},[43985],{"type":40,"value":1798},{"type":30,"tag":1046,"props":43987,"children":43988},{"style":1053},[43989],{"type":40,"value":2480},{"type":30,"tag":1046,"props":43991,"children":43992},{"style":1138},[43993],{"type":40,"value":22349},{"type":30,"tag":1046,"props":43995,"children":43996},{"style":1070},[43997],{"type":40,"value":1146},{"type":30,"tag":1046,"props":43999,"children":44000},{"style":1105},[44001],{"type":40,"value":44002},"mockSender",{"type":30,"tag":1046,"props":44004,"children":44005},{"style":1070},[44006],{"type":40,"value":1198},{"type":30,"tag":1046,"props":44008,"children":44009},{"class":1048,"line":1168},[44010],{"type":30,"tag":1046,"props":44011,"children":44012},{"emptyLinePlaceholder":13},[44013],{"type":40,"value":1121},{"type":30,"tag":1046,"props":44015,"children":44016},{"class":1048,"line":1201},[44017,44022,44026,44030,44034,44039],{"type":30,"tag":1046,"props":44018,"children":44019},{"style":1105},[44020],{"type":40,"value":44021},"    service",{"type":30,"tag":1046,"props":44023,"children":44024},{"style":1070},[44025],{"type":40,"value":1179},{"type":30,"tag":1046,"props":44027,"children":44028},{"style":1138},[44029],{"type":40,"value":40647},{"type":30,"tag":1046,"props":44031,"children":44032},{"style":1070},[44033],{"type":40,"value":1146},{"type":30,"tag":1046,"props":44035,"children":44036},{"style":1675},[44037],{"type":40,"value":44038},"\"Test message\"",{"type":30,"tag":1046,"props":44040,"children":44041},{"style":1070},[44042],{"type":40,"value":1198},{"type":30,"tag":1046,"props":44044,"children":44045},{"class":1048,"line":1210},[44046],{"type":30,"tag":1046,"props":44047,"children":44048},{"emptyLinePlaceholder":13},[44049],{"type":40,"value":1121},{"type":30,"tag":1046,"props":44051,"children":44052},{"class":1048,"line":1218},[44053,44058,44062,44067,44071,44075,44079,44083,44087,44091],{"type":30,"tag":1046,"props":44054,"children":44055},{"style":1105},[44056],{"type":40,"value":44057},"    Mockito",{"type":30,"tag":1046,"props":44059,"children":44060},{"style":1070},[44061],{"type":40,"value":1179},{"type":30,"tag":1046,"props":44063,"children":44064},{"style":1138},[44065],{"type":40,"value":44066},"verify",{"type":30,"tag":1046,"props":44068,"children":44069},{"style":1070},[44070],{"type":40,"value":1146},{"type":30,"tag":1046,"props":44072,"children":44073},{"style":1105},[44074],{"type":40,"value":44002},{"type":30,"tag":1046,"props":44076,"children":44077},{"style":1070},[44078],{"type":40,"value":6392},{"type":30,"tag":1046,"props":44080,"children":44081},{"style":1138},[44082],{"type":40,"value":42323},{"type":30,"tag":1046,"props":44084,"children":44085},{"style":1070},[44086],{"type":40,"value":1146},{"type":30,"tag":1046,"props":44088,"children":44089},{"style":1675},[44090],{"type":40,"value":44038},{"type":30,"tag":1046,"props":44092,"children":44093},{"style":1070},[44094],{"type":40,"value":1198},{"type":30,"tag":1046,"props":44096,"children":44097},{"class":1048,"line":1255},[44098],{"type":30,"tag":1046,"props":44099,"children":44100},{"style":1070},[44101],{"type":40,"value":1423},{"type":30,"tag":1518,"props":44103,"children":44104},{"start":681},[44105],{"type":30,"tag":167,"props":44106,"children":44107},{},[44108,44113],{"type":30,"tag":36,"props":44109,"children":44110},{},[44111],{"type":40,"value":44112},"Scalabilité",{"type":40,"value":44114}," : Le DIP, appliqué avec l'aide d'un framework comme Spring, permet de construire des systèmes plus évolutifs, où chaque module peut être modifié, testé ou remplacé sans impact significatif sur les autres composants.",{"type":30,"tag":19673,"props":44116,"children":44117},{"type":41223},[44118],{"type":30,"tag":43,"props":44119,"children":44120},{},[44121],{"type":40,"value":44122},"Veillez à ne pas tomber dans le piège de créer trop d'abstractions inutiles. Le DIP doit être utilisé de manière pragmatique pour éviter de sur-complexifier le système.",{"type":30,"tag":84,"props":44124,"children":44125},{},[],{"type":30,"tag":31,"props":44127,"children":44129},{"id":44128},"faq-réponses-aux-questions-fréquentes-sur-le-dip",[44130],{"type":40,"value":44131},"FAQ : Réponses aux questions fréquentes sur le DIP",{"type":30,"tag":530,"props":44133,"children":44134},{},[44135,44140],{"type":30,"tag":534,"props":44136,"children":44137},{},[44138],{"type":40,"value":44139},"1. Qu’est-ce que le DIP en termes simples ?",{"type":30,"tag":43,"props":44141,"children":44142},{},[44143,44144,44148],{"type":40,"value":143},{"type":30,"tag":36,"props":44145,"children":44146},{},[44147],{"type":40,"value":41104},{"type":40,"value":44149}," (Dependency Inversion Principle) est un principe de conception qui dit que les modules de haut niveau ne doivent pas dépendre des modules de bas niveau, mais tous deux doivent dépendre d’abstractions (interfaces). Cela permet de découpler les composants de votre système, les rendant plus flexibles et faciles à maintenir.",{"type":30,"tag":530,"props":44151,"children":44152},{},[44153,44158],{"type":30,"tag":534,"props":44154,"children":44155},{},[44156],{"type":40,"value":44157},"2. Pourquoi est-il si important d’appliquer le DIP ?",{"type":30,"tag":43,"props":44159,"children":44160},{},[44161,44163,44168,44169,44174,44175,44180],{"type":40,"value":44162},"Le DIP permet de réduire le couplage entre les différentes parties de votre application. Cela signifie que vous pouvez modifier une partie sans avoir à changer les autres. Cela rend votre code plus ",{"type":30,"tag":36,"props":44164,"children":44165},{},[44166],{"type":40,"value":44167},"flexible",{"type":40,"value":19457},{"type":30,"tag":36,"props":44170,"children":44171},{},[44172],{"type":40,"value":44173},"évolutif",{"type":40,"value":8328},{"type":30,"tag":36,"props":44176,"children":44177},{},[44178],{"type":40,"value":44179},"testable",{"type":40,"value":44181},", ce qui est crucial dans des projets à long terme ou de grande envergure.",{"type":30,"tag":530,"props":44183,"children":44184},{},[44185,44190],{"type":30,"tag":534,"props":44186,"children":44187},{},[44188],{"type":40,"value":44189},"3. Est-ce que le DIP rend le code plus complexe ?",{"type":30,"tag":43,"props":44191,"children":44192},{},[44193,44195,44199,44201,44206],{"type":40,"value":44194},"Cela peut paraître plus complexe au début, car vous ajoutez des ",{"type":30,"tag":36,"props":44196,"children":44197},{},[44198],{"type":40,"value":41310},{"type":40,"value":44200}," et des abstractions. Cependant, cette complexité initiale est compensée par les avantages à long terme : un code plus facile à tester, à maintenir et à faire évoluer. Il s’agit d’un ",{"type":30,"tag":36,"props":44202,"children":44203},{},[44204],{"type":40,"value":44205},"investissement",{"type":40,"value":44207}," en qualité.",{"type":30,"tag":530,"props":44209,"children":44210},{},[44211,44216,44221],{"type":30,"tag":534,"props":44212,"children":44213},{},[44214],{"type":40,"value":44215},"4. Dois-je appliquer le DIP dans tous mes projets, même les petits ?",{"type":30,"tag":43,"props":44217,"children":44218},{},[44219],{"type":40,"value":44220},"Le DIP est particulièrement utile dans les projets de grande taille, où les modifications fréquentes peuvent rendre la maintenance difficile. Pour les petits projets, il n’est pas toujours nécessaire de tout structurer de cette manière. Cependant, même dans des projets plus modestes, adopter de bonnes pratiques comme le DIP peut vous éviter des surprises désagréables à mesure que le projet grandit.",{"type":30,"tag":964,"props":44222,"children":44223},{},[44224],{"type":30,"tag":43,"props":44225,"children":44226},{},[44227,44231],{"type":30,"tag":36,"props":44228,"children":44229},{},[44230],{"type":40,"value":11304},{"type":40,"value":44232}," Si vous travaillez sur un petit projet, vous pouvez choisir d’appliquer le DIP uniquement dans les parties critiques du système, comme les services ou les accès aux données, plutôt que sur toutes les classes.",{"type":30,"tag":530,"props":44234,"children":44235},{},[44236,44241],{"type":30,"tag":534,"props":44237,"children":44238},{},[44239],{"type":40,"value":44240},"5. Comment puis-je savoir si mon code viole le DIP ?",{"type":30,"tag":43,"props":44242,"children":44243},{},[44244],{"type":40,"value":44245},"Votre code viole le DIP si une classe de haut niveau dépend directement d’une implémentation concrète, plutôt que d’une interface ou d’une abstraction. Si un changement dans une classe bas niveau (comme une classe d’accès aux données) provoque des modifications dans les classes de haut niveau (comme les services ou les contrôleurs), c’est un signe de violation du DIP.",{"type":30,"tag":530,"props":44247,"children":44248},{},[44249,44254],{"type":30,"tag":534,"props":44250,"children":44251},{},[44252],{"type":40,"value":44253},"6. Comment le DIP fonctionne-t-il avec d’autres principes SOLID ?",{"type":30,"tag":43,"props":44255,"children":44256},{},[44257,44259,44264,44266,44270,44271,44275,44277,44281],{"type":40,"value":44258},"Le DIP est étroitement lié à d’autres principes du ",{"type":30,"tag":36,"props":44260,"children":44261},{},[44262],{"type":40,"value":44263},"SOLID",{"type":40,"value":44265},". Par exemple, il complète le ",{"type":30,"tag":36,"props":44267,"children":44268},{},[44269],{"type":40,"value":40867},{"type":40,"value":105},{"type":30,"tag":36,"props":44272,"children":44273},{},[44274],{"type":40,"value":40850},{"type":40,"value":44276},", car il permet de remplacer des implémentations sans affecter les clients de ces implémentations. En appliquant le DIP, vous facilitez également le respect du ",{"type":30,"tag":36,"props":44278,"children":44279},{},[44280],{"type":40,"value":40826},{"type":40,"value":44282},", car chaque module devient responsable d’une tâche unique.",{"type":30,"tag":530,"props":44284,"children":44285},{},[44286,44291],{"type":30,"tag":534,"props":44287,"children":44288},{},[44289],{"type":40,"value":44290},"7. Quels outils et frameworks peuvent m’aider à appliquer le DIP en Java ?",{"type":30,"tag":43,"props":44292,"children":44293},{},[44294,44295,44299,44301,44305,44307,44312,44314,44319,44320,44325],{"type":40,"value":143},{"type":30,"tag":36,"props":44296,"children":44297},{},[44298],{"type":40,"value":42776},{"type":40,"value":44300}," est l’un des outils les plus populaires pour appliquer le DIP en Java. Avec des concepts comme l’",{"type":30,"tag":36,"props":44302,"children":44303},{},[44304],{"type":40,"value":42759},{"type":40,"value":44306}," (DI) et l’utilisation d’annotations comme ",{"type":30,"tag":1042,"props":44308,"children":44310},{"className":44309},[],[44311],{"type":40,"value":42798},{"type":40,"value":44313},", vous pouvez facilement structurer vos applications en respectant le DIP. D’autres frameworks comme ",{"type":30,"tag":36,"props":44315,"children":44316},{},[44317],{"type":40,"value":44318},"Guice",{"type":40,"value":1573},{"type":30,"tag":36,"props":44321,"children":44322},{},[44323],{"type":40,"value":44324},"Jakarta EE CDI",{"type":40,"value":44326}," offrent également des solutions pour gérer les dépendances.",{"type":30,"tag":84,"props":44328,"children":44329},{},[],{"type":30,"tag":31,"props":44331,"children":44332},{"id":24018},[44333],{"type":40,"value":24024},{"type":30,"tag":43,"props":44335,"children":44336},{},[44337,44338,44342,44344,44348],{"type":40,"value":143},{"type":30,"tag":36,"props":44339,"children":44340},{},[44341],{"type":40,"value":41104},{"type":40,"value":44343}," est l’un des cinq ",{"type":30,"tag":75,"props":44345,"children":44346},{"href":12830},[44347],{"type":40,"value":12833},{"type":40,"value":44349}," qui peuvent considérablement améliorer la qualité de votre code. En appliquant ce principe, vous découplez vos modules de manière à rendre votre application plus flexible, évolutive et testable. Cela demande un effort supplémentaire au début, mais les bénéfices à long terme valent largement cet investissement.",{"type":30,"tag":43,"props":44351,"children":44352},{},[44353,44355,44359,44361,44365],{"type":40,"value":44354},"Si vous souhaitez que votre code soit plus maintenable et évolutif, commencez à adopter le ",{"type":30,"tag":36,"props":44356,"children":44357},{},[44358],{"type":40,"value":41104},{"type":40,"value":44360}," dès aujourd’hui dans vos projets. Que vous utilisiez Java avec ou sans frameworks comme ",{"type":30,"tag":36,"props":44362,"children":44363},{},[44364],{"type":40,"value":12958},{"type":40,"value":44366},", ce principe vous sera toujours bénéfique.",{"type":30,"tag":964,"props":44368,"children":44369},{},[44370],{"type":30,"tag":43,"props":44371,"children":44372},{},[44373,44378,44380,44385],{"type":30,"tag":36,"props":44374,"children":44375},{},[44376],{"type":40,"value":44377},"Attention :",{"type":40,"value":44379}," L’objectif du DIP est de rendre votre code ",{"type":30,"tag":36,"props":44381,"children":44382},{},[44383],{"type":40,"value":44384},"modulable et adaptable",{"type":40,"value":44386},". N’utilisez pas le DIP simplement pour suivre une mode, mais pour résoudre des problèmes spécifiques de dépendance dans votre projet.",{"type":30,"tag":211,"props":44388,"children":44389},{"cta":11121,"href":639,"title":16714,"type":641},[44390],{"type":30,"tag":43,"props":44391,"children":44392},{},[44393],{"type":40,"value":16720},{"type":30,"tag":6456,"props":44395,"children":44396},{},[44397],{"type":40,"value":6460},{"title":8,"searchDepth":675,"depth":675,"links":44399},[44400,44401,44402,44406,44411,44415,44416],{"id":41086,"depth":675,"text":41089},{"id":41135,"depth":675,"text":41138},{"id":41244,"depth":675,"text":41247,"children":44403},[44404,44405],{"id":41266,"depth":681,"text":41269},{"id":41289,"depth":681,"text":41292},{"id":41371,"depth":675,"text":41374,"children":44407},[44408,44409,44410],{"id":41388,"depth":681,"text":41391},{"id":41739,"depth":681,"text":41742},{"id":42673,"depth":681,"text":42676},{"id":42734,"depth":675,"text":42737,"children":44412},[44413,44414],{"id":42763,"depth":681,"text":42766},{"id":42813,"depth":681,"text":42816},{"id":44128,"depth":675,"text":44131},{"id":24018,"depth":675,"text":24024},"content:fr:architecture-craft:principe-inversion-dependances-dip-java-guide-complet.md","fr/architecture-craft/principe-inversion-dependances-dip-java-guide-complet.md","fr/architecture-craft/principe-inversion-dependances-dip-java-guide-complet",{"_path":35039,"_dir":717,"_draft":7,"_partial":7,"_locale":8,"title":44421,"description":44422,"id":10429,"date":44423,"listed":13,"nocomments":7,"hidden":7,"categories":44424,"tags":44425,"--cover":44426,"readingTime":44427,"body":44431,"_type":709,"_id":47217,"_source":711,"_file":47218,"_stem":47219,"_extension":714},"Principe ISP en Software Craftsmanship, Guide Pratique avec Exemples Java","Découvrez le principe de séparation d'interface (ISP) en Software Craftsmanship avec des exemples de code Java et des conseils pratiques pour un code...","2024-03-27",[15],[17,18],"covers/articles/principe-isp.jpg",{"text":13025,"minutes":44428,"time":44429,"words":44430},11.805,708300,2361,{"type":27,"children":44432,"toc":47197},[44433,44438,44443,44448,44451,44457,44468,44473,44479,44507,44512,44525,44531,44558,44564,44569,44575,44580,44593,44596,44602,44607,44613,44625,44707,44720,44950,44962,44982,44988,45000,45147,45166,45283,45310,45521,45526,45538,45544,45557,45639,45659,45772,45784,45987,46014,46309,46314,46317,46326,46332,46337,46343,46348,46353,46360,46509,46514,46526,46532,46537,46544,46641,46654,46660,46672,46679,46994,47006,47012,47017,47029,47032,47038,47051,47064,47084,47097,47116,47129,47142,47155,47168,47171,47183,47186,47193],{"type":30,"tag":43,"props":44434,"children":44435},{},[44436],{"type":40,"value":44437},"Mise en situation : vous travaillez sur un projet où une seule interface doit répondre à une multitude de besoins, et chaque fois que vous ajoutez une fonctionnalité, vous vous retrouvez à toucher des parties du code qui n’ont aucun rapport direct. Cela devient rapidement ingérable, et vous vous demandez pourquoi votre code est si difficile à maintenir.",{"type":30,"tag":43,"props":44439,"children":44440},{},[44441],{"type":40,"value":44442},"C’est un problème classique qui découle d’une mauvaise conception d’interface. Quand une interface est trop large, elle finit par violer le principe de séparation d’interface (ISP), l’un des cinq principes SOLID. Ce principe est là pour nous rappeler qu’une interface ne doit jamais forcer une classe à implémenter des méthodes dont elle n’a pas besoin.",{"type":30,"tag":43,"props":44444,"children":44445},{},[44446],{"type":40,"value":44447},"Je connais ce problème, car j’y ai moi-même été confronté plusieurs fois dans ma carrière de développeur, notamment dans des projets chez des clients du secteur financier où les interfaces \"fourre-tout\" sont particulièrement répandues. La bonne nouvelle, c’est qu’il existe des solutions simples pour mieux concevoir nos interfaces. Dans cet article, vous allez apprendre à appliquer le principe ISP dans vos projets Java, avec des exemples de code concrets et des conseils pratiques pour éviter les erreurs courantes. Robert C. Martin, dans \"Agile Software Development: Principles, Patterns, and Practices\", formalise d’ailleurs ISP comme l’un des piliers d’une architecture orientée objet saine.",{"type":30,"tag":84,"props":44449,"children":44450},{},[],{"type":30,"tag":31,"props":44452,"children":44454},{"id":44453},"pourquoi-respecter-le-principe-isp",[44455],{"type":40,"value":44456},"Pourquoi respecter le principe ISP ?",{"type":30,"tag":43,"props":44458,"children":44459},{},[44460,44462,44466],{"type":40,"value":44461},"Le principe de séparation d’interface (ISP) fait partie des cinq ",{"type":30,"tag":75,"props":44463,"children":44464},{"href":12830},[44465],{"type":40,"value":12833},{"type":40,"value":44467},", qui sont des lignes directrices destinées à rendre notre code plus modulable, maintenable et évolutif. ISP stipule qu’une interface ne doit pas forcer une classe à implémenter des méthodes dont elle n’a pas besoin.",{"type":30,"tag":43,"props":44469,"children":44470},{},[44471],{"type":40,"value":44472},"Mais pourquoi est-ce si important ?",{"type":30,"tag":116,"props":44474,"children":44476},{"id":44475},"_1-faciliter-la-maintenance-et-lévolution-du-code",[44477],{"type":40,"value":44478},"1. Faciliter la maintenance et l’évolution du code",{"type":30,"tag":43,"props":44480,"children":44481},{},[44482,44484,44490,44492,44498,44499,44505],{"type":40,"value":44483},"Quand vous concevez une interface trop large, chaque modification ou ajout de fonctionnalité peut impacter plusieurs classes, même celles qui ne sont pas directement concernées. Par exemple, si vous avez une interface ",{"type":30,"tag":1042,"props":44485,"children":44487},{"className":44486},[],[44488],{"type":40,"value":44489},"Employe",{"type":40,"value":44491}," avec des méthodes comme ",{"type":30,"tag":1042,"props":44493,"children":44495},{"className":44494},[],[44496],{"type":40,"value":44497},"calculerSalaire()",{"type":40,"value":8328},{"type":30,"tag":1042,"props":44500,"children":44502},{"className":44501},[],[44503],{"type":40,"value":44504},"gererProjets()",{"type":40,"value":44506},", toutes les classes qui l’implémentent, qu’elles soient des développeurs ou des responsables de projet, devront implémenter ces deux méthodes, même si elles n’ont pas besoin de l’une d’entre elles.",{"type":30,"tag":43,"props":44508,"children":44509},{},[44510],{"type":40,"value":44511},"Résultat ? Chaque changement dans cette interface peut provoquer des bugs inattendus et rendre l’évolution du code plus complexe.",{"type":30,"tag":964,"props":44513,"children":44514},{},[44515],{"type":30,"tag":43,"props":44516,"children":44517},{},[44518,44523],{"type":30,"tag":36,"props":44519,"children":44520},{},[44521],{"type":40,"value":44522},"Tip",{"type":40,"value":44524}," : Si vous remarquez que plusieurs classes implémentent une interface sans utiliser toutes les méthodes, c’est un signal clair que votre interface est trop large. Je vous recommande de la diviser.",{"type":30,"tag":116,"props":44526,"children":44528},{"id":44527},"_2-favoriser-la-réutilisabilité",[44529],{"type":40,"value":44530},"2. Favoriser la réutilisabilité",{"type":30,"tag":43,"props":44532,"children":44533},{},[44534,44536,44541,44543,44549,44550,44556],{"type":40,"value":44535},"Lorsque vous créez des interfaces spécifiques et centrées sur une tâche, vous facilitez la réutilisabilité du code. Par exemple, si vous divisez l’interface ",{"type":30,"tag":1042,"props":44537,"children":44539},{"className":44538},[],[44540],{"type":40,"value":44489},{"type":40,"value":44542}," en deux interfaces plus spécifiques comme ",{"type":30,"tag":1042,"props":44544,"children":44546},{"className":44545},[],[44547],{"type":40,"value":44548},"Salarie",{"type":40,"value":8328},{"type":30,"tag":1042,"props":44551,"children":44553},{"className":44552},[],[44554],{"type":40,"value":44555},"Manager",{"type":40,"value":44557},", chaque classe pourra implémenter uniquement ce dont elle a besoin. Cela permet à votre code d’être plus propre et à vos classes d’être plus facilement réutilisables sans risque de casser d’autres parties du code.",{"type":30,"tag":116,"props":44559,"children":44561},{"id":44560},"_3-réduire-le-couplage",[44562],{"type":40,"value":44563},"3. Réduire le couplage",{"type":30,"tag":43,"props":44565,"children":44566},{},[44567],{"type":40,"value":44568},"Un autre avantage clé du respect d’ISP est la réduction du couplage entre les différentes parties du code. Quand une classe dépend d’une interface large, elle devient étroitement couplée à plusieurs fonctionnalités, ce qui rend difficile sa modification ou son remplacement. Avec des interfaces plus petites et spécifiques, les classes sont moins couplées, ce qui facilite leur modification sans impacter le reste du système.",{"type":30,"tag":116,"props":44570,"children":44572},{"id":44571},"_4-améliorer-les-tests-unitaires",[44573],{"type":40,"value":44574},"4. Améliorer les tests unitaires",{"type":30,"tag":43,"props":44576,"children":44577},{},[44578],{"type":40,"value":44579},"Les interfaces plus petites et spécifiques rendent les tests unitaires beaucoup plus simples. Si une classe dépend d’une interface qui ne contient que les méthodes dont elle a besoin, il est plus facile de simuler son comportement pour écrire des tests. À l’inverse, avec une interface trop large, vous devrez peut-être gérer des méthodes inutiles, ce qui complexifie les tests.",{"type":30,"tag":964,"props":44581,"children":44582},{},[44583],{"type":30,"tag":43,"props":44584,"children":44585},{},[44586,44591],{"type":30,"tag":36,"props":44587,"children":44588},{},[44589],{"type":40,"value":44590},"Alerte",{"type":40,"value":44592}," : Des interfaces larges et mal segmentées augmentent le couplage, ce qui rend vos tests plus difficiles à écrire et à maintenir.",{"type":30,"tag":84,"props":44594,"children":44595},{},[],{"type":30,"tag":31,"props":44597,"children":44599},{"id":44598},"comment-appliquer-isp-en-java",[44600],{"type":40,"value":44601},"Comment appliquer ISP en Java ?",{"type":30,"tag":43,"props":44603,"children":44604},{},[44605],{"type":40,"value":44606},"Le principe de séparation d’interface peut sembler abstrait à première vue, mais il est très facile à comprendre une fois qu’on voit comment il s’applique dans un projet. Voici quelques exemples concrets en Java qui illustrent comment respecter ce principe.",{"type":30,"tag":116,"props":44608,"children":44610},{"id":44609},"exemple-1-une-interface-trop-large",[44611],{"type":40,"value":44612},"Exemple 1 : Une interface trop large",{"type":30,"tag":43,"props":44614,"children":44615},{},[44616,44618,44623],{"type":40,"value":44617},"Prenons une interface ",{"type":30,"tag":1042,"props":44619,"children":44621},{"className":44620},[],[44622],{"type":40,"value":44489},{"type":40,"value":44624}," qui contient plusieurs méthodes. Cette interface est mal conçue car elle impose à toutes les classes qui l’implémentent de définir des méthodes dont elles n’ont peut-être pas besoin :",{"type":30,"tag":1035,"props":44626,"children":44628},{"className":1039,"code":44627,"language":1038,"meta":8,"style":8},"public interface Employe {\n    void travailler();\n    void gererProjets();\n    void calculerSalaire();\n}\n",[44629],{"type":30,"tag":1042,"props":44630,"children":44631},{"__ignoreMap":8},[44632,44652,44668,44684,44700],{"type":30,"tag":1046,"props":44633,"children":44634},{"class":1048,"line":1049},[44635,44639,44643,44648],{"type":30,"tag":1046,"props":44636,"children":44637},{"style":1053},[44638],{"type":40,"value":1056},{"type":30,"tag":1046,"props":44640,"children":44641},{"style":1053},[44642],{"type":40,"value":4852},{"type":30,"tag":1046,"props":44644,"children":44645},{"style":1064},[44646],{"type":40,"value":44647}," Employe",{"type":30,"tag":1046,"props":44649,"children":44650},{"style":1070},[44651],{"type":40,"value":1073},{"type":30,"tag":1046,"props":44653,"children":44654},{"class":1048,"line":675},[44655,44659,44664],{"type":30,"tag":1046,"props":44656,"children":44657},{"style":1053},[44658],{"type":40,"value":4908},{"type":30,"tag":1046,"props":44660,"children":44661},{"style":1138},[44662],{"type":40,"value":44663}," travailler",{"type":30,"tag":1046,"props":44665,"children":44666},{"style":1070},[44667],{"type":40,"value":1406},{"type":30,"tag":1046,"props":44669,"children":44670},{"class":1048,"line":681},[44671,44675,44680],{"type":30,"tag":1046,"props":44672,"children":44673},{"style":1053},[44674],{"type":40,"value":4908},{"type":30,"tag":1046,"props":44676,"children":44677},{"style":1138},[44678],{"type":40,"value":44679}," gererProjets",{"type":30,"tag":1046,"props":44681,"children":44682},{"style":1070},[44683],{"type":40,"value":1406},{"type":30,"tag":1046,"props":44685,"children":44686},{"class":1048,"line":1124},[44687,44691,44696],{"type":30,"tag":1046,"props":44688,"children":44689},{"style":1053},[44690],{"type":40,"value":4908},{"type":30,"tag":1046,"props":44692,"children":44693},{"style":1138},[44694],{"type":40,"value":44695}," calculerSalaire",{"type":30,"tag":1046,"props":44697,"children":44698},{"style":1070},[44699],{"type":40,"value":1406},{"type":30,"tag":1046,"props":44701,"children":44702},{"class":1048,"line":1168},[44703],{"type":30,"tag":1046,"props":44704,"children":44705},{"style":1070},[44706],{"type":40,"value":1423},{"type":30,"tag":43,"props":44708,"children":44709},{},[44710,44712,44718],{"type":40,"value":44711},"Dans ce cas, une classe ",{"type":30,"tag":1042,"props":44713,"children":44715},{"className":44714},[],[44716],{"type":40,"value":44717},"Developpeur",{"type":40,"value":44719}," doit implémenter toutes ces méthodes, même si un développeur n’a pas à gérer des projets ou à calculer des salaires.",{"type":30,"tag":1035,"props":44721,"children":44723},{"className":1039,"code":44722,"language":1038,"meta":8,"style":8},"public class Developpeur implements Employe {\n    @Override\n    public void travailler() {\n        System.out.println(\"Le développeur écrit du code.\");\n    }\n\n    @Override\n    public void gererProjets() {\n        // Non pertinent pour un développeur.\n    }\n\n    @Override\n    public void calculerSalaire() {\n        // Non pertinent pour un développeur.\n    }\n}\n",[44724],{"type":30,"tag":1042,"props":44725,"children":44726},{"__ignoreMap":8},[44727,44755,44766,44789,44825,44832,44839,44850,44873,44881,44888,44895,44906,44929,44936,44943],{"type":30,"tag":1046,"props":44728,"children":44729},{"class":1048,"line":1049},[44730,44734,44738,44743,44747,44751],{"type":30,"tag":1046,"props":44731,"children":44732},{"style":1053},[44733],{"type":40,"value":1056},{"type":30,"tag":1046,"props":44735,"children":44736},{"style":1053},[44737],{"type":40,"value":1061},{"type":30,"tag":1046,"props":44739,"children":44740},{"style":1064},[44741],{"type":40,"value":44742}," Developpeur",{"type":30,"tag":1046,"props":44744,"children":44745},{"style":1053},[44746],{"type":40,"value":3166},{"type":30,"tag":1046,"props":44748,"children":44749},{"style":1064},[44750],{"type":40,"value":44647},{"type":30,"tag":1046,"props":44752,"children":44753},{"style":1070},[44754],{"type":40,"value":1073},{"type":30,"tag":1046,"props":44756,"children":44757},{"class":1048,"line":675},[44758,44762],{"type":30,"tag":1046,"props":44759,"children":44760},{"style":1647},[44761],{"type":40,"value":1828},{"type":30,"tag":1046,"props":44763,"children":44764},{"style":1653},[44765],{"type":40,"value":3258},{"type":30,"tag":1046,"props":44767,"children":44768},{"class":1048,"line":681},[44769,44773,44777,44781,44785],{"type":30,"tag":1046,"props":44770,"children":44771},{"style":1053},[44772],{"type":40,"value":1130},{"type":30,"tag":1046,"props":44774,"children":44775},{"style":1053},[44776],{"type":40,"value":1135},{"type":30,"tag":1046,"props":44778,"children":44779},{"style":1138},[44780],{"type":40,"value":44663},{"type":30,"tag":1046,"props":44782,"children":44783},{"style":1070},[44784],{"type":40,"value":1320},{"type":30,"tag":1046,"props":44786,"children":44787},{"style":1070},[44788],{"type":40,"value":1073},{"type":30,"tag":1046,"props":44790,"children":44791},{"class":1048,"line":1124},[44792,44796,44800,44804,44808,44812,44816,44821],{"type":30,"tag":1046,"props":44793,"children":44794},{"style":1105},[44795],{"type":40,"value":12555},{"type":30,"tag":1046,"props":44797,"children":44798},{"style":1070},[44799],{"type":40,"value":1179},{"type":30,"tag":1046,"props":44801,"children":44802},{"style":1105},[44803],{"type":40,"value":12564},{"type":30,"tag":1046,"props":44805,"children":44806},{"style":1070},[44807],{"type":40,"value":1179},{"type":30,"tag":1046,"props":44809,"children":44810},{"style":1138},[44811],{"type":40,"value":12573},{"type":30,"tag":1046,"props":44813,"children":44814},{"style":1070},[44815],{"type":40,"value":1146},{"type":30,"tag":1046,"props":44817,"children":44818},{"style":1675},[44819],{"type":40,"value":44820},"\"Le développeur écrit du code.\"",{"type":30,"tag":1046,"props":44822,"children":44823},{"style":1070},[44824],{"type":40,"value":1198},{"type":30,"tag":1046,"props":44826,"children":44827},{"class":1048,"line":1168},[44828],{"type":30,"tag":1046,"props":44829,"children":44830},{"style":1070},[44831],{"type":40,"value":1207},{"type":30,"tag":1046,"props":44833,"children":44834},{"class":1048,"line":1201},[44835],{"type":30,"tag":1046,"props":44836,"children":44837},{"emptyLinePlaceholder":13},[44838],{"type":40,"value":1121},{"type":30,"tag":1046,"props":44840,"children":44841},{"class":1048,"line":1210},[44842,44846],{"type":30,"tag":1046,"props":44843,"children":44844},{"style":1647},[44845],{"type":40,"value":1828},{"type":30,"tag":1046,"props":44847,"children":44848},{"style":1653},[44849],{"type":40,"value":3258},{"type":30,"tag":1046,"props":44851,"children":44852},{"class":1048,"line":1218},[44853,44857,44861,44865,44869],{"type":30,"tag":1046,"props":44854,"children":44855},{"style":1053},[44856],{"type":40,"value":1130},{"type":30,"tag":1046,"props":44858,"children":44859},{"style":1053},[44860],{"type":40,"value":1135},{"type":30,"tag":1046,"props":44862,"children":44863},{"style":1138},[44864],{"type":40,"value":44679},{"type":30,"tag":1046,"props":44866,"children":44867},{"style":1070},[44868],{"type":40,"value":1320},{"type":30,"tag":1046,"props":44870,"children":44871},{"style":1070},[44872],{"type":40,"value":1073},{"type":30,"tag":1046,"props":44874,"children":44875},{"class":1048,"line":1255},[44876],{"type":30,"tag":1046,"props":44877,"children":44878},{"style":3961},[44879],{"type":40,"value":44880},"        // Non pertinent pour un développeur.\n",{"type":30,"tag":1046,"props":44882,"children":44883},{"class":1048,"line":1284},[44884],{"type":30,"tag":1046,"props":44885,"children":44886},{"style":1070},[44887],{"type":40,"value":1207},{"type":30,"tag":1046,"props":44889,"children":44890},{"class":1048,"line":1292},[44891],{"type":30,"tag":1046,"props":44892,"children":44893},{"emptyLinePlaceholder":13},[44894],{"type":40,"value":1121},{"type":30,"tag":1046,"props":44896,"children":44897},{"class":1048,"line":1300},[44898,44902],{"type":30,"tag":1046,"props":44899,"children":44900},{"style":1647},[44901],{"type":40,"value":1828},{"type":30,"tag":1046,"props":44903,"children":44904},{"style":1653},[44905],{"type":40,"value":3258},{"type":30,"tag":1046,"props":44907,"children":44908},{"class":1048,"line":1327},[44909,44913,44917,44921,44925],{"type":30,"tag":1046,"props":44910,"children":44911},{"style":1053},[44912],{"type":40,"value":1130},{"type":30,"tag":1046,"props":44914,"children":44915},{"style":1053},[44916],{"type":40,"value":1135},{"type":30,"tag":1046,"props":44918,"children":44919},{"style":1138},[44920],{"type":40,"value":44695},{"type":30,"tag":1046,"props":44922,"children":44923},{"style":1070},[44924],{"type":40,"value":1320},{"type":30,"tag":1046,"props":44926,"children":44927},{"style":1070},[44928],{"type":40,"value":1073},{"type":30,"tag":1046,"props":44930,"children":44931},{"class":1048,"line":1354},[44932],{"type":30,"tag":1046,"props":44933,"children":44934},{"style":3961},[44935],{"type":40,"value":44880},{"type":30,"tag":1046,"props":44937,"children":44938},{"class":1048,"line":1391},[44939],{"type":30,"tag":1046,"props":44940,"children":44941},{"style":1070},[44942],{"type":40,"value":1207},{"type":30,"tag":1046,"props":44944,"children":44945},{"class":1048,"line":1409},[44946],{"type":30,"tag":1046,"props":44947,"children":44948},{"style":1070},[44949],{"type":40,"value":1423},{"type":30,"tag":43,"props":44951,"children":44952},{},[44953,44955,44960],{"type":40,"value":44954},"Ici, ",{"type":30,"tag":1042,"props":44956,"children":44958},{"className":44957},[],[44959],{"type":40,"value":44717},{"type":40,"value":44961}," se retrouve à implémenter des méthodes inutiles, ce qui est une violation directe du principe ISP.",{"type":30,"tag":964,"props":44963,"children":44964},{},[44965],{"type":30,"tag":43,"props":44966,"children":44967},{},[44968,44972,44974,44980],{"type":30,"tag":36,"props":44969,"children":44970},{},[44971],{"type":40,"value":44590},{"type":40,"value":44973}," : Si vous vous retrouvez à laisser des méthodes vides ou à lever des exceptions ",{"type":30,"tag":1042,"props":44975,"children":44977},{"className":44976},[],[44978],{"type":40,"value":44979},"UnsupportedOperationException",{"type":40,"value":44981},", c'est un signal clair qu'une interface est trop large.",{"type":30,"tag":116,"props":44983,"children":44985},{"id":44984},"exemple-2-appliquer-le-principe-isp-avec-des-interfaces-spécifiques",[44986],{"type":40,"value":44987},"Exemple 2 : Appliquer le principe ISP avec des interfaces spécifiques",{"type":30,"tag":43,"props":44989,"children":44990},{},[44991,44993,44998],{"type":40,"value":44992},"Pour corriger cette conception, nous devons diviser l'interface ",{"type":30,"tag":1042,"props":44994,"children":44996},{"className":44995},[],[44997],{"type":40,"value":44489},{"type":40,"value":44999}," en plusieurs interfaces plus spécifiques. Chaque interface doit refléter un comportement précis, que seules les classes pertinentes implémenteront.",{"type":30,"tag":1035,"props":45001,"children":45003},{"className":1039,"code":45002,"language":1038,"meta":8,"style":8},"public interface Travailleur {\n    void travailler();\n}\n\npublic interface Manager {\n    void gererProjets();\n}\n\npublic interface Salarie {\n    void calculerSalaire();\n}\n",[45004],{"type":30,"tag":1042,"props":45005,"children":45006},{"__ignoreMap":8},[45007,45027,45042,45049,45056,45076,45091,45098,45105,45125,45140],{"type":30,"tag":1046,"props":45008,"children":45009},{"class":1048,"line":1049},[45010,45014,45018,45023],{"type":30,"tag":1046,"props":45011,"children":45012},{"style":1053},[45013],{"type":40,"value":1056},{"type":30,"tag":1046,"props":45015,"children":45016},{"style":1053},[45017],{"type":40,"value":4852},{"type":30,"tag":1046,"props":45019,"children":45020},{"style":1064},[45021],{"type":40,"value":45022}," Travailleur",{"type":30,"tag":1046,"props":45024,"children":45025},{"style":1070},[45026],{"type":40,"value":1073},{"type":30,"tag":1046,"props":45028,"children":45029},{"class":1048,"line":675},[45030,45034,45038],{"type":30,"tag":1046,"props":45031,"children":45032},{"style":1053},[45033],{"type":40,"value":4908},{"type":30,"tag":1046,"props":45035,"children":45036},{"style":1138},[45037],{"type":40,"value":44663},{"type":30,"tag":1046,"props":45039,"children":45040},{"style":1070},[45041],{"type":40,"value":1406},{"type":30,"tag":1046,"props":45043,"children":45044},{"class":1048,"line":681},[45045],{"type":30,"tag":1046,"props":45046,"children":45047},{"style":1070},[45048],{"type":40,"value":1423},{"type":30,"tag":1046,"props":45050,"children":45051},{"class":1048,"line":1124},[45052],{"type":30,"tag":1046,"props":45053,"children":45054},{"emptyLinePlaceholder":13},[45055],{"type":40,"value":1121},{"type":30,"tag":1046,"props":45057,"children":45058},{"class":1048,"line":1168},[45059,45063,45067,45072],{"type":30,"tag":1046,"props":45060,"children":45061},{"style":1053},[45062],{"type":40,"value":1056},{"type":30,"tag":1046,"props":45064,"children":45065},{"style":1053},[45066],{"type":40,"value":4852},{"type":30,"tag":1046,"props":45068,"children":45069},{"style":1064},[45070],{"type":40,"value":45071}," Manager",{"type":30,"tag":1046,"props":45073,"children":45074},{"style":1070},[45075],{"type":40,"value":1073},{"type":30,"tag":1046,"props":45077,"children":45078},{"class":1048,"line":1201},[45079,45083,45087],{"type":30,"tag":1046,"props":45080,"children":45081},{"style":1053},[45082],{"type":40,"value":4908},{"type":30,"tag":1046,"props":45084,"children":45085},{"style":1138},[45086],{"type":40,"value":44679},{"type":30,"tag":1046,"props":45088,"children":45089},{"style":1070},[45090],{"type":40,"value":1406},{"type":30,"tag":1046,"props":45092,"children":45093},{"class":1048,"line":1210},[45094],{"type":30,"tag":1046,"props":45095,"children":45096},{"style":1070},[45097],{"type":40,"value":1423},{"type":30,"tag":1046,"props":45099,"children":45100},{"class":1048,"line":1218},[45101],{"type":30,"tag":1046,"props":45102,"children":45103},{"emptyLinePlaceholder":13},[45104],{"type":40,"value":1121},{"type":30,"tag":1046,"props":45106,"children":45107},{"class":1048,"line":1255},[45108,45112,45116,45121],{"type":30,"tag":1046,"props":45109,"children":45110},{"style":1053},[45111],{"type":40,"value":1056},{"type":30,"tag":1046,"props":45113,"children":45114},{"style":1053},[45115],{"type":40,"value":4852},{"type":30,"tag":1046,"props":45117,"children":45118},{"style":1064},[45119],{"type":40,"value":45120}," Salarie",{"type":30,"tag":1046,"props":45122,"children":45123},{"style":1070},[45124],{"type":40,"value":1073},{"type":30,"tag":1046,"props":45126,"children":45127},{"class":1048,"line":1284},[45128,45132,45136],{"type":30,"tag":1046,"props":45129,"children":45130},{"style":1053},[45131],{"type":40,"value":4908},{"type":30,"tag":1046,"props":45133,"children":45134},{"style":1138},[45135],{"type":40,"value":44695},{"type":30,"tag":1046,"props":45137,"children":45138},{"style":1070},[45139],{"type":40,"value":1406},{"type":30,"tag":1046,"props":45141,"children":45142},{"class":1048,"line":1292},[45143],{"type":30,"tag":1046,"props":45144,"children":45145},{"style":1070},[45146],{"type":40,"value":1423},{"type":30,"tag":43,"props":45148,"children":45149},{},[45150,45152,45157,45159,45165],{"type":40,"value":45151},"Maintenant, la classe ",{"type":30,"tag":1042,"props":45153,"children":45155},{"className":45154},[],[45156],{"type":40,"value":44717},{"type":40,"value":45158}," n’a plus besoin d’implémenter des méthodes qui ne sont pas pertinentes pour elle. Elle n’implémente que l’interface ",{"type":30,"tag":1042,"props":45160,"children":45162},{"className":45161},[],[45163],{"type":40,"value":45164},"Travailleur",{"type":40,"value":6296},{"type":30,"tag":1035,"props":45167,"children":45169},{"className":1039,"code":45168,"language":1038,"meta":8,"style":8},"public class Developpeur implements Travailleur {\n    @Override\n    public void travailler() {\n        System.out.println(\"Le développeur écrit du code.\");\n    }\n}\n",[45170],{"type":30,"tag":1042,"props":45171,"children":45172},{"__ignoreMap":8},[45173,45200,45211,45234,45269,45276],{"type":30,"tag":1046,"props":45174,"children":45175},{"class":1048,"line":1049},[45176,45180,45184,45188,45192,45196],{"type":30,"tag":1046,"props":45177,"children":45178},{"style":1053},[45179],{"type":40,"value":1056},{"type":30,"tag":1046,"props":45181,"children":45182},{"style":1053},[45183],{"type":40,"value":1061},{"type":30,"tag":1046,"props":45185,"children":45186},{"style":1064},[45187],{"type":40,"value":44742},{"type":30,"tag":1046,"props":45189,"children":45190},{"style":1053},[45191],{"type":40,"value":3166},{"type":30,"tag":1046,"props":45193,"children":45194},{"style":1064},[45195],{"type":40,"value":45022},{"type":30,"tag":1046,"props":45197,"children":45198},{"style":1070},[45199],{"type":40,"value":1073},{"type":30,"tag":1046,"props":45201,"children":45202},{"class":1048,"line":675},[45203,45207],{"type":30,"tag":1046,"props":45204,"children":45205},{"style":1647},[45206],{"type":40,"value":1828},{"type":30,"tag":1046,"props":45208,"children":45209},{"style":1653},[45210],{"type":40,"value":3258},{"type":30,"tag":1046,"props":45212,"children":45213},{"class":1048,"line":681},[45214,45218,45222,45226,45230],{"type":30,"tag":1046,"props":45215,"children":45216},{"style":1053},[45217],{"type":40,"value":1130},{"type":30,"tag":1046,"props":45219,"children":45220},{"style":1053},[45221],{"type":40,"value":1135},{"type":30,"tag":1046,"props":45223,"children":45224},{"style":1138},[45225],{"type":40,"value":44663},{"type":30,"tag":1046,"props":45227,"children":45228},{"style":1070},[45229],{"type":40,"value":1320},{"type":30,"tag":1046,"props":45231,"children":45232},{"style":1070},[45233],{"type":40,"value":1073},{"type":30,"tag":1046,"props":45235,"children":45236},{"class":1048,"line":1124},[45237,45241,45245,45249,45253,45257,45261,45265],{"type":30,"tag":1046,"props":45238,"children":45239},{"style":1105},[45240],{"type":40,"value":12555},{"type":30,"tag":1046,"props":45242,"children":45243},{"style":1070},[45244],{"type":40,"value":1179},{"type":30,"tag":1046,"props":45246,"children":45247},{"style":1105},[45248],{"type":40,"value":12564},{"type":30,"tag":1046,"props":45250,"children":45251},{"style":1070},[45252],{"type":40,"value":1179},{"type":30,"tag":1046,"props":45254,"children":45255},{"style":1138},[45256],{"type":40,"value":12573},{"type":30,"tag":1046,"props":45258,"children":45259},{"style":1070},[45260],{"type":40,"value":1146},{"type":30,"tag":1046,"props":45262,"children":45263},{"style":1675},[45264],{"type":40,"value":44820},{"type":30,"tag":1046,"props":45266,"children":45267},{"style":1070},[45268],{"type":40,"value":1198},{"type":30,"tag":1046,"props":45270,"children":45271},{"class":1048,"line":1168},[45272],{"type":30,"tag":1046,"props":45273,"children":45274},{"style":1070},[45275],{"type":40,"value":1207},{"type":30,"tag":1046,"props":45277,"children":45278},{"class":1048,"line":1201},[45279],{"type":30,"tag":1046,"props":45280,"children":45281},{"style":1070},[45282],{"type":40,"value":1423},{"type":30,"tag":43,"props":45284,"children":45285},{},[45286,45288,45294,45296,45301,45303,45308],{"type":40,"value":45287},"De même, un ",{"type":30,"tag":1042,"props":45289,"children":45291},{"className":45290},[],[45292],{"type":40,"value":45293},"ResponsableProjet",{"type":40,"value":45295}," pourrait implémenter l’interface ",{"type":30,"tag":1042,"props":45297,"children":45299},{"className":45298},[],[45300],{"type":40,"value":44555},{"type":40,"value":45302}," et l’interface ",{"type":30,"tag":1042,"props":45304,"children":45306},{"className":45305},[],[45307],{"type":40,"value":45164},{"type":40,"value":45309}," s'il gère des projets tout en travaillant :",{"type":30,"tag":1035,"props":45311,"children":45313},{"className":1039,"code":45312,"language":1038,"meta":8,"style":8},"public class ResponsableProjet implements Manager, Travailleur {\n    @Override\n    public void travailler() {\n        System.out.println(\"Le responsable de projet supervise les tâches.\");\n    }\n\n    @Override\n    public void gererProjets() {\n        System.out.println(\"Le responsable de projet gère les équipes.\");\n    }\n}\n",[45314],{"type":30,"tag":1042,"props":45315,"children":45316},{"__ignoreMap":8},[45317,45353,45364,45387,45423,45430,45437,45448,45471,45507,45514],{"type":30,"tag":1046,"props":45318,"children":45319},{"class":1048,"line":1049},[45320,45324,45328,45333,45337,45341,45345,45349],{"type":30,"tag":1046,"props":45321,"children":45322},{"style":1053},[45323],{"type":40,"value":1056},{"type":30,"tag":1046,"props":45325,"children":45326},{"style":1053},[45327],{"type":40,"value":1061},{"type":30,"tag":1046,"props":45329,"children":45330},{"style":1064},[45331],{"type":40,"value":45332}," ResponsableProjet",{"type":30,"tag":1046,"props":45334,"children":45335},{"style":1053},[45336],{"type":40,"value":3166},{"type":30,"tag":1046,"props":45338,"children":45339},{"style":1064},[45340],{"type":40,"value":45071},{"type":30,"tag":1046,"props":45342,"children":45343},{"style":1070},[45344],{"type":40,"value":2891},{"type":30,"tag":1046,"props":45346,"children":45347},{"style":1064},[45348],{"type":40,"value":45022},{"type":30,"tag":1046,"props":45350,"children":45351},{"style":1070},[45352],{"type":40,"value":1073},{"type":30,"tag":1046,"props":45354,"children":45355},{"class":1048,"line":675},[45356,45360],{"type":30,"tag":1046,"props":45357,"children":45358},{"style":1647},[45359],{"type":40,"value":1828},{"type":30,"tag":1046,"props":45361,"children":45362},{"style":1653},[45363],{"type":40,"value":3258},{"type":30,"tag":1046,"props":45365,"children":45366},{"class":1048,"line":681},[45367,45371,45375,45379,45383],{"type":30,"tag":1046,"props":45368,"children":45369},{"style":1053},[45370],{"type":40,"value":1130},{"type":30,"tag":1046,"props":45372,"children":45373},{"style":1053},[45374],{"type":40,"value":1135},{"type":30,"tag":1046,"props":45376,"children":45377},{"style":1138},[45378],{"type":40,"value":44663},{"type":30,"tag":1046,"props":45380,"children":45381},{"style":1070},[45382],{"type":40,"value":1320},{"type":30,"tag":1046,"props":45384,"children":45385},{"style":1070},[45386],{"type":40,"value":1073},{"type":30,"tag":1046,"props":45388,"children":45389},{"class":1048,"line":1124},[45390,45394,45398,45402,45406,45410,45414,45419],{"type":30,"tag":1046,"props":45391,"children":45392},{"style":1105},[45393],{"type":40,"value":12555},{"type":30,"tag":1046,"props":45395,"children":45396},{"style":1070},[45397],{"type":40,"value":1179},{"type":30,"tag":1046,"props":45399,"children":45400},{"style":1105},[45401],{"type":40,"value":12564},{"type":30,"tag":1046,"props":45403,"children":45404},{"style":1070},[45405],{"type":40,"value":1179},{"type":30,"tag":1046,"props":45407,"children":45408},{"style":1138},[45409],{"type":40,"value":12573},{"type":30,"tag":1046,"props":45411,"children":45412},{"style":1070},[45413],{"type":40,"value":1146},{"type":30,"tag":1046,"props":45415,"children":45416},{"style":1675},[45417],{"type":40,"value":45418},"\"Le responsable de projet supervise les tâches.\"",{"type":30,"tag":1046,"props":45420,"children":45421},{"style":1070},[45422],{"type":40,"value":1198},{"type":30,"tag":1046,"props":45424,"children":45425},{"class":1048,"line":1168},[45426],{"type":30,"tag":1046,"props":45427,"children":45428},{"style":1070},[45429],{"type":40,"value":1207},{"type":30,"tag":1046,"props":45431,"children":45432},{"class":1048,"line":1201},[45433],{"type":30,"tag":1046,"props":45434,"children":45435},{"emptyLinePlaceholder":13},[45436],{"type":40,"value":1121},{"type":30,"tag":1046,"props":45438,"children":45439},{"class":1048,"line":1210},[45440,45444],{"type":30,"tag":1046,"props":45441,"children":45442},{"style":1647},[45443],{"type":40,"value":1828},{"type":30,"tag":1046,"props":45445,"children":45446},{"style":1653},[45447],{"type":40,"value":3258},{"type":30,"tag":1046,"props":45449,"children":45450},{"class":1048,"line":1218},[45451,45455,45459,45463,45467],{"type":30,"tag":1046,"props":45452,"children":45453},{"style":1053},[45454],{"type":40,"value":1130},{"type":30,"tag":1046,"props":45456,"children":45457},{"style":1053},[45458],{"type":40,"value":1135},{"type":30,"tag":1046,"props":45460,"children":45461},{"style":1138},[45462],{"type":40,"value":44679},{"type":30,"tag":1046,"props":45464,"children":45465},{"style":1070},[45466],{"type":40,"value":1320},{"type":30,"tag":1046,"props":45468,"children":45469},{"style":1070},[45470],{"type":40,"value":1073},{"type":30,"tag":1046,"props":45472,"children":45473},{"class":1048,"line":1255},[45474,45478,45482,45486,45490,45494,45498,45503],{"type":30,"tag":1046,"props":45475,"children":45476},{"style":1105},[45477],{"type":40,"value":12555},{"type":30,"tag":1046,"props":45479,"children":45480},{"style":1070},[45481],{"type":40,"value":1179},{"type":30,"tag":1046,"props":45483,"children":45484},{"style":1105},[45485],{"type":40,"value":12564},{"type":30,"tag":1046,"props":45487,"children":45488},{"style":1070},[45489],{"type":40,"value":1179},{"type":30,"tag":1046,"props":45491,"children":45492},{"style":1138},[45493],{"type":40,"value":12573},{"type":30,"tag":1046,"props":45495,"children":45496},{"style":1070},[45497],{"type":40,"value":1146},{"type":30,"tag":1046,"props":45499,"children":45500},{"style":1675},[45501],{"type":40,"value":45502},"\"Le responsable de projet gère les équipes.\"",{"type":30,"tag":1046,"props":45504,"children":45505},{"style":1070},[45506],{"type":40,"value":1198},{"type":30,"tag":1046,"props":45508,"children":45509},{"class":1048,"line":1284},[45510],{"type":30,"tag":1046,"props":45511,"children":45512},{"style":1070},[45513],{"type":40,"value":1207},{"type":30,"tag":1046,"props":45515,"children":45516},{"class":1048,"line":1292},[45517],{"type":30,"tag":1046,"props":45518,"children":45519},{"style":1070},[45520],{"type":40,"value":1423},{"type":30,"tag":43,"props":45522,"children":45523},{},[45524],{"type":40,"value":45525},"Cette approche respecte parfaitement le principe ISP, car chaque classe n'implémente que les méthodes dont elle a réellement besoin.",{"type":30,"tag":964,"props":45527,"children":45528},{},[45529],{"type":30,"tag":43,"props":45530,"children":45531},{},[45532,45536],{"type":30,"tag":36,"props":45533,"children":45534},{},[45535],{"type":40,"value":44522},{"type":40,"value":45537}," : Si vous identifiez une interface large, demandez-vous quelles classes l'utilisent et lesquelles de ses méthodes sont vraiment nécessaires. Découpez-la en interfaces spécifiques pour simplifier la conception.",{"type":30,"tag":116,"props":45539,"children":45541},{"id":45540},"exemple-3-refactoring-dune-interface-lourde",[45542],{"type":40,"value":45543},"Exemple 3 : Refactoring d'une interface lourde",{"type":30,"tag":43,"props":45545,"children":45546},{},[45547,45549,45555],{"type":40,"value":45548},"Imaginons que vous travaillez avec une interface existante qui est trop large, et vous voulez la refactorer pour respecter ISP. Prenons une interface ",{"type":30,"tag":1042,"props":45550,"children":45552},{"className":45551},[],[45553],{"type":40,"value":45554},"Machine",{"type":40,"value":45556}," qui force toutes les machines à avoir des comportements différents :",{"type":30,"tag":1035,"props":45558,"children":45560},{"className":1039,"code":45559,"language":1038,"meta":8,"style":8},"public interface Machine {\n    void demarrer();\n    void arreter();\n    void nettoyer();\n}\n",[45561],{"type":30,"tag":1042,"props":45562,"children":45563},{"__ignoreMap":8},[45564,45584,45600,45616,45632],{"type":30,"tag":1046,"props":45565,"children":45566},{"class":1048,"line":1049},[45567,45571,45575,45580],{"type":30,"tag":1046,"props":45568,"children":45569},{"style":1053},[45570],{"type":40,"value":1056},{"type":30,"tag":1046,"props":45572,"children":45573},{"style":1053},[45574],{"type":40,"value":4852},{"type":30,"tag":1046,"props":45576,"children":45577},{"style":1064},[45578],{"type":40,"value":45579}," Machine",{"type":30,"tag":1046,"props":45581,"children":45582},{"style":1070},[45583],{"type":40,"value":1073},{"type":30,"tag":1046,"props":45585,"children":45586},{"class":1048,"line":675},[45587,45591,45596],{"type":30,"tag":1046,"props":45588,"children":45589},{"style":1053},[45590],{"type":40,"value":4908},{"type":30,"tag":1046,"props":45592,"children":45593},{"style":1138},[45594],{"type":40,"value":45595}," demarrer",{"type":30,"tag":1046,"props":45597,"children":45598},{"style":1070},[45599],{"type":40,"value":1406},{"type":30,"tag":1046,"props":45601,"children":45602},{"class":1048,"line":681},[45603,45607,45612],{"type":30,"tag":1046,"props":45604,"children":45605},{"style":1053},[45606],{"type":40,"value":4908},{"type":30,"tag":1046,"props":45608,"children":45609},{"style":1138},[45610],{"type":40,"value":45611}," arreter",{"type":30,"tag":1046,"props":45613,"children":45614},{"style":1070},[45615],{"type":40,"value":1406},{"type":30,"tag":1046,"props":45617,"children":45618},{"class":1048,"line":1124},[45619,45623,45628],{"type":30,"tag":1046,"props":45620,"children":45621},{"style":1053},[45622],{"type":40,"value":4908},{"type":30,"tag":1046,"props":45624,"children":45625},{"style":1138},[45626],{"type":40,"value":45627}," nettoyer",{"type":30,"tag":1046,"props":45629,"children":45630},{"style":1070},[45631],{"type":40,"value":1406},{"type":30,"tag":1046,"props":45633,"children":45634},{"class":1048,"line":1168},[45635],{"type":30,"tag":1046,"props":45636,"children":45637},{"style":1070},[45638],{"type":40,"value":1423},{"type":30,"tag":43,"props":45640,"children":45641},{},[45642,45644,45650,45652,45657],{"type":40,"value":45643},"Si vous implémentez une classe ",{"type":30,"tag":1042,"props":45645,"children":45647},{"className":45646},[],[45648],{"type":40,"value":45649},"RobotCuisine",{"type":40,"value":45651},", vous n'avez pas forcément besoin de la méthode ",{"type":30,"tag":1042,"props":45653,"children":45655},{"className":45654},[],[45656],{"type":40,"value":34044},{"type":40,"value":45658},", qui pourrait être propre à une machine spécifique. Pour respecter ISP, je vous recommande de scinder cette interface en plusieurs interfaces plus petites et spécifiques :",{"type":30,"tag":1035,"props":45660,"children":45662},{"className":1039,"code":45661,"language":1038,"meta":8,"style":8},"public interface Demarrage {\n    void demarrer();\n    void arreter();\n}\n\npublic interface Nettoyage {\n    void nettoyer();\n}\n",[45663],{"type":30,"tag":1042,"props":45664,"children":45665},{"__ignoreMap":8},[45666,45686,45701,45716,45723,45730,45750,45765],{"type":30,"tag":1046,"props":45667,"children":45668},{"class":1048,"line":1049},[45669,45673,45677,45682],{"type":30,"tag":1046,"props":45670,"children":45671},{"style":1053},[45672],{"type":40,"value":1056},{"type":30,"tag":1046,"props":45674,"children":45675},{"style":1053},[45676],{"type":40,"value":4852},{"type":30,"tag":1046,"props":45678,"children":45679},{"style":1064},[45680],{"type":40,"value":45681}," Demarrage",{"type":30,"tag":1046,"props":45683,"children":45684},{"style":1070},[45685],{"type":40,"value":1073},{"type":30,"tag":1046,"props":45687,"children":45688},{"class":1048,"line":675},[45689,45693,45697],{"type":30,"tag":1046,"props":45690,"children":45691},{"style":1053},[45692],{"type":40,"value":4908},{"type":30,"tag":1046,"props":45694,"children":45695},{"style":1138},[45696],{"type":40,"value":45595},{"type":30,"tag":1046,"props":45698,"children":45699},{"style":1070},[45700],{"type":40,"value":1406},{"type":30,"tag":1046,"props":45702,"children":45703},{"class":1048,"line":681},[45704,45708,45712],{"type":30,"tag":1046,"props":45705,"children":45706},{"style":1053},[45707],{"type":40,"value":4908},{"type":30,"tag":1046,"props":45709,"children":45710},{"style":1138},[45711],{"type":40,"value":45611},{"type":30,"tag":1046,"props":45713,"children":45714},{"style":1070},[45715],{"type":40,"value":1406},{"type":30,"tag":1046,"props":45717,"children":45718},{"class":1048,"line":1124},[45719],{"type":30,"tag":1046,"props":45720,"children":45721},{"style":1070},[45722],{"type":40,"value":1423},{"type":30,"tag":1046,"props":45724,"children":45725},{"class":1048,"line":1168},[45726],{"type":30,"tag":1046,"props":45727,"children":45728},{"emptyLinePlaceholder":13},[45729],{"type":40,"value":1121},{"type":30,"tag":1046,"props":45731,"children":45732},{"class":1048,"line":1201},[45733,45737,45741,45746],{"type":30,"tag":1046,"props":45734,"children":45735},{"style":1053},[45736],{"type":40,"value":1056},{"type":30,"tag":1046,"props":45738,"children":45739},{"style":1053},[45740],{"type":40,"value":4852},{"type":30,"tag":1046,"props":45742,"children":45743},{"style":1064},[45744],{"type":40,"value":45745}," Nettoyage",{"type":30,"tag":1046,"props":45747,"children":45748},{"style":1070},[45749],{"type":40,"value":1073},{"type":30,"tag":1046,"props":45751,"children":45752},{"class":1048,"line":1210},[45753,45757,45761],{"type":30,"tag":1046,"props":45754,"children":45755},{"style":1053},[45756],{"type":40,"value":4908},{"type":30,"tag":1046,"props":45758,"children":45759},{"style":1138},[45760],{"type":40,"value":45627},{"type":30,"tag":1046,"props":45762,"children":45763},{"style":1070},[45764],{"type":40,"value":1406},{"type":30,"tag":1046,"props":45766,"children":45767},{"class":1048,"line":1218},[45768],{"type":30,"tag":1046,"props":45769,"children":45770},{"style":1070},[45771],{"type":40,"value":1423},{"type":30,"tag":43,"props":45773,"children":45774},{},[45775,45777,45782],{"type":40,"value":45776},"Ensuite, ",{"type":30,"tag":1042,"props":45778,"children":45780},{"className":45779},[],[45781],{"type":40,"value":45649},{"type":40,"value":45783}," n’implémentera que les méthodes nécessaires :",{"type":30,"tag":1035,"props":45785,"children":45787},{"className":1039,"code":45786,"language":1038,"meta":8,"style":8},"public class RobotCuisine implements Demarrage {\n    @Override\n    public void demarrer() {\n        System.out.println(\"Le robot démarre.\");\n    }\n\n    @Override\n    public void arreter() {\n        System.out.println(\"Le robot s'arrête.\");\n    }\n}\n",[45788],{"type":30,"tag":1042,"props":45789,"children":45790},{"__ignoreMap":8},[45791,45819,45830,45853,45889,45896,45903,45914,45937,45973,45980],{"type":30,"tag":1046,"props":45792,"children":45793},{"class":1048,"line":1049},[45794,45798,45802,45807,45811,45815],{"type":30,"tag":1046,"props":45795,"children":45796},{"style":1053},[45797],{"type":40,"value":1056},{"type":30,"tag":1046,"props":45799,"children":45800},{"style":1053},[45801],{"type":40,"value":1061},{"type":30,"tag":1046,"props":45803,"children":45804},{"style":1064},[45805],{"type":40,"value":45806}," RobotCuisine",{"type":30,"tag":1046,"props":45808,"children":45809},{"style":1053},[45810],{"type":40,"value":3166},{"type":30,"tag":1046,"props":45812,"children":45813},{"style":1064},[45814],{"type":40,"value":45681},{"type":30,"tag":1046,"props":45816,"children":45817},{"style":1070},[45818],{"type":40,"value":1073},{"type":30,"tag":1046,"props":45820,"children":45821},{"class":1048,"line":675},[45822,45826],{"type":30,"tag":1046,"props":45823,"children":45824},{"style":1647},[45825],{"type":40,"value":1828},{"type":30,"tag":1046,"props":45827,"children":45828},{"style":1653},[45829],{"type":40,"value":3258},{"type":30,"tag":1046,"props":45831,"children":45832},{"class":1048,"line":681},[45833,45837,45841,45845,45849],{"type":30,"tag":1046,"props":45834,"children":45835},{"style":1053},[45836],{"type":40,"value":1130},{"type":30,"tag":1046,"props":45838,"children":45839},{"style":1053},[45840],{"type":40,"value":1135},{"type":30,"tag":1046,"props":45842,"children":45843},{"style":1138},[45844],{"type":40,"value":45595},{"type":30,"tag":1046,"props":45846,"children":45847},{"style":1070},[45848],{"type":40,"value":1320},{"type":30,"tag":1046,"props":45850,"children":45851},{"style":1070},[45852],{"type":40,"value":1073},{"type":30,"tag":1046,"props":45854,"children":45855},{"class":1048,"line":1124},[45856,45860,45864,45868,45872,45876,45880,45885],{"type":30,"tag":1046,"props":45857,"children":45858},{"style":1105},[45859],{"type":40,"value":12555},{"type":30,"tag":1046,"props":45861,"children":45862},{"style":1070},[45863],{"type":40,"value":1179},{"type":30,"tag":1046,"props":45865,"children":45866},{"style":1105},[45867],{"type":40,"value":12564},{"type":30,"tag":1046,"props":45869,"children":45870},{"style":1070},[45871],{"type":40,"value":1179},{"type":30,"tag":1046,"props":45873,"children":45874},{"style":1138},[45875],{"type":40,"value":12573},{"type":30,"tag":1046,"props":45877,"children":45878},{"style":1070},[45879],{"type":40,"value":1146},{"type":30,"tag":1046,"props":45881,"children":45882},{"style":1675},[45883],{"type":40,"value":45884},"\"Le robot démarre.\"",{"type":30,"tag":1046,"props":45886,"children":45887},{"style":1070},[45888],{"type":40,"value":1198},{"type":30,"tag":1046,"props":45890,"children":45891},{"class":1048,"line":1168},[45892],{"type":30,"tag":1046,"props":45893,"children":45894},{"style":1070},[45895],{"type":40,"value":1207},{"type":30,"tag":1046,"props":45897,"children":45898},{"class":1048,"line":1201},[45899],{"type":30,"tag":1046,"props":45900,"children":45901},{"emptyLinePlaceholder":13},[45902],{"type":40,"value":1121},{"type":30,"tag":1046,"props":45904,"children":45905},{"class":1048,"line":1210},[45906,45910],{"type":30,"tag":1046,"props":45907,"children":45908},{"style":1647},[45909],{"type":40,"value":1828},{"type":30,"tag":1046,"props":45911,"children":45912},{"style":1653},[45913],{"type":40,"value":3258},{"type":30,"tag":1046,"props":45915,"children":45916},{"class":1048,"line":1218},[45917,45921,45925,45929,45933],{"type":30,"tag":1046,"props":45918,"children":45919},{"style":1053},[45920],{"type":40,"value":1130},{"type":30,"tag":1046,"props":45922,"children":45923},{"style":1053},[45924],{"type":40,"value":1135},{"type":30,"tag":1046,"props":45926,"children":45927},{"style":1138},[45928],{"type":40,"value":45611},{"type":30,"tag":1046,"props":45930,"children":45931},{"style":1070},[45932],{"type":40,"value":1320},{"type":30,"tag":1046,"props":45934,"children":45935},{"style":1070},[45936],{"type":40,"value":1073},{"type":30,"tag":1046,"props":45938,"children":45939},{"class":1048,"line":1255},[45940,45944,45948,45952,45956,45960,45964,45969],{"type":30,"tag":1046,"props":45941,"children":45942},{"style":1105},[45943],{"type":40,"value":12555},{"type":30,"tag":1046,"props":45945,"children":45946},{"style":1070},[45947],{"type":40,"value":1179},{"type":30,"tag":1046,"props":45949,"children":45950},{"style":1105},[45951],{"type":40,"value":12564},{"type":30,"tag":1046,"props":45953,"children":45954},{"style":1070},[45955],{"type":40,"value":1179},{"type":30,"tag":1046,"props":45957,"children":45958},{"style":1138},[45959],{"type":40,"value":12573},{"type":30,"tag":1046,"props":45961,"children":45962},{"style":1070},[45963],{"type":40,"value":1146},{"type":30,"tag":1046,"props":45965,"children":45966},{"style":1675},[45967],{"type":40,"value":45968},"\"Le robot s'arrête.\"",{"type":30,"tag":1046,"props":45970,"children":45971},{"style":1070},[45972],{"type":40,"value":1198},{"type":30,"tag":1046,"props":45974,"children":45975},{"class":1048,"line":1284},[45976],{"type":30,"tag":1046,"props":45977,"children":45978},{"style":1070},[45979],{"type":40,"value":1207},{"type":30,"tag":1046,"props":45981,"children":45982},{"class":1048,"line":1292},[45983],{"type":30,"tag":1046,"props":45984,"children":45985},{"style":1070},[45986],{"type":40,"value":1423},{"type":30,"tag":43,"props":45988,"children":45989},{},[45990,45992,45997,45999,46005,46007,46013],{"type":40,"value":45991},"Si vous avez une autre classe qui a besoin de la méthode ",{"type":30,"tag":1042,"props":45993,"children":45995},{"className":45994},[],[45996],{"type":40,"value":34044},{"type":40,"value":45998},", comme une classe ",{"type":30,"tag":1042,"props":46000,"children":46002},{"className":46001},[],[46003],{"type":40,"value":46004},"LaveVaisselle",{"type":40,"value":46006},", elle peut implémenter l'interface ",{"type":30,"tag":1042,"props":46008,"children":46010},{"className":46009},[],[46011],{"type":40,"value":46012},"Nettoyage",{"type":40,"value":6296},{"type":30,"tag":1035,"props":46015,"children":46017},{"className":1039,"code":46016,"language":1038,"meta":8,"style":8},"public class LaveVaisselle implements Demarrage, Nettoyage {\n    @Override\n    public void demarrer() {\n        System.out.println(\"Le lave-vaisselle démarre.\");\n    }\n\n    @Override\n    public void arreter() {\n        System.out.println(\"Le lave-vaisselle s'arrête.\");\n    }\n\n    @Override\n    public void nettoyer() {\n        System.out.println(\"Le lave-vaisselle nettoie.\");\n    }\n}\n",[46018],{"type":30,"tag":1042,"props":46019,"children":46020},{"__ignoreMap":8},[46021,46057,46068,46091,46127,46134,46141,46152,46175,46211,46218,46225,46236,46259,46295,46302],{"type":30,"tag":1046,"props":46022,"children":46023},{"class":1048,"line":1049},[46024,46028,46032,46037,46041,46045,46049,46053],{"type":30,"tag":1046,"props":46025,"children":46026},{"style":1053},[46027],{"type":40,"value":1056},{"type":30,"tag":1046,"props":46029,"children":46030},{"style":1053},[46031],{"type":40,"value":1061},{"type":30,"tag":1046,"props":46033,"children":46034},{"style":1064},[46035],{"type":40,"value":46036}," LaveVaisselle",{"type":30,"tag":1046,"props":46038,"children":46039},{"style":1053},[46040],{"type":40,"value":3166},{"type":30,"tag":1046,"props":46042,"children":46043},{"style":1064},[46044],{"type":40,"value":45681},{"type":30,"tag":1046,"props":46046,"children":46047},{"style":1070},[46048],{"type":40,"value":2891},{"type":30,"tag":1046,"props":46050,"children":46051},{"style":1064},[46052],{"type":40,"value":45745},{"type":30,"tag":1046,"props":46054,"children":46055},{"style":1070},[46056],{"type":40,"value":1073},{"type":30,"tag":1046,"props":46058,"children":46059},{"class":1048,"line":675},[46060,46064],{"type":30,"tag":1046,"props":46061,"children":46062},{"style":1647},[46063],{"type":40,"value":1828},{"type":30,"tag":1046,"props":46065,"children":46066},{"style":1653},[46067],{"type":40,"value":3258},{"type":30,"tag":1046,"props":46069,"children":46070},{"class":1048,"line":681},[46071,46075,46079,46083,46087],{"type":30,"tag":1046,"props":46072,"children":46073},{"style":1053},[46074],{"type":40,"value":1130},{"type":30,"tag":1046,"props":46076,"children":46077},{"style":1053},[46078],{"type":40,"value":1135},{"type":30,"tag":1046,"props":46080,"children":46081},{"style":1138},[46082],{"type":40,"value":45595},{"type":30,"tag":1046,"props":46084,"children":46085},{"style":1070},[46086],{"type":40,"value":1320},{"type":30,"tag":1046,"props":46088,"children":46089},{"style":1070},[46090],{"type":40,"value":1073},{"type":30,"tag":1046,"props":46092,"children":46093},{"class":1048,"line":1124},[46094,46098,46102,46106,46110,46114,46118,46123],{"type":30,"tag":1046,"props":46095,"children":46096},{"style":1105},[46097],{"type":40,"value":12555},{"type":30,"tag":1046,"props":46099,"children":46100},{"style":1070},[46101],{"type":40,"value":1179},{"type":30,"tag":1046,"props":46103,"children":46104},{"style":1105},[46105],{"type":40,"value":12564},{"type":30,"tag":1046,"props":46107,"children":46108},{"style":1070},[46109],{"type":40,"value":1179},{"type":30,"tag":1046,"props":46111,"children":46112},{"style":1138},[46113],{"type":40,"value":12573},{"type":30,"tag":1046,"props":46115,"children":46116},{"style":1070},[46117],{"type":40,"value":1146},{"type":30,"tag":1046,"props":46119,"children":46120},{"style":1675},[46121],{"type":40,"value":46122},"\"Le lave-vaisselle démarre.\"",{"type":30,"tag":1046,"props":46124,"children":46125},{"style":1070},[46126],{"type":40,"value":1198},{"type":30,"tag":1046,"props":46128,"children":46129},{"class":1048,"line":1168},[46130],{"type":30,"tag":1046,"props":46131,"children":46132},{"style":1070},[46133],{"type":40,"value":1207},{"type":30,"tag":1046,"props":46135,"children":46136},{"class":1048,"line":1201},[46137],{"type":30,"tag":1046,"props":46138,"children":46139},{"emptyLinePlaceholder":13},[46140],{"type":40,"value":1121},{"type":30,"tag":1046,"props":46142,"children":46143},{"class":1048,"line":1210},[46144,46148],{"type":30,"tag":1046,"props":46145,"children":46146},{"style":1647},[46147],{"type":40,"value":1828},{"type":30,"tag":1046,"props":46149,"children":46150},{"style":1653},[46151],{"type":40,"value":3258},{"type":30,"tag":1046,"props":46153,"children":46154},{"class":1048,"line":1218},[46155,46159,46163,46167,46171],{"type":30,"tag":1046,"props":46156,"children":46157},{"style":1053},[46158],{"type":40,"value":1130},{"type":30,"tag":1046,"props":46160,"children":46161},{"style":1053},[46162],{"type":40,"value":1135},{"type":30,"tag":1046,"props":46164,"children":46165},{"style":1138},[46166],{"type":40,"value":45611},{"type":30,"tag":1046,"props":46168,"children":46169},{"style":1070},[46170],{"type":40,"value":1320},{"type":30,"tag":1046,"props":46172,"children":46173},{"style":1070},[46174],{"type":40,"value":1073},{"type":30,"tag":1046,"props":46176,"children":46177},{"class":1048,"line":1255},[46178,46182,46186,46190,46194,46198,46202,46207],{"type":30,"tag":1046,"props":46179,"children":46180},{"style":1105},[46181],{"type":40,"value":12555},{"type":30,"tag":1046,"props":46183,"children":46184},{"style":1070},[46185],{"type":40,"value":1179},{"type":30,"tag":1046,"props":46187,"children":46188},{"style":1105},[46189],{"type":40,"value":12564},{"type":30,"tag":1046,"props":46191,"children":46192},{"style":1070},[46193],{"type":40,"value":1179},{"type":30,"tag":1046,"props":46195,"children":46196},{"style":1138},[46197],{"type":40,"value":12573},{"type":30,"tag":1046,"props":46199,"children":46200},{"style":1070},[46201],{"type":40,"value":1146},{"type":30,"tag":1046,"props":46203,"children":46204},{"style":1675},[46205],{"type":40,"value":46206},"\"Le lave-vaisselle s'arrête.\"",{"type":30,"tag":1046,"props":46208,"children":46209},{"style":1070},[46210],{"type":40,"value":1198},{"type":30,"tag":1046,"props":46212,"children":46213},{"class":1048,"line":1284},[46214],{"type":30,"tag":1046,"props":46215,"children":46216},{"style":1070},[46217],{"type":40,"value":1207},{"type":30,"tag":1046,"props":46219,"children":46220},{"class":1048,"line":1292},[46221],{"type":30,"tag":1046,"props":46222,"children":46223},{"emptyLinePlaceholder":13},[46224],{"type":40,"value":1121},{"type":30,"tag":1046,"props":46226,"children":46227},{"class":1048,"line":1300},[46228,46232],{"type":30,"tag":1046,"props":46229,"children":46230},{"style":1647},[46231],{"type":40,"value":1828},{"type":30,"tag":1046,"props":46233,"children":46234},{"style":1653},[46235],{"type":40,"value":3258},{"type":30,"tag":1046,"props":46237,"children":46238},{"class":1048,"line":1327},[46239,46243,46247,46251,46255],{"type":30,"tag":1046,"props":46240,"children":46241},{"style":1053},[46242],{"type":40,"value":1130},{"type":30,"tag":1046,"props":46244,"children":46245},{"style":1053},[46246],{"type":40,"value":1135},{"type":30,"tag":1046,"props":46248,"children":46249},{"style":1138},[46250],{"type":40,"value":45627},{"type":30,"tag":1046,"props":46252,"children":46253},{"style":1070},[46254],{"type":40,"value":1320},{"type":30,"tag":1046,"props":46256,"children":46257},{"style":1070},[46258],{"type":40,"value":1073},{"type":30,"tag":1046,"props":46260,"children":46261},{"class":1048,"line":1354},[46262,46266,46270,46274,46278,46282,46286,46291],{"type":30,"tag":1046,"props":46263,"children":46264},{"style":1105},[46265],{"type":40,"value":12555},{"type":30,"tag":1046,"props":46267,"children":46268},{"style":1070},[46269],{"type":40,"value":1179},{"type":30,"tag":1046,"props":46271,"children":46272},{"style":1105},[46273],{"type":40,"value":12564},{"type":30,"tag":1046,"props":46275,"children":46276},{"style":1070},[46277],{"type":40,"value":1179},{"type":30,"tag":1046,"props":46279,"children":46280},{"style":1138},[46281],{"type":40,"value":12573},{"type":30,"tag":1046,"props":46283,"children":46284},{"style":1070},[46285],{"type":40,"value":1146},{"type":30,"tag":1046,"props":46287,"children":46288},{"style":1675},[46289],{"type":40,"value":46290},"\"Le lave-vaisselle nettoie.\"",{"type":30,"tag":1046,"props":46292,"children":46293},{"style":1070},[46294],{"type":40,"value":1198},{"type":30,"tag":1046,"props":46296,"children":46297},{"class":1048,"line":1391},[46298],{"type":30,"tag":1046,"props":46299,"children":46300},{"style":1070},[46301],{"type":40,"value":1207},{"type":30,"tag":1046,"props":46303,"children":46304},{"class":1048,"line":1409},[46305],{"type":30,"tag":1046,"props":46306,"children":46307},{"style":1070},[46308],{"type":40,"value":1423},{"type":30,"tag":43,"props":46310,"children":46311},{},[46312],{"type":40,"value":46313},"En séparant les interfaces de cette manière, vous rendez votre code plus flexible, modulaire et facile à tester.",{"type":30,"tag":84,"props":46315,"children":46316},{},[],{"type":30,"tag":211,"props":46318,"children":46320},{"cta":213,"href":214,"title":46319,"type":216},"Vos interfaces sont des fourre-tout qui forcent chaque classe à implémenter ce dont elle n'a pas besoin ?",[46321],{"type":30,"tag":43,"props":46322,"children":46323},{},[46324],{"type":40,"value":46325},"La maintenance devient un cauchemar, les mocks de tests sont interminables, et chaque ajout dans une interface casse une dizaine d'implémentations existantes. Réservons 30 minutes pour auditer le design de vos interfaces et définir un plan de refactoring progressif.",{"type":30,"tag":31,"props":46327,"children":46329},{"id":46328},"les-erreurs-courantes-à-éviter",[46330],{"type":40,"value":46331},"Les erreurs courantes à éviter",{"type":30,"tag":43,"props":46333,"children":46334},{},[46335],{"type":40,"value":46336},"Même si le principe de séparation d’interface semble simple, il est courant de tomber dans certains pièges lors de son application. Voici quelques erreurs fréquentes à éviter pour que votre code reste propre, modulaire et facile à maintenir.",{"type":30,"tag":116,"props":46338,"children":46340},{"id":46339},"_1-créer-trop-dinterfaces-inutiles",[46341],{"type":40,"value":46342},"1. Créer trop d'interfaces inutiles",{"type":30,"tag":43,"props":46344,"children":46345},{},[46346],{"type":40,"value":46347},"L’une des erreurs",{"type":30,"tag":43,"props":46349,"children":46350},{},[46351],{"type":40,"value":46352},"les plus courantes est de sur-appliquer ISP en créant trop d’interfaces spécifiques. Si vous divisez votre code en une multitude d’interfaces ultra-spécifiques, vous risquez de rendre votre système trop fragmenté et difficile à comprendre. L’objectif est de trouver un juste équilibre : les interfaces doivent être suffisamment petites pour ne contenir que ce dont une classe a besoin, mais elles ne doivent pas être si petites qu’elles deviennent redondantes ou complexes à utiliser.",{"type":30,"tag":43,"props":46354,"children":46355},{},[46356],{"type":30,"tag":36,"props":46357,"children":46358},{},[46359],{"type":40,"value":31472},{"type":30,"tag":1035,"props":46361,"children":46363},{"className":1039,"code":46362,"language":1038,"meta":8,"style":8},"public interface Travailler {\n    void ecrireCode();\n}\n\npublic interface ManagerProjet {\n    void organiserReunion();\n}\n\npublic interface SalarieEntreprise {\n    void calculerSalaire();\n}\n",[46364],{"type":30,"tag":1042,"props":46365,"children":46366},{"__ignoreMap":8},[46367,46387,46403,46410,46417,46437,46453,46460,46467,46487,46502],{"type":30,"tag":1046,"props":46368,"children":46369},{"class":1048,"line":1049},[46370,46374,46378,46383],{"type":30,"tag":1046,"props":46371,"children":46372},{"style":1053},[46373],{"type":40,"value":1056},{"type":30,"tag":1046,"props":46375,"children":46376},{"style":1053},[46377],{"type":40,"value":4852},{"type":30,"tag":1046,"props":46379,"children":46380},{"style":1064},[46381],{"type":40,"value":46382}," Travailler",{"type":30,"tag":1046,"props":46384,"children":46385},{"style":1070},[46386],{"type":40,"value":1073},{"type":30,"tag":1046,"props":46388,"children":46389},{"class":1048,"line":675},[46390,46394,46399],{"type":30,"tag":1046,"props":46391,"children":46392},{"style":1053},[46393],{"type":40,"value":4908},{"type":30,"tag":1046,"props":46395,"children":46396},{"style":1138},[46397],{"type":40,"value":46398}," ecrireCode",{"type":30,"tag":1046,"props":46400,"children":46401},{"style":1070},[46402],{"type":40,"value":1406},{"type":30,"tag":1046,"props":46404,"children":46405},{"class":1048,"line":681},[46406],{"type":30,"tag":1046,"props":46407,"children":46408},{"style":1070},[46409],{"type":40,"value":1423},{"type":30,"tag":1046,"props":46411,"children":46412},{"class":1048,"line":1124},[46413],{"type":30,"tag":1046,"props":46414,"children":46415},{"emptyLinePlaceholder":13},[46416],{"type":40,"value":1121},{"type":30,"tag":1046,"props":46418,"children":46419},{"class":1048,"line":1168},[46420,46424,46428,46433],{"type":30,"tag":1046,"props":46421,"children":46422},{"style":1053},[46423],{"type":40,"value":1056},{"type":30,"tag":1046,"props":46425,"children":46426},{"style":1053},[46427],{"type":40,"value":4852},{"type":30,"tag":1046,"props":46429,"children":46430},{"style":1064},[46431],{"type":40,"value":46432}," ManagerProjet",{"type":30,"tag":1046,"props":46434,"children":46435},{"style":1070},[46436],{"type":40,"value":1073},{"type":30,"tag":1046,"props":46438,"children":46439},{"class":1048,"line":1201},[46440,46444,46449],{"type":30,"tag":1046,"props":46441,"children":46442},{"style":1053},[46443],{"type":40,"value":4908},{"type":30,"tag":1046,"props":46445,"children":46446},{"style":1138},[46447],{"type":40,"value":46448}," organiserReunion",{"type":30,"tag":1046,"props":46450,"children":46451},{"style":1070},[46452],{"type":40,"value":1406},{"type":30,"tag":1046,"props":46454,"children":46455},{"class":1048,"line":1210},[46456],{"type":30,"tag":1046,"props":46457,"children":46458},{"style":1070},[46459],{"type":40,"value":1423},{"type":30,"tag":1046,"props":46461,"children":46462},{"class":1048,"line":1218},[46463],{"type":30,"tag":1046,"props":46464,"children":46465},{"emptyLinePlaceholder":13},[46466],{"type":40,"value":1121},{"type":30,"tag":1046,"props":46468,"children":46469},{"class":1048,"line":1255},[46470,46474,46478,46483],{"type":30,"tag":1046,"props":46471,"children":46472},{"style":1053},[46473],{"type":40,"value":1056},{"type":30,"tag":1046,"props":46475,"children":46476},{"style":1053},[46477],{"type":40,"value":4852},{"type":30,"tag":1046,"props":46479,"children":46480},{"style":1064},[46481],{"type":40,"value":46482}," SalarieEntreprise",{"type":30,"tag":1046,"props":46484,"children":46485},{"style":1070},[46486],{"type":40,"value":1073},{"type":30,"tag":1046,"props":46488,"children":46489},{"class":1048,"line":1284},[46490,46494,46498],{"type":30,"tag":1046,"props":46491,"children":46492},{"style":1053},[46493],{"type":40,"value":4908},{"type":30,"tag":1046,"props":46495,"children":46496},{"style":1138},[46497],{"type":40,"value":44695},{"type":30,"tag":1046,"props":46499,"children":46500},{"style":1070},[46501],{"type":40,"value":1406},{"type":30,"tag":1046,"props":46503,"children":46504},{"class":1048,"line":1292},[46505],{"type":30,"tag":1046,"props":46506,"children":46507},{"style":1070},[46508],{"type":40,"value":1423},{"type":30,"tag":43,"props":46510,"children":46511},{},[46512],{"type":40,"value":46513},"Cet exemple montre des interfaces beaucoup trop spécifiques. Parfois, il est plus judicieux de regrouper certaines responsabilités sous une seule interface quand cela fait sens.",{"type":30,"tag":964,"props":46515,"children":46516},{},[46517],{"type":30,"tag":43,"props":46518,"children":46519},{},[46520,46524],{"type":30,"tag":36,"props":46521,"children":46522},{},[46523],{"type":40,"value":44522},{"type":40,"value":46525}," : Regrouper des comportements similaires sous une même interface quand cela est logique aide à maintenir la simplicité et à éviter une sur-segmentation inutile. C'est un équilibre que j'ai appris à trouver en accompagnant des équipes chez des clients comme Agirc-Arrco ou Canal+ : ni trop de fragmentation, ni des interfaces \"dieu\".",{"type":30,"tag":116,"props":46527,"children":46529},{"id":46528},"_2-concevoir-des-interfaces-trop-larges",[46530],{"type":40,"value":46531},"2. Concevoir des interfaces trop larges",{"type":30,"tag":43,"props":46533,"children":46534},{},[46535],{"type":40,"value":46536},"L’autre extrême, bien sûr, est de créer des interfaces trop larges, ce qui va à l’encontre même du principe ISP. Si une interface regroupe trop de responsabilités, vous risquez de forcer des classes à implémenter des méthodes dont elles n’ont pas besoin. Cela augmente inutilement le couplage et la complexité.",{"type":30,"tag":43,"props":46538,"children":46539},{},[46540],{"type":30,"tag":36,"props":46541,"children":46542},{},[46543],{"type":40,"value":31472},{"type":30,"tag":1035,"props":46545,"children":46547},{"className":1039,"code":46546,"language":1038,"meta":8,"style":8},"public interface ServiceClient {\n    void traiterCommande();\n    void envoyerFacture();\n    void gererReclamations();\n    void realiserAudit();\n}\n",[46548],{"type":30,"tag":1042,"props":46549,"children":46550},{"__ignoreMap":8},[46551,46571,46587,46602,46618,46634],{"type":30,"tag":1046,"props":46552,"children":46553},{"class":1048,"line":1049},[46554,46558,46562,46567],{"type":30,"tag":1046,"props":46555,"children":46556},{"style":1053},[46557],{"type":40,"value":1056},{"type":30,"tag":1046,"props":46559,"children":46560},{"style":1053},[46561],{"type":40,"value":4852},{"type":30,"tag":1046,"props":46563,"children":46564},{"style":1064},[46565],{"type":40,"value":46566}," ServiceClient",{"type":30,"tag":1046,"props":46568,"children":46569},{"style":1070},[46570],{"type":40,"value":1073},{"type":30,"tag":1046,"props":46572,"children":46573},{"class":1048,"line":675},[46574,46578,46583],{"type":30,"tag":1046,"props":46575,"children":46576},{"style":1053},[46577],{"type":40,"value":4908},{"type":30,"tag":1046,"props":46579,"children":46580},{"style":1138},[46581],{"type":40,"value":46582}," traiterCommande",{"type":30,"tag":1046,"props":46584,"children":46585},{"style":1070},[46586],{"type":40,"value":1406},{"type":30,"tag":1046,"props":46588,"children":46589},{"class":1048,"line":681},[46590,46594,46598],{"type":30,"tag":1046,"props":46591,"children":46592},{"style":1053},[46593],{"type":40,"value":4908},{"type":30,"tag":1046,"props":46595,"children":46596},{"style":1138},[46597],{"type":40,"value":21491},{"type":30,"tag":1046,"props":46599,"children":46600},{"style":1070},[46601],{"type":40,"value":1406},{"type":30,"tag":1046,"props":46603,"children":46604},{"class":1048,"line":1124},[46605,46609,46614],{"type":30,"tag":1046,"props":46606,"children":46607},{"style":1053},[46608],{"type":40,"value":4908},{"type":30,"tag":1046,"props":46610,"children":46611},{"style":1138},[46612],{"type":40,"value":46613}," gererReclamations",{"type":30,"tag":1046,"props":46615,"children":46616},{"style":1070},[46617],{"type":40,"value":1406},{"type":30,"tag":1046,"props":46619,"children":46620},{"class":1048,"line":1168},[46621,46625,46630],{"type":30,"tag":1046,"props":46622,"children":46623},{"style":1053},[46624],{"type":40,"value":4908},{"type":30,"tag":1046,"props":46626,"children":46627},{"style":1138},[46628],{"type":40,"value":46629}," realiserAudit",{"type":30,"tag":1046,"props":46631,"children":46632},{"style":1070},[46633],{"type":40,"value":1406},{"type":30,"tag":1046,"props":46635,"children":46636},{"class":1048,"line":1201},[46637],{"type":30,"tag":1046,"props":46638,"children":46639},{"style":1070},[46640],{"type":40,"value":1423},{"type":30,"tag":43,"props":46642,"children":46643},{},[46644,46646,46652],{"type":40,"value":46645},"Ici, une interface ",{"type":30,"tag":1042,"props":46647,"children":46649},{"className":46648},[],[46650],{"type":40,"value":46651},"ServiceClient",{"type":40,"value":46653}," regroupe des fonctionnalités très différentes, forçant les classes qui l’implémentent à prendre en charge des tâches qui n'ont rien à voir entre elles.",{"type":30,"tag":116,"props":46655,"children":46657},{"id":46656},"_3-ne-pas-reconnaître-les-symptômes-dune-interface-trop-lourde",[46658],{"type":40,"value":46659},"3. Ne pas reconnaître les symptômes d’une interface trop lourde",{"type":30,"tag":43,"props":46661,"children":46662},{},[46663,46665,46670],{"type":40,"value":46664},"Si vous vous rendez compte que vous devez fréquemment passer des paramètres ",{"type":30,"tag":1042,"props":46666,"children":46668},{"className":46667},[],[46669],{"type":40,"value":33993},{"type":40,"value":46671}," ou lever des exceptions pour des méthodes non implémentées, c’est un signe clair que votre interface est trop large. Une bonne interface ne devrait jamais forcer une classe à contourner des méthodes dont elle n’a pas besoin.",{"type":30,"tag":43,"props":46673,"children":46674},{},[46675],{"type":30,"tag":36,"props":46676,"children":46677},{},[46678],{"type":40,"value":31935},{"type":30,"tag":1035,"props":46680,"children":46682},{"className":1039,"code":46681,"language":1038,"meta":8,"style":8},"public class ServiceLivraison implements ServiceClient {\n    @Override\n    public void traiterCommande() {\n        // Code de traitement de commande\n    }\n\n    @Override\n    public void envoyerFacture() {\n        // Cette méthode n'est pas pertinente pour ServiceLivraison.\n        throw new UnsupportedOperationException(\"Méthode non supportée.\");\n    }\n\n    @Override\n    public void gererReclamations() {\n        // Code de gestion des réclamations\n    }\n\n    @Override\n    public void realiserAudit() {\n        // Non pertinent pour ServiceLivraison.\n        throw new UnsupportedOperationException(\"Méthode non supportée.\");\n    }\n}\n",[46683],{"type":30,"tag":1042,"props":46684,"children":46685},{"__ignoreMap":8},[46686,46714,46725,46748,46756,46763,46770,46781,46804,46812,46841,46848,46855,46866,46889,46897,46904,46911,46922,46945,46953,46980,46987],{"type":30,"tag":1046,"props":46687,"children":46688},{"class":1048,"line":1049},[46689,46693,46697,46702,46706,46710],{"type":30,"tag":1046,"props":46690,"children":46691},{"style":1053},[46692],{"type":40,"value":1056},{"type":30,"tag":1046,"props":46694,"children":46695},{"style":1053},[46696],{"type":40,"value":1061},{"type":30,"tag":1046,"props":46698,"children":46699},{"style":1064},[46700],{"type":40,"value":46701}," ServiceLivraison",{"type":30,"tag":1046,"props":46703,"children":46704},{"style":1053},[46705],{"type":40,"value":3166},{"type":30,"tag":1046,"props":46707,"children":46708},{"style":1064},[46709],{"type":40,"value":46566},{"type":30,"tag":1046,"props":46711,"children":46712},{"style":1070},[46713],{"type":40,"value":1073},{"type":30,"tag":1046,"props":46715,"children":46716},{"class":1048,"line":675},[46717,46721],{"type":30,"tag":1046,"props":46718,"children":46719},{"style":1647},[46720],{"type":40,"value":1828},{"type":30,"tag":1046,"props":46722,"children":46723},{"style":1653},[46724],{"type":40,"value":3258},{"type":30,"tag":1046,"props":46726,"children":46727},{"class":1048,"line":681},[46728,46732,46736,46740,46744],{"type":30,"tag":1046,"props":46729,"children":46730},{"style":1053},[46731],{"type":40,"value":1130},{"type":30,"tag":1046,"props":46733,"children":46734},{"style":1053},[46735],{"type":40,"value":1135},{"type":30,"tag":1046,"props":46737,"children":46738},{"style":1138},[46739],{"type":40,"value":46582},{"type":30,"tag":1046,"props":46741,"children":46742},{"style":1070},[46743],{"type":40,"value":1320},{"type":30,"tag":1046,"props":46745,"children":46746},{"style":1070},[46747],{"type":40,"value":1073},{"type":30,"tag":1046,"props":46749,"children":46750},{"class":1048,"line":1124},[46751],{"type":30,"tag":1046,"props":46752,"children":46753},{"style":3961},[46754],{"type":40,"value":46755},"        // Code de traitement de commande\n",{"type":30,"tag":1046,"props":46757,"children":46758},{"class":1048,"line":1168},[46759],{"type":30,"tag":1046,"props":46760,"children":46761},{"style":1070},[46762],{"type":40,"value":1207},{"type":30,"tag":1046,"props":46764,"children":46765},{"class":1048,"line":1201},[46766],{"type":30,"tag":1046,"props":46767,"children":46768},{"emptyLinePlaceholder":13},[46769],{"type":40,"value":1121},{"type":30,"tag":1046,"props":46771,"children":46772},{"class":1048,"line":1210},[46773,46777],{"type":30,"tag":1046,"props":46774,"children":46775},{"style":1647},[46776],{"type":40,"value":1828},{"type":30,"tag":1046,"props":46778,"children":46779},{"style":1653},[46780],{"type":40,"value":3258},{"type":30,"tag":1046,"props":46782,"children":46783},{"class":1048,"line":1218},[46784,46788,46792,46796,46800],{"type":30,"tag":1046,"props":46785,"children":46786},{"style":1053},[46787],{"type":40,"value":1130},{"type":30,"tag":1046,"props":46789,"children":46790},{"style":1053},[46791],{"type":40,"value":1135},{"type":30,"tag":1046,"props":46793,"children":46794},{"style":1138},[46795],{"type":40,"value":21491},{"type":30,"tag":1046,"props":46797,"children":46798},{"style":1070},[46799],{"type":40,"value":1320},{"type":30,"tag":1046,"props":46801,"children":46802},{"style":1070},[46803],{"type":40,"value":1073},{"type":30,"tag":1046,"props":46805,"children":46806},{"class":1048,"line":1255},[46807],{"type":30,"tag":1046,"props":46808,"children":46809},{"style":3961},[46810],{"type":40,"value":46811},"        // Cette méthode n'est pas pertinente pour ServiceLivraison.\n",{"type":30,"tag":1046,"props":46813,"children":46814},{"class":1048,"line":1284},[46815,46819,46823,46828,46832,46837],{"type":30,"tag":1046,"props":46816,"children":46817},{"style":1053},[46818],{"type":40,"value":23605},{"type":30,"tag":1046,"props":46820,"children":46821},{"style":1053},[46822],{"type":40,"value":2480},{"type":30,"tag":1046,"props":46824,"children":46825},{"style":1138},[46826],{"type":40,"value":46827}," UnsupportedOperationException",{"type":30,"tag":1046,"props":46829,"children":46830},{"style":1070},[46831],{"type":40,"value":1146},{"type":30,"tag":1046,"props":46833,"children":46834},{"style":1675},[46835],{"type":40,"value":46836},"\"Méthode non supportée.\"",{"type":30,"tag":1046,"props":46838,"children":46839},{"style":1070},[46840],{"type":40,"value":1198},{"type":30,"tag":1046,"props":46842,"children":46843},{"class":1048,"line":1292},[46844],{"type":30,"tag":1046,"props":46845,"children":46846},{"style":1070},[46847],{"type":40,"value":1207},{"type":30,"tag":1046,"props":46849,"children":46850},{"class":1048,"line":1300},[46851],{"type":30,"tag":1046,"props":46852,"children":46853},{"emptyLinePlaceholder":13},[46854],{"type":40,"value":1121},{"type":30,"tag":1046,"props":46856,"children":46857},{"class":1048,"line":1327},[46858,46862],{"type":30,"tag":1046,"props":46859,"children":46860},{"style":1647},[46861],{"type":40,"value":1828},{"type":30,"tag":1046,"props":46863,"children":46864},{"style":1653},[46865],{"type":40,"value":3258},{"type":30,"tag":1046,"props":46867,"children":46868},{"class":1048,"line":1354},[46869,46873,46877,46881,46885],{"type":30,"tag":1046,"props":46870,"children":46871},{"style":1053},[46872],{"type":40,"value":1130},{"type":30,"tag":1046,"props":46874,"children":46875},{"style":1053},[46876],{"type":40,"value":1135},{"type":30,"tag":1046,"props":46878,"children":46879},{"style":1138},[46880],{"type":40,"value":46613},{"type":30,"tag":1046,"props":46882,"children":46883},{"style":1070},[46884],{"type":40,"value":1320},{"type":30,"tag":1046,"props":46886,"children":46887},{"style":1070},[46888],{"type":40,"value":1073},{"type":30,"tag":1046,"props":46890,"children":46891},{"class":1048,"line":1391},[46892],{"type":30,"tag":1046,"props":46893,"children":46894},{"style":3961},[46895],{"type":40,"value":46896},"        // Code de gestion des réclamations\n",{"type":30,"tag":1046,"props":46898,"children":46899},{"class":1048,"line":1409},[46900],{"type":30,"tag":1046,"props":46901,"children":46902},{"style":1070},[46903],{"type":40,"value":1207},{"type":30,"tag":1046,"props":46905,"children":46906},{"class":1048,"line":1417},[46907],{"type":30,"tag":1046,"props":46908,"children":46909},{"emptyLinePlaceholder":13},[46910],{"type":40,"value":1121},{"type":30,"tag":1046,"props":46912,"children":46913},{"class":1048,"line":2023},[46914,46918],{"type":30,"tag":1046,"props":46915,"children":46916},{"style":1647},[46917],{"type":40,"value":1828},{"type":30,"tag":1046,"props":46919,"children":46920},{"style":1653},[46921],{"type":40,"value":3258},{"type":30,"tag":1046,"props":46923,"children":46924},{"class":1048,"line":2083},[46925,46929,46933,46937,46941],{"type":30,"tag":1046,"props":46926,"children":46927},{"style":1053},[46928],{"type":40,"value":1130},{"type":30,"tag":1046,"props":46930,"children":46931},{"style":1053},[46932],{"type":40,"value":1135},{"type":30,"tag":1046,"props":46934,"children":46935},{"style":1138},[46936],{"type":40,"value":46629},{"type":30,"tag":1046,"props":46938,"children":46939},{"style":1070},[46940],{"type":40,"value":1320},{"type":30,"tag":1046,"props":46942,"children":46943},{"style":1070},[46944],{"type":40,"value":1073},{"type":30,"tag":1046,"props":46946,"children":46947},{"class":1048,"line":2126},[46948],{"type":30,"tag":1046,"props":46949,"children":46950},{"style":3961},[46951],{"type":40,"value":46952},"        // Non pertinent pour ServiceLivraison.\n",{"type":30,"tag":1046,"props":46954,"children":46955},{"class":1048,"line":2159},[46956,46960,46964,46968,46972,46976],{"type":30,"tag":1046,"props":46957,"children":46958},{"style":1053},[46959],{"type":40,"value":23605},{"type":30,"tag":1046,"props":46961,"children":46962},{"style":1053},[46963],{"type":40,"value":2480},{"type":30,"tag":1046,"props":46965,"children":46966},{"style":1138},[46967],{"type":40,"value":46827},{"type":30,"tag":1046,"props":46969,"children":46970},{"style":1070},[46971],{"type":40,"value":1146},{"type":30,"tag":1046,"props":46973,"children":46974},{"style":1675},[46975],{"type":40,"value":46836},{"type":30,"tag":1046,"props":46977,"children":46978},{"style":1070},[46979],{"type":40,"value":1198},{"type":30,"tag":1046,"props":46981,"children":46982},{"class":1048,"line":2167},[46983],{"type":30,"tag":1046,"props":46984,"children":46985},{"style":1070},[46986],{"type":40,"value":1207},{"type":30,"tag":1046,"props":46988,"children":46989},{"class":1048,"line":4537},[46990],{"type":30,"tag":1046,"props":46991,"children":46992},{"style":1070},[46993],{"type":40,"value":1423},{"type":30,"tag":43,"props":46995,"children":46996},{},[46997,46998,47004],{"type":40,"value":24558},{"type":30,"tag":1042,"props":46999,"children":47001},{"className":47000},[],[47002],{"type":40,"value":47003},"ServiceLivraison",{"type":40,"value":47005}," est obligée de gérer des méthodes inutiles en lançant des exceptions. Cela viole complètement ISP et rend le code plus difficile à maintenir.",{"type":30,"tag":116,"props":47007,"children":47009},{"id":47008},"_4-ne-pas-penser-aux-changements-futurs",[47010],{"type":40,"value":47011},"4. Ne pas penser aux changements futurs",{"type":30,"tag":43,"props":47013,"children":47014},{},[47015],{"type":40,"value":47016},"Un autre piège courant est de concevoir des interfaces sans prendre en compte les évolutions futures du système. Quand vous ajoutez une méthode à une interface large, toutes les classes qui l’implémentent doivent être modifiées, même celles qui n’ont pas besoin de la nouvelle fonctionnalité. En adoptant des interfaces spécifiques dès le départ, vous minimisez ce type de problème et vous rendez votre code plus évolutif.",{"type":30,"tag":964,"props":47018,"children":47019},{},[47020],{"type":30,"tag":43,"props":47021,"children":47022},{},[47023,47027],{"type":30,"tag":36,"props":47024,"children":47025},{},[47026],{"type":40,"value":44522},{"type":40,"value":47028}," : Lorsque vous ajoutez une nouvelle fonctionnalité, vérifiez si elle doit vraiment être implémentée par toutes les classes existantes. Si ce n'est pas le cas, il est probablement préférable de créer une nouvelle interface.",{"type":30,"tag":84,"props":47030,"children":47031},{},[],{"type":30,"tag":31,"props":47033,"children":47035},{"id":47034},"faq-sur-le-principe-isp-interface-segregation-principle",[47036],{"type":40,"value":47037},"FAQ sur le principe ISP (Interface Segregation Principle)",{"type":30,"tag":530,"props":47039,"children":47040},{},[47041,47046],{"type":30,"tag":534,"props":47042,"children":47043},{},[47044],{"type":40,"value":47045},"1. Qu’est-ce que le principe de séparation d’interface (ISP) en quelques mots ?",{"type":30,"tag":43,"props":47047,"children":47048},{},[47049],{"type":40,"value":47050},"Le principe de séparation d’interface (ISP) stipule qu’une interface ne doit pas forcer une classe à implémenter des méthodes dont elle n’a pas besoin. Cela signifie que chaque interface doit être spécialisée et conçue pour répondre à un rôle ou une responsabilité précise, plutôt que d’essayer de tout englober.",{"type":30,"tag":530,"props":47052,"children":47053},{},[47054,47059],{"type":30,"tag":534,"props":47055,"children":47056},{},[47057],{"type":40,"value":47058},"2. Pourquoi est-ce important de respecter ISP ?",{"type":30,"tag":43,"props":47060,"children":47061},{},[47062],{"type":40,"value":47063},"Respecter ISP améliore la maintenabilité, la flexibilité et la réutilisabilité de votre code. Si une interface est trop large, cela entraîne un couplage élevé entre les classes, rendant le code difficile à modifier et à tester. Avec ISP, chaque classe n’implémente que les fonctionnalités dont elle a besoin, ce qui rend votre système plus modulaire.",{"type":30,"tag":530,"props":47065,"children":47066},{},[47067,47072],{"type":30,"tag":534,"props":47068,"children":47069},{},[47070],{"type":40,"value":47071},"3. Comment puis-je savoir qu’une interface est trop large ?",{"type":30,"tag":43,"props":47073,"children":47074},{},[47075,47077,47082],{"type":40,"value":47076},"Si vous vous retrouvez à implémenter des méthodes dont votre classe n’a pas besoin ou à lever des exceptions du type ",{"type":30,"tag":1042,"props":47078,"children":47080},{"className":47079},[],[47081],{"type":40,"value":44979},{"type":40,"value":47083},", c’est un signe que votre interface est trop large. De plus, si vous êtes obligé de modifier plusieurs classes à chaque fois que vous ajoutez ou modifiez une méthode dans une interface, cela signifie probablement que cette interface regroupe trop de responsabilités.",{"type":30,"tag":530,"props":47085,"children":47086},{},[47087,47092],{"type":30,"tag":534,"props":47088,"children":47089},{},[47090],{"type":40,"value":47091},"4. Combien d’interfaces devrais-je créer ?",{"type":30,"tag":43,"props":47093,"children":47094},{},[47095],{"type":40,"value":47096},"Il n’y a pas de nombre exact d’interfaces à créer. Le principe est de diviser les interfaces de manière à ce qu’elles soient aussi spécifiques que nécessaire, mais pas au point de devenir inutiles ou trop fragmentées. Le but est d’atteindre un équilibre entre la spécificité et la simplicité.",{"type":30,"tag":530,"props":47098,"children":47099},{},[47100,47105],{"type":30,"tag":534,"props":47101,"children":47102},{},[47103],{"type":40,"value":47104},"5. Quelles sont les différences entre ISP et le principe de responsabilité unique (SRP) ?",{"type":30,"tag":43,"props":47106,"children":47107},{},[47108,47110,47114],{"type":40,"value":47109},"ISP et SRP se ressemblent dans l’idée de limiter les responsabilités, mais ils s’appliquent à différents niveaux. SRP concerne le fait qu’une classe ne devrait avoir qu’une seule raison de changer, tandis qu’ISP se focalise sur le fait qu’une interface ne devrait contenir que des méthodes pertinentes pour les classes qui l’implémentent. Les deux principes se complètent : des interfaces bien segmentées facilitent l’application du ",{"type":30,"tag":75,"props":47111,"children":47112},{"href":18825},[47113],{"type":40,"value":18828},{"type":40,"value":47115},", car les modules de haut niveau peuvent dépendre d’abstractions précises plutôt que de contrats fourre-tout.",{"type":30,"tag":530,"props":47117,"children":47118},{},[47119,47124],{"type":30,"tag":534,"props":47120,"children":47121},{},[47122],{"type":40,"value":47123},"6. Quel est le lien entre ISP et les autres principes SOLID ?",{"type":30,"tag":43,"props":47125,"children":47126},{},[47127],{"type":40,"value":47128},"ISP fait partie des cinq principes SOLID, qui sont conçus pour améliorer la qualité du code orienté objet. Il est étroitement lié au principe SRP, car ils cherchent tous deux à réduire la complexité du code en limitant les responsabilités. L’ISP aide aussi à réduire le couplage, ce qui est un objectif clé du principe de l’inversion des dépendances (DIP).",{"type":30,"tag":530,"props":47130,"children":47131},{},[47132,47137],{"type":30,"tag":534,"props":47133,"children":47134},{},[47135],{"type":40,"value":47136},"7. Quels sont les avantages d’ISP pour les tests unitaires ?",{"type":30,"tag":43,"props":47138,"children":47139},{},[47140],{"type":40,"value":47141},"En séparant les interfaces selon leurs responsabilités spécifiques, vous simplifiez les tests unitaires. Comme les classes n’implémentent que ce dont elles ont besoin, il est plus facile de simuler des comportements (via des mocks ou des stubs) et de tester chaque fonctionnalité de manière isolée, sans se soucier des autres méthodes inutiles.",{"type":30,"tag":530,"props":47143,"children":47144},{},[47145,47150],{"type":30,"tag":534,"props":47146,"children":47147},{},[47148],{"type":40,"value":47149},"8. Comment appliquer ISP dans des projets existants sans tout refactorer ?",{"type":30,"tag":43,"props":47151,"children":47152},{},[47153],{"type":40,"value":47154},"Vous pouvez appliquer ISP progressivement dans un projet existant. Commencez par identifier les interfaces trop larges qui causent le plus de problèmes, puis divisez-les en interfaces plus spécifiques. Vous pouvez également adopter ISP lors de la création de nouvelles fonctionnalités, sans forcément refactorer l’intégralité du projet d’un coup.",{"type":30,"tag":530,"props":47156,"children":47157},{},[47158,47163],{"type":30,"tag":534,"props":47159,"children":47160},{},[47161],{"type":40,"value":47162},"9. Peut-on respecter ISP dans des langages autres que Java ?",{"type":30,"tag":43,"props":47164,"children":47165},{},[47166],{"type":40,"value":47167},"Oui, ISP est un principe général du développement orienté objet, donc vous pouvez l’appliquer dans la plupart des langages orientés objet, comme C#, Python, ou même C++. Bien que l’implémentation diffère légèrement selon le langage, l’idée reste la même : garder les interfaces petites et spécifiques.",{"type":30,"tag":84,"props":47169,"children":47170},{},[],{"type":30,"tag":43,"props":47172,"children":47173},{},[47174,47176,47181],{"type":40,"value":47175},"En suivant ces conseils et en évitant les erreurs courantes, vous pourrez tirer le meilleur parti du ",{"type":30,"tag":36,"props":47177,"children":47178},{},[47179],{"type":40,"value":47180},"principe de séparation d'interface (ISP)",{"type":40,"value":47182}," et écrire un code modulaire, maintenable et facile à tester.",{"type":30,"tag":84,"props":47184,"children":47185},{},[],{"type":30,"tag":211,"props":47187,"children":47188},{"cta":19356,"href":639,"title":19357,"type":641},[47189],{"type":30,"tag":43,"props":47190,"children":47191},{},[47192],{"type":40,"value":19363},{"type":30,"tag":6456,"props":47194,"children":47195},{},[47196],{"type":40,"value":6460},{"title":8,"searchDepth":675,"depth":675,"links":47198},[47199,47205,47210,47216],{"id":44453,"depth":675,"text":44456,"children":47200},[47201,47202,47203,47204],{"id":44475,"depth":681,"text":44478},{"id":44527,"depth":681,"text":44530},{"id":44560,"depth":681,"text":44563},{"id":44571,"depth":681,"text":44574},{"id":44598,"depth":675,"text":44601,"children":47206},[47207,47208,47209],{"id":44609,"depth":681,"text":44612},{"id":44984,"depth":681,"text":44987},{"id":45540,"depth":681,"text":45543},{"id":46328,"depth":675,"text":46331,"children":47211},[47212,47213,47214,47215],{"id":46339,"depth":681,"text":46342},{"id":46528,"depth":681,"text":46531},{"id":46656,"depth":681,"text":46659},{"id":47008,"depth":681,"text":47011},{"id":47034,"depth":675,"text":47037},"content:fr:architecture-craft:principe-isp-software-craftsmanship-exemples-java.md","fr/architecture-craft/principe-isp-software-craftsmanship-exemples-java.md","fr/architecture-craft/principe-isp-software-craftsmanship-exemples-java",{"_path":31251,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":47221,"description":47222,"id":10437,"date":47223,"listed":13,"hidden":7,"nocomments":7,"categories":47224,"tags":47226,"--cover":47228,"readingTime":47229,"body":47233,"_type":709,"_id":51197,"_source":711,"_file":51198,"_stem":51199,"_extension":714},"Découvrir les frameworks de tests en Java, Types, exemples et guide complet","Découvrez pourquoi les frameworks de tests sont indispensables pour les développeurs Java. Explorez les types de tests, des exemples concrets avec...","2024-03-14",[47225],"tests-automatises-et-software-craftsmanship",[47227,726],"Tests automatises","covers/articles/frameworks-de-tests.jpg",{"text":16757,"minutes":47230,"time":47231,"words":47232},8.43,505800,1686,{"type":27,"children":47234,"toc":51189},[47235,47244,47249,47261,47272,47275,47284,47289,47301,47311,47316,47328,47338,47343,47353,47371,47389,47392,47401,47406,47415,47432,47438,47754,47767,47777,47800,47806,48235,48245,48257,48263,49024,49049,49052,49061,49066,49076,49085,49091,49399,49409,49418,49424,49709,49719,49728,49734,50283,50292,50302,50311,50317,50817,50820,50829,50834,50844,50888,50898,50954,50964,50994,51006,51016,51044,51054,51076,51079,51086,51099,51116,51139,51158,51177,51185],{"type":30,"tag":116,"props":47236,"children":47238},{"id":47237},"découvrir-limportance-et-les-différents-types-de-frameworks-de-tests-pour-les-développeurs-de-logiciels",[47239],{"type":30,"tag":36,"props":47240,"children":47241},{},[47242],{"type":40,"value":47243},"Découvrir l'importance et les différents types de frameworks de tests pour les développeurs de logiciels",{"type":30,"tag":43,"props":47245,"children":47246},{},[47247],{"type":40,"value":47248},"En tant que développeur, vous vous êtes probablement déjà retrouvé dans une situation où vous étiez sûr que tout fonctionnait correctement, jusqu'à ce qu'un bug inattendu apparaisse après la livraison. Ce genre de surprise peut être frustrant, surtout quand il aurait pu être évité avec de meilleurs tests. Les tests logiciels ne sont pas seulement une option, ils sont indispensables pour garantir la stabilité de votre application à long terme. Cependant, tester manuellement chaque fonctionnalité devient vite une tâche insurmontable, surtout à mesure que votre projet grandit.",{"type":30,"tag":43,"props":47250,"children":47251},{},[47252,47254,47259],{"type":40,"value":47253},"C'est ici que les ",{"type":30,"tag":36,"props":47255,"children":47256},{},[47257],{"type":40,"value":47258},"frameworks de tests",{"type":40,"value":47260}," entrent en jeu. Ces outils vous permettent d'automatiser les tests, réduisant ainsi les erreurs humaines, tout en rendant votre processus de développement plus efficace. En tant que développeur Java, vous avez à votre disposition une multitude de frameworks puissants pour différents types de tests : unitaires, d'intégration, ou encore fonctionnels. Mais comment choisir celui qui vous convient le mieux ? Et surtout, comment les utiliser efficacement dans votre projet ?",{"type":30,"tag":43,"props":47262,"children":47263},{},[47264,47266,47270],{"type":40,"value":47265},"Je vais vous expliquer ici ",{"type":30,"tag":36,"props":47267,"children":47268},{},[47269],{"type":40,"value":30079},{"type":40,"value":47271}," les frameworks de tests sont si importants, vous présenter les principaux types de tests, et vous montrer des exemples concrets en Java. À la fin, vous aurez une meilleure vision pour choisir le framework le plus adapté à vos besoins.",{"type":30,"tag":84,"props":47273,"children":47274},{},[],{"type":30,"tag":116,"props":47276,"children":47278},{"id":47277},"frameworks-de-tests-pourquoi-en-utiliser-un",[47279],{"type":30,"tag":36,"props":47280,"children":47281},{},[47282],{"type":40,"value":47283},"Frameworks de tests : Pourquoi en utiliser un ?",{"type":30,"tag":43,"props":47285,"children":47286},{},[47287],{"type":40,"value":47288},"En tant que développeur, vous passez une grande partie de votre temps à écrire du code, mais sans tests automatisés, vous êtes probablement contraint de tester manuellement chaque nouvelle fonctionnalité ou correction de bug. C'est non seulement inefficace, mais cela devient rapidement un cauchemar à mesure que votre projet se complexifie.",{"type":30,"tag":43,"props":47290,"children":47291},{},[47292,47294,47299],{"type":40,"value":47293},"Voici ",{"type":30,"tag":36,"props":47295,"children":47296},{},[47297],{"type":40,"value":47298},"trois raisons principales",{"type":40,"value":47300}," pour lesquelles l'utilisation d'un framework de tests est essentielle :",{"type":30,"tag":2339,"props":47302,"children":47304},{"id":47303},"_1-automatisation-des-tests",[47305,47306],{"type":40,"value":242},{"type":30,"tag":36,"props":47307,"children":47308},{},[47309],{"type":40,"value":47310},"Automatisation des tests",{"type":30,"tag":43,"props":47312,"children":47313},{},[47314],{"type":40,"value":47315},"Les frameworks vous permettent d'automatiser le processus de test. Plutôt que de lancer manuellement votre application, de vérifier les fonctionnalités une par une et de noter les résultats, un framework de tests peut exécuter automatiquement des dizaines, voire des centaines de tests en quelques secondes. Cela vous libère du temps pour vous concentrer sur l'écriture de nouvelles fonctionnalités, tout en assurant que votre code reste stable.",{"type":30,"tag":964,"props":47317,"children":47318},{},[47319],{"type":30,"tag":43,"props":47320,"children":47321},{},[47322,47326],{"type":30,"tag":36,"props":47323,"children":47324},{},[47325],{"type":40,"value":19675},{"type":40,"value":47327}," : Intégrez les tests dans votre workflow de développement dès le début. Plus tôt vous automatisez les tests, plus vous réduisez les risques de bugs en production.",{"type":30,"tag":2339,"props":47329,"children":47331},{"id":47330},"_2-détection-rapide-des-bugs",[47332,47333],{"type":40,"value":268},{"type":30,"tag":36,"props":47334,"children":47335},{},[47336],{"type":40,"value":47337},"Détection rapide des bugs",{"type":30,"tag":43,"props":47339,"children":47340},{},[47341],{"type":40,"value":47342},"Les tests automatisés permettent d’attraper rapidement les régressions ou les bugs introduits lors de nouvelles modifications. Chaque fois que vous modifiez votre code, il y a un risque que cela casse quelque chose ailleurs. Grâce aux tests, vous pouvez instantanément savoir si une modification impacte d’autres parties du projet, et cela bien avant que ces bugs n’atteignent la production. Dans mes missions chez des grandes DSI, j’ai observé que l’absence de tests automatisés se traduit concrètement par un allongement du time-to-market de 30 à 50 %, les équipes passant une part croissante de leur capacité à gérer des régressions plutôt qu’à livrer de la valeur.",{"type":30,"tag":2339,"props":47344,"children":47346},{"id":47345},"_3-amélioration-de-la-qualité-du-code",[47347,47348],{"type":40,"value":293},{"type":30,"tag":36,"props":47349,"children":47350},{},[47351],{"type":40,"value":47352},"Amélioration de la qualité du code",{"type":30,"tag":43,"props":47354,"children":47355},{},[47356,47358,47363,47365,47369],{"type":40,"value":47357},"Le fait d’écrire des tests pousse à mieux structurer et modulariser votre code. Un code facilement testable est souvent plus propre, plus clair et mieux organisé. Les frameworks de tests favorisent ainsi des pratiques de développement comme le ",{"type":30,"tag":36,"props":47359,"children":47360},{},[47361],{"type":40,"value":47362},"TDD (Test Driven Development)",{"type":40,"value":47364},", popularisé par Kent Beck dans son ouvrage \"Test-Driven Development by Example\", où vous écrivez d’abord vos tests avant d’implémenter la fonctionnalité. Pour aller plus loin sur la qualité, une ",{"type":30,"tag":75,"props":47366,"children":47367},{"href":30598},[47368],{"type":40,"value":30601},{"type":40,"value":47370}," solide exige des tests automatisés comme critère non-négociable.",{"type":30,"tag":964,"props":47372,"children":47373},{},[47374],{"type":30,"tag":43,"props":47375,"children":47376},{},[47377,47381,47383,47387],{"type":30,"tag":36,"props":47378,"children":47379},{},[47380],{"type":40,"value":19675},{"type":40,"value":47382}," : Le ",{"type":30,"tag":36,"props":47384,"children":47385},{},[47386],{"type":40,"value":32614},{"type":40,"value":47388}," peut sembler contre-intuitif au début, mais il est très efficace à long terme. Essayez d’écrire un petit test avant d’écrire la fonctionnalité : vous verrez que ça force à réfléchir en profondeur sur le comportement attendu.",{"type":30,"tag":84,"props":47390,"children":47391},{},[],{"type":30,"tag":116,"props":47393,"children":47395},{"id":47394},"les-différents-types-de-frameworks-de-tests",[47396],{"type":30,"tag":36,"props":47397,"children":47398},{},[47399],{"type":40,"value":47400},"Les différents types de frameworks de tests",{"type":30,"tag":43,"props":47402,"children":47403},{},[47404],{"type":40,"value":47405},"Il existe plusieurs types de tests, chacun ayant un rôle spécifique dans le développement logiciel. En fonction de ce que vous souhaitez tester (une petite portion de code ou tout un système), vous choisirez un type de test particulier. Voici les principaux types de tests utilisés par les développeurs, ainsi que les frameworks correspondants pour chaque type.",{"type":30,"tag":2339,"props":47407,"children":47409},{"id":47408},"_1-tests-unitaires",[47410,47411],{"type":40,"value":242},{"type":30,"tag":36,"props":47412,"children":47413},{},[47414],{"type":40,"value":23953},{"type":30,"tag":43,"props":47416,"children":47417},{},[47418,47420,47424,47425,47430],{"type":40,"value":47419},"Les tests unitaires se concentrent sur de petites portions de votre code, généralement des fonctions ou des méthodes individuelles. L'idée est de s'assurer que chaque unité fonctionne correctement de manière isolée. En Java, ",{"type":30,"tag":36,"props":47421,"children":47422},{},[47423],{"type":40,"value":12965},{"type":40,"value":8328},{"type":30,"tag":36,"props":47426,"children":47427},{},[47428],{"type":40,"value":47429},"TestNG",{"type":40,"value":47431}," sont deux des frameworks les plus populaires pour effectuer des tests unitaires.",{"type":30,"tag":43737,"props":47433,"children":47435},{"id":47434},"exemple-de-test-unitaire-avec-junit",[47436],{"type":40,"value":47437},"Exemple de test unitaire avec JUnit :",{"type":30,"tag":1035,"props":47439,"children":47441},{"className":1039,"code":47440,"language":1038,"meta":8,"style":8},"import org.junit.jupiter.api.Test;\nimport static org.junit.jupiter.api.Assertions.assertEquals;\n\npublic class CalculatriceTest {\n\n    @Test\n    public void testAddition() {\n        Calculatrice calc = new Calculatrice();\n        int resultat = calc.addition(2, 3);\n        assertEquals(5, resultat, \"L'addition de 2 et 3 devrait être 5\");\n    }\n}\n",[47442],{"type":30,"tag":1042,"props":47443,"children":47444},{"__ignoreMap":8},[47445,47494,47554,47561,47581,47588,47599,47623,47652,47702,47740,47747],{"type":30,"tag":1046,"props":47446,"children":47447},{"class":1048,"line":1049},[47448,47452,47456,47460,47464,47468,47473,47477,47482,47486,47490],{"type":30,"tag":1046,"props":47449,"children":47450},{"style":1053},[47451],{"type":40,"value":9107},{"type":30,"tag":1046,"props":47453,"children":47454},{"style":1105},[47455],{"type":40,"value":9431},{"type":30,"tag":1046,"props":47457,"children":47458},{"style":1070},[47459],{"type":40,"value":1179},{"type":30,"tag":1046,"props":47461,"children":47462},{"style":1105},[47463],{"type":40,"value":26555},{"type":30,"tag":1046,"props":47465,"children":47466},{"style":1070},[47467],{"type":40,"value":1179},{"type":30,"tag":1046,"props":47469,"children":47470},{"style":1105},[47471],{"type":40,"value":47472},"jupiter",{"type":30,"tag":1046,"props":47474,"children":47475},{"style":1070},[47476],{"type":40,"value":1179},{"type":30,"tag":1046,"props":47478,"children":47479},{"style":1105},[47480],{"type":40,"value":47481},"api",{"type":30,"tag":1046,"props":47483,"children":47484},{"style":1070},[47485],{"type":40,"value":1179},{"type":30,"tag":1046,"props":47487,"children":47488},{"style":1105},[47489],{"type":40,"value":26605},{"type":30,"tag":1046,"props":47491,"children":47492},{"style":1070},[47493],{"type":40,"value":1113},{"type":30,"tag":1046,"props":47495,"children":47496},{"class":1048,"line":675},[47497,47501,47505,47509,47513,47517,47521,47525,47529,47533,47537,47542,47546,47550],{"type":30,"tag":1046,"props":47498,"children":47499},{"style":1053},[47500],{"type":40,"value":9107},{"type":30,"tag":1046,"props":47502,"children":47503},{"style":1053},[47504],{"type":40,"value":12363},{"type":30,"tag":1046,"props":47506,"children":47507},{"style":1105},[47508],{"type":40,"value":9431},{"type":30,"tag":1046,"props":47510,"children":47511},{"style":1070},[47512],{"type":40,"value":1179},{"type":30,"tag":1046,"props":47514,"children":47515},{"style":1105},[47516],{"type":40,"value":26555},{"type":30,"tag":1046,"props":47518,"children":47519},{"style":1070},[47520],{"type":40,"value":1179},{"type":30,"tag":1046,"props":47522,"children":47523},{"style":1105},[47524],{"type":40,"value":47472},{"type":30,"tag":1046,"props":47526,"children":47527},{"style":1070},[47528],{"type":40,"value":1179},{"type":30,"tag":1046,"props":47530,"children":47531},{"style":1105},[47532],{"type":40,"value":47481},{"type":30,"tag":1046,"props":47534,"children":47535},{"style":1070},[47536],{"type":40,"value":1179},{"type":30,"tag":1046,"props":47538,"children":47539},{"style":1105},[47540],{"type":40,"value":47541},"Assertions",{"type":30,"tag":1046,"props":47543,"children":47544},{"style":1070},[47545],{"type":40,"value":1179},{"type":30,"tag":1046,"props":47547,"children":47548},{"style":1105},[47549],{"type":40,"value":26573},{"type":30,"tag":1046,"props":47551,"children":47552},{"style":1070},[47553],{"type":40,"value":1113},{"type":30,"tag":1046,"props":47555,"children":47556},{"class":1048,"line":681},[47557],{"type":30,"tag":1046,"props":47558,"children":47559},{"emptyLinePlaceholder":13},[47560],{"type":40,"value":1121},{"type":30,"tag":1046,"props":47562,"children":47563},{"class":1048,"line":1124},[47564,47568,47572,47577],{"type":30,"tag":1046,"props":47565,"children":47566},{"style":1053},[47567],{"type":40,"value":1056},{"type":30,"tag":1046,"props":47569,"children":47570},{"style":1053},[47571],{"type":40,"value":1061},{"type":30,"tag":1046,"props":47573,"children":47574},{"style":1064},[47575],{"type":40,"value":47576}," CalculatriceTest",{"type":30,"tag":1046,"props":47578,"children":47579},{"style":1070},[47580],{"type":40,"value":1073},{"type":30,"tag":1046,"props":47582,"children":47583},{"class":1048,"line":1168},[47584],{"type":30,"tag":1046,"props":47585,"children":47586},{"emptyLinePlaceholder":13},[47587],{"type":40,"value":1121},{"type":30,"tag":1046,"props":47589,"children":47590},{"class":1048,"line":1201},[47591,47595],{"type":30,"tag":1046,"props":47592,"children":47593},{"style":1647},[47594],{"type":40,"value":1828},{"type":30,"tag":1046,"props":47596,"children":47597},{"style":1653},[47598],{"type":40,"value":13736},{"type":30,"tag":1046,"props":47600,"children":47601},{"class":1048,"line":1210},[47602,47606,47610,47615,47619],{"type":30,"tag":1046,"props":47603,"children":47604},{"style":1053},[47605],{"type":40,"value":1130},{"type":30,"tag":1046,"props":47607,"children":47608},{"style":1053},[47609],{"type":40,"value":1135},{"type":30,"tag":1046,"props":47611,"children":47612},{"style":1138},[47613],{"type":40,"value":47614}," testAddition",{"type":30,"tag":1046,"props":47616,"children":47617},{"style":1070},[47618],{"type":40,"value":1320},{"type":30,"tag":1046,"props":47620,"children":47621},{"style":1070},[47622],{"type":40,"value":1073},{"type":30,"tag":1046,"props":47624,"children":47625},{"class":1048,"line":1218},[47626,47631,47635,47639,47643,47648],{"type":30,"tag":1046,"props":47627,"children":47628},{"style":1084},[47629],{"type":40,"value":47630},"        Calculatrice",{"type":30,"tag":1046,"props":47632,"children":47633},{"style":1105},[47634],{"type":40,"value":32686},{"type":30,"tag":1046,"props":47636,"children":47637},{"style":1795},[47638],{"type":40,"value":1798},{"type":30,"tag":1046,"props":47640,"children":47641},{"style":1053},[47642],{"type":40,"value":2480},{"type":30,"tag":1046,"props":47644,"children":47645},{"style":1138},[47646],{"type":40,"value":47647}," Calculatrice",{"type":30,"tag":1046,"props":47649,"children":47650},{"style":1070},[47651],{"type":40,"value":1406},{"type":30,"tag":1046,"props":47653,"children":47654},{"class":1048,"line":1255},[47655,47660,47665,47669,47673,47677,47682,47686,47690,47694,47698],{"type":30,"tag":1046,"props":47656,"children":47657},{"style":1053},[47658],{"type":40,"value":47659},"        int",{"type":30,"tag":1046,"props":47661,"children":47662},{"style":1105},[47663],{"type":40,"value":47664}," resultat ",{"type":30,"tag":1046,"props":47666,"children":47667},{"style":1795},[47668],{"type":40,"value":1798},{"type":30,"tag":1046,"props":47670,"children":47671},{"style":1105},[47672],{"type":40,"value":32800},{"type":30,"tag":1046,"props":47674,"children":47675},{"style":1070},[47676],{"type":40,"value":1179},{"type":30,"tag":1046,"props":47678,"children":47679},{"style":1138},[47680],{"type":40,"value":47681},"addition",{"type":30,"tag":1046,"props":47683,"children":47684},{"style":1070},[47685],{"type":40,"value":1146},{"type":30,"tag":1046,"props":47687,"children":47688},{"style":6886},[47689],{"type":40,"value":10197},{"type":30,"tag":1046,"props":47691,"children":47692},{"style":1070},[47693],{"type":40,"value":2891},{"type":30,"tag":1046,"props":47695,"children":47696},{"style":6886},[47697],{"type":40,"value":29352},{"type":30,"tag":1046,"props":47699,"children":47700},{"style":1070},[47701],{"type":40,"value":1198},{"type":30,"tag":1046,"props":47703,"children":47704},{"class":1048,"line":1284},[47705,47709,47713,47718,47722,47727,47731,47736],{"type":30,"tag":1046,"props":47706,"children":47707},{"style":1138},[47708],{"type":40,"value":26812},{"type":30,"tag":1046,"props":47710,"children":47711},{"style":1070},[47712],{"type":40,"value":1146},{"type":30,"tag":1046,"props":47714,"children":47715},{"style":6886},[47716],{"type":40,"value":47717},"5",{"type":30,"tag":1046,"props":47719,"children":47720},{"style":1070},[47721],{"type":40,"value":2891},{"type":30,"tag":1046,"props":47723,"children":47724},{"style":1105},[47725],{"type":40,"value":47726}," resultat",{"type":30,"tag":1046,"props":47728,"children":47729},{"style":1070},[47730],{"type":40,"value":2891},{"type":30,"tag":1046,"props":47732,"children":47733},{"style":1675},[47734],{"type":40,"value":47735}," \"L'addition de 2 et 3 devrait être 5\"",{"type":30,"tag":1046,"props":47737,"children":47738},{"style":1070},[47739],{"type":40,"value":1198},{"type":30,"tag":1046,"props":47741,"children":47742},{"class":1048,"line":1292},[47743],{"type":30,"tag":1046,"props":47744,"children":47745},{"style":1070},[47746],{"type":40,"value":1207},{"type":30,"tag":1046,"props":47748,"children":47749},{"class":1048,"line":1300},[47750],{"type":30,"tag":1046,"props":47751,"children":47752},{"style":1070},[47753],{"type":40,"value":1423},{"type":30,"tag":964,"props":47755,"children":47756},{},[47757],{"type":30,"tag":43,"props":47758,"children":47759},{},[47760,47765],{"type":30,"tag":36,"props":47761,"children":47762},{},[47763],{"type":40,"value":47764},"ALERT",{"type":40,"value":47766}," : Il est crucial de tester toutes les branches de votre code, même celles qui semblent rarement utilisées. Par exemple, n'oubliez pas de tester les exceptions et les cas limites.",{"type":30,"tag":2339,"props":47768,"children":47770},{"id":47769},"_2-tests-dintégration",[47771,47772],{"type":40,"value":268},{"type":30,"tag":36,"props":47773,"children":47774},{},[47775],{"type":40,"value":47776},"Tests d'intégration",{"type":30,"tag":43,"props":47778,"children":47779},{},[47780,47781,47786,47788,47793,47794,47799],{"type":40,"value":13695},{"type":30,"tag":75,"props":47782,"children":47783},{"href":13698},[47784],{"type":40,"value":47785},"tests d'intégration",{"type":40,"value":47787}," vérifient que différentes parties de votre application fonctionnent bien ensemble. Contrairement aux tests unitaires, qui se concentrent sur des morceaux isolés, les tests d'intégration s'assurent que les interactions entre modules sont correctes. Pour ce type de tests, vous pouvez utiliser des outils comme ",{"type":30,"tag":36,"props":47789,"children":47790},{},[47791],{"type":40,"value":47792},"Spring Test",{"type":40,"value":1573},{"type":30,"tag":36,"props":47795,"children":47796},{},[47797],{"type":40,"value":47798},"Arquillian",{"type":40,"value":1179},{"type":30,"tag":43737,"props":47801,"children":47803},{"id":47802},"exemple-de-test-dintégration-avec-spring",[47804],{"type":40,"value":47805},"Exemple de test d'intégration avec Spring :",{"type":30,"tag":1035,"props":47807,"children":47809},{"className":1039,"code":47808,"language":1038,"meta":8,"style":8},"import org.junit.jupiter.api.Test;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.boot.test.context.SpringBootTest;\n\n@SpringBootTest\npublic class ApplicationIntegrationTest {\n\n    @Autowired\n    private UserService userService;\n\n    @Test\n    public void testCreerUtilisateur() {\n        User user = new User(\"John\", \"Doe\");\n        User savedUser = userService.creerUtilisateur(user);\n        assertNotNull(savedUser.getId(), \"L'utilisateur devrait avoir un ID après l'enregistrement\");\n    }\n}\n",[47810],{"type":30,"tag":1042,"props":47811,"children":47812},{"__ignoreMap":8},[47813,47860,47918,47976,47983,47995,48015,48022,48033,48054,48061,48072,48096,48141,48182,48221,48228],{"type":30,"tag":1046,"props":47814,"children":47815},{"class":1048,"line":1049},[47816,47820,47824,47828,47832,47836,47840,47844,47848,47852,47856],{"type":30,"tag":1046,"props":47817,"children":47818},{"style":1053},[47819],{"type":40,"value":9107},{"type":30,"tag":1046,"props":47821,"children":47822},{"style":1105},[47823],{"type":40,"value":9431},{"type":30,"tag":1046,"props":47825,"children":47826},{"style":1070},[47827],{"type":40,"value":1179},{"type":30,"tag":1046,"props":47829,"children":47830},{"style":1105},[47831],{"type":40,"value":26555},{"type":30,"tag":1046,"props":47833,"children":47834},{"style":1070},[47835],{"type":40,"value":1179},{"type":30,"tag":1046,"props":47837,"children":47838},{"style":1105},[47839],{"type":40,"value":47472},{"type":30,"tag":1046,"props":47841,"children":47842},{"style":1070},[47843],{"type":40,"value":1179},{"type":30,"tag":1046,"props":47845,"children":47846},{"style":1105},[47847],{"type":40,"value":47481},{"type":30,"tag":1046,"props":47849,"children":47850},{"style":1070},[47851],{"type":40,"value":1179},{"type":30,"tag":1046,"props":47853,"children":47854},{"style":1105},[47855],{"type":40,"value":26605},{"type":30,"tag":1046,"props":47857,"children":47858},{"style":1070},[47859],{"type":40,"value":1113},{"type":30,"tag":1046,"props":47861,"children":47862},{"class":1048,"line":675},[47863,47867,47871,47875,47879,47883,47888,47892,47897,47901,47905,47909,47914],{"type":30,"tag":1046,"props":47864,"children":47865},{"style":1053},[47866],{"type":40,"value":9107},{"type":30,"tag":1046,"props":47868,"children":47869},{"style":1105},[47870],{"type":40,"value":9431},{"type":30,"tag":1046,"props":47872,"children":47873},{"style":1070},[47874],{"type":40,"value":1179},{"type":30,"tag":1046,"props":47876,"children":47877},{"style":1105},[47878],{"type":40,"value":9440},{"type":30,"tag":1046,"props":47880,"children":47881},{"style":1070},[47882],{"type":40,"value":1179},{"type":30,"tag":1046,"props":47884,"children":47885},{"style":1105},[47886],{"type":40,"value":47887},"beans",{"type":30,"tag":1046,"props":47889,"children":47890},{"style":1070},[47891],{"type":40,"value":1179},{"type":30,"tag":1046,"props":47893,"children":47894},{"style":1105},[47895],{"type":40,"value":47896},"factory",{"type":30,"tag":1046,"props":47898,"children":47899},{"style":1070},[47900],{"type":40,"value":1179},{"type":30,"tag":1046,"props":47902,"children":47903},{"style":1105},[47904],{"type":40,"value":9467},{"type":30,"tag":1046,"props":47906,"children":47907},{"style":1070},[47908],{"type":40,"value":1179},{"type":30,"tag":1046,"props":47910,"children":47911},{"style":1105},[47912],{"type":40,"value":47913},"Autowired",{"type":30,"tag":1046,"props":47915,"children":47916},{"style":1070},[47917],{"type":40,"value":1113},{"type":30,"tag":1046,"props":47919,"children":47920},{"class":1048,"line":681},[47921,47925,47929,47933,47937,47941,47946,47950,47954,47958,47963,47967,47972],{"type":30,"tag":1046,"props":47922,"children":47923},{"style":1053},[47924],{"type":40,"value":9107},{"type":30,"tag":1046,"props":47926,"children":47927},{"style":1105},[47928],{"type":40,"value":9431},{"type":30,"tag":1046,"props":47930,"children":47931},{"style":1070},[47932],{"type":40,"value":1179},{"type":30,"tag":1046,"props":47934,"children":47935},{"style":1105},[47936],{"type":40,"value":9440},{"type":30,"tag":1046,"props":47938,"children":47939},{"style":1070},[47940],{"type":40,"value":1179},{"type":30,"tag":1046,"props":47942,"children":47943},{"style":1105},[47944],{"type":40,"value":47945},"boot",{"type":30,"tag":1046,"props":47947,"children":47948},{"style":1070},[47949],{"type":40,"value":1179},{"type":30,"tag":1046,"props":47951,"children":47952},{"style":1105},[47953],{"type":40,"value":31254},{"type":30,"tag":1046,"props":47955,"children":47956},{"style":1070},[47957],{"type":40,"value":1179},{"type":30,"tag":1046,"props":47959,"children":47960},{"style":1105},[47961],{"type":40,"value":47962},"context",{"type":30,"tag":1046,"props":47964,"children":47965},{"style":1070},[47966],{"type":40,"value":1179},{"type":30,"tag":1046,"props":47968,"children":47969},{"style":1105},[47970],{"type":40,"value":47971},"SpringBootTest",{"type":30,"tag":1046,"props":47973,"children":47974},{"style":1070},[47975],{"type":40,"value":1113},{"type":30,"tag":1046,"props":47977,"children":47978},{"class":1048,"line":1124},[47979],{"type":30,"tag":1046,"props":47980,"children":47981},{"emptyLinePlaceholder":13},[47982],{"type":40,"value":1121},{"type":30,"tag":1046,"props":47984,"children":47985},{"class":1048,"line":1168},[47986,47990],{"type":30,"tag":1046,"props":47987,"children":47988},{"style":1647},[47989],{"type":40,"value":1650},{"type":30,"tag":1046,"props":47991,"children":47992},{"style":1653},[47993],{"type":40,"value":47994},"SpringBootTest\n",{"type":30,"tag":1046,"props":47996,"children":47997},{"class":1048,"line":1201},[47998,48002,48006,48011],{"type":30,"tag":1046,"props":47999,"children":48000},{"style":1053},[48001],{"type":40,"value":1056},{"type":30,"tag":1046,"props":48003,"children":48004},{"style":1053},[48005],{"type":40,"value":1061},{"type":30,"tag":1046,"props":48007,"children":48008},{"style":1064},[48009],{"type":40,"value":48010}," ApplicationIntegrationTest",{"type":30,"tag":1046,"props":48012,"children":48013},{"style":1070},[48014],{"type":40,"value":1073},{"type":30,"tag":1046,"props":48016,"children":48017},{"class":1048,"line":1210},[48018],{"type":30,"tag":1046,"props":48019,"children":48020},{"emptyLinePlaceholder":13},[48021],{"type":40,"value":1121},{"type":30,"tag":1046,"props":48023,"children":48024},{"class":1048,"line":1218},[48025,48029],{"type":30,"tag":1046,"props":48026,"children":48027},{"style":1647},[48028],{"type":40,"value":1828},{"type":30,"tag":1046,"props":48030,"children":48031},{"style":1653},[48032],{"type":40,"value":43315},{"type":30,"tag":1046,"props":48034,"children":48035},{"class":1048,"line":1255},[48036,48040,48045,48050],{"type":30,"tag":1046,"props":48037,"children":48038},{"style":1053},[48039],{"type":40,"value":1081},{"type":30,"tag":1046,"props":48041,"children":48042},{"style":1084},[48043],{"type":40,"value":48044}," UserService",{"type":30,"tag":1046,"props":48046,"children":48047},{"style":1105},[48048],{"type":40,"value":48049}," userService",{"type":30,"tag":1046,"props":48051,"children":48052},{"style":1070},[48053],{"type":40,"value":1113},{"type":30,"tag":1046,"props":48055,"children":48056},{"class":1048,"line":1284},[48057],{"type":30,"tag":1046,"props":48058,"children":48059},{"emptyLinePlaceholder":13},[48060],{"type":40,"value":1121},{"type":30,"tag":1046,"props":48062,"children":48063},{"class":1048,"line":1292},[48064,48068],{"type":30,"tag":1046,"props":48065,"children":48066},{"style":1647},[48067],{"type":40,"value":1828},{"type":30,"tag":1046,"props":48069,"children":48070},{"style":1653},[48071],{"type":40,"value":13736},{"type":30,"tag":1046,"props":48073,"children":48074},{"class":1048,"line":1300},[48075,48079,48083,48088,48092],{"type":30,"tag":1046,"props":48076,"children":48077},{"style":1053},[48078],{"type":40,"value":1130},{"type":30,"tag":1046,"props":48080,"children":48081},{"style":1053},[48082],{"type":40,"value":1135},{"type":30,"tag":1046,"props":48084,"children":48085},{"style":1138},[48086],{"type":40,"value":48087}," testCreerUtilisateur",{"type":30,"tag":1046,"props":48089,"children":48090},{"style":1070},[48091],{"type":40,"value":1320},{"type":30,"tag":1046,"props":48093,"children":48094},{"style":1070},[48095],{"type":40,"value":1073},{"type":30,"tag":1046,"props":48097,"children":48098},{"class":1048,"line":1327},[48099,48104,48108,48112,48116,48120,48124,48128,48132,48137],{"type":30,"tag":1046,"props":48100,"children":48101},{"style":1084},[48102],{"type":40,"value":48103},"        User",{"type":30,"tag":1046,"props":48105,"children":48106},{"style":1105},[48107],{"type":40,"value":31318},{"type":30,"tag":1046,"props":48109,"children":48110},{"style":1795},[48111],{"type":40,"value":1798},{"type":30,"tag":1046,"props":48113,"children":48114},{"style":1053},[48115],{"type":40,"value":2480},{"type":30,"tag":1046,"props":48117,"children":48118},{"style":1138},[48119],{"type":40,"value":9900},{"type":30,"tag":1046,"props":48121,"children":48122},{"style":1070},[48123],{"type":40,"value":1146},{"type":30,"tag":1046,"props":48125,"children":48126},{"style":1675},[48127],{"type":40,"value":26712},{"type":30,"tag":1046,"props":48129,"children":48130},{"style":1070},[48131],{"type":40,"value":2891},{"type":30,"tag":1046,"props":48133,"children":48134},{"style":1675},[48135],{"type":40,"value":48136}," \"Doe\"",{"type":30,"tag":1046,"props":48138,"children":48139},{"style":1070},[48140],{"type":40,"value":1198},{"type":30,"tag":1046,"props":48142,"children":48143},{"class":1048,"line":1354},[48144,48148,48153,48157,48161,48165,48170,48174,48178],{"type":30,"tag":1046,"props":48145,"children":48146},{"style":1084},[48147],{"type":40,"value":48103},{"type":30,"tag":1046,"props":48149,"children":48150},{"style":1105},[48151],{"type":40,"value":48152}," savedUser ",{"type":30,"tag":1046,"props":48154,"children":48155},{"style":1795},[48156],{"type":40,"value":1798},{"type":30,"tag":1046,"props":48158,"children":48159},{"style":1105},[48160],{"type":40,"value":48049},{"type":30,"tag":1046,"props":48162,"children":48163},{"style":1070},[48164],{"type":40,"value":1179},{"type":30,"tag":1046,"props":48166,"children":48167},{"style":1138},[48168],{"type":40,"value":48169},"creerUtilisateur",{"type":30,"tag":1046,"props":48171,"children":48172},{"style":1070},[48173],{"type":40,"value":1146},{"type":30,"tag":1046,"props":48175,"children":48176},{"style":1105},[48177],{"type":40,"value":20603},{"type":30,"tag":1046,"props":48179,"children":48180},{"style":1070},[48181],{"type":40,"value":1198},{"type":30,"tag":1046,"props":48183,"children":48184},{"class":1048,"line":1391},[48185,48190,48194,48199,48203,48208,48212,48217],{"type":30,"tag":1046,"props":48186,"children":48187},{"style":1138},[48188],{"type":40,"value":48189},"        assertNotNull",{"type":30,"tag":1046,"props":48191,"children":48192},{"style":1070},[48193],{"type":40,"value":1146},{"type":30,"tag":1046,"props":48195,"children":48196},{"style":1105},[48197],{"type":40,"value":48198},"savedUser",{"type":30,"tag":1046,"props":48200,"children":48201},{"style":1070},[48202],{"type":40,"value":1179},{"type":30,"tag":1046,"props":48204,"children":48205},{"style":1138},[48206],{"type":40,"value":48207},"getId",{"type":30,"tag":1046,"props":48209,"children":48210},{"style":1070},[48211],{"type":40,"value":21310},{"type":30,"tag":1046,"props":48213,"children":48214},{"style":1675},[48215],{"type":40,"value":48216}," \"L'utilisateur devrait avoir un ID après l'enregistrement\"",{"type":30,"tag":1046,"props":48218,"children":48219},{"style":1070},[48220],{"type":40,"value":1198},{"type":30,"tag":1046,"props":48222,"children":48223},{"class":1048,"line":1409},[48224],{"type":30,"tag":1046,"props":48225,"children":48226},{"style":1070},[48227],{"type":40,"value":1207},{"type":30,"tag":1046,"props":48229,"children":48230},{"class":1048,"line":1417},[48231],{"type":30,"tag":1046,"props":48232,"children":48233},{"style":1070},[48234],{"type":40,"value":1423},{"type":30,"tag":2339,"props":48236,"children":48238},{"id":48237},"_3-tests-fonctionnels-ou-end-to-end",[48239,48240],{"type":40,"value":293},{"type":30,"tag":36,"props":48241,"children":48242},{},[48243],{"type":40,"value":48244},"Tests fonctionnels (ou end-to-end)",{"type":30,"tag":43,"props":48246,"children":48247},{},[48248,48250,48255],{"type":40,"value":48249},"Les tests fonctionnels, ou tests end-to-end, vérifient l'ensemble du système du point de vue de l'utilisateur. Ils simulent des scénarios d'utilisation complets pour s'assurer que l'application fonctionne comme prévu du début à la fin. ",{"type":30,"tag":36,"props":48251,"children":48252},{},[48253],{"type":40,"value":48254},"Selenium",{"type":40,"value":48256}," est souvent utilisé pour automatiser les tests fonctionnels des applications web.",{"type":30,"tag":43737,"props":48258,"children":48260},{"id":48259},"exemple-de-test-fonctionnel-avec-selenium",[48261],{"type":40,"value":48262},"Exemple de test fonctionnel avec Selenium :",{"type":30,"tag":1035,"props":48264,"children":48266},{"className":1039,"code":48265,"language":1038,"meta":8,"style":8},"import org.openqa.selenium.WebDriver;\nimport org.openqa.selenium.chrome.ChromeDriver;\nimport org.openqa.selenium.By;\n\npublic class LoginTest {\n\n    public static void main(String[] args) {\n        // Configurer le WebDriver pour Chrome\n        System.setProperty(\"webdriver.chrome.driver\", \"path_to_chromedriver\");\n        WebDriver driver = new ChromeDriver();\n\n        // Ouvrir la page de login\n        driver.get(\"http://monapplication.com/login\");\n\n        // Entrer les informations d'identification et se connecter\n        driver.findElement(By.id(\"username\")).sendKeys(\"monNomUtilisateur\");\n        driver.findElement(By.id(\"password\")).sendKeys(\"monMotDePasse\");\n        driver.findElement(By.id(\"loginButton\")).click();\n\n        // Vérifier que la connexion a réussi\n        String pageTitre = driver.getTitle();\n        if(pageTitre.equals(\"Tableau de bord\")) {\n            System.out.println(\"Connexion réussie !\");\n        } else {\n            System.out.println(\"Échec de la connexion.\");\n        }\n\n        // Fermer le navigateur\n        driver.quit();\n    }\n}\n",[48267],{"type":30,"tag":1042,"props":48268,"children":48269},{"__ignoreMap":8},[48270,48312,48361,48401,48408,48428,48435,48478,48486,48524,48554,48561,48569,48598,48605,48613,48677,48738,48791,48798,48806,48840,48881,48917,48932,48968,48975,48982,48990,49010,49017],{"type":30,"tag":1046,"props":48271,"children":48272},{"class":1048,"line":1049},[48273,48277,48281,48285,48290,48294,48299,48303,48308],{"type":30,"tag":1046,"props":48274,"children":48275},{"style":1053},[48276],{"type":40,"value":9107},{"type":30,"tag":1046,"props":48278,"children":48279},{"style":1105},[48280],{"type":40,"value":9431},{"type":30,"tag":1046,"props":48282,"children":48283},{"style":1070},[48284],{"type":40,"value":1179},{"type":30,"tag":1046,"props":48286,"children":48287},{"style":1105},[48288],{"type":40,"value":48289},"openqa",{"type":30,"tag":1046,"props":48291,"children":48292},{"style":1070},[48293],{"type":40,"value":1179},{"type":30,"tag":1046,"props":48295,"children":48296},{"style":1105},[48297],{"type":40,"value":48298},"selenium",{"type":30,"tag":1046,"props":48300,"children":48301},{"style":1070},[48302],{"type":40,"value":1179},{"type":30,"tag":1046,"props":48304,"children":48305},{"style":1105},[48306],{"type":40,"value":48307},"WebDriver",{"type":30,"tag":1046,"props":48309,"children":48310},{"style":1070},[48311],{"type":40,"value":1113},{"type":30,"tag":1046,"props":48313,"children":48314},{"class":1048,"line":675},[48315,48319,48323,48327,48331,48335,48339,48343,48348,48352,48357],{"type":30,"tag":1046,"props":48316,"children":48317},{"style":1053},[48318],{"type":40,"value":9107},{"type":30,"tag":1046,"props":48320,"children":48321},{"style":1105},[48322],{"type":40,"value":9431},{"type":30,"tag":1046,"props":48324,"children":48325},{"style":1070},[48326],{"type":40,"value":1179},{"type":30,"tag":1046,"props":48328,"children":48329},{"style":1105},[48330],{"type":40,"value":48289},{"type":30,"tag":1046,"props":48332,"children":48333},{"style":1070},[48334],{"type":40,"value":1179},{"type":30,"tag":1046,"props":48336,"children":48337},{"style":1105},[48338],{"type":40,"value":48298},{"type":30,"tag":1046,"props":48340,"children":48341},{"style":1070},[48342],{"type":40,"value":1179},{"type":30,"tag":1046,"props":48344,"children":48345},{"style":1105},[48346],{"type":40,"value":48347},"chrome",{"type":30,"tag":1046,"props":48349,"children":48350},{"style":1070},[48351],{"type":40,"value":1179},{"type":30,"tag":1046,"props":48353,"children":48354},{"style":1105},[48355],{"type":40,"value":48356},"ChromeDriver",{"type":30,"tag":1046,"props":48358,"children":48359},{"style":1070},[48360],{"type":40,"value":1113},{"type":30,"tag":1046,"props":48362,"children":48363},{"class":1048,"line":681},[48364,48368,48372,48376,48380,48384,48388,48392,48397],{"type":30,"tag":1046,"props":48365,"children":48366},{"style":1053},[48367],{"type":40,"value":9107},{"type":30,"tag":1046,"props":48369,"children":48370},{"style":1105},[48371],{"type":40,"value":9431},{"type":30,"tag":1046,"props":48373,"children":48374},{"style":1070},[48375],{"type":40,"value":1179},{"type":30,"tag":1046,"props":48377,"children":48378},{"style":1105},[48379],{"type":40,"value":48289},{"type":30,"tag":1046,"props":48381,"children":48382},{"style":1070},[48383],{"type":40,"value":1179},{"type":30,"tag":1046,"props":48385,"children":48386},{"style":1105},[48387],{"type":40,"value":48298},{"type":30,"tag":1046,"props":48389,"children":48390},{"style":1070},[48391],{"type":40,"value":1179},{"type":30,"tag":1046,"props":48393,"children":48394},{"style":1105},[48395],{"type":40,"value":48396},"By",{"type":30,"tag":1046,"props":48398,"children":48399},{"style":1070},[48400],{"type":40,"value":1113},{"type":30,"tag":1046,"props":48402,"children":48403},{"class":1048,"line":1124},[48404],{"type":30,"tag":1046,"props":48405,"children":48406},{"emptyLinePlaceholder":13},[48407],{"type":40,"value":1121},{"type":30,"tag":1046,"props":48409,"children":48410},{"class":1048,"line":1168},[48411,48415,48419,48424],{"type":30,"tag":1046,"props":48412,"children":48413},{"style":1053},[48414],{"type":40,"value":1056},{"type":30,"tag":1046,"props":48416,"children":48417},{"style":1053},[48418],{"type":40,"value":1061},{"type":30,"tag":1046,"props":48420,"children":48421},{"style":1064},[48422],{"type":40,"value":48423}," LoginTest",{"type":30,"tag":1046,"props":48425,"children":48426},{"style":1070},[48427],{"type":40,"value":1073},{"type":30,"tag":1046,"props":48429,"children":48430},{"class":1048,"line":1201},[48431],{"type":30,"tag":1046,"props":48432,"children":48433},{"emptyLinePlaceholder":13},[48434],{"type":40,"value":1121},{"type":30,"tag":1046,"props":48436,"children":48437},{"class":1048,"line":1210},[48438,48442,48446,48450,48454,48458,48462,48466,48470,48474],{"type":30,"tag":1046,"props":48439,"children":48440},{"style":1053},[48441],{"type":40,"value":1130},{"type":30,"tag":1046,"props":48443,"children":48444},{"style":1053},[48445],{"type":40,"value":12363},{"type":30,"tag":1046,"props":48447,"children":48448},{"style":1053},[48449],{"type":40,"value":1135},{"type":30,"tag":1046,"props":48451,"children":48452},{"style":1138},[48453],{"type":40,"value":12372},{"type":30,"tag":1046,"props":48455,"children":48456},{"style":1070},[48457],{"type":40,"value":1146},{"type":30,"tag":1046,"props":48459,"children":48460},{"style":1053},[48461],{"type":40,"value":2882},{"type":30,"tag":1046,"props":48463,"children":48464},{"style":1070},[48465],{"type":40,"value":12385},{"type":30,"tag":1046,"props":48467,"children":48468},{"style":1153},[48469],{"type":40,"value":12390},{"type":30,"tag":1046,"props":48471,"children":48472},{"style":1070},[48473],{"type":40,"value":1161},{"type":30,"tag":1046,"props":48475,"children":48476},{"style":1070},[48477],{"type":40,"value":1073},{"type":30,"tag":1046,"props":48479,"children":48480},{"class":1048,"line":1218},[48481],{"type":30,"tag":1046,"props":48482,"children":48483},{"style":3961},[48484],{"type":40,"value":48485},"        // Configurer le WebDriver pour Chrome\n",{"type":30,"tag":1046,"props":48487,"children":48488},{"class":1048,"line":1255},[48489,48493,48497,48502,48506,48511,48515,48520],{"type":30,"tag":1046,"props":48490,"children":48491},{"style":1105},[48492],{"type":40,"value":12555},{"type":30,"tag":1046,"props":48494,"children":48495},{"style":1070},[48496],{"type":40,"value":1179},{"type":30,"tag":1046,"props":48498,"children":48499},{"style":1138},[48500],{"type":40,"value":48501},"setProperty",{"type":30,"tag":1046,"props":48503,"children":48504},{"style":1070},[48505],{"type":40,"value":1146},{"type":30,"tag":1046,"props":48507,"children":48508},{"style":1675},[48509],{"type":40,"value":48510},"\"webdriver.chrome.driver\"",{"type":30,"tag":1046,"props":48512,"children":48513},{"style":1070},[48514],{"type":40,"value":2891},{"type":30,"tag":1046,"props":48516,"children":48517},{"style":1675},[48518],{"type":40,"value":48519}," \"path_to_chromedriver\"",{"type":30,"tag":1046,"props":48521,"children":48522},{"style":1070},[48523],{"type":40,"value":1198},{"type":30,"tag":1046,"props":48525,"children":48526},{"class":1048,"line":1284},[48527,48532,48537,48541,48545,48550],{"type":30,"tag":1046,"props":48528,"children":48529},{"style":1084},[48530],{"type":40,"value":48531},"        WebDriver",{"type":30,"tag":1046,"props":48533,"children":48534},{"style":1105},[48535],{"type":40,"value":48536}," driver ",{"type":30,"tag":1046,"props":48538,"children":48539},{"style":1795},[48540],{"type":40,"value":1798},{"type":30,"tag":1046,"props":48542,"children":48543},{"style":1053},[48544],{"type":40,"value":2480},{"type":30,"tag":1046,"props":48546,"children":48547},{"style":1138},[48548],{"type":40,"value":48549}," ChromeDriver",{"type":30,"tag":1046,"props":48551,"children":48552},{"style":1070},[48553],{"type":40,"value":1406},{"type":30,"tag":1046,"props":48555,"children":48556},{"class":1048,"line":1292},[48557],{"type":30,"tag":1046,"props":48558,"children":48559},{"emptyLinePlaceholder":13},[48560],{"type":40,"value":1121},{"type":30,"tag":1046,"props":48562,"children":48563},{"class":1048,"line":1300},[48564],{"type":30,"tag":1046,"props":48565,"children":48566},{"style":3961},[48567],{"type":40,"value":48568},"        // Ouvrir la page de login\n",{"type":30,"tag":1046,"props":48570,"children":48571},{"class":1048,"line":1327},[48572,48577,48581,48585,48589,48594],{"type":30,"tag":1046,"props":48573,"children":48574},{"style":1105},[48575],{"type":40,"value":48576},"        driver",{"type":30,"tag":1046,"props":48578,"children":48579},{"style":1070},[48580],{"type":40,"value":1179},{"type":30,"tag":1046,"props":48582,"children":48583},{"style":1138},[48584],{"type":40,"value":5147},{"type":30,"tag":1046,"props":48586,"children":48587},{"style":1070},[48588],{"type":40,"value":1146},{"type":30,"tag":1046,"props":48590,"children":48591},{"style":1675},[48592],{"type":40,"value":48593},"\"http://monapplication.com/login\"",{"type":30,"tag":1046,"props":48595,"children":48596},{"style":1070},[48597],{"type":40,"value":1198},{"type":30,"tag":1046,"props":48599,"children":48600},{"class":1048,"line":1354},[48601],{"type":30,"tag":1046,"props":48602,"children":48603},{"emptyLinePlaceholder":13},[48604],{"type":40,"value":1121},{"type":30,"tag":1046,"props":48606,"children":48607},{"class":1048,"line":1391},[48608],{"type":30,"tag":1046,"props":48609,"children":48610},{"style":3961},[48611],{"type":40,"value":48612},"        // Entrer les informations d'identification et se connecter\n",{"type":30,"tag":1046,"props":48614,"children":48615},{"class":1048,"line":1409},[48616,48620,48624,48629,48633,48637,48641,48645,48649,48654,48659,48664,48668,48673],{"type":30,"tag":1046,"props":48617,"children":48618},{"style":1105},[48619],{"type":40,"value":48576},{"type":30,"tag":1046,"props":48621,"children":48622},{"style":1070},[48623],{"type":40,"value":1179},{"type":30,"tag":1046,"props":48625,"children":48626},{"style":1138},[48627],{"type":40,"value":48628},"findElement",{"type":30,"tag":1046,"props":48630,"children":48631},{"style":1070},[48632],{"type":40,"value":1146},{"type":30,"tag":1046,"props":48634,"children":48635},{"style":1105},[48636],{"type":40,"value":48396},{"type":30,"tag":1046,"props":48638,"children":48639},{"style":1070},[48640],{"type":40,"value":1179},{"type":30,"tag":1046,"props":48642,"children":48643},{"style":1138},[48644],{"type":40,"value":6861},{"type":30,"tag":1046,"props":48646,"children":48647},{"style":1070},[48648],{"type":40,"value":1146},{"type":30,"tag":1046,"props":48650,"children":48651},{"style":1675},[48652],{"type":40,"value":48653},"\"username\"",{"type":30,"tag":1046,"props":48655,"children":48656},{"style":1070},[48657],{"type":40,"value":48658},")).",{"type":30,"tag":1046,"props":48660,"children":48661},{"style":1138},[48662],{"type":40,"value":48663},"sendKeys",{"type":30,"tag":1046,"props":48665,"children":48666},{"style":1070},[48667],{"type":40,"value":1146},{"type":30,"tag":1046,"props":48669,"children":48670},{"style":1675},[48671],{"type":40,"value":48672},"\"monNomUtilisateur\"",{"type":30,"tag":1046,"props":48674,"children":48675},{"style":1070},[48676],{"type":40,"value":1198},{"type":30,"tag":1046,"props":48678,"children":48679},{"class":1048,"line":1417},[48680,48684,48688,48692,48696,48700,48704,48708,48712,48717,48721,48725,48729,48734],{"type":30,"tag":1046,"props":48681,"children":48682},{"style":1105},[48683],{"type":40,"value":48576},{"type":30,"tag":1046,"props":48685,"children":48686},{"style":1070},[48687],{"type":40,"value":1179},{"type":30,"tag":1046,"props":48689,"children":48690},{"style":1138},[48691],{"type":40,"value":48628},{"type":30,"tag":1046,"props":48693,"children":48694},{"style":1070},[48695],{"type":40,"value":1146},{"type":30,"tag":1046,"props":48697,"children":48698},{"style":1105},[48699],{"type":40,"value":48396},{"type":30,"tag":1046,"props":48701,"children":48702},{"style":1070},[48703],{"type":40,"value":1179},{"type":30,"tag":1046,"props":48705,"children":48706},{"style":1138},[48707],{"type":40,"value":6861},{"type":30,"tag":1046,"props":48709,"children":48710},{"style":1070},[48711],{"type":40,"value":1146},{"type":30,"tag":1046,"props":48713,"children":48714},{"style":1675},[48715],{"type":40,"value":48716},"\"password\"",{"type":30,"tag":1046,"props":48718,"children":48719},{"style":1070},[48720],{"type":40,"value":48658},{"type":30,"tag":1046,"props":48722,"children":48723},{"style":1138},[48724],{"type":40,"value":48663},{"type":30,"tag":1046,"props":48726,"children":48727},{"style":1070},[48728],{"type":40,"value":1146},{"type":30,"tag":1046,"props":48730,"children":48731},{"style":1675},[48732],{"type":40,"value":48733},"\"monMotDePasse\"",{"type":30,"tag":1046,"props":48735,"children":48736},{"style":1070},[48737],{"type":40,"value":1198},{"type":30,"tag":1046,"props":48739,"children":48740},{"class":1048,"line":2023},[48741,48745,48749,48753,48757,48761,48765,48769,48773,48778,48782,48787],{"type":30,"tag":1046,"props":48742,"children":48743},{"style":1105},[48744],{"type":40,"value":48576},{"type":30,"tag":1046,"props":48746,"children":48747},{"style":1070},[48748],{"type":40,"value":1179},{"type":30,"tag":1046,"props":48750,"children":48751},{"style":1138},[48752],{"type":40,"value":48628},{"type":30,"tag":1046,"props":48754,"children":48755},{"style":1070},[48756],{"type":40,"value":1146},{"type":30,"tag":1046,"props":48758,"children":48759},{"style":1105},[48760],{"type":40,"value":48396},{"type":30,"tag":1046,"props":48762,"children":48763},{"style":1070},[48764],{"type":40,"value":1179},{"type":30,"tag":1046,"props":48766,"children":48767},{"style":1138},[48768],{"type":40,"value":6861},{"type":30,"tag":1046,"props":48770,"children":48771},{"style":1070},[48772],{"type":40,"value":1146},{"type":30,"tag":1046,"props":48774,"children":48775},{"style":1675},[48776],{"type":40,"value":48777},"\"loginButton\"",{"type":30,"tag":1046,"props":48779,"children":48780},{"style":1070},[48781],{"type":40,"value":48658},{"type":30,"tag":1046,"props":48783,"children":48784},{"style":1138},[48785],{"type":40,"value":48786},"click",{"type":30,"tag":1046,"props":48788,"children":48789},{"style":1070},[48790],{"type":40,"value":1406},{"type":30,"tag":1046,"props":48792,"children":48793},{"class":1048,"line":2083},[48794],{"type":30,"tag":1046,"props":48795,"children":48796},{"emptyLinePlaceholder":13},[48797],{"type":40,"value":1121},{"type":30,"tag":1046,"props":48799,"children":48800},{"class":1048,"line":2126},[48801],{"type":30,"tag":1046,"props":48802,"children":48803},{"style":3961},[48804],{"type":40,"value":48805},"        // Vérifier que la connexion a réussi\n",{"type":30,"tag":1046,"props":48807,"children":48808},{"class":1048,"line":2159},[48809,48813,48818,48822,48827,48831,48836],{"type":30,"tag":1046,"props":48810,"children":48811},{"style":1084},[48812],{"type":40,"value":12480},{"type":30,"tag":1046,"props":48814,"children":48815},{"style":1105},[48816],{"type":40,"value":48817}," pageTitre ",{"type":30,"tag":1046,"props":48819,"children":48820},{"style":1795},[48821],{"type":40,"value":1798},{"type":30,"tag":1046,"props":48823,"children":48824},{"style":1105},[48825],{"type":40,"value":48826}," driver",{"type":30,"tag":1046,"props":48828,"children":48829},{"style":1070},[48830],{"type":40,"value":1179},{"type":30,"tag":1046,"props":48832,"children":48833},{"style":1138},[48834],{"type":40,"value":48835},"getTitle",{"type":30,"tag":1046,"props":48837,"children":48838},{"style":1070},[48839],{"type":40,"value":1406},{"type":30,"tag":1046,"props":48841,"children":48842},{"class":1048,"line":2167},[48843,48847,48851,48856,48860,48864,48868,48873,48877],{"type":30,"tag":1046,"props":48844,"children":48845},{"style":1053},[48846],{"type":40,"value":11856},{"type":30,"tag":1046,"props":48848,"children":48849},{"style":1070},[48850],{"type":40,"value":1146},{"type":30,"tag":1046,"props":48852,"children":48853},{"style":1105},[48854],{"type":40,"value":48855},"pageTitre",{"type":30,"tag":1046,"props":48857,"children":48858},{"style":1070},[48859],{"type":40,"value":1179},{"type":30,"tag":1046,"props":48861,"children":48862},{"style":1138},[48863],{"type":40,"value":17741},{"type":30,"tag":1046,"props":48865,"children":48866},{"style":1070},[48867],{"type":40,"value":1146},{"type":30,"tag":1046,"props":48869,"children":48870},{"style":1675},[48871],{"type":40,"value":48872},"\"Tableau de bord\"",{"type":30,"tag":1046,"props":48874,"children":48875},{"style":1070},[48876],{"type":40,"value":9913},{"type":30,"tag":1046,"props":48878,"children":48879},{"style":1070},[48880],{"type":40,"value":1073},{"type":30,"tag":1046,"props":48882,"children":48883},{"class":1048,"line":4537},[48884,48888,48892,48896,48900,48904,48908,48913],{"type":30,"tag":1046,"props":48885,"children":48886},{"style":1105},[48887],{"type":40,"value":33428},{"type":30,"tag":1046,"props":48889,"children":48890},{"style":1070},[48891],{"type":40,"value":1179},{"type":30,"tag":1046,"props":48893,"children":48894},{"style":1105},[48895],{"type":40,"value":12564},{"type":30,"tag":1046,"props":48897,"children":48898},{"style":1070},[48899],{"type":40,"value":1179},{"type":30,"tag":1046,"props":48901,"children":48902},{"style":1138},[48903],{"type":40,"value":12573},{"type":30,"tag":1046,"props":48905,"children":48906},{"style":1070},[48907],{"type":40,"value":1146},{"type":30,"tag":1046,"props":48909,"children":48910},{"style":1675},[48911],{"type":40,"value":48912},"\"Connexion réussie !\"",{"type":30,"tag":1046,"props":48914,"children":48915},{"style":1070},[48916],{"type":40,"value":1198},{"type":30,"tag":1046,"props":48918,"children":48919},{"class":1048,"line":4545},[48920,48924,48928],{"type":30,"tag":1046,"props":48921,"children":48922},{"style":1070},[48923],{"type":40,"value":31663},{"type":30,"tag":1046,"props":48925,"children":48926},{"style":1053},[48927],{"type":40,"value":19948},{"type":30,"tag":1046,"props":48929,"children":48930},{"style":1070},[48931],{"type":40,"value":1073},{"type":30,"tag":1046,"props":48933,"children":48934},{"class":1048,"line":4582},[48935,48939,48943,48947,48951,48955,48959,48964],{"type":30,"tag":1046,"props":48936,"children":48937},{"style":1105},[48938],{"type":40,"value":33428},{"type":30,"tag":1046,"props":48940,"children":48941},{"style":1070},[48942],{"type":40,"value":1179},{"type":30,"tag":1046,"props":48944,"children":48945},{"style":1105},[48946],{"type":40,"value":12564},{"type":30,"tag":1046,"props":48948,"children":48949},{"style":1070},[48950],{"type":40,"value":1179},{"type":30,"tag":1046,"props":48952,"children":48953},{"style":1138},[48954],{"type":40,"value":12573},{"type":30,"tag":1046,"props":48956,"children":48957},{"style":1070},[48958],{"type":40,"value":1146},{"type":30,"tag":1046,"props":48960,"children":48961},{"style":1675},[48962],{"type":40,"value":48963},"\"Échec de la connexion.\"",{"type":30,"tag":1046,"props":48965,"children":48966},{"style":1070},[48967],{"type":40,"value":1198},{"type":30,"tag":1046,"props":48969,"children":48970},{"class":1048,"line":4622},[48971],{"type":30,"tag":1046,"props":48972,"children":48973},{"style":1070},[48974],{"type":40,"value":11922},{"type":30,"tag":1046,"props":48976,"children":48977},{"class":1048,"line":4662},[48978],{"type":30,"tag":1046,"props":48979,"children":48980},{"emptyLinePlaceholder":13},[48981],{"type":40,"value":1121},{"type":30,"tag":1046,"props":48983,"children":48984},{"class":1048,"line":4687},[48985],{"type":30,"tag":1046,"props":48986,"children":48987},{"style":3961},[48988],{"type":40,"value":48989},"        // Fermer le navigateur\n",{"type":30,"tag":1046,"props":48991,"children":48992},{"class":1048,"line":4695},[48993,48997,49001,49006],{"type":30,"tag":1046,"props":48994,"children":48995},{"style":1105},[48996],{"type":40,"value":48576},{"type":30,"tag":1046,"props":48998,"children":48999},{"style":1070},[49000],{"type":40,"value":1179},{"type":30,"tag":1046,"props":49002,"children":49003},{"style":1138},[49004],{"type":40,"value":49005},"quit",{"type":30,"tag":1046,"props":49007,"children":49008},{"style":1070},[49009],{"type":40,"value":1406},{"type":30,"tag":1046,"props":49011,"children":49012},{"class":1048,"line":4703},[49013],{"type":30,"tag":1046,"props":49014,"children":49015},{"style":1070},[49016],{"type":40,"value":1207},{"type":30,"tag":1046,"props":49018,"children":49019},{"class":1048,"line":4739},[49020],{"type":30,"tag":1046,"props":49021,"children":49022},{"style":1070},[49023],{"type":40,"value":1423},{"type":30,"tag":964,"props":49025,"children":49026},{},[49027],{"type":30,"tag":43,"props":49028,"children":49029},{},[49030,49034,49036,49040,49042,49047],{"type":30,"tag":36,"props":49031,"children":49032},{},[49033],{"type":40,"value":19675},{"type":40,"value":49035}," : Lorsque vous utilisez ",{"type":30,"tag":36,"props":49037,"children":49038},{},[49039],{"type":40,"value":48254},{"type":40,"value":49041},", essayez d'exécuter vos tests sur plusieurs navigateurs pour vous assurer de la compatibilité de votre application. Utilisez des outils comme ",{"type":30,"tag":36,"props":49043,"children":49044},{},[49045],{"type":40,"value":49046},"BrowserStack",{"type":40,"value":49048}," pour tester sur différents environnements.",{"type":30,"tag":84,"props":49050,"children":49051},{},[],{"type":30,"tag":116,"props":49053,"children":49055},{"id":49054},"présentation-de-quelques-frameworks-populaires-en-java",[49056],{"type":30,"tag":36,"props":49057,"children":49058},{},[49059],{"type":40,"value":49060},"Présentation de quelques frameworks populaires en Java",{"type":30,"tag":43,"props":49062,"children":49063},{},[49064],{"type":40,"value":49065},"Voici une sélection de frameworks populaires que vous pouvez utiliser dans vos projets Java.",{"type":30,"tag":2339,"props":49067,"children":49069},{"id":49068},"_1-junit-le-pilier-des-tests-unitaires",[49070,49071],{"type":40,"value":242},{"type":30,"tag":36,"props":49072,"children":49073},{},[49074],{"type":40,"value":49075},"JUnit : Le pilier des tests unitaires",{"type":30,"tag":43,"props":49077,"children":49078},{},[49079,49083],{"type":30,"tag":36,"props":49080,"children":49081},{},[49082],{"type":40,"value":12965},{"type":40,"value":49084}," est sans doute le framework de tests unitaires le plus populaire en Java. Il est léger, facile à utiliser et largement adopté dans l'industrie.",{"type":30,"tag":43737,"props":49086,"children":49088},{"id":49087},"exemple-simple-avec-junit-5",[49089],{"type":40,"value":49090},"Exemple simple avec JUnit 5 :",{"type":30,"tag":1035,"props":49092,"children":49094},{"className":1039,"code":49093,"language":1038,"meta":8,"style":8},"import org.junit.jupiter.api.Test;\nimport static org.junit.jupiter.api.Assertions.*;\n\npublic class CalculatriceTest {\n\n    @Test\n    public void testMultiplication() {\n        Calculatrice calc = new Calculatrice();\n        int resultat = calc.multiplication(4, 5);\n        assertEquals(20, resultat, \"La multiplication de 4 par 5 devrait être 20\");\n    }\n}\n",[49095],{"type":30,"tag":1042,"props":49096,"children":49097},{"__ignoreMap":8},[49098,49145,49204,49211,49230,49237,49248,49272,49299,49348,49385,49392],{"type":30,"tag":1046,"props":49099,"children":49100},{"class":1048,"line":1049},[49101,49105,49109,49113,49117,49121,49125,49129,49133,49137,49141],{"type":30,"tag":1046,"props":49102,"children":49103},{"style":1053},[49104],{"type":40,"value":9107},{"type":30,"tag":1046,"props":49106,"children":49107},{"style":1105},[49108],{"type":40,"value":9431},{"type":30,"tag":1046,"props":49110,"children":49111},{"style":1070},[49112],{"type":40,"value":1179},{"type":30,"tag":1046,"props":49114,"children":49115},{"style":1105},[49116],{"type":40,"value":26555},{"type":30,"tag":1046,"props":49118,"children":49119},{"style":1070},[49120],{"type":40,"value":1179},{"type":30,"tag":1046,"props":49122,"children":49123},{"style":1105},[49124],{"type":40,"value":47472},{"type":30,"tag":1046,"props":49126,"children":49127},{"style":1070},[49128],{"type":40,"value":1179},{"type":30,"tag":1046,"props":49130,"children":49131},{"style":1105},[49132],{"type":40,"value":47481},{"type":30,"tag":1046,"props":49134,"children":49135},{"style":1070},[49136],{"type":40,"value":1179},{"type":30,"tag":1046,"props":49138,"children":49139},{"style":1105},[49140],{"type":40,"value":26605},{"type":30,"tag":1046,"props":49142,"children":49143},{"style":1070},[49144],{"type":40,"value":1113},{"type":30,"tag":1046,"props":49146,"children":49147},{"class":1048,"line":675},[49148,49152,49156,49160,49164,49168,49172,49176,49180,49184,49188,49192,49196,49200],{"type":30,"tag":1046,"props":49149,"children":49150},{"style":1053},[49151],{"type":40,"value":9107},{"type":30,"tag":1046,"props":49153,"children":49154},{"style":1053},[49155],{"type":40,"value":12363},{"type":30,"tag":1046,"props":49157,"children":49158},{"style":1105},[49159],{"type":40,"value":9431},{"type":30,"tag":1046,"props":49161,"children":49162},{"style":1070},[49163],{"type":40,"value":1179},{"type":30,"tag":1046,"props":49165,"children":49166},{"style":1105},[49167],{"type":40,"value":26555},{"type":30,"tag":1046,"props":49169,"children":49170},{"style":1070},[49171],{"type":40,"value":1179},{"type":30,"tag":1046,"props":49173,"children":49174},{"style":1105},[49175],{"type":40,"value":47472},{"type":30,"tag":1046,"props":49177,"children":49178},{"style":1070},[49179],{"type":40,"value":1179},{"type":30,"tag":1046,"props":49181,"children":49182},{"style":1105},[49183],{"type":40,"value":47481},{"type":30,"tag":1046,"props":49185,"children":49186},{"style":1070},[49187],{"type":40,"value":1179},{"type":30,"tag":1046,"props":49189,"children":49190},{"style":1105},[49191],{"type":40,"value":47541},{"type":30,"tag":1046,"props":49193,"children":49194},{"style":1070},[49195],{"type":40,"value":1179},{"type":30,"tag":1046,"props":49197,"children":49198},{"style":9718},[49199],{"type":40,"value":21197},{"type":30,"tag":1046,"props":49201,"children":49202},{"style":1070},[49203],{"type":40,"value":1113},{"type":30,"tag":1046,"props":49205,"children":49206},{"class":1048,"line":681},[49207],{"type":30,"tag":1046,"props":49208,"children":49209},{"emptyLinePlaceholder":13},[49210],{"type":40,"value":1121},{"type":30,"tag":1046,"props":49212,"children":49213},{"class":1048,"line":1124},[49214,49218,49222,49226],{"type":30,"tag":1046,"props":49215,"children":49216},{"style":1053},[49217],{"type":40,"value":1056},{"type":30,"tag":1046,"props":49219,"children":49220},{"style":1053},[49221],{"type":40,"value":1061},{"type":30,"tag":1046,"props":49223,"children":49224},{"style":1064},[49225],{"type":40,"value":47576},{"type":30,"tag":1046,"props":49227,"children":49228},{"style":1070},[49229],{"type":40,"value":1073},{"type":30,"tag":1046,"props":49231,"children":49232},{"class":1048,"line":1168},[49233],{"type":30,"tag":1046,"props":49234,"children":49235},{"emptyLinePlaceholder":13},[49236],{"type":40,"value":1121},{"type":30,"tag":1046,"props":49238,"children":49239},{"class":1048,"line":1201},[49240,49244],{"type":30,"tag":1046,"props":49241,"children":49242},{"style":1647},[49243],{"type":40,"value":1828},{"type":30,"tag":1046,"props":49245,"children":49246},{"style":1653},[49247],{"type":40,"value":13736},{"type":30,"tag":1046,"props":49249,"children":49250},{"class":1048,"line":1210},[49251,49255,49259,49264,49268],{"type":30,"tag":1046,"props":49252,"children":49253},{"style":1053},[49254],{"type":40,"value":1130},{"type":30,"tag":1046,"props":49256,"children":49257},{"style":1053},[49258],{"type":40,"value":1135},{"type":30,"tag":1046,"props":49260,"children":49261},{"style":1138},[49262],{"type":40,"value":49263}," testMultiplication",{"type":30,"tag":1046,"props":49265,"children":49266},{"style":1070},[49267],{"type":40,"value":1320},{"type":30,"tag":1046,"props":49269,"children":49270},{"style":1070},[49271],{"type":40,"value":1073},{"type":30,"tag":1046,"props":49273,"children":49274},{"class":1048,"line":1218},[49275,49279,49283,49287,49291,49295],{"type":30,"tag":1046,"props":49276,"children":49277},{"style":1084},[49278],{"type":40,"value":47630},{"type":30,"tag":1046,"props":49280,"children":49281},{"style":1105},[49282],{"type":40,"value":32686},{"type":30,"tag":1046,"props":49284,"children":49285},{"style":1795},[49286],{"type":40,"value":1798},{"type":30,"tag":1046,"props":49288,"children":49289},{"style":1053},[49290],{"type":40,"value":2480},{"type":30,"tag":1046,"props":49292,"children":49293},{"style":1138},[49294],{"type":40,"value":47647},{"type":30,"tag":1046,"props":49296,"children":49297},{"style":1070},[49298],{"type":40,"value":1406},{"type":30,"tag":1046,"props":49300,"children":49301},{"class":1048,"line":1255},[49302,49306,49310,49314,49318,49322,49327,49331,49336,49340,49344],{"type":30,"tag":1046,"props":49303,"children":49304},{"style":1053},[49305],{"type":40,"value":47659},{"type":30,"tag":1046,"props":49307,"children":49308},{"style":1105},[49309],{"type":40,"value":47664},{"type":30,"tag":1046,"props":49311,"children":49312},{"style":1795},[49313],{"type":40,"value":1798},{"type":30,"tag":1046,"props":49315,"children":49316},{"style":1105},[49317],{"type":40,"value":32800},{"type":30,"tag":1046,"props":49319,"children":49320},{"style":1070},[49321],{"type":40,"value":1179},{"type":30,"tag":1046,"props":49323,"children":49324},{"style":1138},[49325],{"type":40,"value":49326},"multiplication",{"type":30,"tag":1046,"props":49328,"children":49329},{"style":1070},[49330],{"type":40,"value":1146},{"type":30,"tag":1046,"props":49332,"children":49333},{"style":6886},[49334],{"type":40,"value":49335},"4",{"type":30,"tag":1046,"props":49337,"children":49338},{"style":1070},[49339],{"type":40,"value":2891},{"type":30,"tag":1046,"props":49341,"children":49342},{"style":6886},[49343],{"type":40,"value":18313},{"type":30,"tag":1046,"props":49345,"children":49346},{"style":1070},[49347],{"type":40,"value":1198},{"type":30,"tag":1046,"props":49349,"children":49350},{"class":1048,"line":1284},[49351,49355,49359,49364,49368,49372,49376,49381],{"type":30,"tag":1046,"props":49352,"children":49353},{"style":1138},[49354],{"type":40,"value":26812},{"type":30,"tag":1046,"props":49356,"children":49357},{"style":1070},[49358],{"type":40,"value":1146},{"type":30,"tag":1046,"props":49360,"children":49361},{"style":6886},[49362],{"type":40,"value":49363},"20",{"type":30,"tag":1046,"props":49365,"children":49366},{"style":1070},[49367],{"type":40,"value":2891},{"type":30,"tag":1046,"props":49369,"children":49370},{"style":1105},[49371],{"type":40,"value":47726},{"type":30,"tag":1046,"props":49373,"children":49374},{"style":1070},[49375],{"type":40,"value":2891},{"type":30,"tag":1046,"props":49377,"children":49378},{"style":1675},[49379],{"type":40,"value":49380}," \"La multiplication de 4 par 5 devrait être 20\"",{"type":30,"tag":1046,"props":49382,"children":49383},{"style":1070},[49384],{"type":40,"value":1198},{"type":30,"tag":1046,"props":49386,"children":49387},{"class":1048,"line":1292},[49388],{"type":30,"tag":1046,"props":49389,"children":49390},{"style":1070},[49391],{"type":40,"value":1207},{"type":30,"tag":1046,"props":49393,"children":49394},{"class":1048,"line":1300},[49395],{"type":30,"tag":1046,"props":49396,"children":49397},{"style":1070},[49398],{"type":40,"value":1423},{"type":30,"tag":2339,"props":49400,"children":49402},{"id":49401},"_2-testng-flexibilité-et-fonctionnalités-avancées",[49403,49404],{"type":40,"value":268},{"type":30,"tag":36,"props":49405,"children":49406},{},[49407],{"type":40,"value":49408},"TestNG : Flexibilité et fonctionnalités avancées",{"type":30,"tag":43,"props":49410,"children":49411},{},[49412,49416],{"type":30,"tag":36,"props":49413,"children":49414},{},[49415],{"type":40,"value":47429},{"type":40,"value":49417}," est un autre framework de tests unitaires, mais il offre des fonctionnalités supplémentaires par rapport à JUnit.",{"type":30,"tag":43737,"props":49419,"children":49421},{"id":49420},"exemple-de-test-avec-testng",[49422],{"type":40,"value":49423},"Exemple de test avec TestNG :",{"type":30,"tag":1035,"props":49425,"children":49427},{"className":1039,"code":49426,"language":1038,"meta":8,"style":8},"import org.testng.annotations.Test;\nimport static org.testng.Assert.assertEquals;\n\npublic class CalculatriceTest {\n\n    @Test\n    public void testSoustraction() {\n        Calculatrice calc = new Calculatrice();\n        int resultat = calc.soustraction(10, 3);\n        assertEquals(7, resultat, \"La soustraction de 10 et 3 devrait être 7\");\n    }\n}\n",[49428],{"type":30,"tag":1042,"props":49429,"children":49430},{"__ignoreMap":8},[49431,49471,49514,49521,49540,49547,49558,49582,49609,49658,49695,49702],{"type":30,"tag":1046,"props":49432,"children":49433},{"class":1048,"line":1049},[49434,49438,49442,49446,49451,49455,49459,49463,49467],{"type":30,"tag":1046,"props":49435,"children":49436},{"style":1053},[49437],{"type":40,"value":9107},{"type":30,"tag":1046,"props":49439,"children":49440},{"style":1105},[49441],{"type":40,"value":9431},{"type":30,"tag":1046,"props":49443,"children":49444},{"style":1070},[49445],{"type":40,"value":1179},{"type":30,"tag":1046,"props":49447,"children":49448},{"style":1105},[49449],{"type":40,"value":49450},"testng",{"type":30,"tag":1046,"props":49452,"children":49453},{"style":1070},[49454],{"type":40,"value":1179},{"type":30,"tag":1046,"props":49456,"children":49457},{"style":1105},[49458],{"type":40,"value":9148},{"type":30,"tag":1046,"props":49460,"children":49461},{"style":1070},[49462],{"type":40,"value":1179},{"type":30,"tag":1046,"props":49464,"children":49465},{"style":1105},[49466],{"type":40,"value":26605},{"type":30,"tag":1046,"props":49468,"children":49469},{"style":1070},[49470],{"type":40,"value":1113},{"type":30,"tag":1046,"props":49472,"children":49473},{"class":1048,"line":675},[49474,49478,49482,49486,49490,49494,49498,49502,49506,49510],{"type":30,"tag":1046,"props":49475,"children":49476},{"style":1053},[49477],{"type":40,"value":9107},{"type":30,"tag":1046,"props":49479,"children":49480},{"style":1053},[49481],{"type":40,"value":12363},{"type":30,"tag":1046,"props":49483,"children":49484},{"style":1105},[49485],{"type":40,"value":9431},{"type":30,"tag":1046,"props":49487,"children":49488},{"style":1070},[49489],{"type":40,"value":1179},{"type":30,"tag":1046,"props":49491,"children":49492},{"style":1105},[49493],{"type":40,"value":49450},{"type":30,"tag":1046,"props":49495,"children":49496},{"style":1070},[49497],{"type":40,"value":1179},{"type":30,"tag":1046,"props":49499,"children":49500},{"style":1105},[49501],{"type":40,"value":26564},{"type":30,"tag":1046,"props":49503,"children":49504},{"style":1070},[49505],{"type":40,"value":1179},{"type":30,"tag":1046,"props":49507,"children":49508},{"style":1105},[49509],{"type":40,"value":26573},{"type":30,"tag":1046,"props":49511,"children":49512},{"style":1070},[49513],{"type":40,"value":1113},{"type":30,"tag":1046,"props":49515,"children":49516},{"class":1048,"line":681},[49517],{"type":30,"tag":1046,"props":49518,"children":49519},{"emptyLinePlaceholder":13},[49520],{"type":40,"value":1121},{"type":30,"tag":1046,"props":49522,"children":49523},{"class":1048,"line":1124},[49524,49528,49532,49536],{"type":30,"tag":1046,"props":49525,"children":49526},{"style":1053},[49527],{"type":40,"value":1056},{"type":30,"tag":1046,"props":49529,"children":49530},{"style":1053},[49531],{"type":40,"value":1061},{"type":30,"tag":1046,"props":49533,"children":49534},{"style":1064},[49535],{"type":40,"value":47576},{"type":30,"tag":1046,"props":49537,"children":49538},{"style":1070},[49539],{"type":40,"value":1073},{"type":30,"tag":1046,"props":49541,"children":49542},{"class":1048,"line":1168},[49543],{"type":30,"tag":1046,"props":49544,"children":49545},{"emptyLinePlaceholder":13},[49546],{"type":40,"value":1121},{"type":30,"tag":1046,"props":49548,"children":49549},{"class":1048,"line":1201},[49550,49554],{"type":30,"tag":1046,"props":49551,"children":49552},{"style":1647},[49553],{"type":40,"value":1828},{"type":30,"tag":1046,"props":49555,"children":49556},{"style":1653},[49557],{"type":40,"value":13736},{"type":30,"tag":1046,"props":49559,"children":49560},{"class":1048,"line":1210},[49561,49565,49569,49574,49578],{"type":30,"tag":1046,"props":49562,"children":49563},{"style":1053},[49564],{"type":40,"value":1130},{"type":30,"tag":1046,"props":49566,"children":49567},{"style":1053},[49568],{"type":40,"value":1135},{"type":30,"tag":1046,"props":49570,"children":49571},{"style":1138},[49572],{"type":40,"value":49573}," testSoustraction",{"type":30,"tag":1046,"props":49575,"children":49576},{"style":1070},[49577],{"type":40,"value":1320},{"type":30,"tag":1046,"props":49579,"children":49580},{"style":1070},[49581],{"type":40,"value":1073},{"type":30,"tag":1046,"props":49583,"children":49584},{"class":1048,"line":1218},[49585,49589,49593,49597,49601,49605],{"type":30,"tag":1046,"props":49586,"children":49587},{"style":1084},[49588],{"type":40,"value":47630},{"type":30,"tag":1046,"props":49590,"children":49591},{"style":1105},[49592],{"type":40,"value":32686},{"type":30,"tag":1046,"props":49594,"children":49595},{"style":1795},[49596],{"type":40,"value":1798},{"type":30,"tag":1046,"props":49598,"children":49599},{"style":1053},[49600],{"type":40,"value":2480},{"type":30,"tag":1046,"props":49602,"children":49603},{"style":1138},[49604],{"type":40,"value":47647},{"type":30,"tag":1046,"props":49606,"children":49607},{"style":1070},[49608],{"type":40,"value":1406},{"type":30,"tag":1046,"props":49610,"children":49611},{"class":1048,"line":1255},[49612,49616,49620,49624,49628,49632,49637,49641,49646,49650,49654],{"type":30,"tag":1046,"props":49613,"children":49614},{"style":1053},[49615],{"type":40,"value":47659},{"type":30,"tag":1046,"props":49617,"children":49618},{"style":1105},[49619],{"type":40,"value":47664},{"type":30,"tag":1046,"props":49621,"children":49622},{"style":1795},[49623],{"type":40,"value":1798},{"type":30,"tag":1046,"props":49625,"children":49626},{"style":1105},[49627],{"type":40,"value":32800},{"type":30,"tag":1046,"props":49629,"children":49630},{"style":1070},[49631],{"type":40,"value":1179},{"type":30,"tag":1046,"props":49633,"children":49634},{"style":1138},[49635],{"type":40,"value":49636},"soustraction",{"type":30,"tag":1046,"props":49638,"children":49639},{"style":1070},[49640],{"type":40,"value":1146},{"type":30,"tag":1046,"props":49642,"children":49643},{"style":6886},[49644],{"type":40,"value":49645},"10",{"type":30,"tag":1046,"props":49647,"children":49648},{"style":1070},[49649],{"type":40,"value":2891},{"type":30,"tag":1046,"props":49651,"children":49652},{"style":6886},[49653],{"type":40,"value":29352},{"type":30,"tag":1046,"props":49655,"children":49656},{"style":1070},[49657],{"type":40,"value":1198},{"type":30,"tag":1046,"props":49659,"children":49660},{"class":1048,"line":1284},[49661,49665,49669,49674,49678,49682,49686,49691],{"type":30,"tag":1046,"props":49662,"children":49663},{"style":1138},[49664],{"type":40,"value":26812},{"type":30,"tag":1046,"props":49666,"children":49667},{"style":1070},[49668],{"type":40,"value":1146},{"type":30,"tag":1046,"props":49670,"children":49671},{"style":6886},[49672],{"type":40,"value":49673},"7",{"type":30,"tag":1046,"props":49675,"children":49676},{"style":1070},[49677],{"type":40,"value":2891},{"type":30,"tag":1046,"props":49679,"children":49680},{"style":1105},[49681],{"type":40,"value":47726},{"type":30,"tag":1046,"props":49683,"children":49684},{"style":1070},[49685],{"type":40,"value":2891},{"type":30,"tag":1046,"props":49687,"children":49688},{"style":1675},[49689],{"type":40,"value":49690}," \"La soustraction de 10 et 3 devrait être 7\"",{"type":30,"tag":1046,"props":49692,"children":49693},{"style":1070},[49694],{"type":40,"value":1198},{"type":30,"tag":1046,"props":49696,"children":49697},{"class":1048,"line":1292},[49698],{"type":30,"tag":1046,"props":49699,"children":49700},{"style":1070},[49701],{"type":40,"value":1207},{"type":30,"tag":1046,"props":49703,"children":49704},{"class":1048,"line":1300},[49705],{"type":30,"tag":1046,"props":49706,"children":49707},{"style":1070},[49708],{"type":40,"value":1423},{"type":30,"tag":2339,"props":49710,"children":49712},{"id":49711},"_3-mockito-pour-des-tests-unitaires-et-dintégration-avec-des-mocks",[49713,49714],{"type":40,"value":293},{"type":30,"tag":36,"props":49715,"children":49716},{},[49717],{"type":40,"value":49718},"Mockito : Pour des tests unitaires et d'intégration avec des mocks",{"type":30,"tag":43,"props":49720,"children":49721},{},[49722,49726],{"type":30,"tag":36,"props":49723,"children":49724},{},[49725],{"type":40,"value":12971},{"type":40,"value":49727}," est un framework spécialisé dans les tests unitaires qui nécessitent de simuler le comportement de certains objets.",{"type":30,"tag":43737,"props":49729,"children":49731},{"id":49730},"exemple-de-test-avec-mockito",[49732],{"type":40,"value":49733},"Exemple de test avec Mockito :",{"type":30,"tag":1035,"props":49735,"children":49737},{"className":1039,"code":49736,"language":1038,"meta":8,"style":8},"import org.junit.jupiter.api.Test;\nimport static org.mockito.Mockito.*;\nimport static org.junit.jupiter.api.Assertions.*;\n\npublic class ServiceTest {\n    \n    @Test\n    public void testServiceAvecMock() {\n        // Mock d'une dépendance\n        UserRepository userRepository = mock(UserRepository.class);\n        when(userRepository.findUserById(1)).thenReturn(new User(\"John\", \"Doe\"));\n\n        UserService userService = new UserService(userRepository);\n        User user = userService.getUser(1);\n\n        // Vérification\n        assertEquals(\"John\", user.getFirstName(), \"Le prénom devrait être John\");\n        verify(userRepository).findUserById(1);  // Vérifie que la méthode a bien été appelée\n    }\n}\n",[49738],{"type":30,"tag":1042,"props":49739,"children":49740},{"__ignoreMap":8},[49741,49788,49832,49891,49898,49918,49925,49936,49960,49968,50010,50084,50091,50128,50168,50175,50183,50228,50269,50276],{"type":30,"tag":1046,"props":49742,"children":49743},{"class":1048,"line":1049},[49744,49748,49752,49756,49760,49764,49768,49772,49776,49780,49784],{"type":30,"tag":1046,"props":49745,"children":49746},{"style":1053},[49747],{"type":40,"value":9107},{"type":30,"tag":1046,"props":49749,"children":49750},{"style":1105},[49751],{"type":40,"value":9431},{"type":30,"tag":1046,"props":49753,"children":49754},{"style":1070},[49755],{"type":40,"value":1179},{"type":30,"tag":1046,"props":49757,"children":49758},{"style":1105},[49759],{"type":40,"value":26555},{"type":30,"tag":1046,"props":49761,"children":49762},{"style":1070},[49763],{"type":40,"value":1179},{"type":30,"tag":1046,"props":49765,"children":49766},{"style":1105},[49767],{"type":40,"value":47472},{"type":30,"tag":1046,"props":49769,"children":49770},{"style":1070},[49771],{"type":40,"value":1179},{"type":30,"tag":1046,"props":49773,"children":49774},{"style":1105},[49775],{"type":40,"value":47481},{"type":30,"tag":1046,"props":49777,"children":49778},{"style":1070},[49779],{"type":40,"value":1179},{"type":30,"tag":1046,"props":49781,"children":49782},{"style":1105},[49783],{"type":40,"value":26605},{"type":30,"tag":1046,"props":49785,"children":49786},{"style":1070},[49787],{"type":40,"value":1113},{"type":30,"tag":1046,"props":49789,"children":49790},{"class":1048,"line":675},[49791,49795,49799,49803,49807,49812,49816,49820,49824,49828],{"type":30,"tag":1046,"props":49792,"children":49793},{"style":1053},[49794],{"type":40,"value":9107},{"type":30,"tag":1046,"props":49796,"children":49797},{"style":1053},[49798],{"type":40,"value":12363},{"type":30,"tag":1046,"props":49800,"children":49801},{"style":1105},[49802],{"type":40,"value":9431},{"type":30,"tag":1046,"props":49804,"children":49805},{"style":1070},[49806],{"type":40,"value":1179},{"type":30,"tag":1046,"props":49808,"children":49809},{"style":1105},[49810],{"type":40,"value":49811},"mockito",{"type":30,"tag":1046,"props":49813,"children":49814},{"style":1070},[49815],{"type":40,"value":1179},{"type":30,"tag":1046,"props":49817,"children":49818},{"style":1105},[49819],{"type":40,"value":12971},{"type":30,"tag":1046,"props":49821,"children":49822},{"style":1070},[49823],{"type":40,"value":1179},{"type":30,"tag":1046,"props":49825,"children":49826},{"style":9718},[49827],{"type":40,"value":21197},{"type":30,"tag":1046,"props":49829,"children":49830},{"style":1070},[49831],{"type":40,"value":1113},{"type":30,"tag":1046,"props":49833,"children":49834},{"class":1048,"line":681},[49835,49839,49843,49847,49851,49855,49859,49863,49867,49871,49875,49879,49883,49887],{"type":30,"tag":1046,"props":49836,"children":49837},{"style":1053},[49838],{"type":40,"value":9107},{"type":30,"tag":1046,"props":49840,"children":49841},{"style":1053},[49842],{"type":40,"value":12363},{"type":30,"tag":1046,"props":49844,"children":49845},{"style":1105},[49846],{"type":40,"value":9431},{"type":30,"tag":1046,"props":49848,"children":49849},{"style":1070},[49850],{"type":40,"value":1179},{"type":30,"tag":1046,"props":49852,"children":49853},{"style":1105},[49854],{"type":40,"value":26555},{"type":30,"tag":1046,"props":49856,"children":49857},{"style":1070},[49858],{"type":40,"value":1179},{"type":30,"tag":1046,"props":49860,"children":49861},{"style":1105},[49862],{"type":40,"value":47472},{"type":30,"tag":1046,"props":49864,"children":49865},{"style":1070},[49866],{"type":40,"value":1179},{"type":30,"tag":1046,"props":49868,"children":49869},{"style":1105},[49870],{"type":40,"value":47481},{"type":30,"tag":1046,"props":49872,"children":49873},{"style":1070},[49874],{"type":40,"value":1179},{"type":30,"tag":1046,"props":49876,"children":49877},{"style":1105},[49878],{"type":40,"value":47541},{"type":30,"tag":1046,"props":49880,"children":49881},{"style":1070},[49882],{"type":40,"value":1179},{"type":30,"tag":1046,"props":49884,"children":49885},{"style":9718},[49886],{"type":40,"value":21197},{"type":30,"tag":1046,"props":49888,"children":49889},{"style":1070},[49890],{"type":40,"value":1113},{"type":30,"tag":1046,"props":49892,"children":49893},{"class":1048,"line":1124},[49894],{"type":30,"tag":1046,"props":49895,"children":49896},{"emptyLinePlaceholder":13},[49897],{"type":40,"value":1121},{"type":30,"tag":1046,"props":49899,"children":49900},{"class":1048,"line":1168},[49901,49905,49909,49914],{"type":30,"tag":1046,"props":49902,"children":49903},{"style":1053},[49904],{"type":40,"value":1056},{"type":30,"tag":1046,"props":49906,"children":49907},{"style":1053},[49908],{"type":40,"value":1061},{"type":30,"tag":1046,"props":49910,"children":49911},{"style":1064},[49912],{"type":40,"value":49913}," ServiceTest",{"type":30,"tag":1046,"props":49915,"children":49916},{"style":1070},[49917],{"type":40,"value":1073},{"type":30,"tag":1046,"props":49919,"children":49920},{"class":1048,"line":1201},[49921],{"type":30,"tag":1046,"props":49922,"children":49923},{"style":1105},[49924],{"type":40,"value":16132},{"type":30,"tag":1046,"props":49926,"children":49927},{"class":1048,"line":1210},[49928,49932],{"type":30,"tag":1046,"props":49929,"children":49930},{"style":1647},[49931],{"type":40,"value":1828},{"type":30,"tag":1046,"props":49933,"children":49934},{"style":1653},[49935],{"type":40,"value":13736},{"type":30,"tag":1046,"props":49937,"children":49938},{"class":1048,"line":1218},[49939,49943,49947,49952,49956],{"type":30,"tag":1046,"props":49940,"children":49941},{"style":1053},[49942],{"type":40,"value":1130},{"type":30,"tag":1046,"props":49944,"children":49945},{"style":1053},[49946],{"type":40,"value":1135},{"type":30,"tag":1046,"props":49948,"children":49949},{"style":1138},[49950],{"type":40,"value":49951}," testServiceAvecMock",{"type":30,"tag":1046,"props":49953,"children":49954},{"style":1070},[49955],{"type":40,"value":1320},{"type":30,"tag":1046,"props":49957,"children":49958},{"style":1070},[49959],{"type":40,"value":1073},{"type":30,"tag":1046,"props":49961,"children":49962},{"class":1048,"line":1255},[49963],{"type":30,"tag":1046,"props":49964,"children":49965},{"style":3961},[49966],{"type":40,"value":49967},"        // Mock d'une dépendance\n",{"type":30,"tag":1046,"props":49969,"children":49970},{"class":1048,"line":1284},[49971,49976,49981,49985,49989,49993,49998,50002,50006],{"type":30,"tag":1046,"props":49972,"children":49973},{"style":1084},[49974],{"type":40,"value":49975},"        UserRepository",{"type":30,"tag":1046,"props":49977,"children":49978},{"style":1105},[49979],{"type":40,"value":49980}," userRepository ",{"type":30,"tag":1046,"props":49982,"children":49983},{"style":1795},[49984],{"type":40,"value":1798},{"type":30,"tag":1046,"props":49986,"children":49987},{"style":1138},[49988],{"type":40,"value":34537},{"type":30,"tag":1046,"props":49990,"children":49991},{"style":1070},[49992],{"type":40,"value":1146},{"type":30,"tag":1046,"props":49994,"children":49995},{"style":1105},[49996],{"type":40,"value":49997},"UserRepository",{"type":30,"tag":1046,"props":49999,"children":50000},{"style":1070},[50001],{"type":40,"value":1179},{"type":30,"tag":1046,"props":50003,"children":50004},{"style":1105},[50005],{"type":40,"value":7282},{"type":30,"tag":1046,"props":50007,"children":50008},{"style":1070},[50009],{"type":40,"value":1198},{"type":30,"tag":1046,"props":50011,"children":50012},{"class":1048,"line":1292},[50013,50018,50022,50027,50031,50036,50040,50044,50048,50052,50056,50060,50064,50068,50072,50076,50080],{"type":30,"tag":1046,"props":50014,"children":50015},{"style":1138},[50016],{"type":40,"value":50017},"        when",{"type":30,"tag":1046,"props":50019,"children":50020},{"style":1070},[50021],{"type":40,"value":1146},{"type":30,"tag":1046,"props":50023,"children":50024},{"style":1105},[50025],{"type":40,"value":50026},"userRepository",{"type":30,"tag":1046,"props":50028,"children":50029},{"style":1070},[50030],{"type":40,"value":1179},{"type":30,"tag":1046,"props":50032,"children":50033},{"style":1138},[50034],{"type":40,"value":50035},"findUserById",{"type":30,"tag":1046,"props":50037,"children":50038},{"style":1070},[50039],{"type":40,"value":1146},{"type":30,"tag":1046,"props":50041,"children":50042},{"style":6886},[50043],{"type":40,"value":10166},{"type":30,"tag":1046,"props":50045,"children":50046},{"style":1070},[50047],{"type":40,"value":48658},{"type":30,"tag":1046,"props":50049,"children":50050},{"style":1138},[50051],{"type":40,"value":34593},{"type":30,"tag":1046,"props":50053,"children":50054},{"style":1070},[50055],{"type":40,"value":1146},{"type":30,"tag":1046,"props":50057,"children":50058},{"style":1053},[50059],{"type":40,"value":4234},{"type":30,"tag":1046,"props":50061,"children":50062},{"style":1138},[50063],{"type":40,"value":9900},{"type":30,"tag":1046,"props":50065,"children":50066},{"style":1070},[50067],{"type":40,"value":1146},{"type":30,"tag":1046,"props":50069,"children":50070},{"style":1675},[50071],{"type":40,"value":26712},{"type":30,"tag":1046,"props":50073,"children":50074},{"style":1070},[50075],{"type":40,"value":2891},{"type":30,"tag":1046,"props":50077,"children":50078},{"style":1675},[50079],{"type":40,"value":48136},{"type":30,"tag":1046,"props":50081,"children":50082},{"style":1070},[50083],{"type":40,"value":4457},{"type":30,"tag":1046,"props":50085,"children":50086},{"class":1048,"line":1300},[50087],{"type":30,"tag":1046,"props":50088,"children":50089},{"emptyLinePlaceholder":13},[50090],{"type":40,"value":1121},{"type":30,"tag":1046,"props":50092,"children":50093},{"class":1048,"line":1327},[50094,50099,50104,50108,50112,50116,50120,50124],{"type":30,"tag":1046,"props":50095,"children":50096},{"style":1084},[50097],{"type":40,"value":50098},"        UserService",{"type":30,"tag":1046,"props":50100,"children":50101},{"style":1105},[50102],{"type":40,"value":50103}," userService ",{"type":30,"tag":1046,"props":50105,"children":50106},{"style":1795},[50107],{"type":40,"value":1798},{"type":30,"tag":1046,"props":50109,"children":50110},{"style":1053},[50111],{"type":40,"value":2480},{"type":30,"tag":1046,"props":50113,"children":50114},{"style":1138},[50115],{"type":40,"value":48044},{"type":30,"tag":1046,"props":50117,"children":50118},{"style":1070},[50119],{"type":40,"value":1146},{"type":30,"tag":1046,"props":50121,"children":50122},{"style":1105},[50123],{"type":40,"value":50026},{"type":30,"tag":1046,"props":50125,"children":50126},{"style":1070},[50127],{"type":40,"value":1198},{"type":30,"tag":1046,"props":50129,"children":50130},{"class":1048,"line":1354},[50131,50135,50139,50143,50147,50151,50156,50160,50164],{"type":30,"tag":1046,"props":50132,"children":50133},{"style":1084},[50134],{"type":40,"value":48103},{"type":30,"tag":1046,"props":50136,"children":50137},{"style":1105},[50138],{"type":40,"value":31318},{"type":30,"tag":1046,"props":50140,"children":50141},{"style":1795},[50142],{"type":40,"value":1798},{"type":30,"tag":1046,"props":50144,"children":50145},{"style":1105},[50146],{"type":40,"value":48049},{"type":30,"tag":1046,"props":50148,"children":50149},{"style":1070},[50150],{"type":40,"value":1179},{"type":30,"tag":1046,"props":50152,"children":50153},{"style":1138},[50154],{"type":40,"value":50155},"getUser",{"type":30,"tag":1046,"props":50157,"children":50158},{"style":1070},[50159],{"type":40,"value":1146},{"type":30,"tag":1046,"props":50161,"children":50162},{"style":6886},[50163],{"type":40,"value":10166},{"type":30,"tag":1046,"props":50165,"children":50166},{"style":1070},[50167],{"type":40,"value":1198},{"type":30,"tag":1046,"props":50169,"children":50170},{"class":1048,"line":1391},[50171],{"type":30,"tag":1046,"props":50172,"children":50173},{"emptyLinePlaceholder":13},[50174],{"type":40,"value":1121},{"type":30,"tag":1046,"props":50176,"children":50177},{"class":1048,"line":1409},[50178],{"type":30,"tag":1046,"props":50179,"children":50180},{"style":3961},[50181],{"type":40,"value":50182},"        // Vérification\n",{"type":30,"tag":1046,"props":50184,"children":50185},{"class":1048,"line":1417},[50186,50190,50194,50198,50202,50206,50210,50215,50219,50224],{"type":30,"tag":1046,"props":50187,"children":50188},{"style":1138},[50189],{"type":40,"value":26812},{"type":30,"tag":1046,"props":50191,"children":50192},{"style":1070},[50193],{"type":40,"value":1146},{"type":30,"tag":1046,"props":50195,"children":50196},{"style":1675},[50197],{"type":40,"value":26712},{"type":30,"tag":1046,"props":50199,"children":50200},{"style":1070},[50201],{"type":40,"value":2891},{"type":30,"tag":1046,"props":50203,"children":50204},{"style":1105},[50205],{"type":40,"value":15092},{"type":30,"tag":1046,"props":50207,"children":50208},{"style":1070},[50209],{"type":40,"value":1179},{"type":30,"tag":1046,"props":50211,"children":50212},{"style":1138},[50213],{"type":40,"value":50214},"getFirstName",{"type":30,"tag":1046,"props":50216,"children":50217},{"style":1070},[50218],{"type":40,"value":21310},{"type":30,"tag":1046,"props":50220,"children":50221},{"style":1675},[50222],{"type":40,"value":50223}," \"Le prénom devrait être John\"",{"type":30,"tag":1046,"props":50225,"children":50226},{"style":1070},[50227],{"type":40,"value":1198},{"type":30,"tag":1046,"props":50229,"children":50230},{"class":1048,"line":2023},[50231,50236,50240,50244,50248,50252,50256,50260,50264],{"type":30,"tag":1046,"props":50232,"children":50233},{"style":1138},[50234],{"type":40,"value":50235},"        verify",{"type":30,"tag":1046,"props":50237,"children":50238},{"style":1070},[50239],{"type":40,"value":1146},{"type":30,"tag":1046,"props":50241,"children":50242},{"style":1105},[50243],{"type":40,"value":50026},{"type":30,"tag":1046,"props":50245,"children":50246},{"style":1070},[50247],{"type":40,"value":6392},{"type":30,"tag":1046,"props":50249,"children":50250},{"style":1138},[50251],{"type":40,"value":50035},{"type":30,"tag":1046,"props":50253,"children":50254},{"style":1070},[50255],{"type":40,"value":1146},{"type":30,"tag":1046,"props":50257,"children":50258},{"style":6886},[50259],{"type":40,"value":10166},{"type":30,"tag":1046,"props":50261,"children":50262},{"style":1070},[50263],{"type":40,"value":3958},{"type":30,"tag":1046,"props":50265,"children":50266},{"style":3961},[50267],{"type":40,"value":50268},"  // Vérifie que la méthode a bien été appelée\n",{"type":30,"tag":1046,"props":50270,"children":50271},{"class":1048,"line":2083},[50272],{"type":30,"tag":1046,"props":50273,"children":50274},{"style":1070},[50275],{"type":40,"value":1207},{"type":30,"tag":1046,"props":50277,"children":50278},{"class":1048,"line":2126},[50279],{"type":30,"tag":1046,"props":50280,"children":50281},{"style":1070},[50282],{"type":40,"value":1423},{"type":30,"tag":211,"props":50284,"children":50286},{"cta":213,"href":214,"title":50285,"type":216},"Vos développeurs ont peur de déployer en production ?",[50287],{"type":30,"tag":43,"props":50288,"children":50289},{},[50290],{"type":40,"value":50291},"Pas de filet de sécurité, des bugs qui remontent des utilisateurs plutôt que des tests, et chaque release génère de l’anxiété dans l’équipe. Réservons 30 minutes pour diagnostiquer votre stratégie de tests et définir les priorités pour regagner confiance dans vos déploiements.",{"type":30,"tag":2339,"props":50293,"children":50295},{"id":50294},"_4-selenium-automatisation-des-tests-fonctionnels",[50296,50297],{"type":40,"value":318},{"type":30,"tag":36,"props":50298,"children":50299},{},[50300],{"type":40,"value":50301},"Selenium : Automatisation des tests fonctionnels",{"type":30,"tag":43,"props":50303,"children":50304},{},[50305,50309],{"type":30,"tag":36,"props":50306,"children":50307},{},[50308],{"type":40,"value":48254},{"type":40,"value":50310}," est le framework de référence pour les tests fonctionnels, spécialement pour les applications web.",{"type":30,"tag":43737,"props":50312,"children":50314},{"id":50313},"exemple-de-test-fonctionnel-avec-selenium-java",[50315],{"type":40,"value":50316},"Exemple de test fonctionnel avec Selenium (Java) :",{"type":30,"tag":1035,"props":50318,"children":50320},{"className":1039,"code":50319,"language":1038,"meta":8,"style":8},"import org.openqa.selenium.By;\nimport org.openqa.selenium.WebDriver;\nimport org.openqa.selenium.chrome.ChromeDriver;\n\npublic class TestFonctionnel {\n\n    public static void main(String[] args) {\n        // Configuration du WebDriver pour Chrome\n        System.setProperty(\"webdriver.chrome.driver\", \"path_to_chromedriver\");\n        WebDriver driver = new ChromeDriver();\n\n        // Ouvrir la page d'accueil\n        driver.get(\"http://monapplication.com\");\n\n        // Vérification du titre de la page\n        String titre = driver.getTitle();\n        if(titre.equals(\"Accueil - Mon Application\")) {\n            System.out.println(\"Page d'accueil chargée correctement !\");\n        }\n\n        // Fermer le navigateur\n        driver.quit();\n    }\n}\n",[50321],{"type":30,"tag":1042,"props":50322,"children":50323},{"__ignoreMap":8},[50324,50363,50402,50449,50456,50476,50483,50526,50534,50569,50596,50603,50611,50639,50646,50654,50686,50727,50763,50770,50777,50784,50803,50810],{"type":30,"tag":1046,"props":50325,"children":50326},{"class":1048,"line":1049},[50327,50331,50335,50339,50343,50347,50351,50355,50359],{"type":30,"tag":1046,"props":50328,"children":50329},{"style":1053},[50330],{"type":40,"value":9107},{"type":30,"tag":1046,"props":50332,"children":50333},{"style":1105},[50334],{"type":40,"value":9431},{"type":30,"tag":1046,"props":50336,"children":50337},{"style":1070},[50338],{"type":40,"value":1179},{"type":30,"tag":1046,"props":50340,"children":50341},{"style":1105},[50342],{"type":40,"value":48289},{"type":30,"tag":1046,"props":50344,"children":50345},{"style":1070},[50346],{"type":40,"value":1179},{"type":30,"tag":1046,"props":50348,"children":50349},{"style":1105},[50350],{"type":40,"value":48298},{"type":30,"tag":1046,"props":50352,"children":50353},{"style":1070},[50354],{"type":40,"value":1179},{"type":30,"tag":1046,"props":50356,"children":50357},{"style":1105},[50358],{"type":40,"value":48396},{"type":30,"tag":1046,"props":50360,"children":50361},{"style":1070},[50362],{"type":40,"value":1113},{"type":30,"tag":1046,"props":50364,"children":50365},{"class":1048,"line":675},[50366,50370,50374,50378,50382,50386,50390,50394,50398],{"type":30,"tag":1046,"props":50367,"children":50368},{"style":1053},[50369],{"type":40,"value":9107},{"type":30,"tag":1046,"props":50371,"children":50372},{"style":1105},[50373],{"type":40,"value":9431},{"type":30,"tag":1046,"props":50375,"children":50376},{"style":1070},[50377],{"type":40,"value":1179},{"type":30,"tag":1046,"props":50379,"children":50380},{"style":1105},[50381],{"type":40,"value":48289},{"type":30,"tag":1046,"props":50383,"children":50384},{"style":1070},[50385],{"type":40,"value":1179},{"type":30,"tag":1046,"props":50387,"children":50388},{"style":1105},[50389],{"type":40,"value":48298},{"type":30,"tag":1046,"props":50391,"children":50392},{"style":1070},[50393],{"type":40,"value":1179},{"type":30,"tag":1046,"props":50395,"children":50396},{"style":1105},[50397],{"type":40,"value":48307},{"type":30,"tag":1046,"props":50399,"children":50400},{"style":1070},[50401],{"type":40,"value":1113},{"type":30,"tag":1046,"props":50403,"children":50404},{"class":1048,"line":681},[50405,50409,50413,50417,50421,50425,50429,50433,50437,50441,50445],{"type":30,"tag":1046,"props":50406,"children":50407},{"style":1053},[50408],{"type":40,"value":9107},{"type":30,"tag":1046,"props":50410,"children":50411},{"style":1105},[50412],{"type":40,"value":9431},{"type":30,"tag":1046,"props":50414,"children":50415},{"style":1070},[50416],{"type":40,"value":1179},{"type":30,"tag":1046,"props":50418,"children":50419},{"style":1105},[50420],{"type":40,"value":48289},{"type":30,"tag":1046,"props":50422,"children":50423},{"style":1070},[50424],{"type":40,"value":1179},{"type":30,"tag":1046,"props":50426,"children":50427},{"style":1105},[50428],{"type":40,"value":48298},{"type":30,"tag":1046,"props":50430,"children":50431},{"style":1070},[50432],{"type":40,"value":1179},{"type":30,"tag":1046,"props":50434,"children":50435},{"style":1105},[50436],{"type":40,"value":48347},{"type":30,"tag":1046,"props":50438,"children":50439},{"style":1070},[50440],{"type":40,"value":1179},{"type":30,"tag":1046,"props":50442,"children":50443},{"style":1105},[50444],{"type":40,"value":48356},{"type":30,"tag":1046,"props":50446,"children":50447},{"style":1070},[50448],{"type":40,"value":1113},{"type":30,"tag":1046,"props":50450,"children":50451},{"class":1048,"line":1124},[50452],{"type":30,"tag":1046,"props":50453,"children":50454},{"emptyLinePlaceholder":13},[50455],{"type":40,"value":1121},{"type":30,"tag":1046,"props":50457,"children":50458},{"class":1048,"line":1168},[50459,50463,50467,50472],{"type":30,"tag":1046,"props":50460,"children":50461},{"style":1053},[50462],{"type":40,"value":1056},{"type":30,"tag":1046,"props":50464,"children":50465},{"style":1053},[50466],{"type":40,"value":1061},{"type":30,"tag":1046,"props":50468,"children":50469},{"style":1064},[50470],{"type":40,"value":50471}," TestFonctionnel",{"type":30,"tag":1046,"props":50473,"children":50474},{"style":1070},[50475],{"type":40,"value":1073},{"type":30,"tag":1046,"props":50477,"children":50478},{"class":1048,"line":1201},[50479],{"type":30,"tag":1046,"props":50480,"children":50481},{"emptyLinePlaceholder":13},[50482],{"type":40,"value":1121},{"type":30,"tag":1046,"props":50484,"children":50485},{"class":1048,"line":1210},[50486,50490,50494,50498,50502,50506,50510,50514,50518,50522],{"type":30,"tag":1046,"props":50487,"children":50488},{"style":1053},[50489],{"type":40,"value":1130},{"type":30,"tag":1046,"props":50491,"children":50492},{"style":1053},[50493],{"type":40,"value":12363},{"type":30,"tag":1046,"props":50495,"children":50496},{"style":1053},[50497],{"type":40,"value":1135},{"type":30,"tag":1046,"props":50499,"children":50500},{"style":1138},[50501],{"type":40,"value":12372},{"type":30,"tag":1046,"props":50503,"children":50504},{"style":1070},[50505],{"type":40,"value":1146},{"type":30,"tag":1046,"props":50507,"children":50508},{"style":1053},[50509],{"type":40,"value":2882},{"type":30,"tag":1046,"props":50511,"children":50512},{"style":1070},[50513],{"type":40,"value":12385},{"type":30,"tag":1046,"props":50515,"children":50516},{"style":1153},[50517],{"type":40,"value":12390},{"type":30,"tag":1046,"props":50519,"children":50520},{"style":1070},[50521],{"type":40,"value":1161},{"type":30,"tag":1046,"props":50523,"children":50524},{"style":1070},[50525],{"type":40,"value":1073},{"type":30,"tag":1046,"props":50527,"children":50528},{"class":1048,"line":1218},[50529],{"type":30,"tag":1046,"props":50530,"children":50531},{"style":3961},[50532],{"type":40,"value":50533},"        // Configuration du WebDriver pour Chrome\n",{"type":30,"tag":1046,"props":50535,"children":50536},{"class":1048,"line":1255},[50537,50541,50545,50549,50553,50557,50561,50565],{"type":30,"tag":1046,"props":50538,"children":50539},{"style":1105},[50540],{"type":40,"value":12555},{"type":30,"tag":1046,"props":50542,"children":50543},{"style":1070},[50544],{"type":40,"value":1179},{"type":30,"tag":1046,"props":50546,"children":50547},{"style":1138},[50548],{"type":40,"value":48501},{"type":30,"tag":1046,"props":50550,"children":50551},{"style":1070},[50552],{"type":40,"value":1146},{"type":30,"tag":1046,"props":50554,"children":50555},{"style":1675},[50556],{"type":40,"value":48510},{"type":30,"tag":1046,"props":50558,"children":50559},{"style":1070},[50560],{"type":40,"value":2891},{"type":30,"tag":1046,"props":50562,"children":50563},{"style":1675},[50564],{"type":40,"value":48519},{"type":30,"tag":1046,"props":50566,"children":50567},{"style":1070},[50568],{"type":40,"value":1198},{"type":30,"tag":1046,"props":50570,"children":50571},{"class":1048,"line":1284},[50572,50576,50580,50584,50588,50592],{"type":30,"tag":1046,"props":50573,"children":50574},{"style":1084},[50575],{"type":40,"value":48531},{"type":30,"tag":1046,"props":50577,"children":50578},{"style":1105},[50579],{"type":40,"value":48536},{"type":30,"tag":1046,"props":50581,"children":50582},{"style":1795},[50583],{"type":40,"value":1798},{"type":30,"tag":1046,"props":50585,"children":50586},{"style":1053},[50587],{"type":40,"value":2480},{"type":30,"tag":1046,"props":50589,"children":50590},{"style":1138},[50591],{"type":40,"value":48549},{"type":30,"tag":1046,"props":50593,"children":50594},{"style":1070},[50595],{"type":40,"value":1406},{"type":30,"tag":1046,"props":50597,"children":50598},{"class":1048,"line":1292},[50599],{"type":30,"tag":1046,"props":50600,"children":50601},{"emptyLinePlaceholder":13},[50602],{"type":40,"value":1121},{"type":30,"tag":1046,"props":50604,"children":50605},{"class":1048,"line":1300},[50606],{"type":30,"tag":1046,"props":50607,"children":50608},{"style":3961},[50609],{"type":40,"value":50610},"        // Ouvrir la page d'accueil\n",{"type":30,"tag":1046,"props":50612,"children":50613},{"class":1048,"line":1327},[50614,50618,50622,50626,50630,50635],{"type":30,"tag":1046,"props":50615,"children":50616},{"style":1105},[50617],{"type":40,"value":48576},{"type":30,"tag":1046,"props":50619,"children":50620},{"style":1070},[50621],{"type":40,"value":1179},{"type":30,"tag":1046,"props":50623,"children":50624},{"style":1138},[50625],{"type":40,"value":5147},{"type":30,"tag":1046,"props":50627,"children":50628},{"style":1070},[50629],{"type":40,"value":1146},{"type":30,"tag":1046,"props":50631,"children":50632},{"style":1675},[50633],{"type":40,"value":50634},"\"http://monapplication.com\"",{"type":30,"tag":1046,"props":50636,"children":50637},{"style":1070},[50638],{"type":40,"value":1198},{"type":30,"tag":1046,"props":50640,"children":50641},{"class":1048,"line":1354},[50642],{"type":30,"tag":1046,"props":50643,"children":50644},{"emptyLinePlaceholder":13},[50645],{"type":40,"value":1121},{"type":30,"tag":1046,"props":50647,"children":50648},{"class":1048,"line":1391},[50649],{"type":30,"tag":1046,"props":50650,"children":50651},{"style":3961},[50652],{"type":40,"value":50653},"        // Vérification du titre de la page\n",{"type":30,"tag":1046,"props":50655,"children":50656},{"class":1048,"line":1409},[50657,50661,50666,50670,50674,50678,50682],{"type":30,"tag":1046,"props":50658,"children":50659},{"style":1084},[50660],{"type":40,"value":12480},{"type":30,"tag":1046,"props":50662,"children":50663},{"style":1105},[50664],{"type":40,"value":50665}," titre ",{"type":30,"tag":1046,"props":50667,"children":50668},{"style":1795},[50669],{"type":40,"value":1798},{"type":30,"tag":1046,"props":50671,"children":50672},{"style":1105},[50673],{"type":40,"value":48826},{"type":30,"tag":1046,"props":50675,"children":50676},{"style":1070},[50677],{"type":40,"value":1179},{"type":30,"tag":1046,"props":50679,"children":50680},{"style":1138},[50681],{"type":40,"value":48835},{"type":30,"tag":1046,"props":50683,"children":50684},{"style":1070},[50685],{"type":40,"value":1406},{"type":30,"tag":1046,"props":50687,"children":50688},{"class":1048,"line":1417},[50689,50693,50697,50702,50706,50710,50714,50719,50723],{"type":30,"tag":1046,"props":50690,"children":50691},{"style":1053},[50692],{"type":40,"value":11856},{"type":30,"tag":1046,"props":50694,"children":50695},{"style":1070},[50696],{"type":40,"value":1146},{"type":30,"tag":1046,"props":50698,"children":50699},{"style":1105},[50700],{"type":40,"value":50701},"titre",{"type":30,"tag":1046,"props":50703,"children":50704},{"style":1070},[50705],{"type":40,"value":1179},{"type":30,"tag":1046,"props":50707,"children":50708},{"style":1138},[50709],{"type":40,"value":17741},{"type":30,"tag":1046,"props":50711,"children":50712},{"style":1070},[50713],{"type":40,"value":1146},{"type":30,"tag":1046,"props":50715,"children":50716},{"style":1675},[50717],{"type":40,"value":50718},"\"Accueil - Mon Application\"",{"type":30,"tag":1046,"props":50720,"children":50721},{"style":1070},[50722],{"type":40,"value":9913},{"type":30,"tag":1046,"props":50724,"children":50725},{"style":1070},[50726],{"type":40,"value":1073},{"type":30,"tag":1046,"props":50728,"children":50729},{"class":1048,"line":2023},[50730,50734,50738,50742,50746,50750,50754,50759],{"type":30,"tag":1046,"props":50731,"children":50732},{"style":1105},[50733],{"type":40,"value":33428},{"type":30,"tag":1046,"props":50735,"children":50736},{"style":1070},[50737],{"type":40,"value":1179},{"type":30,"tag":1046,"props":50739,"children":50740},{"style":1105},[50741],{"type":40,"value":12564},{"type":30,"tag":1046,"props":50743,"children":50744},{"style":1070},[50745],{"type":40,"value":1179},{"type":30,"tag":1046,"props":50747,"children":50748},{"style":1138},[50749],{"type":40,"value":12573},{"type":30,"tag":1046,"props":50751,"children":50752},{"style":1070},[50753],{"type":40,"value":1146},{"type":30,"tag":1046,"props":50755,"children":50756},{"style":1675},[50757],{"type":40,"value":50758},"\"Page d'accueil chargée correctement !\"",{"type":30,"tag":1046,"props":50760,"children":50761},{"style":1070},[50762],{"type":40,"value":1198},{"type":30,"tag":1046,"props":50764,"children":50765},{"class":1048,"line":2083},[50766],{"type":30,"tag":1046,"props":50767,"children":50768},{"style":1070},[50769],{"type":40,"value":11922},{"type":30,"tag":1046,"props":50771,"children":50772},{"class":1048,"line":2126},[50773],{"type":30,"tag":1046,"props":50774,"children":50775},{"emptyLinePlaceholder":13},[50776],{"type":40,"value":1121},{"type":30,"tag":1046,"props":50778,"children":50779},{"class":1048,"line":2159},[50780],{"type":30,"tag":1046,"props":50781,"children":50782},{"style":3961},[50783],{"type":40,"value":48989},{"type":30,"tag":1046,"props":50785,"children":50786},{"class":1048,"line":2167},[50787,50791,50795,50799],{"type":30,"tag":1046,"props":50788,"children":50789},{"style":1105},[50790],{"type":40,"value":48576},{"type":30,"tag":1046,"props":50792,"children":50793},{"style":1070},[50794],{"type":40,"value":1179},{"type":30,"tag":1046,"props":50796,"children":50797},{"style":1138},[50798],{"type":40,"value":49005},{"type":30,"tag":1046,"props":50800,"children":50801},{"style":1070},[50802],{"type":40,"value":1406},{"type":30,"tag":1046,"props":50804,"children":50805},{"class":1048,"line":4537},[50806],{"type":30,"tag":1046,"props":50807,"children":50808},{"style":1070},[50809],{"type":40,"value":1207},{"type":30,"tag":1046,"props":50811,"children":50812},{"class":1048,"line":4545},[50813],{"type":30,"tag":1046,"props":50814,"children":50815},{"style":1070},[50816],{"type":40,"value":1423},{"type":30,"tag":84,"props":50818,"children":50819},{},[],{"type":30,"tag":116,"props":50821,"children":50823},{"id":50822},"comment-choisir-le-bon-framework-pour-votre-projet",[50824],{"type":30,"tag":36,"props":50825,"children":50826},{},[50827],{"type":40,"value":50828},"Comment choisir le bon framework pour votre projet ?",{"type":30,"tag":43,"props":50830,"children":50831},{},[50832],{"type":40,"value":50833},"Le choix du framework dépend de plusieurs facteurs :",{"type":30,"tag":2339,"props":50835,"children":50837},{"id":50836},"_1-type-de-projet-et-complexité",[50838,50839],{"type":40,"value":242},{"type":30,"tag":36,"props":50840,"children":50841},{},[50842],{"type":40,"value":50843},"Type de projet et complexité",{"type":30,"tag":163,"props":50845,"children":50846},{},[50847,50867],{"type":30,"tag":167,"props":50848,"children":50849},{},[50850,50855,50856,50860,50861,50865],{"type":30,"tag":36,"props":50851,"children":50852},{},[50853],{"type":40,"value":50854},"Projets simples ou modérés",{"type":40,"value":24992},{"type":30,"tag":36,"props":50857,"children":50858},{},[50859],{"type":40,"value":12965},{"type":40,"value":1573},{"type":30,"tag":36,"props":50862,"children":50863},{},[50864],{"type":40,"value":47429},{"type":40,"value":50866}," pour des tests unitaires.",{"type":30,"tag":167,"props":50868,"children":50869},{},[50870,50875,50876,50880,50882,50886],{"type":30,"tag":36,"props":50871,"children":50872},{},[50873],{"type":40,"value":50874},"Projets complexes",{"type":40,"value":24992},{"type":30,"tag":36,"props":50877,"children":50878},{},[50879],{"type":40,"value":12971},{"type":40,"value":50881}," pour tester des interactions complexes, ",{"type":30,"tag":36,"props":50883,"children":50884},{},[50885],{"type":40,"value":47792},{"type":40,"value":50887}," pour des tests d'intégration.",{"type":30,"tag":2339,"props":50889,"children":50891},{"id":50890},"_2-nature-des-tests",[50892,50893],{"type":40,"value":268},{"type":30,"tag":36,"props":50894,"children":50895},{},[50896],{"type":40,"value":50897},"Nature des tests",{"type":30,"tag":163,"props":50899,"children":50900},{},[50901,50920,50939],{"type":30,"tag":167,"props":50902,"children":50903},{},[50904,50909,50910,50914,50915,50919],{"type":30,"tag":36,"props":50905,"children":50906},{},[50907],{"type":40,"value":50908},"Unitaires",{"type":40,"value":24992},{"type":30,"tag":36,"props":50911,"children":50912},{},[50913],{"type":40,"value":12965},{"type":40,"value":1573},{"type":30,"tag":36,"props":50916,"children":50917},{},[50918],{"type":40,"value":47429},{"type":40,"value":1179},{"type":30,"tag":167,"props":50921,"children":50922},{},[50923,50928,50929,50933,50934,50938],{"type":30,"tag":36,"props":50924,"children":50925},{},[50926],{"type":40,"value":50927},"Intégration",{"type":40,"value":24992},{"type":30,"tag":36,"props":50930,"children":50931},{},[50932],{"type":40,"value":47792},{"type":40,"value":1573},{"type":30,"tag":36,"props":50935,"children":50936},{},[50937],{"type":40,"value":47798},{"type":40,"value":1179},{"type":30,"tag":167,"props":50940,"children":50941},{},[50942,50947,50948,50952],{"type":30,"tag":36,"props":50943,"children":50944},{},[50945],{"type":40,"value":50946},"End-to-end",{"type":40,"value":24992},{"type":30,"tag":36,"props":50949,"children":50950},{},[50951],{"type":40,"value":48254},{"type":40,"value":50953}," pour automatiser les tests fonctionnels.",{"type":30,"tag":2339,"props":50955,"children":50957},{"id":50956},"_3-facilité-dutilisation-et-dapprentissage",[50958,50959],{"type":40,"value":293},{"type":30,"tag":36,"props":50960,"children":50961},{},[50962],{"type":40,"value":50963},"Facilité d'utilisation et d'apprentissage",{"type":30,"tag":163,"props":50965,"children":50966},{},[50967,50976,50985],{"type":30,"tag":167,"props":50968,"children":50969},{},[50970,50974],{"type":30,"tag":36,"props":50971,"children":50972},{},[50973],{"type":40,"value":12965},{"type":40,"value":50975}," pour la simplicité.",{"type":30,"tag":167,"props":50977,"children":50978},{},[50979,50983],{"type":30,"tag":36,"props":50980,"children":50981},{},[50982],{"type":40,"value":47429},{"type":40,"value":50984}," pour des besoins plus avancés.",{"type":30,"tag":167,"props":50986,"children":50987},{},[50988,50992],{"type":30,"tag":36,"props":50989,"children":50990},{},[50991],{"type":40,"value":12971},{"type":40,"value":50993}," pour simuler des dépendances.",{"type":30,"tag":964,"props":50995,"children":50996},{},[50997],{"type":30,"tag":43,"props":50998,"children":50999},{},[51000,51004],{"type":30,"tag":36,"props":51001,"children":51002},{},[51003],{"type":40,"value":19675},{"type":40,"value":51005}," : Choisissez un framework que vous et votre équipe êtes prêts à apprendre et à maintenir. Il vaut mieux maîtriser un framework simple que d'utiliser un outil avancé de manière incorrecte.",{"type":30,"tag":2339,"props":51007,"children":51009},{"id":51008},"_4-compatibilité-avec-votre-environnement",[51010,51011],{"type":40,"value":318},{"type":30,"tag":36,"props":51012,"children":51013},{},[51014],{"type":40,"value":51015},"Compatibilité avec votre environnement",{"type":30,"tag":163,"props":51017,"children":51018},{},[51019,51035],{"type":30,"tag":167,"props":51020,"children":51021},{},[51022,51027,51028,51033],{"type":30,"tag":36,"props":51023,"children":51024},{},[51025],{"type":40,"value":51026},"Maven",{"type":40,"value":1573},{"type":30,"tag":36,"props":51029,"children":51030},{},[51031],{"type":40,"value":51032},"Gradle",{"type":40,"value":51034}," fonctionnent bien avec JUnit, TestNG et Mockito.",{"type":30,"tag":167,"props":51036,"children":51037},{},[51038,51042],{"type":30,"tag":36,"props":51039,"children":51040},{},[51041],{"type":40,"value":48254},{"type":40,"value":51043}," pour des tests multiplateformes.",{"type":30,"tag":2339,"props":51045,"children":51047},{"id":51046},"_5-écosystème-et-support-communautaire",[51048,51049],{"type":40,"value":360},{"type":30,"tag":36,"props":51050,"children":51051},{},[51052],{"type":40,"value":51053},"Écosystème et support communautaire",{"type":30,"tag":163,"props":51055,"children":51056},{},[51057],{"type":30,"tag":167,"props":51058,"children":51059},{},[51060,51064,51066,51070,51071,51075],{"type":30,"tag":36,"props":51061,"children":51062},{},[51063],{"type":40,"value":12965},{"type":40,"value":51065}," bénéficie d'une large communauté, tout comme ",{"type":30,"tag":36,"props":51067,"children":51068},{},[51069],{"type":40,"value":12971},{"type":40,"value":8328},{"type":30,"tag":36,"props":51072,"children":51073},{},[51074],{"type":40,"value":48254},{"type":40,"value":1179},{"type":30,"tag":84,"props":51077,"children":51078},{},[],{"type":30,"tag":116,"props":51080,"children":51081},{"id":34820},[51082],{"type":30,"tag":36,"props":51083,"children":51084},{},[51085],{"type":40,"value":23840},{"type":30,"tag":530,"props":51087,"children":51088},{},[51089,51094],{"type":30,"tag":534,"props":51090,"children":51091},{},[51092],{"type":40,"value":51093},"1. Pourquoi devrais-je utiliser un framework de tests plutôt que de tester manuellement ?",{"type":30,"tag":43,"props":51095,"children":51096},{},[51097],{"type":40,"value":51098},"Les tests manuels sont fastidieux et sujets à l’erreur humaine. Les frameworks automatisent les tests et garantissent la stabilité du code.",{"type":30,"tag":530,"props":51100,"children":51101},{},[51102,51107],{"type":30,"tag":534,"props":51103,"children":51104},{},[51105],{"type":40,"value":51106},"2. Quel framework est le plus simple à utiliser pour débuter ?",{"type":30,"tag":43,"props":51108,"children":51109},{},[51110,51114],{"type":30,"tag":36,"props":51111,"children":51112},{},[51113],{"type":40,"value":12965},{"type":40,"value":51115}," est idéal pour débuter grâce à sa simplicité et sa large documentation.",{"type":30,"tag":530,"props":51117,"children":51118},{},[51119,51124],{"type":30,"tag":534,"props":51120,"children":51121},{},[51122],{"type":40,"value":51123},"3. Quelle est la différence entre JUnit et TestNG ?",{"type":30,"tag":43,"props":51125,"children":51126},{},[51127,51131,51133,51137],{"type":30,"tag":36,"props":51128,"children":51129},{},[51130],{"type":40,"value":12965},{"type":40,"value":51132}," est plus basique, tandis que ",{"type":30,"tag":36,"props":51134,"children":51135},{},[51136],{"type":40,"value":47429},{"type":40,"value":51138}," offre des fonctionnalités avancées comme les tests parallèles.",{"type":30,"tag":530,"props":51140,"children":51141},{},[51142,51147],{"type":30,"tag":534,"props":51143,"children":51144},{},[51145],{"type":40,"value":51146},"4. Quand devrais-je utiliser Mockito ?",{"type":30,"tag":43,"props":51148,"children":51149},{},[51150,51152,51156],{"type":40,"value":51151},"Utilisez ",{"type":30,"tag":36,"props":51153,"children":51154},{},[51155],{"type":40,"value":12971},{"type":40,"value":51157}," lorsque vous avez besoin de simuler des objets dans des tests unitaires.",{"type":30,"tag":530,"props":51159,"children":51160},{},[51161,51166],{"type":30,"tag":534,"props":51162,"children":51163},{},[51164],{"type":40,"value":51165},"5. Est-ce que Selenium est uniquement pour les tests d’applications web ?",{"type":30,"tag":43,"props":51167,"children":51168},{},[51169,51171,51175],{"type":40,"value":51170},"Oui, ",{"type":30,"tag":36,"props":51172,"children":51173},{},[51174],{"type":40,"value":48254},{"type":40,"value":51176}," est principalement conçu pour tester des applications web en automatisant les interactions avec le navigateur.",{"type":30,"tag":211,"props":51178,"children":51179},{"cta":6447,"href":639,"title":6448,"type":641},[51180],{"type":30,"tag":43,"props":51181,"children":51182},{},[51183],{"type":40,"value":51184},"Le framework 4 phases appliqué dans 12 équipes engineering. Une bonne couverture de tests est la fondation d'un lead time court — découvrez comment réduire le vôtre de 50%.",{"type":30,"tag":6456,"props":51186,"children":51187},{},[51188],{"type":40,"value":6460},{"title":8,"searchDepth":675,"depth":675,"links":51190},[51191,51192,51193,51194,51195,51196],{"id":47237,"depth":681,"text":47243},{"id":47277,"depth":681,"text":47283},{"id":47394,"depth":681,"text":47400},{"id":49054,"depth":681,"text":49060},{"id":50822,"depth":681,"text":50828},{"id":34820,"depth":681,"text":23840},"content:fr:dette-technique:decouvrir-frameworks-tests-java.md","fr/dette-technique/decouvrir-frameworks-tests-java.md","fr/dette-technique/decouvrir-frameworks-tests-java",{"_path":35028,"_dir":717,"_draft":7,"_partial":7,"_locale":8,"title":51201,"description":51202,"id":10350,"date":51203,"listed":13,"nocomments":7,"hidden":7,"categories":51204,"tags":51205,"--cover":51206,"readingTime":51207,"body":51211,"_type":709,"_id":55306,"_source":711,"_file":55307,"_stem":55308,"_extension":714},"Principe de substitution de Liskov (LSP), Comprendre et appliquer avec des exemples Java","Découvrez le principe de substitution de Liskov (LSP) avec des exemples concrets en Java. Apprenez à respecter ce principe clé des SOLID pour des conceptions orientées objet robustes.","2024-02-06",[15],[17,18],"covers/articles/principe-lsp.jpg",{"text":6498,"minutes":51208,"time":51209,"words":51210},9.85,591000,1970,{"type":27,"children":51212,"toc":55290},[51213,51219,51229,51234,51245,51250,51253,51259,51264,51270,51275,51281,51329,51335,51346,51349,51358,51364,51383,51395,51812,51824,51837,52160,52194,52200,52211,52635,52641,52675,52701,52704,52710,52728,52734,52753,52770,52775,52786,53195,53207,53219,53497,53543,53549,53568,54151,54156,54181,54187,54218,54224,54236,54242,54756,54762,55096,55099,55105,55110,55116,55134,55140,55158,55161,55167,55180,55193,55224,55237,55250,55263,55276,55279,55286],{"type":30,"tag":31,"props":51214,"children":51216},{"id":51215},"principe-de-liskov-substitution-lsp-pour-les-développeurs-de-logiciels",[51217],{"type":40,"value":51218},"Principe de Liskov Substitution (LSP) pour les développeurs de logiciels",{"type":30,"tag":43,"props":51220,"children":51221},{},[51222,51224],{"type":40,"value":51223},"Mise en situation : vous travaillez sur un projet orienté objet et tout se passe bien jusqu’au moment où vous dérivez une classe pour ajouter des fonctionnalités supplémentaires. Tout semble fonctionner au début, mais très vite, vous vous rendez compte que la nouvelle classe casse le comportement attendu de l’application. Vous vous demandez alors : ",{"type":30,"tag":872,"props":51225,"children":51226},{},[51227],{"type":40,"value":51228},"Qu’est-ce qui ne va pas ? Est-ce que j’ai mal utilisé l’héritage ?",{"type":30,"tag":43,"props":51230,"children":51231},{},[51232],{"type":40,"value":51233},"C’est ici que le principe de substitution de Liskov (LSP) entre en jeu.",{"type":30,"tag":43,"props":51235,"children":51236},{},[51237,51239,51243],{"type":40,"value":51238},"Le LSP est l’un des cinq ",{"type":30,"tag":75,"props":51240,"children":51241},{"href":12830},[51242],{"type":40,"value":12833},{"type":40,"value":51244}," et a pour but d’éviter ces scénarios où une sous-classe viole le contrat implicite d’une classe parente. En tant que développeur, comprendre ce principe vous permet de garantir que votre code reste flexible et maintenable, même lorsqu’il est étendu par des sous-classes.",{"type":30,"tag":43,"props":51246,"children":51247},{},[51248],{"type":40,"value":51249},"Dans cet article, je vais vous montrer ce qu’est exactement le LSP, pourquoi il est si crucial dans la conception de logiciels robustes, et surtout comment l’appliquer efficacement à travers des exemples concrets. À la fin, vous aurez toutes les clés pour ne plus jamais briser le comportement attendu de vos classes.",{"type":30,"tag":84,"props":51251,"children":51252},{},[],{"type":30,"tag":31,"props":51254,"children":51256},{"id":51255},"quest-ce-que-le-principe-de-substitution-de-liskov-lsp",[51257],{"type":40,"value":51258},"Qu’est-ce que le principe de substitution de Liskov (LSP) ?",{"type":30,"tag":43,"props":51260,"children":51261},{},[51262],{"type":40,"value":51263},"Le principe de substitution de Liskov (LSP), introduit par Barbara Liskov en 1987, est l’un des cinq principes SOLID utilisés en programmation orientée objet. Ce principe stipule qu’une sous-classe doit pouvoir être substituée à sa classe parente sans que cela ne modifie le comportement attendu du programme. En d’autres termes, si vous utilisez une classe de base dans votre code, vous devriez pouvoir la remplacer par n’importe quelle sous-classe sans avoir à ajuster le code existant.",{"type":30,"tag":2339,"props":51265,"children":51267},{"id":51266},"en-termes-simples-voici-ce-que-cela-signifie",[51268],{"type":40,"value":51269},"En termes simples, voici ce que cela signifie :",{"type":30,"tag":43,"props":51271,"children":51272},{},[51273],{"type":40,"value":51274},"Si une classe B hérite de la classe A, alors B doit pouvoir être utilisée partout où A est acceptée. Les objets de B doivent se comporter de manière cohérente avec les attentes établies par la classe A.",{"type":30,"tag":43737,"props":51276,"children":51278},{"id":51277},"exemple-classique-pour-mieux-comprendre",[51279],{"type":40,"value":51280},"Exemple classique pour mieux comprendre :",{"type":30,"tag":43,"props":51282,"children":51283},{},[51284,51286,51292,51294,51299,51300,51306,51308,51313,51315,51320,51322,51327],{"type":40,"value":51285},"Imaginez que vous développez une application qui manipule des formes géométriques. Vous avez une classe de base ",{"type":30,"tag":1042,"props":51287,"children":51289},{"className":51288},[],[51290],{"type":40,"value":51291},"Forme",{"type":40,"value":51293},", et deux sous-classes : ",{"type":30,"tag":1042,"props":51295,"children":51297},{"className":51296},[],[51298],{"type":40,"value":37182},{"type":40,"value":8328},{"type":30,"tag":1042,"props":51301,"children":51303},{"className":51302},[],[51304],{"type":40,"value":51305},"Carré",{"type":40,"value":51307},". Comme vous le savez, un carré est un cas particulier de rectangle où tous les côtés sont égaux. Cependant, si vous créez une sous-classe ",{"type":30,"tag":1042,"props":51309,"children":51311},{"className":51310},[],[51312],{"type":40,"value":51305},{"type":40,"value":51314}," qui redéfinit le comportement de ",{"type":30,"tag":1042,"props":51316,"children":51318},{"className":51317},[],[51319],{"type":40,"value":37182},{"type":40,"value":51321},", vous risquez de casser la logique qui fonctionne parfaitement pour la classe ",{"type":30,"tag":1042,"props":51323,"children":51325},{"className":51324},[],[51326],{"type":40,"value":37182},{"type":40,"value":51328},". Cela brise le LSP.",{"type":30,"tag":116,"props":51330,"children":51332},{"id":51331},"pourquoi-ce-principe-est-il-important",[51333],{"type":40,"value":51334},"Pourquoi ce principe est-il important ?",{"type":30,"tag":43,"props":51336,"children":51337},{},[51338,51340,51344],{"type":40,"value":51339},"Le non-respect du LSP peut rendre votre code plus difficile à comprendre, à maintenir et surtout à tester. Si une sous-classe introduit des comportements inattendus ou redéfinit de manière inattendue des méthodes de la classe parente, cela peut entraîner des bugs cachés et un comportement imprévisible du logiciel. Dans mes missions, j’ai observé que les violations de LSP se manifestent souvent à travers des bugs en production difficiles à reproduire, ce qui allonge les cycles de correction et alourdit les coûts de maintenance. C’est pour cette raison que le ",{"type":30,"tag":75,"props":51341,"children":51342},{"href":18825},[51343],{"type":40,"value":18828},{"type":40,"value":51345}," recommande de dépendre d’abstractions : une interface garantit un contrat que toutes les implémentations respectent, ce qui évite précisément les violations LSP.",{"type":30,"tag":84,"props":51347,"children":51348},{},[],{"type":30,"tag":211,"props":51350,"children":51352},{"cta":213,"href":214,"title":51351,"type":216},"L’héritage dans votre code crée des comportements imprévisibles et des bugs en cascade ?",[51353],{"type":30,"tag":43,"props":51354,"children":51355},{},[51356],{"type":40,"value":51357},"Les sous-classes cassent les contrats de leurs parents, les tests passent mais le comportement en production est incorrect, et personne ne comprend vraiment pourquoi. Réservons 30 minutes pour diagnostiquer les violations de design dans votre architecture et construire un plan de remédiation.",{"type":30,"tag":31,"props":51359,"children":51361},{"id":51360},"exemple-pratique-briser-le-lsp-ce-quil-ne-faut-pas-faire",[51362],{"type":40,"value":51363},"Exemple pratique - Briser le LSP : Ce qu’il ne faut pas faire",{"type":30,"tag":43,"props":51365,"children":51366},{},[51367,51369,51374,51376,51381],{"type":40,"value":51368},"Prenons l'exemple classique du ",{"type":30,"tag":1042,"props":51370,"children":51372},{"className":51371},[],[51373],{"type":40,"value":37182},{"type":40,"value":51375}," et du ",{"type":30,"tag":1042,"props":51377,"children":51379},{"className":51378},[],[51380],{"type":40,"value":51305},{"type":40,"value":51382}," en Java pour illustrer une violation du principe de substitution de Liskov (LSP).",{"type":30,"tag":2339,"props":51384,"children":51386},{"id":51385},"classe-rectangle",[51387,51389,51394],{"type":40,"value":51388},"Classe ",{"type":30,"tag":1042,"props":51390,"children":51392},{"className":51391},[],[51393],{"type":40,"value":37182},{"type":40,"value":6296},{"type":30,"tag":1035,"props":51396,"children":51398},{"className":1039,"code":51397,"language":1038,"meta":8,"style":8},"public class Rectangle {\n    protected int largeur;\n    protected int hauteur;\n\n    public Rectangle(int largeur, int hauteur) {\n        this.largeur = largeur;\n        this.hauteur = hauteur;\n    }\n\n    public void setLargeur(int largeur) {\n        this.largeur = largeur;\n    }\n\n    public void setHauteur(int hauteur) {\n        this.hauteur = hauteur;\n    }\n\n    public int calculerAire() {\n        return this.largeur * this.hauteur;\n    }\n}\n",[51399],{"type":30,"tag":1042,"props":51400,"children":51401},{"__ignoreMap":8},[51402,51421,51441,51460,51467,51510,51538,51566,51573,51580,51616,51643,51650,51657,51693,51720,51727,51734,51758,51798,51805],{"type":30,"tag":1046,"props":51403,"children":51404},{"class":1048,"line":1049},[51405,51409,51413,51417],{"type":30,"tag":1046,"props":51406,"children":51407},{"style":1053},[51408],{"type":40,"value":1056},{"type":30,"tag":1046,"props":51410,"children":51411},{"style":1053},[51412],{"type":40,"value":1061},{"type":30,"tag":1046,"props":51414,"children":51415},{"style":1064},[51416],{"type":40,"value":37239},{"type":30,"tag":1046,"props":51418,"children":51419},{"style":1070},[51420],{"type":40,"value":1073},{"type":30,"tag":1046,"props":51422,"children":51423},{"class":1048,"line":675},[51424,51428,51432,51437],{"type":30,"tag":1046,"props":51425,"children":51426},{"style":1053},[51427],{"type":40,"value":37251},{"type":30,"tag":1046,"props":51429,"children":51430},{"style":1053},[51431],{"type":40,"value":10265},{"type":30,"tag":1046,"props":51433,"children":51434},{"style":1105},[51435],{"type":40,"value":51436}," largeur",{"type":30,"tag":1046,"props":51438,"children":51439},{"style":1070},[51440],{"type":40,"value":1113},{"type":30,"tag":1046,"props":51442,"children":51443},{"class":1048,"line":681},[51444,51448,51452,51456],{"type":30,"tag":1046,"props":51445,"children":51446},{"style":1053},[51447],{"type":40,"value":37251},{"type":30,"tag":1046,"props":51449,"children":51450},{"style":1053},[51451],{"type":40,"value":10265},{"type":30,"tag":1046,"props":51453,"children":51454},{"style":1105},[51455],{"type":40,"value":29540},{"type":30,"tag":1046,"props":51457,"children":51458},{"style":1070},[51459],{"type":40,"value":1113},{"type":30,"tag":1046,"props":51461,"children":51462},{"class":1048,"line":1124},[51463],{"type":30,"tag":1046,"props":51464,"children":51465},{"emptyLinePlaceholder":13},[51466],{"type":40,"value":1121},{"type":30,"tag":1046,"props":51468,"children":51469},{"class":1048,"line":1168},[51470,51474,51478,51482,51486,51490,51494,51498,51502,51506],{"type":30,"tag":1046,"props":51471,"children":51472},{"style":1053},[51473],{"type":40,"value":1130},{"type":30,"tag":1046,"props":51475,"children":51476},{"style":1138},[51477],{"type":40,"value":37239},{"type":30,"tag":1046,"props":51479,"children":51480},{"style":1070},[51481],{"type":40,"value":1146},{"type":30,"tag":1046,"props":51483,"children":51484},{"style":1053},[51485],{"type":40,"value":10323},{"type":30,"tag":1046,"props":51487,"children":51488},{"style":1153},[51489],{"type":40,"value":51436},{"type":30,"tag":1046,"props":51491,"children":51492},{"style":1070},[51493],{"type":40,"value":2891},{"type":30,"tag":1046,"props":51495,"children":51496},{"style":1053},[51497],{"type":40,"value":10265},{"type":30,"tag":1046,"props":51499,"children":51500},{"style":1153},[51501],{"type":40,"value":29540},{"type":30,"tag":1046,"props":51503,"children":51504},{"style":1070},[51505],{"type":40,"value":1161},{"type":30,"tag":1046,"props":51507,"children":51508},{"style":1070},[51509],{"type":40,"value":1073},{"type":30,"tag":1046,"props":51511,"children":51512},{"class":1048,"line":1201},[51513,51517,51521,51526,51530,51534],{"type":30,"tag":1046,"props":51514,"children":51515},{"style":1780},[51516],{"type":40,"value":1783},{"type":30,"tag":1046,"props":51518,"children":51519},{"style":1070},[51520],{"type":40,"value":1179},{"type":30,"tag":1046,"props":51522,"children":51523},{"style":1105},[51524],{"type":40,"value":51525},"largeur ",{"type":30,"tag":1046,"props":51527,"children":51528},{"style":1795},[51529],{"type":40,"value":1798},{"type":30,"tag":1046,"props":51531,"children":51532},{"style":1105},[51533],{"type":40,"value":51436},{"type":30,"tag":1046,"props":51535,"children":51536},{"style":1070},[51537],{"type":40,"value":1113},{"type":30,"tag":1046,"props":51539,"children":51540},{"class":1048,"line":1210},[51541,51545,51549,51554,51558,51562],{"type":30,"tag":1046,"props":51542,"children":51543},{"style":1780},[51544],{"type":40,"value":1783},{"type":30,"tag":1046,"props":51546,"children":51547},{"style":1070},[51548],{"type":40,"value":1179},{"type":30,"tag":1046,"props":51550,"children":51551},{"style":1105},[51552],{"type":40,"value":51553},"hauteur ",{"type":30,"tag":1046,"props":51555,"children":51556},{"style":1795},[51557],{"type":40,"value":1798},{"type":30,"tag":1046,"props":51559,"children":51560},{"style":1105},[51561],{"type":40,"value":29540},{"type":30,"tag":1046,"props":51563,"children":51564},{"style":1070},[51565],{"type":40,"value":1113},{"type":30,"tag":1046,"props":51567,"children":51568},{"class":1048,"line":1218},[51569],{"type":30,"tag":1046,"props":51570,"children":51571},{"style":1070},[51572],{"type":40,"value":1207},{"type":30,"tag":1046,"props":51574,"children":51575},{"class":1048,"line":1255},[51576],{"type":30,"tag":1046,"props":51577,"children":51578},{"emptyLinePlaceholder":13},[51579],{"type":40,"value":1121},{"type":30,"tag":1046,"props":51581,"children":51582},{"class":1048,"line":1284},[51583,51587,51591,51596,51600,51604,51608,51612],{"type":30,"tag":1046,"props":51584,"children":51585},{"style":1053},[51586],{"type":40,"value":1130},{"type":30,"tag":1046,"props":51588,"children":51589},{"style":1053},[51590],{"type":40,"value":1135},{"type":30,"tag":1046,"props":51592,"children":51593},{"style":1138},[51594],{"type":40,"value":51595}," setLargeur",{"type":30,"tag":1046,"props":51597,"children":51598},{"style":1070},[51599],{"type":40,"value":1146},{"type":30,"tag":1046,"props":51601,"children":51602},{"style":1053},[51603],{"type":40,"value":10323},{"type":30,"tag":1046,"props":51605,"children":51606},{"style":1153},[51607],{"type":40,"value":51436},{"type":30,"tag":1046,"props":51609,"children":51610},{"style":1070},[51611],{"type":40,"value":1161},{"type":30,"tag":1046,"props":51613,"children":51614},{"style":1070},[51615],{"type":40,"value":1073},{"type":30,"tag":1046,"props":51617,"children":51618},{"class":1048,"line":1292},[51619,51623,51627,51631,51635,51639],{"type":30,"tag":1046,"props":51620,"children":51621},{"style":1780},[51622],{"type":40,"value":1783},{"type":30,"tag":1046,"props":51624,"children":51625},{"style":1070},[51626],{"type":40,"value":1179},{"type":30,"tag":1046,"props":51628,"children":51629},{"style":1105},[51630],{"type":40,"value":51525},{"type":30,"tag":1046,"props":51632,"children":51633},{"style":1795},[51634],{"type":40,"value":1798},{"type":30,"tag":1046,"props":51636,"children":51637},{"style":1105},[51638],{"type":40,"value":51436},{"type":30,"tag":1046,"props":51640,"children":51641},{"style":1070},[51642],{"type":40,"value":1113},{"type":30,"tag":1046,"props":51644,"children":51645},{"class":1048,"line":1300},[51646],{"type":30,"tag":1046,"props":51647,"children":51648},{"style":1070},[51649],{"type":40,"value":1207},{"type":30,"tag":1046,"props":51651,"children":51652},{"class":1048,"line":1327},[51653],{"type":30,"tag":1046,"props":51654,"children":51655},{"emptyLinePlaceholder":13},[51656],{"type":40,"value":1121},{"type":30,"tag":1046,"props":51658,"children":51659},{"class":1048,"line":1354},[51660,51664,51668,51673,51677,51681,51685,51689],{"type":30,"tag":1046,"props":51661,"children":51662},{"style":1053},[51663],{"type":40,"value":1130},{"type":30,"tag":1046,"props":51665,"children":51666},{"style":1053},[51667],{"type":40,"value":1135},{"type":30,"tag":1046,"props":51669,"children":51670},{"style":1138},[51671],{"type":40,"value":51672}," setHauteur",{"type":30,"tag":1046,"props":51674,"children":51675},{"style":1070},[51676],{"type":40,"value":1146},{"type":30,"tag":1046,"props":51678,"children":51679},{"style":1053},[51680],{"type":40,"value":10323},{"type":30,"tag":1046,"props":51682,"children":51683},{"style":1153},[51684],{"type":40,"value":29540},{"type":30,"tag":1046,"props":51686,"children":51687},{"style":1070},[51688],{"type":40,"value":1161},{"type":30,"tag":1046,"props":51690,"children":51691},{"style":1070},[51692],{"type":40,"value":1073},{"type":30,"tag":1046,"props":51694,"children":51695},{"class":1048,"line":1391},[51696,51700,51704,51708,51712,51716],{"type":30,"tag":1046,"props":51697,"children":51698},{"style":1780},[51699],{"type":40,"value":1783},{"type":30,"tag":1046,"props":51701,"children":51702},{"style":1070},[51703],{"type":40,"value":1179},{"type":30,"tag":1046,"props":51705,"children":51706},{"style":1105},[51707],{"type":40,"value":51553},{"type":30,"tag":1046,"props":51709,"children":51710},{"style":1795},[51711],{"type":40,"value":1798},{"type":30,"tag":1046,"props":51713,"children":51714},{"style":1105},[51715],{"type":40,"value":29540},{"type":30,"tag":1046,"props":51717,"children":51718},{"style":1070},[51719],{"type":40,"value":1113},{"type":30,"tag":1046,"props":51721,"children":51722},{"class":1048,"line":1409},[51723],{"type":30,"tag":1046,"props":51724,"children":51725},{"style":1070},[51726],{"type":40,"value":1207},{"type":30,"tag":1046,"props":51728,"children":51729},{"class":1048,"line":1417},[51730],{"type":30,"tag":1046,"props":51731,"children":51732},{"emptyLinePlaceholder":13},[51733],{"type":40,"value":1121},{"type":30,"tag":1046,"props":51735,"children":51736},{"class":1048,"line":2023},[51737,51741,51745,51750,51754],{"type":30,"tag":1046,"props":51738,"children":51739},{"style":1053},[51740],{"type":40,"value":1130},{"type":30,"tag":1046,"props":51742,"children":51743},{"style":1053},[51744],{"type":40,"value":10265},{"type":30,"tag":1046,"props":51746,"children":51747},{"style":1138},[51748],{"type":40,"value":51749}," calculerAire",{"type":30,"tag":1046,"props":51751,"children":51752},{"style":1070},[51753],{"type":40,"value":1320},{"type":30,"tag":1046,"props":51755,"children":51756},{"style":1070},[51757],{"type":40,"value":1073},{"type":30,"tag":1046,"props":51759,"children":51760},{"class":1048,"line":2083},[51761,51765,51769,51773,51777,51781,51785,51789,51794],{"type":30,"tag":1046,"props":51762,"children":51763},{"style":1053},[51764],{"type":40,"value":1333},{"type":30,"tag":1046,"props":51766,"children":51767},{"style":1780},[51768],{"type":40,"value":11550},{"type":30,"tag":1046,"props":51770,"children":51771},{"style":1070},[51772],{"type":40,"value":1179},{"type":30,"tag":1046,"props":51774,"children":51775},{"style":1105},[51776],{"type":40,"value":51525},{"type":30,"tag":1046,"props":51778,"children":51779},{"style":1795},[51780],{"type":40,"value":21197},{"type":30,"tag":1046,"props":51782,"children":51783},{"style":1780},[51784],{"type":40,"value":11550},{"type":30,"tag":1046,"props":51786,"children":51787},{"style":1070},[51788],{"type":40,"value":1179},{"type":30,"tag":1046,"props":51790,"children":51791},{"style":1105},[51792],{"type":40,"value":51793},"hauteur",{"type":30,"tag":1046,"props":51795,"children":51796},{"style":1070},[51797],{"type":40,"value":1113},{"type":30,"tag":1046,"props":51799,"children":51800},{"class":1048,"line":2126},[51801],{"type":30,"tag":1046,"props":51802,"children":51803},{"style":1070},[51804],{"type":40,"value":1207},{"type":30,"tag":1046,"props":51806,"children":51807},{"class":1048,"line":2159},[51808],{"type":30,"tag":1046,"props":51809,"children":51810},{"style":1070},[51811],{"type":40,"value":1423},{"type":30,"tag":43,"props":51813,"children":51814},{},[51815,51817,51822],{"type":40,"value":51816},"Ici, la classe ",{"type":30,"tag":1042,"props":51818,"children":51820},{"className":51819},[],[51821],{"type":40,"value":37182},{"type":40,"value":51823}," fonctionne normalement. Elle a des méthodes pour définir la largeur et la hauteur, et pour calculer l'aire.",{"type":30,"tag":2339,"props":51825,"children":51827},{"id":51826},"sous-classe-carre",[51828,51830,51836],{"type":40,"value":51829},"Sous-classe ",{"type":30,"tag":1042,"props":51831,"children":51833},{"className":51832},[],[51834],{"type":40,"value":51835},"Carre",{"type":40,"value":6296},{"type":30,"tag":1035,"props":51838,"children":51840},{"className":1039,"code":51839,"language":1038,"meta":8,"style":8},"public class Carre extends Rectangle {\n\n    public Carre(int taille) {\n        super(taille, taille);\n    }\n\n    @Override\n    public void setLargeur(int taille) {\n        this.largeur = this.hauteur = taille;\n    }\n\n    @Override\n    public void setHauteur(int taille) {\n        this.largeur = this.hauteur = taille;\n    }\n}\n",[51841],{"type":30,"tag":1042,"props":51842,"children":51843},{"__ignoreMap":8},[51844,51872,51879,51911,51940,51947,51954,51965,52000,52043,52050,52057,52068,52103,52146,52153],{"type":30,"tag":1046,"props":51845,"children":51846},{"class":1048,"line":1049},[51847,51851,51855,51860,51864,51868],{"type":30,"tag":1046,"props":51848,"children":51849},{"style":1053},[51850],{"type":40,"value":1056},{"type":30,"tag":1046,"props":51852,"children":51853},{"style":1053},[51854],{"type":40,"value":1061},{"type":30,"tag":1046,"props":51856,"children":51857},{"style":1064},[51858],{"type":40,"value":51859}," Carre",{"type":30,"tag":1046,"props":51861,"children":51862},{"style":1053},[51863],{"type":40,"value":37551},{"type":30,"tag":1046,"props":51865,"children":51866},{"style":1064},[51867],{"type":40,"value":37239},{"type":30,"tag":1046,"props":51869,"children":51870},{"style":1070},[51871],{"type":40,"value":1073},{"type":30,"tag":1046,"props":51873,"children":51874},{"class":1048,"line":675},[51875],{"type":30,"tag":1046,"props":51876,"children":51877},{"emptyLinePlaceholder":13},[51878],{"type":40,"value":1121},{"type":30,"tag":1046,"props":51880,"children":51881},{"class":1048,"line":681},[51882,51886,51890,51894,51898,51903,51907],{"type":30,"tag":1046,"props":51883,"children":51884},{"style":1053},[51885],{"type":40,"value":1130},{"type":30,"tag":1046,"props":51887,"children":51888},{"style":1138},[51889],{"type":40,"value":51859},{"type":30,"tag":1046,"props":51891,"children":51892},{"style":1070},[51893],{"type":40,"value":1146},{"type":30,"tag":1046,"props":51895,"children":51896},{"style":1053},[51897],{"type":40,"value":10323},{"type":30,"tag":1046,"props":51899,"children":51900},{"style":1153},[51901],{"type":40,"value":51902}," taille",{"type":30,"tag":1046,"props":51904,"children":51905},{"style":1070},[51906],{"type":40,"value":1161},{"type":30,"tag":1046,"props":51908,"children":51909},{"style":1070},[51910],{"type":40,"value":1073},{"type":30,"tag":1046,"props":51912,"children":51913},{"class":1048,"line":1124},[51914,51919,51923,51928,51932,51936],{"type":30,"tag":1046,"props":51915,"children":51916},{"style":9718},[51917],{"type":40,"value":51918},"        super",{"type":30,"tag":1046,"props":51920,"children":51921},{"style":1070},[51922],{"type":40,"value":1146},{"type":30,"tag":1046,"props":51924,"children":51925},{"style":1105},[51926],{"type":40,"value":51927},"taille",{"type":30,"tag":1046,"props":51929,"children":51930},{"style":1070},[51931],{"type":40,"value":2891},{"type":30,"tag":1046,"props":51933,"children":51934},{"style":1105},[51935],{"type":40,"value":51902},{"type":30,"tag":1046,"props":51937,"children":51938},{"style":1070},[51939],{"type":40,"value":1198},{"type":30,"tag":1046,"props":51941,"children":51942},{"class":1048,"line":1168},[51943],{"type":30,"tag":1046,"props":51944,"children":51945},{"style":1070},[51946],{"type":40,"value":1207},{"type":30,"tag":1046,"props":51948,"children":51949},{"class":1048,"line":1201},[51950],{"type":30,"tag":1046,"props":51951,"children":51952},{"emptyLinePlaceholder":13},[51953],{"type":40,"value":1121},{"type":30,"tag":1046,"props":51955,"children":51956},{"class":1048,"line":1210},[51957,51961],{"type":30,"tag":1046,"props":51958,"children":51959},{"style":1647},[51960],{"type":40,"value":1828},{"type":30,"tag":1046,"props":51962,"children":51963},{"style":1653},[51964],{"type":40,"value":3258},{"type":30,"tag":1046,"props":51966,"children":51967},{"class":1048,"line":1218},[51968,51972,51976,51980,51984,51988,51992,51996],{"type":30,"tag":1046,"props":51969,"children":51970},{"style":1053},[51971],{"type":40,"value":1130},{"type":30,"tag":1046,"props":51973,"children":51974},{"style":1053},[51975],{"type":40,"value":1135},{"type":30,"tag":1046,"props":51977,"children":51978},{"style":1138},[51979],{"type":40,"value":51595},{"type":30,"tag":1046,"props":51981,"children":51982},{"style":1070},[51983],{"type":40,"value":1146},{"type":30,"tag":1046,"props":51985,"children":51986},{"style":1053},[51987],{"type":40,"value":10323},{"type":30,"tag":1046,"props":51989,"children":51990},{"style":1153},[51991],{"type":40,"value":51902},{"type":30,"tag":1046,"props":51993,"children":51994},{"style":1070},[51995],{"type":40,"value":1161},{"type":30,"tag":1046,"props":51997,"children":51998},{"style":1070},[51999],{"type":40,"value":1073},{"type":30,"tag":1046,"props":52001,"children":52002},{"class":1048,"line":1255},[52003,52007,52011,52015,52019,52023,52027,52031,52035,52039],{"type":30,"tag":1046,"props":52004,"children":52005},{"style":1780},[52006],{"type":40,"value":1783},{"type":30,"tag":1046,"props":52008,"children":52009},{"style":1070},[52010],{"type":40,"value":1179},{"type":30,"tag":1046,"props":52012,"children":52013},{"style":1105},[52014],{"type":40,"value":51525},{"type":30,"tag":1046,"props":52016,"children":52017},{"style":1795},[52018],{"type":40,"value":1798},{"type":30,"tag":1046,"props":52020,"children":52021},{"style":1780},[52022],{"type":40,"value":11550},{"type":30,"tag":1046,"props":52024,"children":52025},{"style":1070},[52026],{"type":40,"value":1179},{"type":30,"tag":1046,"props":52028,"children":52029},{"style":1105},[52030],{"type":40,"value":51553},{"type":30,"tag":1046,"props":52032,"children":52033},{"style":1795},[52034],{"type":40,"value":1798},{"type":30,"tag":1046,"props":52036,"children":52037},{"style":1105},[52038],{"type":40,"value":51902},{"type":30,"tag":1046,"props":52040,"children":52041},{"style":1070},[52042],{"type":40,"value":1113},{"type":30,"tag":1046,"props":52044,"children":52045},{"class":1048,"line":1284},[52046],{"type":30,"tag":1046,"props":52047,"children":52048},{"style":1070},[52049],{"type":40,"value":1207},{"type":30,"tag":1046,"props":52051,"children":52052},{"class":1048,"line":1292},[52053],{"type":30,"tag":1046,"props":52054,"children":52055},{"emptyLinePlaceholder":13},[52056],{"type":40,"value":1121},{"type":30,"tag":1046,"props":52058,"children":52059},{"class":1048,"line":1300},[52060,52064],{"type":30,"tag":1046,"props":52061,"children":52062},{"style":1647},[52063],{"type":40,"value":1828},{"type":30,"tag":1046,"props":52065,"children":52066},{"style":1653},[52067],{"type":40,"value":3258},{"type":30,"tag":1046,"props":52069,"children":52070},{"class":1048,"line":1327},[52071,52075,52079,52083,52087,52091,52095,52099],{"type":30,"tag":1046,"props":52072,"children":52073},{"style":1053},[52074],{"type":40,"value":1130},{"type":30,"tag":1046,"props":52076,"children":52077},{"style":1053},[52078],{"type":40,"value":1135},{"type":30,"tag":1046,"props":52080,"children":52081},{"style":1138},[52082],{"type":40,"value":51672},{"type":30,"tag":1046,"props":52084,"children":52085},{"style":1070},[52086],{"type":40,"value":1146},{"type":30,"tag":1046,"props":52088,"children":52089},{"style":1053},[52090],{"type":40,"value":10323},{"type":30,"tag":1046,"props":52092,"children":52093},{"style":1153},[52094],{"type":40,"value":51902},{"type":30,"tag":1046,"props":52096,"children":52097},{"style":1070},[52098],{"type":40,"value":1161},{"type":30,"tag":1046,"props":52100,"children":52101},{"style":1070},[52102],{"type":40,"value":1073},{"type":30,"tag":1046,"props":52104,"children":52105},{"class":1048,"line":1354},[52106,52110,52114,52118,52122,52126,52130,52134,52138,52142],{"type":30,"tag":1046,"props":52107,"children":52108},{"style":1780},[52109],{"type":40,"value":1783},{"type":30,"tag":1046,"props":52111,"children":52112},{"style":1070},[52113],{"type":40,"value":1179},{"type":30,"tag":1046,"props":52115,"children":52116},{"style":1105},[52117],{"type":40,"value":51525},{"type":30,"tag":1046,"props":52119,"children":52120},{"style":1795},[52121],{"type":40,"value":1798},{"type":30,"tag":1046,"props":52123,"children":52124},{"style":1780},[52125],{"type":40,"value":11550},{"type":30,"tag":1046,"props":52127,"children":52128},{"style":1070},[52129],{"type":40,"value":1179},{"type":30,"tag":1046,"props":52131,"children":52132},{"style":1105},[52133],{"type":40,"value":51553},{"type":30,"tag":1046,"props":52135,"children":52136},{"style":1795},[52137],{"type":40,"value":1798},{"type":30,"tag":1046,"props":52139,"children":52140},{"style":1105},[52141],{"type":40,"value":51902},{"type":30,"tag":1046,"props":52143,"children":52144},{"style":1070},[52145],{"type":40,"value":1113},{"type":30,"tag":1046,"props":52147,"children":52148},{"class":1048,"line":1391},[52149],{"type":30,"tag":1046,"props":52150,"children":52151},{"style":1070},[52152],{"type":40,"value":1207},{"type":30,"tag":1046,"props":52154,"children":52155},{"class":1048,"line":1409},[52156],{"type":30,"tag":1046,"props":52157,"children":52158},{"style":1070},[52159],{"type":40,"value":1423},{"type":30,"tag":43,"props":52161,"children":52162},{},[52163,52165,52170,52172,52177,52179,52185,52186,52192],{"type":40,"value":52164},"Dans cet exemple, nous avons une classe ",{"type":30,"tag":1042,"props":52166,"children":52168},{"className":52167},[],[52169],{"type":40,"value":51835},{"type":40,"value":52171}," qui hérite de ",{"type":30,"tag":1042,"props":52173,"children":52175},{"className":52174},[],[52176],{"type":40,"value":37182},{"type":40,"value":52178},". Un carré étant un cas particulier de rectangle où tous les côtés sont égaux, nous avons redéfini les méthodes ",{"type":30,"tag":1042,"props":52180,"children":52182},{"className":52181},[],[52183],{"type":40,"value":52184},"setLargeur",{"type":40,"value":8328},{"type":30,"tag":1042,"props":52187,"children":52189},{"className":52188},[],[52190],{"type":40,"value":52191},"setHauteur",{"type":40,"value":52193}," pour toujours appliquer la même valeur à la largeur et à la hauteur.",{"type":30,"tag":2339,"props":52195,"children":52197},{"id":52196},"problème-avec-le-lsp",[52198],{"type":40,"value":52199},"Problème avec le LSP",{"type":30,"tag":43,"props":52201,"children":52202},{},[52203,52205,52210],{"type":40,"value":52204},"Maintenant, utilisons ces classes dans un programme. Supposons que nous ayons une méthode qui teste les objets ",{"type":30,"tag":1042,"props":52206,"children":52208},{"className":52207},[],[52209],{"type":40,"value":37182},{"type":40,"value":6296},{"type":30,"tag":1035,"props":52212,"children":52214},{"className":1039,"code":52213,"language":1038,"meta":8,"style":8},"public class Main {\n\n    public static void testerRectangle(Rectangle rect) {\n        rect.setLargeur(5);\n        rect.setHauteur(10);\n        int aire = rect.calculerAire();\n        System.out.println(\"Aire attendue : 50, Aire calculée : \" + aire);\n    }\n\n    public static void main(String[] args) {\n        // Test avec un Rectangle\n        Rectangle rect = new Rectangle(2, 3);\n        testerRectangle(rect);\n\n        // Test avec un Carre\n        Carre carre = new Carre(5);\n        testerRectangle(carre);\n    }\n}\n",[52215],{"type":30,"tag":1042,"props":52216,"children":52217},{"__ignoreMap":8},[52218,52237,52244,52285,52313,52340,52373,52418,52425,52432,52475,52483,52528,52549,52556,52564,52601,52621,52628],{"type":30,"tag":1046,"props":52219,"children":52220},{"class":1048,"line":1049},[52221,52225,52229,52233],{"type":30,"tag":1046,"props":52222,"children":52223},{"style":1053},[52224],{"type":40,"value":1056},{"type":30,"tag":1046,"props":52226,"children":52227},{"style":1053},[52228],{"type":40,"value":1061},{"type":30,"tag":1046,"props":52230,"children":52231},{"style":1064},[52232],{"type":40,"value":12347},{"type":30,"tag":1046,"props":52234,"children":52235},{"style":1070},[52236],{"type":40,"value":1073},{"type":30,"tag":1046,"props":52238,"children":52239},{"class":1048,"line":675},[52240],{"type":30,"tag":1046,"props":52241,"children":52242},{"emptyLinePlaceholder":13},[52243],{"type":40,"value":1121},{"type":30,"tag":1046,"props":52245,"children":52246},{"class":1048,"line":681},[52247,52251,52255,52259,52264,52268,52272,52277,52281],{"type":30,"tag":1046,"props":52248,"children":52249},{"style":1053},[52250],{"type":40,"value":1130},{"type":30,"tag":1046,"props":52252,"children":52253},{"style":1053},[52254],{"type":40,"value":12363},{"type":30,"tag":1046,"props":52256,"children":52257},{"style":1053},[52258],{"type":40,"value":1135},{"type":30,"tag":1046,"props":52260,"children":52261},{"style":1138},[52262],{"type":40,"value":52263}," testerRectangle",{"type":30,"tag":1046,"props":52265,"children":52266},{"style":1070},[52267],{"type":40,"value":1146},{"type":30,"tag":1046,"props":52269,"children":52270},{"style":1084},[52271],{"type":40,"value":37182},{"type":30,"tag":1046,"props":52273,"children":52274},{"style":1153},[52275],{"type":40,"value":52276}," rect",{"type":30,"tag":1046,"props":52278,"children":52279},{"style":1070},[52280],{"type":40,"value":1161},{"type":30,"tag":1046,"props":52282,"children":52283},{"style":1070},[52284],{"type":40,"value":1073},{"type":30,"tag":1046,"props":52286,"children":52287},{"class":1048,"line":1124},[52288,52293,52297,52301,52305,52309],{"type":30,"tag":1046,"props":52289,"children":52290},{"style":1105},[52291],{"type":40,"value":52292},"        rect",{"type":30,"tag":1046,"props":52294,"children":52295},{"style":1070},[52296],{"type":40,"value":1179},{"type":30,"tag":1046,"props":52298,"children":52299},{"style":1138},[52300],{"type":40,"value":52184},{"type":30,"tag":1046,"props":52302,"children":52303},{"style":1070},[52304],{"type":40,"value":1146},{"type":30,"tag":1046,"props":52306,"children":52307},{"style":6886},[52308],{"type":40,"value":47717},{"type":30,"tag":1046,"props":52310,"children":52311},{"style":1070},[52312],{"type":40,"value":1198},{"type":30,"tag":1046,"props":52314,"children":52315},{"class":1048,"line":1168},[52316,52320,52324,52328,52332,52336],{"type":30,"tag":1046,"props":52317,"children":52318},{"style":1105},[52319],{"type":40,"value":52292},{"type":30,"tag":1046,"props":52321,"children":52322},{"style":1070},[52323],{"type":40,"value":1179},{"type":30,"tag":1046,"props":52325,"children":52326},{"style":1138},[52327],{"type":40,"value":52191},{"type":30,"tag":1046,"props":52329,"children":52330},{"style":1070},[52331],{"type":40,"value":1146},{"type":30,"tag":1046,"props":52333,"children":52334},{"style":6886},[52335],{"type":40,"value":49645},{"type":30,"tag":1046,"props":52337,"children":52338},{"style":1070},[52339],{"type":40,"value":1198},{"type":30,"tag":1046,"props":52341,"children":52342},{"class":1048,"line":1201},[52343,52347,52352,52356,52360,52364,52369],{"type":30,"tag":1046,"props":52344,"children":52345},{"style":1053},[52346],{"type":40,"value":47659},{"type":30,"tag":1046,"props":52348,"children":52349},{"style":1105},[52350],{"type":40,"value":52351}," aire ",{"type":30,"tag":1046,"props":52353,"children":52354},{"style":1795},[52355],{"type":40,"value":1798},{"type":30,"tag":1046,"props":52357,"children":52358},{"style":1105},[52359],{"type":40,"value":52276},{"type":30,"tag":1046,"props":52361,"children":52362},{"style":1070},[52363],{"type":40,"value":1179},{"type":30,"tag":1046,"props":52365,"children":52366},{"style":1138},[52367],{"type":40,"value":52368},"calculerAire",{"type":30,"tag":1046,"props":52370,"children":52371},{"style":1070},[52372],{"type":40,"value":1406},{"type":30,"tag":1046,"props":52374,"children":52375},{"class":1048,"line":1210},[52376,52380,52384,52388,52392,52396,52400,52405,52409,52414],{"type":30,"tag":1046,"props":52377,"children":52378},{"style":1105},[52379],{"type":40,"value":12555},{"type":30,"tag":1046,"props":52381,"children":52382},{"style":1070},[52383],{"type":40,"value":1179},{"type":30,"tag":1046,"props":52385,"children":52386},{"style":1105},[52387],{"type":40,"value":12564},{"type":30,"tag":1046,"props":52389,"children":52390},{"style":1070},[52391],{"type":40,"value":1179},{"type":30,"tag":1046,"props":52393,"children":52394},{"style":1138},[52395],{"type":40,"value":12573},{"type":30,"tag":1046,"props":52397,"children":52398},{"style":1070},[52399],{"type":40,"value":1146},{"type":30,"tag":1046,"props":52401,"children":52402},{"style":1675},[52403],{"type":40,"value":52404},"\"Aire attendue : 50, Aire calculée : \"",{"type":30,"tag":1046,"props":52406,"children":52407},{"style":1795},[52408],{"type":40,"value":7261},{"type":30,"tag":1046,"props":52410,"children":52411},{"style":1105},[52412],{"type":40,"value":52413}," aire",{"type":30,"tag":1046,"props":52415,"children":52416},{"style":1070},[52417],{"type":40,"value":1198},{"type":30,"tag":1046,"props":52419,"children":52420},{"class":1048,"line":1218},[52421],{"type":30,"tag":1046,"props":52422,"children":52423},{"style":1070},[52424],{"type":40,"value":1207},{"type":30,"tag":1046,"props":52426,"children":52427},{"class":1048,"line":1255},[52428],{"type":30,"tag":1046,"props":52429,"children":52430},{"emptyLinePlaceholder":13},[52431],{"type":40,"value":1121},{"type":30,"tag":1046,"props":52433,"children":52434},{"class":1048,"line":1284},[52435,52439,52443,52447,52451,52455,52459,52463,52467,52471],{"type":30,"tag":1046,"props":52436,"children":52437},{"style":1053},[52438],{"type":40,"value":1130},{"type":30,"tag":1046,"props":52440,"children":52441},{"style":1053},[52442],{"type":40,"value":12363},{"type":30,"tag":1046,"props":52444,"children":52445},{"style":1053},[52446],{"type":40,"value":1135},{"type":30,"tag":1046,"props":52448,"children":52449},{"style":1138},[52450],{"type":40,"value":12372},{"type":30,"tag":1046,"props":52452,"children":52453},{"style":1070},[52454],{"type":40,"value":1146},{"type":30,"tag":1046,"props":52456,"children":52457},{"style":1053},[52458],{"type":40,"value":2882},{"type":30,"tag":1046,"props":52460,"children":52461},{"style":1070},[52462],{"type":40,"value":12385},{"type":30,"tag":1046,"props":52464,"children":52465},{"style":1153},[52466],{"type":40,"value":12390},{"type":30,"tag":1046,"props":52468,"children":52469},{"style":1070},[52470],{"type":40,"value":1161},{"type":30,"tag":1046,"props":52472,"children":52473},{"style":1070},[52474],{"type":40,"value":1073},{"type":30,"tag":1046,"props":52476,"children":52477},{"class":1048,"line":1292},[52478],{"type":30,"tag":1046,"props":52479,"children":52480},{"style":3961},[52481],{"type":40,"value":52482},"        // Test avec un Rectangle\n",{"type":30,"tag":1046,"props":52484,"children":52485},{"class":1048,"line":1300},[52486,52491,52496,52500,52504,52508,52512,52516,52520,52524],{"type":30,"tag":1046,"props":52487,"children":52488},{"style":1084},[52489],{"type":40,"value":52490},"        Rectangle",{"type":30,"tag":1046,"props":52492,"children":52493},{"style":1105},[52494],{"type":40,"value":52495}," rect ",{"type":30,"tag":1046,"props":52497,"children":52498},{"style":1795},[52499],{"type":40,"value":1798},{"type":30,"tag":1046,"props":52501,"children":52502},{"style":1053},[52503],{"type":40,"value":2480},{"type":30,"tag":1046,"props":52505,"children":52506},{"style":1138},[52507],{"type":40,"value":37239},{"type":30,"tag":1046,"props":52509,"children":52510},{"style":1070},[52511],{"type":40,"value":1146},{"type":30,"tag":1046,"props":52513,"children":52514},{"style":6886},[52515],{"type":40,"value":10197},{"type":30,"tag":1046,"props":52517,"children":52518},{"style":1070},[52519],{"type":40,"value":2891},{"type":30,"tag":1046,"props":52521,"children":52522},{"style":6886},[52523],{"type":40,"value":29352},{"type":30,"tag":1046,"props":52525,"children":52526},{"style":1070},[52527],{"type":40,"value":1198},{"type":30,"tag":1046,"props":52529,"children":52530},{"class":1048,"line":1327},[52531,52536,52540,52545],{"type":30,"tag":1046,"props":52532,"children":52533},{"style":1138},[52534],{"type":40,"value":52535},"        testerRectangle",{"type":30,"tag":1046,"props":52537,"children":52538},{"style":1070},[52539],{"type":40,"value":1146},{"type":30,"tag":1046,"props":52541,"children":52542},{"style":1105},[52543],{"type":40,"value":52544},"rect",{"type":30,"tag":1046,"props":52546,"children":52547},{"style":1070},[52548],{"type":40,"value":1198},{"type":30,"tag":1046,"props":52550,"children":52551},{"class":1048,"line":1354},[52552],{"type":30,"tag":1046,"props":52553,"children":52554},{"emptyLinePlaceholder":13},[52555],{"type":40,"value":1121},{"type":30,"tag":1046,"props":52557,"children":52558},{"class":1048,"line":1391},[52559],{"type":30,"tag":1046,"props":52560,"children":52561},{"style":3961},[52562],{"type":40,"value":52563},"        // Test avec un Carre\n",{"type":30,"tag":1046,"props":52565,"children":52566},{"class":1048,"line":1409},[52567,52572,52577,52581,52585,52589,52593,52597],{"type":30,"tag":1046,"props":52568,"children":52569},{"style":1084},[52570],{"type":40,"value":52571},"        Carre",{"type":30,"tag":1046,"props":52573,"children":52574},{"style":1105},[52575],{"type":40,"value":52576}," carre ",{"type":30,"tag":1046,"props":52578,"children":52579},{"style":1795},[52580],{"type":40,"value":1798},{"type":30,"tag":1046,"props":52582,"children":52583},{"style":1053},[52584],{"type":40,"value":2480},{"type":30,"tag":1046,"props":52586,"children":52587},{"style":1138},[52588],{"type":40,"value":51859},{"type":30,"tag":1046,"props":52590,"children":52591},{"style":1070},[52592],{"type":40,"value":1146},{"type":30,"tag":1046,"props":52594,"children":52595},{"style":6886},[52596],{"type":40,"value":47717},{"type":30,"tag":1046,"props":52598,"children":52599},{"style":1070},[52600],{"type":40,"value":1198},{"type":30,"tag":1046,"props":52602,"children":52603},{"class":1048,"line":1417},[52604,52608,52612,52617],{"type":30,"tag":1046,"props":52605,"children":52606},{"style":1138},[52607],{"type":40,"value":52535},{"type":30,"tag":1046,"props":52609,"children":52610},{"style":1070},[52611],{"type":40,"value":1146},{"type":30,"tag":1046,"props":52613,"children":52614},{"style":1105},[52615],{"type":40,"value":52616},"carre",{"type":30,"tag":1046,"props":52618,"children":52619},{"style":1070},[52620],{"type":40,"value":1198},{"type":30,"tag":1046,"props":52622,"children":52623},{"class":1048,"line":2023},[52624],{"type":30,"tag":1046,"props":52625,"children":52626},{"style":1070},[52627],{"type":40,"value":1207},{"type":30,"tag":1046,"props":52629,"children":52630},{"class":1048,"line":2083},[52631],{"type":30,"tag":1046,"props":52632,"children":52633},{"style":1070},[52634],{"type":40,"value":1423},{"type":30,"tag":2339,"props":52636,"children":52638},{"id":52637},"résultat",[52639],{"type":40,"value":52640},"Résultat :",{"type":30,"tag":163,"props":52642,"children":52643},{},[52644,52656],{"type":30,"tag":167,"props":52645,"children":52646},{},[52647,52649,52654],{"type":40,"value":52648},"Avec l'objet ",{"type":30,"tag":1042,"props":52650,"children":52652},{"className":52651},[],[52653],{"type":40,"value":37182},{"type":40,"value":52655},", tout fonctionne comme prévu. L'aire calculée sera de 50 (5 * 10).",{"type":30,"tag":167,"props":52657,"children":52658},{},[52659,52660,52665,52667,52673],{"type":40,"value":52648},{"type":30,"tag":1042,"props":52661,"children":52663},{"className":52662},[],[52664],{"type":40,"value":51835},{"type":40,"value":52666},", cependant, le calcul ne donnera pas le résultat attendu. En appelant ",{"type":30,"tag":1042,"props":52668,"children":52670},{"className":52669},[],[52671],{"type":40,"value":52672},"setHauteur(10)",{"type":40,"value":52674},", nous changeons aussi la largeur à 10, et l'aire calculée sera 100 au lieu de 50.",{"type":30,"tag":43,"props":52676,"children":52677},{},[52678,52680,52685,52687,52692,52694,52699],{"type":40,"value":52679},"Ce comportement brise le LSP, car la classe ",{"type":30,"tag":1042,"props":52681,"children":52683},{"className":52682},[],[52684],{"type":40,"value":51835},{"type":40,"value":52686}," ne respecte pas les attentes fixées par ",{"type":30,"tag":1042,"props":52688,"children":52690},{"className":52689},[],[52691],{"type":40,"value":37182},{"type":40,"value":52693},". Cela peut causer des bugs ou des comportements inattendus dans les programmes qui s’attendent à ce qu’un ",{"type":30,"tag":1042,"props":52695,"children":52697},{"className":52696},[],[52698],{"type":40,"value":37182},{"type":40,"value":52700}," fonctionne d’une certaine manière.",{"type":30,"tag":84,"props":52702,"children":52703},{},[],{"type":30,"tag":31,"props":52705,"children":52707},{"id":52706},"exemple-correct-respecter-le-lsp-ce-quil-faut-faire",[52708],{"type":40,"value":52709},"Exemple correct - Respecter le LSP : Ce qu’il faut faire",{"type":30,"tag":43,"props":52711,"children":52712},{},[52713,52715,52720,52721,52726],{"type":40,"value":52714},"Pour respecter le principe de substitution de Liskov, nous devons nous assurer que les sous-classes n'altèrent pas le comportement attendu de la classe de base. Dans le cas du ",{"type":30,"tag":1042,"props":52716,"children":52718},{"className":52717},[],[52719],{"type":40,"value":37182},{"type":40,"value":51375},{"type":30,"tag":1042,"props":52722,"children":52724},{"className":52723},[],[52725],{"type":40,"value":51835},{"type":40,"value":52727},", le problème vient du fait que le carré redéfinit la manière dont les dimensions sont définies, brisant ainsi le comportement du rectangle.",{"type":30,"tag":2339,"props":52729,"children":52731},{"id":52730},"solution-séparer-les-concepts",[52732],{"type":40,"value":52733},"Solution : Séparer les concepts",{"type":30,"tag":43,"props":52735,"children":52736},{},[52737,52739,52744,52746,52751],{"type":40,"value":52738},"Une solution consiste à ne pas faire de ",{"type":30,"tag":1042,"props":52740,"children":52742},{"className":52741},[],[52743],{"type":40,"value":51835},{"type":40,"value":52745}," une sous-classe de ",{"type":30,"tag":1042,"props":52747,"children":52749},{"className":52748},[],[52750],{"type":40,"value":37182},{"type":40,"value":52752},". Bien que mathématiquement, un carré soit un type particulier de rectangle, en termes de conception orientée objet, il est souvent préférable de modéliser ces concepts de manière distincte pour éviter de briser le LSP.",{"type":30,"tag":2339,"props":52754,"children":52756},{"id":52755},"nouvelle-conception-classes-indépendantes-rectangle-et-carre",[52757,52759,52764,52765],{"type":40,"value":52758},"Nouvelle conception : Classes indépendantes ",{"type":30,"tag":1042,"props":52760,"children":52762},{"className":52761},[],[52763],{"type":40,"value":37182},{"type":40,"value":8328},{"type":30,"tag":1042,"props":52766,"children":52768},{"className":52767},[],[52769],{"type":40,"value":51835},{"type":30,"tag":43,"props":52771,"children":52772},{},[52773],{"type":40,"value":52774},"Voici comment nous pourrions concevoir cela correctement :",{"type":30,"tag":2339,"props":52776,"children":52778},{"id":52777},"classe-rectangle-1",[52779,52780,52785],{"type":40,"value":51388},{"type":30,"tag":1042,"props":52781,"children":52783},{"className":52782},[],[52784],{"type":40,"value":37182},{"type":40,"value":6296},{"type":30,"tag":1035,"props":52787,"children":52788},{"className":1039,"code":51397,"language":1038,"meta":8,"style":8},[52789],{"type":30,"tag":1042,"props":52790,"children":52791},{"__ignoreMap":8},[52792,52811,52830,52849,52856,52899,52926,52953,52960,52967,53002,53029,53036,53043,53078,53105,53112,53119,53142,53181,53188],{"type":30,"tag":1046,"props":52793,"children":52794},{"class":1048,"line":1049},[52795,52799,52803,52807],{"type":30,"tag":1046,"props":52796,"children":52797},{"style":1053},[52798],{"type":40,"value":1056},{"type":30,"tag":1046,"props":52800,"children":52801},{"style":1053},[52802],{"type":40,"value":1061},{"type":30,"tag":1046,"props":52804,"children":52805},{"style":1064},[52806],{"type":40,"value":37239},{"type":30,"tag":1046,"props":52808,"children":52809},{"style":1070},[52810],{"type":40,"value":1073},{"type":30,"tag":1046,"props":52812,"children":52813},{"class":1048,"line":675},[52814,52818,52822,52826],{"type":30,"tag":1046,"props":52815,"children":52816},{"style":1053},[52817],{"type":40,"value":37251},{"type":30,"tag":1046,"props":52819,"children":52820},{"style":1053},[52821],{"type":40,"value":10265},{"type":30,"tag":1046,"props":52823,"children":52824},{"style":1105},[52825],{"type":40,"value":51436},{"type":30,"tag":1046,"props":52827,"children":52828},{"style":1070},[52829],{"type":40,"value":1113},{"type":30,"tag":1046,"props":52831,"children":52832},{"class":1048,"line":681},[52833,52837,52841,52845],{"type":30,"tag":1046,"props":52834,"children":52835},{"style":1053},[52836],{"type":40,"value":37251},{"type":30,"tag":1046,"props":52838,"children":52839},{"style":1053},[52840],{"type":40,"value":10265},{"type":30,"tag":1046,"props":52842,"children":52843},{"style":1105},[52844],{"type":40,"value":29540},{"type":30,"tag":1046,"props":52846,"children":52847},{"style":1070},[52848],{"type":40,"value":1113},{"type":30,"tag":1046,"props":52850,"children":52851},{"class":1048,"line":1124},[52852],{"type":30,"tag":1046,"props":52853,"children":52854},{"emptyLinePlaceholder":13},[52855],{"type":40,"value":1121},{"type":30,"tag":1046,"props":52857,"children":52858},{"class":1048,"line":1168},[52859,52863,52867,52871,52875,52879,52883,52887,52891,52895],{"type":30,"tag":1046,"props":52860,"children":52861},{"style":1053},[52862],{"type":40,"value":1130},{"type":30,"tag":1046,"props":52864,"children":52865},{"style":1138},[52866],{"type":40,"value":37239},{"type":30,"tag":1046,"props":52868,"children":52869},{"style":1070},[52870],{"type":40,"value":1146},{"type":30,"tag":1046,"props":52872,"children":52873},{"style":1053},[52874],{"type":40,"value":10323},{"type":30,"tag":1046,"props":52876,"children":52877},{"style":1153},[52878],{"type":40,"value":51436},{"type":30,"tag":1046,"props":52880,"children":52881},{"style":1070},[52882],{"type":40,"value":2891},{"type":30,"tag":1046,"props":52884,"children":52885},{"style":1053},[52886],{"type":40,"value":10265},{"type":30,"tag":1046,"props":52888,"children":52889},{"style":1153},[52890],{"type":40,"value":29540},{"type":30,"tag":1046,"props":52892,"children":52893},{"style":1070},[52894],{"type":40,"value":1161},{"type":30,"tag":1046,"props":52896,"children":52897},{"style":1070},[52898],{"type":40,"value":1073},{"type":30,"tag":1046,"props":52900,"children":52901},{"class":1048,"line":1201},[52902,52906,52910,52914,52918,52922],{"type":30,"tag":1046,"props":52903,"children":52904},{"style":1780},[52905],{"type":40,"value":1783},{"type":30,"tag":1046,"props":52907,"children":52908},{"style":1070},[52909],{"type":40,"value":1179},{"type":30,"tag":1046,"props":52911,"children":52912},{"style":1105},[52913],{"type":40,"value":51525},{"type":30,"tag":1046,"props":52915,"children":52916},{"style":1795},[52917],{"type":40,"value":1798},{"type":30,"tag":1046,"props":52919,"children":52920},{"style":1105},[52921],{"type":40,"value":51436},{"type":30,"tag":1046,"props":52923,"children":52924},{"style":1070},[52925],{"type":40,"value":1113},{"type":30,"tag":1046,"props":52927,"children":52928},{"class":1048,"line":1210},[52929,52933,52937,52941,52945,52949],{"type":30,"tag":1046,"props":52930,"children":52931},{"style":1780},[52932],{"type":40,"value":1783},{"type":30,"tag":1046,"props":52934,"children":52935},{"style":1070},[52936],{"type":40,"value":1179},{"type":30,"tag":1046,"props":52938,"children":52939},{"style":1105},[52940],{"type":40,"value":51553},{"type":30,"tag":1046,"props":52942,"children":52943},{"style":1795},[52944],{"type":40,"value":1798},{"type":30,"tag":1046,"props":52946,"children":52947},{"style":1105},[52948],{"type":40,"value":29540},{"type":30,"tag":1046,"props":52950,"children":52951},{"style":1070},[52952],{"type":40,"value":1113},{"type":30,"tag":1046,"props":52954,"children":52955},{"class":1048,"line":1218},[52956],{"type":30,"tag":1046,"props":52957,"children":52958},{"style":1070},[52959],{"type":40,"value":1207},{"type":30,"tag":1046,"props":52961,"children":52962},{"class":1048,"line":1255},[52963],{"type":30,"tag":1046,"props":52964,"children":52965},{"emptyLinePlaceholder":13},[52966],{"type":40,"value":1121},{"type":30,"tag":1046,"props":52968,"children":52969},{"class":1048,"line":1284},[52970,52974,52978,52982,52986,52990,52994,52998],{"type":30,"tag":1046,"props":52971,"children":52972},{"style":1053},[52973],{"type":40,"value":1130},{"type":30,"tag":1046,"props":52975,"children":52976},{"style":1053},[52977],{"type":40,"value":1135},{"type":30,"tag":1046,"props":52979,"children":52980},{"style":1138},[52981],{"type":40,"value":51595},{"type":30,"tag":1046,"props":52983,"children":52984},{"style":1070},[52985],{"type":40,"value":1146},{"type":30,"tag":1046,"props":52987,"children":52988},{"style":1053},[52989],{"type":40,"value":10323},{"type":30,"tag":1046,"props":52991,"children":52992},{"style":1153},[52993],{"type":40,"value":51436},{"type":30,"tag":1046,"props":52995,"children":52996},{"style":1070},[52997],{"type":40,"value":1161},{"type":30,"tag":1046,"props":52999,"children":53000},{"style":1070},[53001],{"type":40,"value":1073},{"type":30,"tag":1046,"props":53003,"children":53004},{"class":1048,"line":1292},[53005,53009,53013,53017,53021,53025],{"type":30,"tag":1046,"props":53006,"children":53007},{"style":1780},[53008],{"type":40,"value":1783},{"type":30,"tag":1046,"props":53010,"children":53011},{"style":1070},[53012],{"type":40,"value":1179},{"type":30,"tag":1046,"props":53014,"children":53015},{"style":1105},[53016],{"type":40,"value":51525},{"type":30,"tag":1046,"props":53018,"children":53019},{"style":1795},[53020],{"type":40,"value":1798},{"type":30,"tag":1046,"props":53022,"children":53023},{"style":1105},[53024],{"type":40,"value":51436},{"type":30,"tag":1046,"props":53026,"children":53027},{"style":1070},[53028],{"type":40,"value":1113},{"type":30,"tag":1046,"props":53030,"children":53031},{"class":1048,"line":1300},[53032],{"type":30,"tag":1046,"props":53033,"children":53034},{"style":1070},[53035],{"type":40,"value":1207},{"type":30,"tag":1046,"props":53037,"children":53038},{"class":1048,"line":1327},[53039],{"type":30,"tag":1046,"props":53040,"children":53041},{"emptyLinePlaceholder":13},[53042],{"type":40,"value":1121},{"type":30,"tag":1046,"props":53044,"children":53045},{"class":1048,"line":1354},[53046,53050,53054,53058,53062,53066,53070,53074],{"type":30,"tag":1046,"props":53047,"children":53048},{"style":1053},[53049],{"type":40,"value":1130},{"type":30,"tag":1046,"props":53051,"children":53052},{"style":1053},[53053],{"type":40,"value":1135},{"type":30,"tag":1046,"props":53055,"children":53056},{"style":1138},[53057],{"type":40,"value":51672},{"type":30,"tag":1046,"props":53059,"children":53060},{"style":1070},[53061],{"type":40,"value":1146},{"type":30,"tag":1046,"props":53063,"children":53064},{"style":1053},[53065],{"type":40,"value":10323},{"type":30,"tag":1046,"props":53067,"children":53068},{"style":1153},[53069],{"type":40,"value":29540},{"type":30,"tag":1046,"props":53071,"children":53072},{"style":1070},[53073],{"type":40,"value":1161},{"type":30,"tag":1046,"props":53075,"children":53076},{"style":1070},[53077],{"type":40,"value":1073},{"type":30,"tag":1046,"props":53079,"children":53080},{"class":1048,"line":1391},[53081,53085,53089,53093,53097,53101],{"type":30,"tag":1046,"props":53082,"children":53083},{"style":1780},[53084],{"type":40,"value":1783},{"type":30,"tag":1046,"props":53086,"children":53087},{"style":1070},[53088],{"type":40,"value":1179},{"type":30,"tag":1046,"props":53090,"children":53091},{"style":1105},[53092],{"type":40,"value":51553},{"type":30,"tag":1046,"props":53094,"children":53095},{"style":1795},[53096],{"type":40,"value":1798},{"type":30,"tag":1046,"props":53098,"children":53099},{"style":1105},[53100],{"type":40,"value":29540},{"type":30,"tag":1046,"props":53102,"children":53103},{"style":1070},[53104],{"type":40,"value":1113},{"type":30,"tag":1046,"props":53106,"children":53107},{"class":1048,"line":1409},[53108],{"type":30,"tag":1046,"props":53109,"children":53110},{"style":1070},[53111],{"type":40,"value":1207},{"type":30,"tag":1046,"props":53113,"children":53114},{"class":1048,"line":1417},[53115],{"type":30,"tag":1046,"props":53116,"children":53117},{"emptyLinePlaceholder":13},[53118],{"type":40,"value":1121},{"type":30,"tag":1046,"props":53120,"children":53121},{"class":1048,"line":2023},[53122,53126,53130,53134,53138],{"type":30,"tag":1046,"props":53123,"children":53124},{"style":1053},[53125],{"type":40,"value":1130},{"type":30,"tag":1046,"props":53127,"children":53128},{"style":1053},[53129],{"type":40,"value":10265},{"type":30,"tag":1046,"props":53131,"children":53132},{"style":1138},[53133],{"type":40,"value":51749},{"type":30,"tag":1046,"props":53135,"children":53136},{"style":1070},[53137],{"type":40,"value":1320},{"type":30,"tag":1046,"props":53139,"children":53140},{"style":1070},[53141],{"type":40,"value":1073},{"type":30,"tag":1046,"props":53143,"children":53144},{"class":1048,"line":2083},[53145,53149,53153,53157,53161,53165,53169,53173,53177],{"type":30,"tag":1046,"props":53146,"children":53147},{"style":1053},[53148],{"type":40,"value":1333},{"type":30,"tag":1046,"props":53150,"children":53151},{"style":1780},[53152],{"type":40,"value":11550},{"type":30,"tag":1046,"props":53154,"children":53155},{"style":1070},[53156],{"type":40,"value":1179},{"type":30,"tag":1046,"props":53158,"children":53159},{"style":1105},[53160],{"type":40,"value":51525},{"type":30,"tag":1046,"props":53162,"children":53163},{"style":1795},[53164],{"type":40,"value":21197},{"type":30,"tag":1046,"props":53166,"children":53167},{"style":1780},[53168],{"type":40,"value":11550},{"type":30,"tag":1046,"props":53170,"children":53171},{"style":1070},[53172],{"type":40,"value":1179},{"type":30,"tag":1046,"props":53174,"children":53175},{"style":1105},[53176],{"type":40,"value":51793},{"type":30,"tag":1046,"props":53178,"children":53179},{"style":1070},[53180],{"type":40,"value":1113},{"type":30,"tag":1046,"props":53182,"children":53183},{"class":1048,"line":2126},[53184],{"type":30,"tag":1046,"props":53185,"children":53186},{"style":1070},[53187],{"type":40,"value":1207},{"type":30,"tag":1046,"props":53189,"children":53190},{"class":1048,"line":2159},[53191],{"type":30,"tag":1046,"props":53192,"children":53193},{"style":1070},[53194],{"type":40,"value":1423},{"type":30,"tag":43,"props":53196,"children":53197},{},[53198,53200,53205],{"type":40,"value":53199},"La classe ",{"type":30,"tag":1042,"props":53201,"children":53203},{"className":53202},[],[53204],{"type":40,"value":37182},{"type":40,"value":53206}," reste inchangée.",{"type":30,"tag":2339,"props":53208,"children":53210},{"id":53209},"classe-carre-indépendante",[53211,53212,53217],{"type":40,"value":51388},{"type":30,"tag":1042,"props":53213,"children":53215},{"className":53214},[],[53216],{"type":40,"value":51835},{"type":40,"value":53218}," (indépendante) :",{"type":30,"tag":1035,"props":53220,"children":53222},{"className":1039,"code":53221,"language":1038,"meta":8,"style":8},"public class Carre {\n    private int taille;\n\n    public Carre(int taille) {\n        this.taille = taille;\n    }\n\n    public void setTaille(int taille) {\n        this.taille = taille;\n    }\n\n    public int calculerAire() {\n        return this.taille * this.taille;\n    }\n}\n",[53223],{"type":30,"tag":1042,"props":53224,"children":53225},{"__ignoreMap":8},[53226,53245,53264,53271,53302,53330,53337,53344,53380,53407,53414,53421,53444,53483,53490],{"type":30,"tag":1046,"props":53227,"children":53228},{"class":1048,"line":1049},[53229,53233,53237,53241],{"type":30,"tag":1046,"props":53230,"children":53231},{"style":1053},[53232],{"type":40,"value":1056},{"type":30,"tag":1046,"props":53234,"children":53235},{"style":1053},[53236],{"type":40,"value":1061},{"type":30,"tag":1046,"props":53238,"children":53239},{"style":1064},[53240],{"type":40,"value":51859},{"type":30,"tag":1046,"props":53242,"children":53243},{"style":1070},[53244],{"type":40,"value":1073},{"type":30,"tag":1046,"props":53246,"children":53247},{"class":1048,"line":675},[53248,53252,53256,53260],{"type":30,"tag":1046,"props":53249,"children":53250},{"style":1053},[53251],{"type":40,"value":1081},{"type":30,"tag":1046,"props":53253,"children":53254},{"style":1053},[53255],{"type":40,"value":10265},{"type":30,"tag":1046,"props":53257,"children":53258},{"style":1105},[53259],{"type":40,"value":51902},{"type":30,"tag":1046,"props":53261,"children":53262},{"style":1070},[53263],{"type":40,"value":1113},{"type":30,"tag":1046,"props":53265,"children":53266},{"class":1048,"line":681},[53267],{"type":30,"tag":1046,"props":53268,"children":53269},{"emptyLinePlaceholder":13},[53270],{"type":40,"value":1121},{"type":30,"tag":1046,"props":53272,"children":53273},{"class":1048,"line":1124},[53274,53278,53282,53286,53290,53294,53298],{"type":30,"tag":1046,"props":53275,"children":53276},{"style":1053},[53277],{"type":40,"value":1130},{"type":30,"tag":1046,"props":53279,"children":53280},{"style":1138},[53281],{"type":40,"value":51859},{"type":30,"tag":1046,"props":53283,"children":53284},{"style":1070},[53285],{"type":40,"value":1146},{"type":30,"tag":1046,"props":53287,"children":53288},{"style":1053},[53289],{"type":40,"value":10323},{"type":30,"tag":1046,"props":53291,"children":53292},{"style":1153},[53293],{"type":40,"value":51902},{"type":30,"tag":1046,"props":53295,"children":53296},{"style":1070},[53297],{"type":40,"value":1161},{"type":30,"tag":1046,"props":53299,"children":53300},{"style":1070},[53301],{"type":40,"value":1073},{"type":30,"tag":1046,"props":53303,"children":53304},{"class":1048,"line":1168},[53305,53309,53313,53318,53322,53326],{"type":30,"tag":1046,"props":53306,"children":53307},{"style":1780},[53308],{"type":40,"value":1783},{"type":30,"tag":1046,"props":53310,"children":53311},{"style":1070},[53312],{"type":40,"value":1179},{"type":30,"tag":1046,"props":53314,"children":53315},{"style":1105},[53316],{"type":40,"value":53317},"taille ",{"type":30,"tag":1046,"props":53319,"children":53320},{"style":1795},[53321],{"type":40,"value":1798},{"type":30,"tag":1046,"props":53323,"children":53324},{"style":1105},[53325],{"type":40,"value":51902},{"type":30,"tag":1046,"props":53327,"children":53328},{"style":1070},[53329],{"type":40,"value":1113},{"type":30,"tag":1046,"props":53331,"children":53332},{"class":1048,"line":1201},[53333],{"type":30,"tag":1046,"props":53334,"children":53335},{"style":1070},[53336],{"type":40,"value":1207},{"type":30,"tag":1046,"props":53338,"children":53339},{"class":1048,"line":1210},[53340],{"type":30,"tag":1046,"props":53341,"children":53342},{"emptyLinePlaceholder":13},[53343],{"type":40,"value":1121},{"type":30,"tag":1046,"props":53345,"children":53346},{"class":1048,"line":1218},[53347,53351,53355,53360,53364,53368,53372,53376],{"type":30,"tag":1046,"props":53348,"children":53349},{"style":1053},[53350],{"type":40,"value":1130},{"type":30,"tag":1046,"props":53352,"children":53353},{"style":1053},[53354],{"type":40,"value":1135},{"type":30,"tag":1046,"props":53356,"children":53357},{"style":1138},[53358],{"type":40,"value":53359}," setTaille",{"type":30,"tag":1046,"props":53361,"children":53362},{"style":1070},[53363],{"type":40,"value":1146},{"type":30,"tag":1046,"props":53365,"children":53366},{"style":1053},[53367],{"type":40,"value":10323},{"type":30,"tag":1046,"props":53369,"children":53370},{"style":1153},[53371],{"type":40,"value":51902},{"type":30,"tag":1046,"props":53373,"children":53374},{"style":1070},[53375],{"type":40,"value":1161},{"type":30,"tag":1046,"props":53377,"children":53378},{"style":1070},[53379],{"type":40,"value":1073},{"type":30,"tag":1046,"props":53381,"children":53382},{"class":1048,"line":1255},[53383,53387,53391,53395,53399,53403],{"type":30,"tag":1046,"props":53384,"children":53385},{"style":1780},[53386],{"type":40,"value":1783},{"type":30,"tag":1046,"props":53388,"children":53389},{"style":1070},[53390],{"type":40,"value":1179},{"type":30,"tag":1046,"props":53392,"children":53393},{"style":1105},[53394],{"type":40,"value":53317},{"type":30,"tag":1046,"props":53396,"children":53397},{"style":1795},[53398],{"type":40,"value":1798},{"type":30,"tag":1046,"props":53400,"children":53401},{"style":1105},[53402],{"type":40,"value":51902},{"type":30,"tag":1046,"props":53404,"children":53405},{"style":1070},[53406],{"type":40,"value":1113},{"type":30,"tag":1046,"props":53408,"children":53409},{"class":1048,"line":1284},[53410],{"type":30,"tag":1046,"props":53411,"children":53412},{"style":1070},[53413],{"type":40,"value":1207},{"type":30,"tag":1046,"props":53415,"children":53416},{"class":1048,"line":1292},[53417],{"type":30,"tag":1046,"props":53418,"children":53419},{"emptyLinePlaceholder":13},[53420],{"type":40,"value":1121},{"type":30,"tag":1046,"props":53422,"children":53423},{"class":1048,"line":1300},[53424,53428,53432,53436,53440],{"type":30,"tag":1046,"props":53425,"children":53426},{"style":1053},[53427],{"type":40,"value":1130},{"type":30,"tag":1046,"props":53429,"children":53430},{"style":1053},[53431],{"type":40,"value":10265},{"type":30,"tag":1046,"props":53433,"children":53434},{"style":1138},[53435],{"type":40,"value":51749},{"type":30,"tag":1046,"props":53437,"children":53438},{"style":1070},[53439],{"type":40,"value":1320},{"type":30,"tag":1046,"props":53441,"children":53442},{"style":1070},[53443],{"type":40,"value":1073},{"type":30,"tag":1046,"props":53445,"children":53446},{"class":1048,"line":1327},[53447,53451,53455,53459,53463,53467,53471,53475,53479],{"type":30,"tag":1046,"props":53448,"children":53449},{"style":1053},[53450],{"type":40,"value":1333},{"type":30,"tag":1046,"props":53452,"children":53453},{"style":1780},[53454],{"type":40,"value":11550},{"type":30,"tag":1046,"props":53456,"children":53457},{"style":1070},[53458],{"type":40,"value":1179},{"type":30,"tag":1046,"props":53460,"children":53461},{"style":1105},[53462],{"type":40,"value":53317},{"type":30,"tag":1046,"props":53464,"children":53465},{"style":1795},[53466],{"type":40,"value":21197},{"type":30,"tag":1046,"props":53468,"children":53469},{"style":1780},[53470],{"type":40,"value":11550},{"type":30,"tag":1046,"props":53472,"children":53473},{"style":1070},[53474],{"type":40,"value":1179},{"type":30,"tag":1046,"props":53476,"children":53477},{"style":1105},[53478],{"type":40,"value":51927},{"type":30,"tag":1046,"props":53480,"children":53481},{"style":1070},[53482],{"type":40,"value":1113},{"type":30,"tag":1046,"props":53484,"children":53485},{"class":1048,"line":1354},[53486],{"type":30,"tag":1046,"props":53487,"children":53488},{"style":1070},[53489],{"type":40,"value":1207},{"type":30,"tag":1046,"props":53491,"children":53492},{"class":1048,"line":1391},[53493],{"type":30,"tag":1046,"props":53494,"children":53495},{"style":1070},[53496],{"type":40,"value":1423},{"type":30,"tag":43,"props":53498,"children":53499},{},[53500,53502,53507,53509,53514,53516,53521,53523,53528,53530,53535,53537,53542],{"type":40,"value":53501},"Dans cette version, ",{"type":30,"tag":1042,"props":53503,"children":53505},{"className":53504},[],[53506],{"type":40,"value":51835},{"type":40,"value":53508}," n’hérite plus de ",{"type":30,"tag":1042,"props":53510,"children":53512},{"className":53511},[],[53513],{"type":40,"value":37182},{"type":40,"value":53515},". Nous avons ainsi une classe ",{"type":30,"tag":1042,"props":53517,"children":53519},{"className":53518},[],[53520],{"type":40,"value":51835},{"type":40,"value":53522}," totalement indépendante qui suit ses propres règles et n'interfère pas avec les attentes définies pour un ",{"type":30,"tag":1042,"props":53524,"children":53526},{"className":53525},[],[53527],{"type":40,"value":37182},{"type":40,"value":53529},". Le carré a une seule dimension (",{"type":30,"tag":1042,"props":53531,"children":53533},{"className":53532},[],[53534],{"type":40,"value":51927},{"type":40,"value":53536},"), et son comportement est cohérent avec son concept sans violer les principes de la classe ",{"type":30,"tag":1042,"props":53538,"children":53540},{"className":53539},[],[53541],{"type":40,"value":37182},{"type":40,"value":1179},{"type":30,"tag":2339,"props":53544,"children":53546},{"id":53545},"modification-du-programme-de-test",[53547],{"type":40,"value":53548},"Modification du programme de test :",{"type":30,"tag":43,"props":53550,"children":53551},{},[53552,53554,53559,53561,53566],{"type":40,"value":53553},"Puisque ",{"type":30,"tag":1042,"props":53555,"children":53557},{"className":53556},[],[53558],{"type":40,"value":51835},{"type":40,"value":53560}," n’est plus une sous-classe de ",{"type":30,"tag":1042,"props":53562,"children":53564},{"className":53563},[],[53565],{"type":40,"value":37182},{"type":40,"value":53567},", nous devons légèrement modifier notre méthode de test pour respecter cette nouvelle structure.",{"type":30,"tag":1035,"props":53569,"children":53571},{"className":1039,"code":53570,"language":1038,"meta":8,"style":8},"public class Main {\n\n    public static void testerRectangle(Rectangle rect) {\n        rect.setLargeur(5);\n        rect.setHauteur(10);\n        int aire = rect.calculerAire();\n        System.out.println(\"Aire attendue (Rectangle) : 50, Aire calculée : \" + aire);\n    }\n\n    public static void testerCarre(Carre carre) {\n        carre.setTaille(5);\n        int aire = carre.calculerAire();\n        System.out.println(\"Aire attendue (Carre) : 25, Aire calculée : \" + aire);\n    }\n\n    public static void main(String[] args) {\n        // Test avec un Rectangle\n        Rectangle rect = new Rectangle(2, 3);\n        testerRectangle(rect);\n\n        // Test avec un Carre\n        Carre carre = new Carre(5);\n\n\n        testerCarre(carre);\n    }\n}\n",[53572],{"type":30,"tag":1042,"props":53573,"children":53574},{"__ignoreMap":8},[53575,53594,53601,53640,53667,53694,53725,53769,53776,53783,53824,53853,53884,53928,53935,53942,53985,53992,54035,54054,54061,54068,54103,54110,54117,54137,54144],{"type":30,"tag":1046,"props":53576,"children":53577},{"class":1048,"line":1049},[53578,53582,53586,53590],{"type":30,"tag":1046,"props":53579,"children":53580},{"style":1053},[53581],{"type":40,"value":1056},{"type":30,"tag":1046,"props":53583,"children":53584},{"style":1053},[53585],{"type":40,"value":1061},{"type":30,"tag":1046,"props":53587,"children":53588},{"style":1064},[53589],{"type":40,"value":12347},{"type":30,"tag":1046,"props":53591,"children":53592},{"style":1070},[53593],{"type":40,"value":1073},{"type":30,"tag":1046,"props":53595,"children":53596},{"class":1048,"line":675},[53597],{"type":30,"tag":1046,"props":53598,"children":53599},{"emptyLinePlaceholder":13},[53600],{"type":40,"value":1121},{"type":30,"tag":1046,"props":53602,"children":53603},{"class":1048,"line":681},[53604,53608,53612,53616,53620,53624,53628,53632,53636],{"type":30,"tag":1046,"props":53605,"children":53606},{"style":1053},[53607],{"type":40,"value":1130},{"type":30,"tag":1046,"props":53609,"children":53610},{"style":1053},[53611],{"type":40,"value":12363},{"type":30,"tag":1046,"props":53613,"children":53614},{"style":1053},[53615],{"type":40,"value":1135},{"type":30,"tag":1046,"props":53617,"children":53618},{"style":1138},[53619],{"type":40,"value":52263},{"type":30,"tag":1046,"props":53621,"children":53622},{"style":1070},[53623],{"type":40,"value":1146},{"type":30,"tag":1046,"props":53625,"children":53626},{"style":1084},[53627],{"type":40,"value":37182},{"type":30,"tag":1046,"props":53629,"children":53630},{"style":1153},[53631],{"type":40,"value":52276},{"type":30,"tag":1046,"props":53633,"children":53634},{"style":1070},[53635],{"type":40,"value":1161},{"type":30,"tag":1046,"props":53637,"children":53638},{"style":1070},[53639],{"type":40,"value":1073},{"type":30,"tag":1046,"props":53641,"children":53642},{"class":1048,"line":1124},[53643,53647,53651,53655,53659,53663],{"type":30,"tag":1046,"props":53644,"children":53645},{"style":1105},[53646],{"type":40,"value":52292},{"type":30,"tag":1046,"props":53648,"children":53649},{"style":1070},[53650],{"type":40,"value":1179},{"type":30,"tag":1046,"props":53652,"children":53653},{"style":1138},[53654],{"type":40,"value":52184},{"type":30,"tag":1046,"props":53656,"children":53657},{"style":1070},[53658],{"type":40,"value":1146},{"type":30,"tag":1046,"props":53660,"children":53661},{"style":6886},[53662],{"type":40,"value":47717},{"type":30,"tag":1046,"props":53664,"children":53665},{"style":1070},[53666],{"type":40,"value":1198},{"type":30,"tag":1046,"props":53668,"children":53669},{"class":1048,"line":1168},[53670,53674,53678,53682,53686,53690],{"type":30,"tag":1046,"props":53671,"children":53672},{"style":1105},[53673],{"type":40,"value":52292},{"type":30,"tag":1046,"props":53675,"children":53676},{"style":1070},[53677],{"type":40,"value":1179},{"type":30,"tag":1046,"props":53679,"children":53680},{"style":1138},[53681],{"type":40,"value":52191},{"type":30,"tag":1046,"props":53683,"children":53684},{"style":1070},[53685],{"type":40,"value":1146},{"type":30,"tag":1046,"props":53687,"children":53688},{"style":6886},[53689],{"type":40,"value":49645},{"type":30,"tag":1046,"props":53691,"children":53692},{"style":1070},[53693],{"type":40,"value":1198},{"type":30,"tag":1046,"props":53695,"children":53696},{"class":1048,"line":1201},[53697,53701,53705,53709,53713,53717,53721],{"type":30,"tag":1046,"props":53698,"children":53699},{"style":1053},[53700],{"type":40,"value":47659},{"type":30,"tag":1046,"props":53702,"children":53703},{"style":1105},[53704],{"type":40,"value":52351},{"type":30,"tag":1046,"props":53706,"children":53707},{"style":1795},[53708],{"type":40,"value":1798},{"type":30,"tag":1046,"props":53710,"children":53711},{"style":1105},[53712],{"type":40,"value":52276},{"type":30,"tag":1046,"props":53714,"children":53715},{"style":1070},[53716],{"type":40,"value":1179},{"type":30,"tag":1046,"props":53718,"children":53719},{"style":1138},[53720],{"type":40,"value":52368},{"type":30,"tag":1046,"props":53722,"children":53723},{"style":1070},[53724],{"type":40,"value":1406},{"type":30,"tag":1046,"props":53726,"children":53727},{"class":1048,"line":1210},[53728,53732,53736,53740,53744,53748,53752,53757,53761,53765],{"type":30,"tag":1046,"props":53729,"children":53730},{"style":1105},[53731],{"type":40,"value":12555},{"type":30,"tag":1046,"props":53733,"children":53734},{"style":1070},[53735],{"type":40,"value":1179},{"type":30,"tag":1046,"props":53737,"children":53738},{"style":1105},[53739],{"type":40,"value":12564},{"type":30,"tag":1046,"props":53741,"children":53742},{"style":1070},[53743],{"type":40,"value":1179},{"type":30,"tag":1046,"props":53745,"children":53746},{"style":1138},[53747],{"type":40,"value":12573},{"type":30,"tag":1046,"props":53749,"children":53750},{"style":1070},[53751],{"type":40,"value":1146},{"type":30,"tag":1046,"props":53753,"children":53754},{"style":1675},[53755],{"type":40,"value":53756},"\"Aire attendue (Rectangle) : 50, Aire calculée : \"",{"type":30,"tag":1046,"props":53758,"children":53759},{"style":1795},[53760],{"type":40,"value":7261},{"type":30,"tag":1046,"props":53762,"children":53763},{"style":1105},[53764],{"type":40,"value":52413},{"type":30,"tag":1046,"props":53766,"children":53767},{"style":1070},[53768],{"type":40,"value":1198},{"type":30,"tag":1046,"props":53770,"children":53771},{"class":1048,"line":1218},[53772],{"type":30,"tag":1046,"props":53773,"children":53774},{"style":1070},[53775],{"type":40,"value":1207},{"type":30,"tag":1046,"props":53777,"children":53778},{"class":1048,"line":1255},[53779],{"type":30,"tag":1046,"props":53780,"children":53781},{"emptyLinePlaceholder":13},[53782],{"type":40,"value":1121},{"type":30,"tag":1046,"props":53784,"children":53785},{"class":1048,"line":1284},[53786,53790,53794,53798,53803,53807,53811,53816,53820],{"type":30,"tag":1046,"props":53787,"children":53788},{"style":1053},[53789],{"type":40,"value":1130},{"type":30,"tag":1046,"props":53791,"children":53792},{"style":1053},[53793],{"type":40,"value":12363},{"type":30,"tag":1046,"props":53795,"children":53796},{"style":1053},[53797],{"type":40,"value":1135},{"type":30,"tag":1046,"props":53799,"children":53800},{"style":1138},[53801],{"type":40,"value":53802}," testerCarre",{"type":30,"tag":1046,"props":53804,"children":53805},{"style":1070},[53806],{"type":40,"value":1146},{"type":30,"tag":1046,"props":53808,"children":53809},{"style":1084},[53810],{"type":40,"value":51835},{"type":30,"tag":1046,"props":53812,"children":53813},{"style":1153},[53814],{"type":40,"value":53815}," carre",{"type":30,"tag":1046,"props":53817,"children":53818},{"style":1070},[53819],{"type":40,"value":1161},{"type":30,"tag":1046,"props":53821,"children":53822},{"style":1070},[53823],{"type":40,"value":1073},{"type":30,"tag":1046,"props":53825,"children":53826},{"class":1048,"line":1292},[53827,53832,53836,53841,53845,53849],{"type":30,"tag":1046,"props":53828,"children":53829},{"style":1105},[53830],{"type":40,"value":53831},"        carre",{"type":30,"tag":1046,"props":53833,"children":53834},{"style":1070},[53835],{"type":40,"value":1179},{"type":30,"tag":1046,"props":53837,"children":53838},{"style":1138},[53839],{"type":40,"value":53840},"setTaille",{"type":30,"tag":1046,"props":53842,"children":53843},{"style":1070},[53844],{"type":40,"value":1146},{"type":30,"tag":1046,"props":53846,"children":53847},{"style":6886},[53848],{"type":40,"value":47717},{"type":30,"tag":1046,"props":53850,"children":53851},{"style":1070},[53852],{"type":40,"value":1198},{"type":30,"tag":1046,"props":53854,"children":53855},{"class":1048,"line":1300},[53856,53860,53864,53868,53872,53876,53880],{"type":30,"tag":1046,"props":53857,"children":53858},{"style":1053},[53859],{"type":40,"value":47659},{"type":30,"tag":1046,"props":53861,"children":53862},{"style":1105},[53863],{"type":40,"value":52351},{"type":30,"tag":1046,"props":53865,"children":53866},{"style":1795},[53867],{"type":40,"value":1798},{"type":30,"tag":1046,"props":53869,"children":53870},{"style":1105},[53871],{"type":40,"value":53815},{"type":30,"tag":1046,"props":53873,"children":53874},{"style":1070},[53875],{"type":40,"value":1179},{"type":30,"tag":1046,"props":53877,"children":53878},{"style":1138},[53879],{"type":40,"value":52368},{"type":30,"tag":1046,"props":53881,"children":53882},{"style":1070},[53883],{"type":40,"value":1406},{"type":30,"tag":1046,"props":53885,"children":53886},{"class":1048,"line":1327},[53887,53891,53895,53899,53903,53907,53911,53916,53920,53924],{"type":30,"tag":1046,"props":53888,"children":53889},{"style":1105},[53890],{"type":40,"value":12555},{"type":30,"tag":1046,"props":53892,"children":53893},{"style":1070},[53894],{"type":40,"value":1179},{"type":30,"tag":1046,"props":53896,"children":53897},{"style":1105},[53898],{"type":40,"value":12564},{"type":30,"tag":1046,"props":53900,"children":53901},{"style":1070},[53902],{"type":40,"value":1179},{"type":30,"tag":1046,"props":53904,"children":53905},{"style":1138},[53906],{"type":40,"value":12573},{"type":30,"tag":1046,"props":53908,"children":53909},{"style":1070},[53910],{"type":40,"value":1146},{"type":30,"tag":1046,"props":53912,"children":53913},{"style":1675},[53914],{"type":40,"value":53915},"\"Aire attendue (Carre) : 25, Aire calculée : \"",{"type":30,"tag":1046,"props":53917,"children":53918},{"style":1795},[53919],{"type":40,"value":7261},{"type":30,"tag":1046,"props":53921,"children":53922},{"style":1105},[53923],{"type":40,"value":52413},{"type":30,"tag":1046,"props":53925,"children":53926},{"style":1070},[53927],{"type":40,"value":1198},{"type":30,"tag":1046,"props":53929,"children":53930},{"class":1048,"line":1354},[53931],{"type":30,"tag":1046,"props":53932,"children":53933},{"style":1070},[53934],{"type":40,"value":1207},{"type":30,"tag":1046,"props":53936,"children":53937},{"class":1048,"line":1391},[53938],{"type":30,"tag":1046,"props":53939,"children":53940},{"emptyLinePlaceholder":13},[53941],{"type":40,"value":1121},{"type":30,"tag":1046,"props":53943,"children":53944},{"class":1048,"line":1409},[53945,53949,53953,53957,53961,53965,53969,53973,53977,53981],{"type":30,"tag":1046,"props":53946,"children":53947},{"style":1053},[53948],{"type":40,"value":1130},{"type":30,"tag":1046,"props":53950,"children":53951},{"style":1053},[53952],{"type":40,"value":12363},{"type":30,"tag":1046,"props":53954,"children":53955},{"style":1053},[53956],{"type":40,"value":1135},{"type":30,"tag":1046,"props":53958,"children":53959},{"style":1138},[53960],{"type":40,"value":12372},{"type":30,"tag":1046,"props":53962,"children":53963},{"style":1070},[53964],{"type":40,"value":1146},{"type":30,"tag":1046,"props":53966,"children":53967},{"style":1053},[53968],{"type":40,"value":2882},{"type":30,"tag":1046,"props":53970,"children":53971},{"style":1070},[53972],{"type":40,"value":12385},{"type":30,"tag":1046,"props":53974,"children":53975},{"style":1153},[53976],{"type":40,"value":12390},{"type":30,"tag":1046,"props":53978,"children":53979},{"style":1070},[53980],{"type":40,"value":1161},{"type":30,"tag":1046,"props":53982,"children":53983},{"style":1070},[53984],{"type":40,"value":1073},{"type":30,"tag":1046,"props":53986,"children":53987},{"class":1048,"line":1417},[53988],{"type":30,"tag":1046,"props":53989,"children":53990},{"style":3961},[53991],{"type":40,"value":52482},{"type":30,"tag":1046,"props":53993,"children":53994},{"class":1048,"line":2023},[53995,53999,54003,54007,54011,54015,54019,54023,54027,54031],{"type":30,"tag":1046,"props":53996,"children":53997},{"style":1084},[53998],{"type":40,"value":52490},{"type":30,"tag":1046,"props":54000,"children":54001},{"style":1105},[54002],{"type":40,"value":52495},{"type":30,"tag":1046,"props":54004,"children":54005},{"style":1795},[54006],{"type":40,"value":1798},{"type":30,"tag":1046,"props":54008,"children":54009},{"style":1053},[54010],{"type":40,"value":2480},{"type":30,"tag":1046,"props":54012,"children":54013},{"style":1138},[54014],{"type":40,"value":37239},{"type":30,"tag":1046,"props":54016,"children":54017},{"style":1070},[54018],{"type":40,"value":1146},{"type":30,"tag":1046,"props":54020,"children":54021},{"style":6886},[54022],{"type":40,"value":10197},{"type":30,"tag":1046,"props":54024,"children":54025},{"style":1070},[54026],{"type":40,"value":2891},{"type":30,"tag":1046,"props":54028,"children":54029},{"style":6886},[54030],{"type":40,"value":29352},{"type":30,"tag":1046,"props":54032,"children":54033},{"style":1070},[54034],{"type":40,"value":1198},{"type":30,"tag":1046,"props":54036,"children":54037},{"class":1048,"line":2083},[54038,54042,54046,54050],{"type":30,"tag":1046,"props":54039,"children":54040},{"style":1138},[54041],{"type":40,"value":52535},{"type":30,"tag":1046,"props":54043,"children":54044},{"style":1070},[54045],{"type":40,"value":1146},{"type":30,"tag":1046,"props":54047,"children":54048},{"style":1105},[54049],{"type":40,"value":52544},{"type":30,"tag":1046,"props":54051,"children":54052},{"style":1070},[54053],{"type":40,"value":1198},{"type":30,"tag":1046,"props":54055,"children":54056},{"class":1048,"line":2126},[54057],{"type":30,"tag":1046,"props":54058,"children":54059},{"emptyLinePlaceholder":13},[54060],{"type":40,"value":1121},{"type":30,"tag":1046,"props":54062,"children":54063},{"class":1048,"line":2159},[54064],{"type":30,"tag":1046,"props":54065,"children":54066},{"style":3961},[54067],{"type":40,"value":52563},{"type":30,"tag":1046,"props":54069,"children":54070},{"class":1048,"line":2167},[54071,54075,54079,54083,54087,54091,54095,54099],{"type":30,"tag":1046,"props":54072,"children":54073},{"style":1084},[54074],{"type":40,"value":52571},{"type":30,"tag":1046,"props":54076,"children":54077},{"style":1105},[54078],{"type":40,"value":52576},{"type":30,"tag":1046,"props":54080,"children":54081},{"style":1795},[54082],{"type":40,"value":1798},{"type":30,"tag":1046,"props":54084,"children":54085},{"style":1053},[54086],{"type":40,"value":2480},{"type":30,"tag":1046,"props":54088,"children":54089},{"style":1138},[54090],{"type":40,"value":51859},{"type":30,"tag":1046,"props":54092,"children":54093},{"style":1070},[54094],{"type":40,"value":1146},{"type":30,"tag":1046,"props":54096,"children":54097},{"style":6886},[54098],{"type":40,"value":47717},{"type":30,"tag":1046,"props":54100,"children":54101},{"style":1070},[54102],{"type":40,"value":1198},{"type":30,"tag":1046,"props":54104,"children":54105},{"class":1048,"line":4537},[54106],{"type":30,"tag":1046,"props":54107,"children":54108},{"emptyLinePlaceholder":13},[54109],{"type":40,"value":1121},{"type":30,"tag":1046,"props":54111,"children":54112},{"class":1048,"line":4545},[54113],{"type":30,"tag":1046,"props":54114,"children":54115},{"emptyLinePlaceholder":13},[54116],{"type":40,"value":1121},{"type":30,"tag":1046,"props":54118,"children":54119},{"class":1048,"line":4582},[54120,54125,54129,54133],{"type":30,"tag":1046,"props":54121,"children":54122},{"style":1138},[54123],{"type":40,"value":54124},"        testerCarre",{"type":30,"tag":1046,"props":54126,"children":54127},{"style":1070},[54128],{"type":40,"value":1146},{"type":30,"tag":1046,"props":54130,"children":54131},{"style":1105},[54132],{"type":40,"value":52616},{"type":30,"tag":1046,"props":54134,"children":54135},{"style":1070},[54136],{"type":40,"value":1198},{"type":30,"tag":1046,"props":54138,"children":54139},{"class":1048,"line":4622},[54140],{"type":30,"tag":1046,"props":54141,"children":54142},{"style":1070},[54143],{"type":40,"value":1207},{"type":30,"tag":1046,"props":54145,"children":54146},{"class":1048,"line":4662},[54147],{"type":30,"tag":1046,"props":54148,"children":54149},{"style":1070},[54150],{"type":40,"value":1423},{"type":30,"tag":2339,"props":54152,"children":54154},{"id":54153},"résultat-1",[54155],{"type":40,"value":52640},{"type":30,"tag":163,"props":54157,"children":54158},{},[54159,54170],{"type":30,"tag":167,"props":54160,"children":54161},{},[54162,54163,54168],{"type":40,"value":143},{"type":30,"tag":1042,"props":54164,"children":54166},{"className":54165},[],[54167],{"type":40,"value":37182},{"type":40,"value":54169}," fonctionne comme prévu : l'aire est de 50.",{"type":30,"tag":167,"props":54171,"children":54172},{},[54173,54174,54179],{"type":40,"value":143},{"type":30,"tag":1042,"props":54175,"children":54177},{"className":54176},[],[54178],{"type":40,"value":51835},{"type":40,"value":54180}," fonctionne également correctement : l'aire est de 25 (5 * 5), et le comportement est bien conforme aux attentes.",{"type":30,"tag":116,"props":54182,"children":54184},{"id":54183},"pourquoi-cela-respecte-t-il-le-lsp",[54185],{"type":40,"value":54186},"Pourquoi cela respecte-t-il le LSP ?",{"type":30,"tag":43,"props":54188,"children":54189},{},[54190,54192,54197,54198,54203,54205,54210,54211,54216],{"type":40,"value":54191},"Dans cette solution, nous avons séparé les deux concepts (",{"type":30,"tag":1042,"props":54193,"children":54195},{"className":54194},[],[54196],{"type":40,"value":37182},{"type":40,"value":8328},{"type":30,"tag":1042,"props":54199,"children":54201},{"className":54200},[],[54202],{"type":40,"value":51835},{"type":40,"value":54204},") afin que chaque classe respecte ses propres contraintes. Le LSP est respecté car les objets ",{"type":30,"tag":1042,"props":54206,"children":54208},{"className":54207},[],[54209],{"type":40,"value":37182},{"type":40,"value":8328},{"type":30,"tag":1042,"props":54212,"children":54214},{"className":54213},[],[54215],{"type":40,"value":51835},{"type":40,"value":54217}," ne sont plus liés par une relation d’héritage qui pourrait potentiellement briser les attentes du programme.",{"type":30,"tag":116,"props":54219,"children":54221},{"id":54220},"autre-approche-utiliser-une-interface-commune",[54222],{"type":40,"value":54223},"Autre approche : utiliser une interface commune",{"type":30,"tag":43,"props":54225,"children":54226},{},[54227,54229,54234],{"type":40,"value":54228},"Si vous souhaitez toujours utiliser l’héritage ou l’interchangeabilité, une meilleure approche serait d’introduire une interface commune ",{"type":30,"tag":1042,"props":54230,"children":54232},{"className":54231},[],[54233],{"type":40,"value":51291},{"type":40,"value":54235}," que les deux classes pourraient implémenter. Ainsi, elles partageraient des comportements communs tout en ayant leurs propres implémentations spécifiques.",{"type":30,"tag":2339,"props":54237,"children":54239},{"id":54238},"exemple-avec-une-interface-commune",[54240],{"type":40,"value":54241},"Exemple avec une interface commune",{"type":30,"tag":1035,"props":54243,"children":54245},{"className":1039,"code":54244,"language":1038,"meta":8,"style":8},"public interface Forme {\n    int calculerAire();\n}\n\npublic class Rectangle implements Forme {\n    private int largeur;\n    private int hauteur;\n\n    public Rectangle(int largeur, int hauteur) {\n        this.largeur = largeur;\n        this.hauteur = hauteur;\n    }\n\n    @Override\n    public int calculerAire() {\n        return largeur * hauteur;\n    }\n}\n\npublic class Carre implements Forme {\n    private int taille;\n\n    public Carre(int taille) {\n        this.taille = taille;\n    }\n\n    @Override\n    public int calculerAire() {\n        return taille * taille;\n    }\n}\n",[54246],{"type":30,"tag":1042,"props":54247,"children":54248},{"__ignoreMap":8},[54249,54269,54284,54291,54298,54325,54344,54363,54370,54413,54440,54467,54474,54481,54492,54515,54538,54545,54552,54559,54586,54605,54612,54643,54670,54677,54684,54695,54718,54742,54749],{"type":30,"tag":1046,"props":54250,"children":54251},{"class":1048,"line":1049},[54252,54256,54260,54265],{"type":30,"tag":1046,"props":54253,"children":54254},{"style":1053},[54255],{"type":40,"value":1056},{"type":30,"tag":1046,"props":54257,"children":54258},{"style":1053},[54259],{"type":40,"value":4852},{"type":30,"tag":1046,"props":54261,"children":54262},{"style":1064},[54263],{"type":40,"value":54264}," Forme",{"type":30,"tag":1046,"props":54266,"children":54267},{"style":1070},[54268],{"type":40,"value":1073},{"type":30,"tag":1046,"props":54270,"children":54271},{"class":1048,"line":675},[54272,54276,54280],{"type":30,"tag":1046,"props":54273,"children":54274},{"style":1053},[54275],{"type":40,"value":14717},{"type":30,"tag":1046,"props":54277,"children":54278},{"style":1138},[54279],{"type":40,"value":51749},{"type":30,"tag":1046,"props":54281,"children":54282},{"style":1070},[54283],{"type":40,"value":1406},{"type":30,"tag":1046,"props":54285,"children":54286},{"class":1048,"line":681},[54287],{"type":30,"tag":1046,"props":54288,"children":54289},{"style":1070},[54290],{"type":40,"value":1423},{"type":30,"tag":1046,"props":54292,"children":54293},{"class":1048,"line":1124},[54294],{"type":30,"tag":1046,"props":54295,"children":54296},{"emptyLinePlaceholder":13},[54297],{"type":40,"value":1121},{"type":30,"tag":1046,"props":54299,"children":54300},{"class":1048,"line":1168},[54301,54305,54309,54313,54317,54321],{"type":30,"tag":1046,"props":54302,"children":54303},{"style":1053},[54304],{"type":40,"value":1056},{"type":30,"tag":1046,"props":54306,"children":54307},{"style":1053},[54308],{"type":40,"value":1061},{"type":30,"tag":1046,"props":54310,"children":54311},{"style":1064},[54312],{"type":40,"value":37239},{"type":30,"tag":1046,"props":54314,"children":54315},{"style":1053},[54316],{"type":40,"value":3166},{"type":30,"tag":1046,"props":54318,"children":54319},{"style":1064},[54320],{"type":40,"value":54264},{"type":30,"tag":1046,"props":54322,"children":54323},{"style":1070},[54324],{"type":40,"value":1073},{"type":30,"tag":1046,"props":54326,"children":54327},{"class":1048,"line":1201},[54328,54332,54336,54340],{"type":30,"tag":1046,"props":54329,"children":54330},{"style":1053},[54331],{"type":40,"value":1081},{"type":30,"tag":1046,"props":54333,"children":54334},{"style":1053},[54335],{"type":40,"value":10265},{"type":30,"tag":1046,"props":54337,"children":54338},{"style":1105},[54339],{"type":40,"value":51436},{"type":30,"tag":1046,"props":54341,"children":54342},{"style":1070},[54343],{"type":40,"value":1113},{"type":30,"tag":1046,"props":54345,"children":54346},{"class":1048,"line":1210},[54347,54351,54355,54359],{"type":30,"tag":1046,"props":54348,"children":54349},{"style":1053},[54350],{"type":40,"value":1081},{"type":30,"tag":1046,"props":54352,"children":54353},{"style":1053},[54354],{"type":40,"value":10265},{"type":30,"tag":1046,"props":54356,"children":54357},{"style":1105},[54358],{"type":40,"value":29540},{"type":30,"tag":1046,"props":54360,"children":54361},{"style":1070},[54362],{"type":40,"value":1113},{"type":30,"tag":1046,"props":54364,"children":54365},{"class":1048,"line":1218},[54366],{"type":30,"tag":1046,"props":54367,"children":54368},{"emptyLinePlaceholder":13},[54369],{"type":40,"value":1121},{"type":30,"tag":1046,"props":54371,"children":54372},{"class":1048,"line":1255},[54373,54377,54381,54385,54389,54393,54397,54401,54405,54409],{"type":30,"tag":1046,"props":54374,"children":54375},{"style":1053},[54376],{"type":40,"value":1130},{"type":30,"tag":1046,"props":54378,"children":54379},{"style":1138},[54380],{"type":40,"value":37239},{"type":30,"tag":1046,"props":54382,"children":54383},{"style":1070},[54384],{"type":40,"value":1146},{"type":30,"tag":1046,"props":54386,"children":54387},{"style":1053},[54388],{"type":40,"value":10323},{"type":30,"tag":1046,"props":54390,"children":54391},{"style":1153},[54392],{"type":40,"value":51436},{"type":30,"tag":1046,"props":54394,"children":54395},{"style":1070},[54396],{"type":40,"value":2891},{"type":30,"tag":1046,"props":54398,"children":54399},{"style":1053},[54400],{"type":40,"value":10265},{"type":30,"tag":1046,"props":54402,"children":54403},{"style":1153},[54404],{"type":40,"value":29540},{"type":30,"tag":1046,"props":54406,"children":54407},{"style":1070},[54408],{"type":40,"value":1161},{"type":30,"tag":1046,"props":54410,"children":54411},{"style":1070},[54412],{"type":40,"value":1073},{"type":30,"tag":1046,"props":54414,"children":54415},{"class":1048,"line":1284},[54416,54420,54424,54428,54432,54436],{"type":30,"tag":1046,"props":54417,"children":54418},{"style":1780},[54419],{"type":40,"value":1783},{"type":30,"tag":1046,"props":54421,"children":54422},{"style":1070},[54423],{"type":40,"value":1179},{"type":30,"tag":1046,"props":54425,"children":54426},{"style":1105},[54427],{"type":40,"value":51525},{"type":30,"tag":1046,"props":54429,"children":54430},{"style":1795},[54431],{"type":40,"value":1798},{"type":30,"tag":1046,"props":54433,"children":54434},{"style":1105},[54435],{"type":40,"value":51436},{"type":30,"tag":1046,"props":54437,"children":54438},{"style":1070},[54439],{"type":40,"value":1113},{"type":30,"tag":1046,"props":54441,"children":54442},{"class":1048,"line":1292},[54443,54447,54451,54455,54459,54463],{"type":30,"tag":1046,"props":54444,"children":54445},{"style":1780},[54446],{"type":40,"value":1783},{"type":30,"tag":1046,"props":54448,"children":54449},{"style":1070},[54450],{"type":40,"value":1179},{"type":30,"tag":1046,"props":54452,"children":54453},{"style":1105},[54454],{"type":40,"value":51553},{"type":30,"tag":1046,"props":54456,"children":54457},{"style":1795},[54458],{"type":40,"value":1798},{"type":30,"tag":1046,"props":54460,"children":54461},{"style":1105},[54462],{"type":40,"value":29540},{"type":30,"tag":1046,"props":54464,"children":54465},{"style":1070},[54466],{"type":40,"value":1113},{"type":30,"tag":1046,"props":54468,"children":54469},{"class":1048,"line":1300},[54470],{"type":30,"tag":1046,"props":54471,"children":54472},{"style":1070},[54473],{"type":40,"value":1207},{"type":30,"tag":1046,"props":54475,"children":54476},{"class":1048,"line":1327},[54477],{"type":30,"tag":1046,"props":54478,"children":54479},{"emptyLinePlaceholder":13},[54480],{"type":40,"value":1121},{"type":30,"tag":1046,"props":54482,"children":54483},{"class":1048,"line":1354},[54484,54488],{"type":30,"tag":1046,"props":54485,"children":54486},{"style":1647},[54487],{"type":40,"value":1828},{"type":30,"tag":1046,"props":54489,"children":54490},{"style":1653},[54491],{"type":40,"value":3258},{"type":30,"tag":1046,"props":54493,"children":54494},{"class":1048,"line":1391},[54495,54499,54503,54507,54511],{"type":30,"tag":1046,"props":54496,"children":54497},{"style":1053},[54498],{"type":40,"value":1130},{"type":30,"tag":1046,"props":54500,"children":54501},{"style":1053},[54502],{"type":40,"value":10265},{"type":30,"tag":1046,"props":54504,"children":54505},{"style":1138},[54506],{"type":40,"value":51749},{"type":30,"tag":1046,"props":54508,"children":54509},{"style":1070},[54510],{"type":40,"value":1320},{"type":30,"tag":1046,"props":54512,"children":54513},{"style":1070},[54514],{"type":40,"value":1073},{"type":30,"tag":1046,"props":54516,"children":54517},{"class":1048,"line":1409},[54518,54522,54526,54530,54534],{"type":30,"tag":1046,"props":54519,"children":54520},{"style":1053},[54521],{"type":40,"value":1333},{"type":30,"tag":1046,"props":54523,"children":54524},{"style":1105},[54525],{"type":40,"value":29467},{"type":30,"tag":1046,"props":54527,"children":54528},{"style":1795},[54529],{"type":40,"value":21197},{"type":30,"tag":1046,"props":54531,"children":54532},{"style":1105},[54533],{"type":40,"value":29540},{"type":30,"tag":1046,"props":54535,"children":54536},{"style":1070},[54537],{"type":40,"value":1113},{"type":30,"tag":1046,"props":54539,"children":54540},{"class":1048,"line":1417},[54541],{"type":30,"tag":1046,"props":54542,"children":54543},{"style":1070},[54544],{"type":40,"value":1207},{"type":30,"tag":1046,"props":54546,"children":54547},{"class":1048,"line":2023},[54548],{"type":30,"tag":1046,"props":54549,"children":54550},{"style":1070},[54551],{"type":40,"value":1423},{"type":30,"tag":1046,"props":54553,"children":54554},{"class":1048,"line":2083},[54555],{"type":30,"tag":1046,"props":54556,"children":54557},{"emptyLinePlaceholder":13},[54558],{"type":40,"value":1121},{"type":30,"tag":1046,"props":54560,"children":54561},{"class":1048,"line":2126},[54562,54566,54570,54574,54578,54582],{"type":30,"tag":1046,"props":54563,"children":54564},{"style":1053},[54565],{"type":40,"value":1056},{"type":30,"tag":1046,"props":54567,"children":54568},{"style":1053},[54569],{"type":40,"value":1061},{"type":30,"tag":1046,"props":54571,"children":54572},{"style":1064},[54573],{"type":40,"value":51859},{"type":30,"tag":1046,"props":54575,"children":54576},{"style":1053},[54577],{"type":40,"value":3166},{"type":30,"tag":1046,"props":54579,"children":54580},{"style":1064},[54581],{"type":40,"value":54264},{"type":30,"tag":1046,"props":54583,"children":54584},{"style":1070},[54585],{"type":40,"value":1073},{"type":30,"tag":1046,"props":54587,"children":54588},{"class":1048,"line":2159},[54589,54593,54597,54601],{"type":30,"tag":1046,"props":54590,"children":54591},{"style":1053},[54592],{"type":40,"value":1081},{"type":30,"tag":1046,"props":54594,"children":54595},{"style":1053},[54596],{"type":40,"value":10265},{"type":30,"tag":1046,"props":54598,"children":54599},{"style":1105},[54600],{"type":40,"value":51902},{"type":30,"tag":1046,"props":54602,"children":54603},{"style":1070},[54604],{"type":40,"value":1113},{"type":30,"tag":1046,"props":54606,"children":54607},{"class":1048,"line":2167},[54608],{"type":30,"tag":1046,"props":54609,"children":54610},{"emptyLinePlaceholder":13},[54611],{"type":40,"value":1121},{"type":30,"tag":1046,"props":54613,"children":54614},{"class":1048,"line":4537},[54615,54619,54623,54627,54631,54635,54639],{"type":30,"tag":1046,"props":54616,"children":54617},{"style":1053},[54618],{"type":40,"value":1130},{"type":30,"tag":1046,"props":54620,"children":54621},{"style":1138},[54622],{"type":40,"value":51859},{"type":30,"tag":1046,"props":54624,"children":54625},{"style":1070},[54626],{"type":40,"value":1146},{"type":30,"tag":1046,"props":54628,"children":54629},{"style":1053},[54630],{"type":40,"value":10323},{"type":30,"tag":1046,"props":54632,"children":54633},{"style":1153},[54634],{"type":40,"value":51902},{"type":30,"tag":1046,"props":54636,"children":54637},{"style":1070},[54638],{"type":40,"value":1161},{"type":30,"tag":1046,"props":54640,"children":54641},{"style":1070},[54642],{"type":40,"value":1073},{"type":30,"tag":1046,"props":54644,"children":54645},{"class":1048,"line":4545},[54646,54650,54654,54658,54662,54666],{"type":30,"tag":1046,"props":54647,"children":54648},{"style":1780},[54649],{"type":40,"value":1783},{"type":30,"tag":1046,"props":54651,"children":54652},{"style":1070},[54653],{"type":40,"value":1179},{"type":30,"tag":1046,"props":54655,"children":54656},{"style":1105},[54657],{"type":40,"value":53317},{"type":30,"tag":1046,"props":54659,"children":54660},{"style":1795},[54661],{"type":40,"value":1798},{"type":30,"tag":1046,"props":54663,"children":54664},{"style":1105},[54665],{"type":40,"value":51902},{"type":30,"tag":1046,"props":54667,"children":54668},{"style":1070},[54669],{"type":40,"value":1113},{"type":30,"tag":1046,"props":54671,"children":54672},{"class":1048,"line":4582},[54673],{"type":30,"tag":1046,"props":54674,"children":54675},{"style":1070},[54676],{"type":40,"value":1207},{"type":30,"tag":1046,"props":54678,"children":54679},{"class":1048,"line":4622},[54680],{"type":30,"tag":1046,"props":54681,"children":54682},{"emptyLinePlaceholder":13},[54683],{"type":40,"value":1121},{"type":30,"tag":1046,"props":54685,"children":54686},{"class":1048,"line":4662},[54687,54691],{"type":30,"tag":1046,"props":54688,"children":54689},{"style":1647},[54690],{"type":40,"value":1828},{"type":30,"tag":1046,"props":54692,"children":54693},{"style":1653},[54694],{"type":40,"value":3258},{"type":30,"tag":1046,"props":54696,"children":54697},{"class":1048,"line":4687},[54698,54702,54706,54710,54714],{"type":30,"tag":1046,"props":54699,"children":54700},{"style":1053},[54701],{"type":40,"value":1130},{"type":30,"tag":1046,"props":54703,"children":54704},{"style":1053},[54705],{"type":40,"value":10265},{"type":30,"tag":1046,"props":54707,"children":54708},{"style":1138},[54709],{"type":40,"value":51749},{"type":30,"tag":1046,"props":54711,"children":54712},{"style":1070},[54713],{"type":40,"value":1320},{"type":30,"tag":1046,"props":54715,"children":54716},{"style":1070},[54717],{"type":40,"value":1073},{"type":30,"tag":1046,"props":54719,"children":54720},{"class":1048,"line":4695},[54721,54725,54730,54734,54738],{"type":30,"tag":1046,"props":54722,"children":54723},{"style":1053},[54724],{"type":40,"value":1333},{"type":30,"tag":1046,"props":54726,"children":54727},{"style":1105},[54728],{"type":40,"value":54729}," taille ",{"type":30,"tag":1046,"props":54731,"children":54732},{"style":1795},[54733],{"type":40,"value":21197},{"type":30,"tag":1046,"props":54735,"children":54736},{"style":1105},[54737],{"type":40,"value":51902},{"type":30,"tag":1046,"props":54739,"children":54740},{"style":1070},[54741],{"type":40,"value":1113},{"type":30,"tag":1046,"props":54743,"children":54744},{"class":1048,"line":4703},[54745],{"type":30,"tag":1046,"props":54746,"children":54747},{"style":1070},[54748],{"type":40,"value":1207},{"type":30,"tag":1046,"props":54750,"children":54751},{"class":1048,"line":4739},[54752],{"type":30,"tag":1046,"props":54753,"children":54754},{"style":1070},[54755],{"type":40,"value":1423},{"type":30,"tag":2339,"props":54757,"children":54759},{"id":54758},"exemple-dutilisation",[54760],{"type":40,"value":54761},"Exemple d'utilisation :",{"type":30,"tag":1035,"props":54763,"children":54765},{"className":1039,"code":54764,"language":1038,"meta":8,"style":8},"public class Main {\n\n    public static void afficherAire(Forme forme) {\n        System.out.println(\"Aire calculée : \" + forme.calculerAire());\n    }\n\n    public static void main(String[] args) {\n        Forme rectangle = new Rectangle(5, 10);\n        Forme carre = new Carre(5);\n\n        afficherAire(rectangle);  // Aire calculée : 50\n        afficherAire(carre);      // Aire calculée : 25\n    }\n}\n",[54766],{"type":30,"tag":1042,"props":54767,"children":54768},{"__ignoreMap":8},[54769,54788,54795,54836,54888,54895,54902,54945,54990,55025,55032,55058,55082,55089],{"type":30,"tag":1046,"props":54770,"children":54771},{"class":1048,"line":1049},[54772,54776,54780,54784],{"type":30,"tag":1046,"props":54773,"children":54774},{"style":1053},[54775],{"type":40,"value":1056},{"type":30,"tag":1046,"props":54777,"children":54778},{"style":1053},[54779],{"type":40,"value":1061},{"type":30,"tag":1046,"props":54781,"children":54782},{"style":1064},[54783],{"type":40,"value":12347},{"type":30,"tag":1046,"props":54785,"children":54786},{"style":1070},[54787],{"type":40,"value":1073},{"type":30,"tag":1046,"props":54789,"children":54790},{"class":1048,"line":675},[54791],{"type":30,"tag":1046,"props":54792,"children":54793},{"emptyLinePlaceholder":13},[54794],{"type":40,"value":1121},{"type":30,"tag":1046,"props":54796,"children":54797},{"class":1048,"line":681},[54798,54802,54806,54810,54815,54819,54823,54828,54832],{"type":30,"tag":1046,"props":54799,"children":54800},{"style":1053},[54801],{"type":40,"value":1130},{"type":30,"tag":1046,"props":54803,"children":54804},{"style":1053},[54805],{"type":40,"value":12363},{"type":30,"tag":1046,"props":54807,"children":54808},{"style":1053},[54809],{"type":40,"value":1135},{"type":30,"tag":1046,"props":54811,"children":54812},{"style":1138},[54813],{"type":40,"value":54814}," afficherAire",{"type":30,"tag":1046,"props":54816,"children":54817},{"style":1070},[54818],{"type":40,"value":1146},{"type":30,"tag":1046,"props":54820,"children":54821},{"style":1084},[54822],{"type":40,"value":51291},{"type":30,"tag":1046,"props":54824,"children":54825},{"style":1153},[54826],{"type":40,"value":54827}," forme",{"type":30,"tag":1046,"props":54829,"children":54830},{"style":1070},[54831],{"type":40,"value":1161},{"type":30,"tag":1046,"props":54833,"children":54834},{"style":1070},[54835],{"type":40,"value":1073},{"type":30,"tag":1046,"props":54837,"children":54838},{"class":1048,"line":1124},[54839,54843,54847,54851,54855,54859,54863,54868,54872,54876,54880,54884],{"type":30,"tag":1046,"props":54840,"children":54841},{"style":1105},[54842],{"type":40,"value":12555},{"type":30,"tag":1046,"props":54844,"children":54845},{"style":1070},[54846],{"type":40,"value":1179},{"type":30,"tag":1046,"props":54848,"children":54849},{"style":1105},[54850],{"type":40,"value":12564},{"type":30,"tag":1046,"props":54852,"children":54853},{"style":1070},[54854],{"type":40,"value":1179},{"type":30,"tag":1046,"props":54856,"children":54857},{"style":1138},[54858],{"type":40,"value":12573},{"type":30,"tag":1046,"props":54860,"children":54861},{"style":1070},[54862],{"type":40,"value":1146},{"type":30,"tag":1046,"props":54864,"children":54865},{"style":1675},[54866],{"type":40,"value":54867},"\"Aire calculée : \"",{"type":30,"tag":1046,"props":54869,"children":54870},{"style":1795},[54871],{"type":40,"value":7261},{"type":30,"tag":1046,"props":54873,"children":54874},{"style":1105},[54875],{"type":40,"value":54827},{"type":30,"tag":1046,"props":54877,"children":54878},{"style":1070},[54879],{"type":40,"value":1179},{"type":30,"tag":1046,"props":54881,"children":54882},{"style":1138},[54883],{"type":40,"value":52368},{"type":30,"tag":1046,"props":54885,"children":54886},{"style":1070},[54887],{"type":40,"value":3340},{"type":30,"tag":1046,"props":54889,"children":54890},{"class":1048,"line":1168},[54891],{"type":30,"tag":1046,"props":54892,"children":54893},{"style":1070},[54894],{"type":40,"value":1207},{"type":30,"tag":1046,"props":54896,"children":54897},{"class":1048,"line":1201},[54898],{"type":30,"tag":1046,"props":54899,"children":54900},{"emptyLinePlaceholder":13},[54901],{"type":40,"value":1121},{"type":30,"tag":1046,"props":54903,"children":54904},{"class":1048,"line":1210},[54905,54909,54913,54917,54921,54925,54929,54933,54937,54941],{"type":30,"tag":1046,"props":54906,"children":54907},{"style":1053},[54908],{"type":40,"value":1130},{"type":30,"tag":1046,"props":54910,"children":54911},{"style":1053},[54912],{"type":40,"value":12363},{"type":30,"tag":1046,"props":54914,"children":54915},{"style":1053},[54916],{"type":40,"value":1135},{"type":30,"tag":1046,"props":54918,"children":54919},{"style":1138},[54920],{"type":40,"value":12372},{"type":30,"tag":1046,"props":54922,"children":54923},{"style":1070},[54924],{"type":40,"value":1146},{"type":30,"tag":1046,"props":54926,"children":54927},{"style":1053},[54928],{"type":40,"value":2882},{"type":30,"tag":1046,"props":54930,"children":54931},{"style":1070},[54932],{"type":40,"value":12385},{"type":30,"tag":1046,"props":54934,"children":54935},{"style":1153},[54936],{"type":40,"value":12390},{"type":30,"tag":1046,"props":54938,"children":54939},{"style":1070},[54940],{"type":40,"value":1161},{"type":30,"tag":1046,"props":54942,"children":54943},{"style":1070},[54944],{"type":40,"value":1073},{"type":30,"tag":1046,"props":54946,"children":54947},{"class":1048,"line":1218},[54948,54953,54958,54962,54966,54970,54974,54978,54982,54986],{"type":30,"tag":1046,"props":54949,"children":54950},{"style":1084},[54951],{"type":40,"value":54952},"        Forme",{"type":30,"tag":1046,"props":54954,"children":54955},{"style":1105},[54956],{"type":40,"value":54957}," rectangle ",{"type":30,"tag":1046,"props":54959,"children":54960},{"style":1795},[54961],{"type":40,"value":1798},{"type":30,"tag":1046,"props":54963,"children":54964},{"style":1053},[54965],{"type":40,"value":2480},{"type":30,"tag":1046,"props":54967,"children":54968},{"style":1138},[54969],{"type":40,"value":37239},{"type":30,"tag":1046,"props":54971,"children":54972},{"style":1070},[54973],{"type":40,"value":1146},{"type":30,"tag":1046,"props":54975,"children":54976},{"style":6886},[54977],{"type":40,"value":47717},{"type":30,"tag":1046,"props":54979,"children":54980},{"style":1070},[54981],{"type":40,"value":2891},{"type":30,"tag":1046,"props":54983,"children":54984},{"style":6886},[54985],{"type":40,"value":29794},{"type":30,"tag":1046,"props":54987,"children":54988},{"style":1070},[54989],{"type":40,"value":1198},{"type":30,"tag":1046,"props":54991,"children":54992},{"class":1048,"line":1255},[54993,54997,55001,55005,55009,55013,55017,55021],{"type":30,"tag":1046,"props":54994,"children":54995},{"style":1084},[54996],{"type":40,"value":54952},{"type":30,"tag":1046,"props":54998,"children":54999},{"style":1105},[55000],{"type":40,"value":52576},{"type":30,"tag":1046,"props":55002,"children":55003},{"style":1795},[55004],{"type":40,"value":1798},{"type":30,"tag":1046,"props":55006,"children":55007},{"style":1053},[55008],{"type":40,"value":2480},{"type":30,"tag":1046,"props":55010,"children":55011},{"style":1138},[55012],{"type":40,"value":51859},{"type":30,"tag":1046,"props":55014,"children":55015},{"style":1070},[55016],{"type":40,"value":1146},{"type":30,"tag":1046,"props":55018,"children":55019},{"style":6886},[55020],{"type":40,"value":47717},{"type":30,"tag":1046,"props":55022,"children":55023},{"style":1070},[55024],{"type":40,"value":1198},{"type":30,"tag":1046,"props":55026,"children":55027},{"class":1048,"line":1284},[55028],{"type":30,"tag":1046,"props":55029,"children":55030},{"emptyLinePlaceholder":13},[55031],{"type":40,"value":1121},{"type":30,"tag":1046,"props":55033,"children":55034},{"class":1048,"line":1292},[55035,55040,55044,55049,55053],{"type":30,"tag":1046,"props":55036,"children":55037},{"style":1138},[55038],{"type":40,"value":55039},"        afficherAire",{"type":30,"tag":1046,"props":55041,"children":55042},{"style":1070},[55043],{"type":40,"value":1146},{"type":30,"tag":1046,"props":55045,"children":55046},{"style":1105},[55047],{"type":40,"value":55048},"rectangle",{"type":30,"tag":1046,"props":55050,"children":55051},{"style":1070},[55052],{"type":40,"value":3958},{"type":30,"tag":1046,"props":55054,"children":55055},{"style":3961},[55056],{"type":40,"value":55057},"  // Aire calculée : 50\n",{"type":30,"tag":1046,"props":55059,"children":55060},{"class":1048,"line":1300},[55061,55065,55069,55073,55077],{"type":30,"tag":1046,"props":55062,"children":55063},{"style":1138},[55064],{"type":40,"value":55039},{"type":30,"tag":1046,"props":55066,"children":55067},{"style":1070},[55068],{"type":40,"value":1146},{"type":30,"tag":1046,"props":55070,"children":55071},{"style":1105},[55072],{"type":40,"value":52616},{"type":30,"tag":1046,"props":55074,"children":55075},{"style":1070},[55076],{"type":40,"value":3958},{"type":30,"tag":1046,"props":55078,"children":55079},{"style":3961},[55080],{"type":40,"value":55081},"      // Aire calculée : 25\n",{"type":30,"tag":1046,"props":55083,"children":55084},{"class":1048,"line":1327},[55085],{"type":30,"tag":1046,"props":55086,"children":55087},{"style":1070},[55088],{"type":40,"value":1207},{"type":30,"tag":1046,"props":55090,"children":55091},{"class":1048,"line":1354},[55092],{"type":30,"tag":1046,"props":55093,"children":55094},{"style":1070},[55095],{"type":40,"value":1423},{"type":30,"tag":84,"props":55097,"children":55098},{},[],{"type":30,"tag":31,"props":55100,"children":55102},{"id":55101},"conclusion-et-conseils-pratiques",[55103],{"type":40,"value":55104},"Conclusion et conseils pratiques",{"type":30,"tag":43,"props":55106,"children":55107},{},[55108],{"type":40,"value":55109},"Le principe de substitution de Liskov est fondamental pour garantir que les objets dérivés fonctionnent comme prévu dans des systèmes orientés objet. Respecter ce principe vous permet de rendre votre code plus extensible et de prévenir les erreurs liées à des comportements inattendus dans les sous-classes.",{"type":30,"tag":116,"props":55111,"children":55113},{"id":55112},"récapitulatif-des-points-clés",[55114],{"type":40,"value":55115},"Récapitulatif des points clés :",{"type":30,"tag":163,"props":55117,"children":55118},{},[55119,55124,55129],{"type":30,"tag":167,"props":55120,"children":55121},{},[55122],{"type":40,"value":55123},"Le LSP exige que les sous-classes puissent être utilisées de manière interchangeable avec les classes parentes sans modifier le comportement attendu.",{"type":30,"tag":167,"props":55125,"children":55126},{},[55127],{"type":40,"value":55128},"Une sous-classe qui modifie les règles d'une classe parente brise le LSP.",{"type":30,"tag":167,"props":55130,"children":55131},{},[55132],{"type":40,"value":55133},"Il est parfois préférable d’utiliser des interfaces ou la composition pour éviter les problèmes d’héritage tout en respectant le LSP.",{"type":30,"tag":116,"props":55135,"children":55137},{"id":55136},"conseils-pratiques",[55138],{"type":40,"value":55139},"Conseils pratiques :",{"type":30,"tag":163,"props":55141,"children":55142},{},[55143,55148,55153],{"type":30,"tag":167,"props":55144,"children":55145},{},[55146],{"type":40,"value":55147},"Testez régulièrement votre code pour vérifier que les sous-classes respectent bien le comportement des classes parentes.",{"type":30,"tag":167,"props":55149,"children":55150},{},[55151],{"type":40,"value":55152},"Utilisez des interfaces ou la composition lorsque cela est possible, surtout si vous constatez que l’héritage ne correspond pas bien à votre modèle d’objet.",{"type":30,"tag":167,"props":55154,"children":55155},{},[55156],{"type":40,"value":55157},"Appliquez le LSP avec souplesse, en l’adaptant à vos besoins de conception, mais gardez en tête son importance pour éviter des bugs difficiles à identifier.",{"type":30,"tag":84,"props":55159,"children":55160},{},[],{"type":30,"tag":31,"props":55162,"children":55164},{"id":55163},"faq-sur-le-principe-de-substitution-de-liskov-lsp",[55165],{"type":40,"value":55166},"FAQ sur le principe de substitution de Liskov (LSP)",{"type":30,"tag":530,"props":55168,"children":55169},{},[55170,55175],{"type":30,"tag":534,"props":55171,"children":55172},{},[55173],{"type":40,"value":55174},"1. Qu’est-ce que le LSP exactement ?",{"type":30,"tag":43,"props":55176,"children":55177},{},[55178],{"type":40,"value":55179},"Le principe de substitution de Liskov (LSP) stipule qu’une sous-classe doit pouvoir remplacer sa classe parente sans altérer le comportement du programme. Si vous utilisez une instance d’une sous-classe à la place d’une classe de base, le programme ne doit pas avoir de comportements inattendus ou incorrects.",{"type":30,"tag":530,"props":55181,"children":55182},{},[55183,55188],{"type":30,"tag":534,"props":55184,"children":55185},{},[55186],{"type":40,"value":55187},"2. Pourquoi est-ce que je dois respecter le LSP ?",{"type":30,"tag":43,"props":55189,"children":55190},{},[55191],{"type":40,"value":55192},"Le LSP garantit que votre code est extensible et maintenable. Sans ce principe, les sous-classes pourraient introduire des comportements indésirables ou imprévisibles, compliquant la détection des bugs et rendant votre code plus difficile à maintenir.",{"type":30,"tag":530,"props":55194,"children":55195},{},[55196,55201,55206],{"type":30,"tag":534,"props":55197,"children":55198},{},[55199],{"type":40,"value":55200},"3. Quels sont les signes indiquant que mon code ne respecte pas le LSP ?",{"type":30,"tag":43,"props":55202,"children":55203},{},[55204],{"type":40,"value":55205},"Voici quelques indices de violation du LSP :",{"type":30,"tag":163,"props":55207,"children":55208},{},[55209,55214,55219],{"type":30,"tag":167,"props":55210,"children":55211},{},[55212],{"type":40,"value":55213},"Ta sous-classe modifie ou redéfinit des méthodes de la classe parente de manière inattendue.",{"type":30,"tag":167,"props":55215,"children":55216},{},[55217],{"type":40,"value":55218},"Vous devez modifier le code existant lorsque vous ajoutez une nouvelle sous-classe.",{"type":30,"tag":167,"props":55220,"children":55221},{},[55222],{"type":40,"value":55223},"La sous-classe ne respecte pas les propriétés définies par la classe parente.",{"type":30,"tag":530,"props":55225,"children":55226},{},[55227,55232],{"type":30,"tag":534,"props":55228,"children":55229},{},[55230],{"type":40,"value":55231},"4. Quelle est la différence entre l’héritage classique et l’application du LSP ?",{"type":30,"tag":43,"props":55233,"children":55234},{},[55235],{"type":40,"value":55236},"L’héritage permet à une classe de réutiliser du code d’une autre. Cependant, respecter le LSP va plus loin : il garantit que la sous-classe maintient le comportement logique attendu de la classe parente, sans modifier ses règles.",{"type":30,"tag":530,"props":55238,"children":55239},{},[55240,55245],{"type":30,"tag":534,"props":55241,"children":55242},{},[55243],{"type":40,"value":55244},"5. Est-ce que le LSP est toujours applicable ?",{"type":30,"tag":43,"props":55246,"children":55247},{},[55248],{"type":40,"value":55249},"Non, le LSP est un principe de conception qui doit être appliqué lorsqu’il est pertinent. Dans certains cas, éviter des hiérarchies complexes en utilisant la composition ou des interfaces peut être une meilleure approche.",{"type":30,"tag":530,"props":55251,"children":55252},{},[55253,55258],{"type":30,"tag":534,"props":55254,"children":55255},{},[55256],{"type":40,"value":55257},"6. Comment tester si mon code respecte le LSP ?",{"type":30,"tag":43,"props":55259,"children":55260},{},[55261],{"type":40,"value":55262},"Une manière de tester est de vérifier que vous pouvez utiliser une instance de la sous-classe à la place de la classe parente sans modifier le comportement du programme. Si des ajustements sont nécessaires, il est probable que le LSP soit violé.",{"type":30,"tag":530,"props":55264,"children":55265},{},[55266,55271],{"type":30,"tag":534,"props":55267,"children":55268},{},[55269],{"type":40,"value":55270},"7. Quelles sont les alternatives si je n’arrive pas à respecter le LSP dans mon code ?",{"type":30,"tag":43,"props":55272,"children":55273},{},[55274],{"type":40,"value":55275},"Si vous avez des difficultés à respecter le LSP, il peut être préférable de repenser la conception. Utiliser des interfaces, la composition plutôt que l’héritage, ou des classes abstraites peut aider à structurer votre code sans violer ce principe.",{"type":30,"tag":84,"props":55277,"children":55278},{},[],{"type":30,"tag":211,"props":55280,"children":55281},{"cta":19356,"href":639,"title":19357,"type":641},[55282],{"type":30,"tag":43,"props":55283,"children":55284},{},[55285],{"type":40,"value":19363},{"type":30,"tag":6456,"props":55287,"children":55288},{},[55289],{"type":40,"value":6460},{"title":8,"searchDepth":675,"depth":675,"links":55291},[55292,55293,55296,55297,55301,55305],{"id":51215,"depth":675,"text":51218},{"id":51255,"depth":675,"text":51258,"children":55294},[55295],{"id":51331,"depth":681,"text":51334},{"id":51360,"depth":675,"text":51363},{"id":52706,"depth":675,"text":52709,"children":55298},[55299,55300],{"id":54183,"depth":681,"text":54186},{"id":54220,"depth":681,"text":54223},{"id":55101,"depth":675,"text":55104,"children":55302},[55303,55304],{"id":55112,"depth":681,"text":55115},{"id":55136,"depth":681,"text":55139},{"id":55163,"depth":675,"text":55166},"content:fr:architecture-craft:principe-substitution-liskov-lsp-java.md","fr/architecture-craft/principe-substitution-liskov-lsp-java.md","fr/architecture-craft/principe-substitution-liskov-lsp-java",{"_path":35017,"_dir":717,"_draft":7,"_partial":7,"_locale":8,"title":55310,"description":55311,"id":10421,"date":55312,"listed":13,"nocomments":7,"hidden":7,"categories":55313,"tags":55314,"--cover":55315,"readingTime":55316,"body":55320,"_type":709,"_id":57391,"_source":711,"_file":57392,"_stem":57393,"_extension":714},"Principe OCP en Software Craftsmanship, Guide Complet et Exemples Java","Découvrez comment appliquer le principe OCP (Open/Closed Principle) en Software Craftsmanship. Apprenez avec des exemples concrets en Java à rendre...","2024-01-31",[15],[17,18],"covers/articles/principe-ocp.jpg",{"text":6498,"minutes":55317,"time":55318,"words":55319},9.22,553200,1844,{"type":27,"children":55321,"toc":57377},[55322,55328,55333,55338,55349,55352,55358,55381,55386,55394,55399,55405,55425,55816,55828,55851,55856,55862,55867,56401,56420,56535,56540,56548,56551,56560,56566,56592,56625,56633,56651,56654,56660,56665,56671,56676,56681,57176,57188,57196,57199,57205,57210,57215,57258,57266,57279,57282,57288,57293,57304,57307,57311,57324,57337,57350,57363,57366,57373],{"type":30,"tag":31,"props":55323,"children":55325},{"id":55324},"introduction",[55326],{"type":40,"value":55327},"Introduction",{"type":30,"tag":43,"props":55329,"children":55330},{},[55331],{"type":40,"value":55332},"Avez-vous déjà passé des heures à modifier un morceau de code, pour finalement casser une fonctionnalité qui fonctionnait parfaitement jusque-là ? Si c'est le cas, vous n'êtes pas seul. Beaucoup de développeurs se retrouvent face à cette frustration. Chaque changement semble entraîner une cascade de problèmes imprévus. Pourquoi ? Parce que leur code n’est pas conçu pour être extensible sans être modifié.",{"type":30,"tag":43,"props":55334,"children":55335},{},[55336],{"type":40,"value":55337},"C’est là que le principe OCP, ou Open/Closed Principle, entre en jeu. En tant que développeur ayant appliqué ce principe dans des projets de toutes tailles, je peux vous dire que respecter OCP transforme complètement la manière dont vous concevez vos applications. Il vous aide à construire du code qui est ouvert aux extensions mais fermé aux modifications, ce qui rend vos systèmes plus robustes et évolutifs. J’ai vu ce pattern se répéter dans des dizaines d’équipes : à chaque nouvelle règle métier, on retouche du code existant, on casse des tests, et la vélocité s’effondre. OCP coupe ce cycle à la racine. Ce principe a été formulé par Bertrand Meyer dans \"Object-Oriented Software Construction\" (1988) et repris par Robert C. Martin comme l’un des piliers des principes SOLID.",{"type":30,"tag":43,"props":55339,"children":55340},{},[55341,55343,55347],{"type":40,"value":55342},"Dans cet article, vous allez apprendre ce qu’est réellement le principe OCP, pourquoi il est essentiel en ",{"type":30,"tag":75,"props":55344,"children":55345},{"href":77},[55346],{"type":40,"value":13173},{"type":40,"value":55348},", et surtout comment vous pouvez l’appliquer concrètement dans vos projets Java. Des exemples de code vous seront proposés pour illustrer chaque étape. En suivant ces conseils, vous repartirez avec des solutions concrètes pour rendre votre code plus flexible, tout en évitant les erreurs courantes.",{"type":30,"tag":84,"props":55350,"children":55351},{},[],{"type":30,"tag":31,"props":55353,"children":55355},{"id":55354},"quest-ce-que-le-principe-ocp-openclosed-principle",[55356],{"type":40,"value":55357},"Qu’est-ce que le Principe OCP (Open/Closed Principle) ?",{"type":30,"tag":43,"props":55359,"children":55360},{},[55361,55363,55367,55369,55374,55375,55380],{"type":40,"value":55362},"Le principe OCP fait partie des cinq ",{"type":30,"tag":75,"props":55364,"children":55365},{"href":12830},[55366],{"type":40,"value":12833},{"type":40,"value":55368},", qui sont des règles fondamentales pour concevoir du code propre, maintenable et évolutif. OCP signifie \"Ouvert/Fermé\", en référence à l'idée que les entités (classes, modules, fonctions) doivent être ",{"type":30,"tag":36,"props":55370,"children":55371},{},[55372],{"type":40,"value":55373},"ouvertes à l’extension",{"type":40,"value":35899},{"type":30,"tag":36,"props":55376,"children":55377},{},[55378],{"type":40,"value":55379},"fermées à la modification",{"type":40,"value":1179},{"type":30,"tag":43,"props":55382,"children":55383},{},[55384],{"type":40,"value":55385},"En d’autres termes, une fois qu’une classe ou un module est en production, vous ne devriez pas avoir à le modifier pour ajouter de nouvelles fonctionnalités. Cela peut sembler contradictoire au début : comment peut-on ajouter de nouvelles fonctionnalités sans toucher au code existant ? La réponse réside dans la conception du code dès le départ. Au lieu de modifier le comportement d'une classe, vous devez la rendre extensible via des interfaces, des abstractions ou des classes dérivées.",{"type":30,"tag":19673,"props":55387,"children":55388},{"type":19675},[55389],{"type":30,"tag":43,"props":55390,"children":55391},{},[55392],{"type":40,"value":55393},"** Quand vous codez, pensez toujours aux futures extensions possibles. En intégrant OCP dès le départ, vous évitez des modifications douloureuses dans le futur.",{"type":30,"tag":43,"props":55395,"children":55396},{},[55397],{"type":40,"value":55398},"Prenons un exemple concret pour illustrer cela.",{"type":30,"tag":116,"props":55400,"children":55402},{"id":55401},"exemple-1-cas-classique-sans-ocp",[55403],{"type":40,"value":55404},"Exemple 1 : Cas classique sans OCP",{"type":30,"tag":43,"props":55406,"children":55407},{},[55408,55410,55415,55417,55423],{"type":40,"value":55409},"Imaginons que vous développez une application qui calcule les salaires d'employés. Vous avez une classe ",{"type":30,"tag":1042,"props":55411,"children":55413},{"className":55412},[],[55414],{"type":40,"value":24156},{"type":40,"value":55416}," avec une méthode ",{"type":30,"tag":1042,"props":55418,"children":55420},{"className":55419},[],[55421],{"type":40,"value":55422},"calculateSalary()",{"type":40,"value":55424}," qui calcule le salaire en fonction du type d'employé.",{"type":30,"tag":1035,"props":55426,"children":55428},{"className":1039,"code":55427,"language":1038,"meta":8,"style":8},"class Employee {\n    private String type;\n    private double baseSalary;\n\n    public Employee(String type, double baseSalary) {\n        this.type = type;\n        this.baseSalary = baseSalary;\n    }\n\n    public double calculateSalary() {\n        if (type.equals(\"Manager\")) {\n            return baseSalary * 2;\n        } else if (type.equals(\"Developer\")) {\n            return baseSalary * 1.5;\n        } else {\n            return baseSalary;\n        }\n    }\n}\n",[55429],{"type":30,"tag":1042,"props":55430,"children":55431},{"__ignoreMap":8},[55432,55447,55466,55486,55493,55536,55564,55592,55599,55606,55629,55669,55693,55741,55765,55780,55795,55802,55809],{"type":30,"tag":1046,"props":55433,"children":55434},{"class":1048,"line":1049},[55435,55439,55443],{"type":30,"tag":1046,"props":55436,"children":55437},{"style":1053},[55438],{"type":40,"value":7282},{"type":30,"tag":1046,"props":55440,"children":55441},{"style":1064},[55442],{"type":40,"value":24181},{"type":30,"tag":1046,"props":55444,"children":55445},{"style":1070},[55446],{"type":40,"value":1073},{"type":30,"tag":1046,"props":55448,"children":55449},{"class":1048,"line":675},[55450,55454,55458,55462],{"type":30,"tag":1046,"props":55451,"children":55452},{"style":1053},[55453],{"type":40,"value":1081},{"type":30,"tag":1046,"props":55455,"children":55456},{"style":1084},[55457],{"type":40,"value":2067},{"type":30,"tag":1046,"props":55459,"children":55460},{"style":1105},[55461],{"type":40,"value":36000},{"type":30,"tag":1046,"props":55463,"children":55464},{"style":1070},[55465],{"type":40,"value":1113},{"type":30,"tag":1046,"props":55467,"children":55468},{"class":1048,"line":681},[55469,55473,55477,55482],{"type":30,"tag":1046,"props":55470,"children":55471},{"style":1053},[55472],{"type":40,"value":1081},{"type":30,"tag":1046,"props":55474,"children":55475},{"style":1053},[55476],{"type":40,"value":1310},{"type":30,"tag":1046,"props":55478,"children":55479},{"style":1105},[55480],{"type":40,"value":55481}," baseSalary",{"type":30,"tag":1046,"props":55483,"children":55484},{"style":1070},[55485],{"type":40,"value":1113},{"type":30,"tag":1046,"props":55487,"children":55488},{"class":1048,"line":1124},[55489],{"type":30,"tag":1046,"props":55490,"children":55491},{"emptyLinePlaceholder":13},[55492],{"type":40,"value":1121},{"type":30,"tag":1046,"props":55494,"children":55495},{"class":1048,"line":1168},[55496,55500,55504,55508,55512,55516,55520,55524,55528,55532],{"type":30,"tag":1046,"props":55497,"children":55498},{"style":1053},[55499],{"type":40,"value":1130},{"type":30,"tag":1046,"props":55501,"children":55502},{"style":1138},[55503],{"type":40,"value":24181},{"type":30,"tag":1046,"props":55505,"children":55506},{"style":1070},[55507],{"type":40,"value":1146},{"type":30,"tag":1046,"props":55509,"children":55510},{"style":1084},[55511],{"type":40,"value":2882},{"type":30,"tag":1046,"props":55513,"children":55514},{"style":1153},[55515],{"type":40,"value":36000},{"type":30,"tag":1046,"props":55517,"children":55518},{"style":1070},[55519],{"type":40,"value":2891},{"type":30,"tag":1046,"props":55521,"children":55522},{"style":1053},[55523],{"type":40,"value":1310},{"type":30,"tag":1046,"props":55525,"children":55526},{"style":1153},[55527],{"type":40,"value":55481},{"type":30,"tag":1046,"props":55529,"children":55530},{"style":1070},[55531],{"type":40,"value":1161},{"type":30,"tag":1046,"props":55533,"children":55534},{"style":1070},[55535],{"type":40,"value":1073},{"type":30,"tag":1046,"props":55537,"children":55538},{"class":1048,"line":1201},[55539,55543,55547,55552,55556,55560],{"type":30,"tag":1046,"props":55540,"children":55541},{"style":1780},[55542],{"type":40,"value":1783},{"type":30,"tag":1046,"props":55544,"children":55545},{"style":1070},[55546],{"type":40,"value":1179},{"type":30,"tag":1046,"props":55548,"children":55549},{"style":1105},[55550],{"type":40,"value":55551},"type ",{"type":30,"tag":1046,"props":55553,"children":55554},{"style":1795},[55555],{"type":40,"value":1798},{"type":30,"tag":1046,"props":55557,"children":55558},{"style":1105},[55559],{"type":40,"value":36000},{"type":30,"tag":1046,"props":55561,"children":55562},{"style":1070},[55563],{"type":40,"value":1113},{"type":30,"tag":1046,"props":55565,"children":55566},{"class":1048,"line":1210},[55567,55571,55575,55580,55584,55588],{"type":30,"tag":1046,"props":55568,"children":55569},{"style":1780},[55570],{"type":40,"value":1783},{"type":30,"tag":1046,"props":55572,"children":55573},{"style":1070},[55574],{"type":40,"value":1179},{"type":30,"tag":1046,"props":55576,"children":55577},{"style":1105},[55578],{"type":40,"value":55579},"baseSalary ",{"type":30,"tag":1046,"props":55581,"children":55582},{"style":1795},[55583],{"type":40,"value":1798},{"type":30,"tag":1046,"props":55585,"children":55586},{"style":1105},[55587],{"type":40,"value":55481},{"type":30,"tag":1046,"props":55589,"children":55590},{"style":1070},[55591],{"type":40,"value":1113},{"type":30,"tag":1046,"props":55593,"children":55594},{"class":1048,"line":1218},[55595],{"type":30,"tag":1046,"props":55596,"children":55597},{"style":1070},[55598],{"type":40,"value":1207},{"type":30,"tag":1046,"props":55600,"children":55601},{"class":1048,"line":1255},[55602],{"type":30,"tag":1046,"props":55603,"children":55604},{"emptyLinePlaceholder":13},[55605],{"type":40,"value":1121},{"type":30,"tag":1046,"props":55607,"children":55608},{"class":1048,"line":1284},[55609,55613,55617,55621,55625],{"type":30,"tag":1046,"props":55610,"children":55611},{"style":1053},[55612],{"type":40,"value":1130},{"type":30,"tag":1046,"props":55614,"children":55615},{"style":1053},[55616],{"type":40,"value":1310},{"type":30,"tag":1046,"props":55618,"children":55619},{"style":1138},[55620],{"type":40,"value":25563},{"type":30,"tag":1046,"props":55622,"children":55623},{"style":1070},[55624],{"type":40,"value":1320},{"type":30,"tag":1046,"props":55626,"children":55627},{"style":1070},[55628],{"type":40,"value":1073},{"type":30,"tag":1046,"props":55630,"children":55631},{"class":1048,"line":1292},[55632,55636,55640,55644,55648,55652,55656,55661,55665],{"type":30,"tag":1046,"props":55633,"children":55634},{"style":1053},[55635],{"type":40,"value":11856},{"type":30,"tag":1046,"props":55637,"children":55638},{"style":1070},[55639],{"type":40,"value":11861},{"type":30,"tag":1046,"props":55641,"children":55642},{"style":1105},[55643],{"type":40,"value":36024},{"type":30,"tag":1046,"props":55645,"children":55646},{"style":1070},[55647],{"type":40,"value":1179},{"type":30,"tag":1046,"props":55649,"children":55650},{"style":1138},[55651],{"type":40,"value":17741},{"type":30,"tag":1046,"props":55653,"children":55654},{"style":1070},[55655],{"type":40,"value":1146},{"type":30,"tag":1046,"props":55657,"children":55658},{"style":1675},[55659],{"type":40,"value":55660},"\"Manager\"",{"type":30,"tag":1046,"props":55662,"children":55663},{"style":1070},[55664],{"type":40,"value":9913},{"type":30,"tag":1046,"props":55666,"children":55667},{"style":1070},[55668],{"type":40,"value":1073},{"type":30,"tag":1046,"props":55670,"children":55671},{"class":1048,"line":1300},[55672,55676,55681,55685,55689],{"type":30,"tag":1046,"props":55673,"children":55674},{"style":1053},[55675],{"type":40,"value":31601},{"type":30,"tag":1046,"props":55677,"children":55678},{"style":1105},[55679],{"type":40,"value":55680}," baseSalary ",{"type":30,"tag":1046,"props":55682,"children":55683},{"style":1795},[55684],{"type":40,"value":21197},{"type":30,"tag":1046,"props":55686,"children":55687},{"style":6886},[55688],{"type":40,"value":28867},{"type":30,"tag":1046,"props":55690,"children":55691},{"style":1070},[55692],{"type":40,"value":1113},{"type":30,"tag":1046,"props":55694,"children":55695},{"class":1048,"line":1327},[55696,55700,55704,55708,55712,55716,55720,55724,55728,55733,55737],{"type":30,"tag":1046,"props":55697,"children":55698},{"style":1070},[55699],{"type":40,"value":31663},{"type":30,"tag":1046,"props":55701,"children":55702},{"style":1053},[55703],{"type":40,"value":19948},{"type":30,"tag":1046,"props":55705,"children":55706},{"style":1053},[55707],{"type":40,"value":36109},{"type":30,"tag":1046,"props":55709,"children":55710},{"style":1070},[55711],{"type":40,"value":11861},{"type":30,"tag":1046,"props":55713,"children":55714},{"style":1105},[55715],{"type":40,"value":36024},{"type":30,"tag":1046,"props":55717,"children":55718},{"style":1070},[55719],{"type":40,"value":1179},{"type":30,"tag":1046,"props":55721,"children":55722},{"style":1138},[55723],{"type":40,"value":17741},{"type":30,"tag":1046,"props":55725,"children":55726},{"style":1070},[55727],{"type":40,"value":1146},{"type":30,"tag":1046,"props":55729,"children":55730},{"style":1675},[55731],{"type":40,"value":55732},"\"Developer\"",{"type":30,"tag":1046,"props":55734,"children":55735},{"style":1070},[55736],{"type":40,"value":9913},{"type":30,"tag":1046,"props":55738,"children":55739},{"style":1070},[55740],{"type":40,"value":1073},{"type":30,"tag":1046,"props":55742,"children":55743},{"class":1048,"line":1354},[55744,55748,55752,55756,55761],{"type":30,"tag":1046,"props":55745,"children":55746},{"style":1053},[55747],{"type":40,"value":31601},{"type":30,"tag":1046,"props":55749,"children":55750},{"style":1105},[55751],{"type":40,"value":55680},{"type":30,"tag":1046,"props":55753,"children":55754},{"style":1795},[55755],{"type":40,"value":21197},{"type":30,"tag":1046,"props":55757,"children":55758},{"style":6886},[55759],{"type":40,"value":55760}," 1.5",{"type":30,"tag":1046,"props":55762,"children":55763},{"style":1070},[55764],{"type":40,"value":1113},{"type":30,"tag":1046,"props":55766,"children":55767},{"class":1048,"line":1391},[55768,55772,55776],{"type":30,"tag":1046,"props":55769,"children":55770},{"style":1070},[55771],{"type":40,"value":31663},{"type":30,"tag":1046,"props":55773,"children":55774},{"style":1053},[55775],{"type":40,"value":19948},{"type":30,"tag":1046,"props":55777,"children":55778},{"style":1070},[55779],{"type":40,"value":1073},{"type":30,"tag":1046,"props":55781,"children":55782},{"class":1048,"line":1409},[55783,55787,55791],{"type":30,"tag":1046,"props":55784,"children":55785},{"style":1053},[55786],{"type":40,"value":31601},{"type":30,"tag":1046,"props":55788,"children":55789},{"style":1105},[55790],{"type":40,"value":55481},{"type":30,"tag":1046,"props":55792,"children":55793},{"style":1070},[55794],{"type":40,"value":1113},{"type":30,"tag":1046,"props":55796,"children":55797},{"class":1048,"line":1417},[55798],{"type":30,"tag":1046,"props":55799,"children":55800},{"style":1070},[55801],{"type":40,"value":11922},{"type":30,"tag":1046,"props":55803,"children":55804},{"class":1048,"line":2023},[55805],{"type":30,"tag":1046,"props":55806,"children":55807},{"style":1070},[55808],{"type":40,"value":1207},{"type":30,"tag":1046,"props":55810,"children":55811},{"class":1048,"line":2083},[55812],{"type":30,"tag":1046,"props":55813,"children":55814},{"style":1070},[55815],{"type":40,"value":1423},{"type":30,"tag":43,"props":55817,"children":55818},{},[55819,55821,55826],{"type":40,"value":55820},"À première vue, ce code semble fonctionnel. Mais que se passe-t-il si vous devez ajouter un nouveau type d'employé, par exemple, un \"Designer\" avec un salaire différent ? Vous devrez modifier la méthode ",{"type":30,"tag":1042,"props":55822,"children":55824},{"className":55823},[],[55825],{"type":40,"value":55422},{"type":40,"value":55827}," et ajouter une nouvelle condition. Plus le nombre de types d'employés augmente, plus la méthode devient complexe et sujette aux erreurs.",{"type":30,"tag":19673,"props":55829,"children":55831},{"type":55830},"WARNING",[55832],{"type":30,"tag":43,"props":55833,"children":55834},{},[55835,55837,55842,55843,55849],{"type":40,"value":55836},"** Plus votre code est rempli de conditions (comme les ",{"type":30,"tag":1042,"props":55838,"children":55840},{"className":55839},[],[55841],{"type":40,"value":20585},{"type":40,"value":8328},{"type":30,"tag":1042,"props":55844,"children":55846},{"className":55845},[],[55847],{"type":40,"value":55848},"else",{"type":40,"value":55850}," ici), plus il devient fragile. Chaque modification future peut casser une partie existante.",{"type":30,"tag":43,"props":55852,"children":55853},{},[55854],{"type":40,"value":55855},"Ce design viole le principe OCP car à chaque nouvelle fonctionnalité (nouveau type d'employé), vous devez modifier la classe existante. Cela rend le code plus difficile à maintenir et à tester.",{"type":30,"tag":116,"props":55857,"children":55859},{"id":55858},"exemple-2-application-du-principe-ocp-avec-des-interfaces",[55860],{"type":40,"value":55861},"Exemple 2 : Application du principe OCP avec des interfaces",{"type":30,"tag":43,"props":55863,"children":55864},{},[55865],{"type":40,"value":55866},"Voyons maintenant comment nous pourrions refactorer ce code pour respecter le principe OCP. La clé ici est de rendre le comportement de calcul extensible, sans avoir à modifier la classe existante. Nous pouvons utiliser des interfaces ou des classes abstraites pour séparer le calcul des salaires en fonction des types d’employés.",{"type":30,"tag":1035,"props":55868,"children":55870},{"className":1039,"code":55869,"language":1038,"meta":8,"style":8},"interface SalaryCalculator {\n    double calculateSalary(double baseSalary);\n}\n\nclass ManagerSalaryCalculator implements SalaryCalculator {\n    @Override\n    public double calculateSalary(double baseSalary) {\n        return baseSalary * 2;\n    }\n}\n\nclass DeveloperSalaryCalculator implements SalaryCalculator {\n    @Override\n    public double calculateSalary(double baseSalary) {\n        return baseSalary * 1.5;\n    }\n}\n\nclass Employee {\n    private double baseSalary;\n    private SalaryCalculator salaryCalculator;\n\n    public Employee(double baseSalary, SalaryCalculator salaryCalculator) {\n        this.baseSalary = baseSalary;\n        this.salaryCalculator = salaryCalculator;\n    }\n\n    public double calculateSalary() {\n        return salaryCalculator.calculateSalary(baseSalary);\n    }\n}\n",[55871],{"type":30,"tag":1042,"props":55872,"children":55873},{"__ignoreMap":8},[55874,55890,55917,55924,55931,55955,55966,56001,56024,56031,56038,56045,56069,56080,56115,56138,56145,56152,56159,56174,56193,56213,56220,56263,56290,56318,56325,56332,56355,56387,56394],{"type":30,"tag":1046,"props":55875,"children":55876},{"class":1048,"line":1049},[55877,55881,55886],{"type":30,"tag":1046,"props":55878,"children":55879},{"style":1053},[55880],{"type":40,"value":41758},{"type":30,"tag":1046,"props":55882,"children":55883},{"style":1064},[55884],{"type":40,"value":55885}," SalaryCalculator",{"type":30,"tag":1046,"props":55887,"children":55888},{"style":1070},[55889],{"type":40,"value":1073},{"type":30,"tag":1046,"props":55891,"children":55892},{"class":1048,"line":675},[55893,55897,55901,55905,55909,55913],{"type":30,"tag":1046,"props":55894,"children":55895},{"style":1053},[55896],{"type":40,"value":16140},{"type":30,"tag":1046,"props":55898,"children":55899},{"style":1138},[55900],{"type":40,"value":25563},{"type":30,"tag":1046,"props":55902,"children":55903},{"style":1070},[55904],{"type":40,"value":1146},{"type":30,"tag":1046,"props":55906,"children":55907},{"style":1053},[55908],{"type":40,"value":20944},{"type":30,"tag":1046,"props":55910,"children":55911},{"style":1153},[55912],{"type":40,"value":55481},{"type":30,"tag":1046,"props":55914,"children":55915},{"style":1070},[55916],{"type":40,"value":1198},{"type":30,"tag":1046,"props":55918,"children":55919},{"class":1048,"line":681},[55920],{"type":30,"tag":1046,"props":55921,"children":55922},{"style":1070},[55923],{"type":40,"value":1423},{"type":30,"tag":1046,"props":55925,"children":55926},{"class":1048,"line":1124},[55927],{"type":30,"tag":1046,"props":55928,"children":55929},{"emptyLinePlaceholder":13},[55930],{"type":40,"value":1121},{"type":30,"tag":1046,"props":55932,"children":55933},{"class":1048,"line":1168},[55934,55938,55943,55947,55951],{"type":30,"tag":1046,"props":55935,"children":55936},{"style":1053},[55937],{"type":40,"value":7282},{"type":30,"tag":1046,"props":55939,"children":55940},{"style":1064},[55941],{"type":40,"value":55942}," ManagerSalaryCalculator",{"type":30,"tag":1046,"props":55944,"children":55945},{"style":1053},[55946],{"type":40,"value":3166},{"type":30,"tag":1046,"props":55948,"children":55949},{"style":1064},[55950],{"type":40,"value":55885},{"type":30,"tag":1046,"props":55952,"children":55953},{"style":1070},[55954],{"type":40,"value":1073},{"type":30,"tag":1046,"props":55956,"children":55957},{"class":1048,"line":1201},[55958,55962],{"type":30,"tag":1046,"props":55959,"children":55960},{"style":1647},[55961],{"type":40,"value":1828},{"type":30,"tag":1046,"props":55963,"children":55964},{"style":1653},[55965],{"type":40,"value":3258},{"type":30,"tag":1046,"props":55967,"children":55968},{"class":1048,"line":1210},[55969,55973,55977,55981,55985,55989,55993,55997],{"type":30,"tag":1046,"props":55970,"children":55971},{"style":1053},[55972],{"type":40,"value":1130},{"type":30,"tag":1046,"props":55974,"children":55975},{"style":1053},[55976],{"type":40,"value":1310},{"type":30,"tag":1046,"props":55978,"children":55979},{"style":1138},[55980],{"type":40,"value":25563},{"type":30,"tag":1046,"props":55982,"children":55983},{"style":1070},[55984],{"type":40,"value":1146},{"type":30,"tag":1046,"props":55986,"children":55987},{"style":1053},[55988],{"type":40,"value":20944},{"type":30,"tag":1046,"props":55990,"children":55991},{"style":1153},[55992],{"type":40,"value":55481},{"type":30,"tag":1046,"props":55994,"children":55995},{"style":1070},[55996],{"type":40,"value":1161},{"type":30,"tag":1046,"props":55998,"children":55999},{"style":1070},[56000],{"type":40,"value":1073},{"type":30,"tag":1046,"props":56002,"children":56003},{"class":1048,"line":1218},[56004,56008,56012,56016,56020],{"type":30,"tag":1046,"props":56005,"children":56006},{"style":1053},[56007],{"type":40,"value":1333},{"type":30,"tag":1046,"props":56009,"children":56010},{"style":1105},[56011],{"type":40,"value":55680},{"type":30,"tag":1046,"props":56013,"children":56014},{"style":1795},[56015],{"type":40,"value":21197},{"type":30,"tag":1046,"props":56017,"children":56018},{"style":6886},[56019],{"type":40,"value":28867},{"type":30,"tag":1046,"props":56021,"children":56022},{"style":1070},[56023],{"type":40,"value":1113},{"type":30,"tag":1046,"props":56025,"children":56026},{"class":1048,"line":1255},[56027],{"type":30,"tag":1046,"props":56028,"children":56029},{"style":1070},[56030],{"type":40,"value":1207},{"type":30,"tag":1046,"props":56032,"children":56033},{"class":1048,"line":1284},[56034],{"type":30,"tag":1046,"props":56035,"children":56036},{"style":1070},[56037],{"type":40,"value":1423},{"type":30,"tag":1046,"props":56039,"children":56040},{"class":1048,"line":1292},[56041],{"type":30,"tag":1046,"props":56042,"children":56043},{"emptyLinePlaceholder":13},[56044],{"type":40,"value":1121},{"type":30,"tag":1046,"props":56046,"children":56047},{"class":1048,"line":1300},[56048,56052,56057,56061,56065],{"type":30,"tag":1046,"props":56049,"children":56050},{"style":1053},[56051],{"type":40,"value":7282},{"type":30,"tag":1046,"props":56053,"children":56054},{"style":1064},[56055],{"type":40,"value":56056}," DeveloperSalaryCalculator",{"type":30,"tag":1046,"props":56058,"children":56059},{"style":1053},[56060],{"type":40,"value":3166},{"type":30,"tag":1046,"props":56062,"children":56063},{"style":1064},[56064],{"type":40,"value":55885},{"type":30,"tag":1046,"props":56066,"children":56067},{"style":1070},[56068],{"type":40,"value":1073},{"type":30,"tag":1046,"props":56070,"children":56071},{"class":1048,"line":1327},[56072,56076],{"type":30,"tag":1046,"props":56073,"children":56074},{"style":1647},[56075],{"type":40,"value":1828},{"type":30,"tag":1046,"props":56077,"children":56078},{"style":1653},[56079],{"type":40,"value":3258},{"type":30,"tag":1046,"props":56081,"children":56082},{"class":1048,"line":1354},[56083,56087,56091,56095,56099,56103,56107,56111],{"type":30,"tag":1046,"props":56084,"children":56085},{"style":1053},[56086],{"type":40,"value":1130},{"type":30,"tag":1046,"props":56088,"children":56089},{"style":1053},[56090],{"type":40,"value":1310},{"type":30,"tag":1046,"props":56092,"children":56093},{"style":1138},[56094],{"type":40,"value":25563},{"type":30,"tag":1046,"props":56096,"children":56097},{"style":1070},[56098],{"type":40,"value":1146},{"type":30,"tag":1046,"props":56100,"children":56101},{"style":1053},[56102],{"type":40,"value":20944},{"type":30,"tag":1046,"props":56104,"children":56105},{"style":1153},[56106],{"type":40,"value":55481},{"type":30,"tag":1046,"props":56108,"children":56109},{"style":1070},[56110],{"type":40,"value":1161},{"type":30,"tag":1046,"props":56112,"children":56113},{"style":1070},[56114],{"type":40,"value":1073},{"type":30,"tag":1046,"props":56116,"children":56117},{"class":1048,"line":1391},[56118,56122,56126,56130,56134],{"type":30,"tag":1046,"props":56119,"children":56120},{"style":1053},[56121],{"type":40,"value":1333},{"type":30,"tag":1046,"props":56123,"children":56124},{"style":1105},[56125],{"type":40,"value":55680},{"type":30,"tag":1046,"props":56127,"children":56128},{"style":1795},[56129],{"type":40,"value":21197},{"type":30,"tag":1046,"props":56131,"children":56132},{"style":6886},[56133],{"type":40,"value":55760},{"type":30,"tag":1046,"props":56135,"children":56136},{"style":1070},[56137],{"type":40,"value":1113},{"type":30,"tag":1046,"props":56139,"children":56140},{"class":1048,"line":1409},[56141],{"type":30,"tag":1046,"props":56142,"children":56143},{"style":1070},[56144],{"type":40,"value":1207},{"type":30,"tag":1046,"props":56146,"children":56147},{"class":1048,"line":1417},[56148],{"type":30,"tag":1046,"props":56149,"children":56150},{"style":1070},[56151],{"type":40,"value":1423},{"type":30,"tag":1046,"props":56153,"children":56154},{"class":1048,"line":2023},[56155],{"type":30,"tag":1046,"props":56156,"children":56157},{"emptyLinePlaceholder":13},[56158],{"type":40,"value":1121},{"type":30,"tag":1046,"props":56160,"children":56161},{"class":1048,"line":2083},[56162,56166,56170],{"type":30,"tag":1046,"props":56163,"children":56164},{"style":1053},[56165],{"type":40,"value":7282},{"type":30,"tag":1046,"props":56167,"children":56168},{"style":1064},[56169],{"type":40,"value":24181},{"type":30,"tag":1046,"props":56171,"children":56172},{"style":1070},[56173],{"type":40,"value":1073},{"type":30,"tag":1046,"props":56175,"children":56176},{"class":1048,"line":2126},[56177,56181,56185,56189],{"type":30,"tag":1046,"props":56178,"children":56179},{"style":1053},[56180],{"type":40,"value":1081},{"type":30,"tag":1046,"props":56182,"children":56183},{"style":1053},[56184],{"type":40,"value":1310},{"type":30,"tag":1046,"props":56186,"children":56187},{"style":1105},[56188],{"type":40,"value":55481},{"type":30,"tag":1046,"props":56190,"children":56191},{"style":1070},[56192],{"type":40,"value":1113},{"type":30,"tag":1046,"props":56194,"children":56195},{"class":1048,"line":2159},[56196,56200,56204,56209],{"type":30,"tag":1046,"props":56197,"children":56198},{"style":1053},[56199],{"type":40,"value":1081},{"type":30,"tag":1046,"props":56201,"children":56202},{"style":1084},[56203],{"type":40,"value":55885},{"type":30,"tag":1046,"props":56205,"children":56206},{"style":1105},[56207],{"type":40,"value":56208}," salaryCalculator",{"type":30,"tag":1046,"props":56210,"children":56211},{"style":1070},[56212],{"type":40,"value":1113},{"type":30,"tag":1046,"props":56214,"children":56215},{"class":1048,"line":2167},[56216],{"type":30,"tag":1046,"props":56217,"children":56218},{"emptyLinePlaceholder":13},[56219],{"type":40,"value":1121},{"type":30,"tag":1046,"props":56221,"children":56222},{"class":1048,"line":4537},[56223,56227,56231,56235,56239,56243,56247,56251,56255,56259],{"type":30,"tag":1046,"props":56224,"children":56225},{"style":1053},[56226],{"type":40,"value":1130},{"type":30,"tag":1046,"props":56228,"children":56229},{"style":1138},[56230],{"type":40,"value":24181},{"type":30,"tag":1046,"props":56232,"children":56233},{"style":1070},[56234],{"type":40,"value":1146},{"type":30,"tag":1046,"props":56236,"children":56237},{"style":1053},[56238],{"type":40,"value":20944},{"type":30,"tag":1046,"props":56240,"children":56241},{"style":1153},[56242],{"type":40,"value":55481},{"type":30,"tag":1046,"props":56244,"children":56245},{"style":1070},[56246],{"type":40,"value":2891},{"type":30,"tag":1046,"props":56248,"children":56249},{"style":1084},[56250],{"type":40,"value":55885},{"type":30,"tag":1046,"props":56252,"children":56253},{"style":1153},[56254],{"type":40,"value":56208},{"type":30,"tag":1046,"props":56256,"children":56257},{"style":1070},[56258],{"type":40,"value":1161},{"type":30,"tag":1046,"props":56260,"children":56261},{"style":1070},[56262],{"type":40,"value":1073},{"type":30,"tag":1046,"props":56264,"children":56265},{"class":1048,"line":4545},[56266,56270,56274,56278,56282,56286],{"type":30,"tag":1046,"props":56267,"children":56268},{"style":1780},[56269],{"type":40,"value":1783},{"type":30,"tag":1046,"props":56271,"children":56272},{"style":1070},[56273],{"type":40,"value":1179},{"type":30,"tag":1046,"props":56275,"children":56276},{"style":1105},[56277],{"type":40,"value":55579},{"type":30,"tag":1046,"props":56279,"children":56280},{"style":1795},[56281],{"type":40,"value":1798},{"type":30,"tag":1046,"props":56283,"children":56284},{"style":1105},[56285],{"type":40,"value":55481},{"type":30,"tag":1046,"props":56287,"children":56288},{"style":1070},[56289],{"type":40,"value":1113},{"type":30,"tag":1046,"props":56291,"children":56292},{"class":1048,"line":4582},[56293,56297,56301,56306,56310,56314],{"type":30,"tag":1046,"props":56294,"children":56295},{"style":1780},[56296],{"type":40,"value":1783},{"type":30,"tag":1046,"props":56298,"children":56299},{"style":1070},[56300],{"type":40,"value":1179},{"type":30,"tag":1046,"props":56302,"children":56303},{"style":1105},[56304],{"type":40,"value":56305},"salaryCalculator ",{"type":30,"tag":1046,"props":56307,"children":56308},{"style":1795},[56309],{"type":40,"value":1798},{"type":30,"tag":1046,"props":56311,"children":56312},{"style":1105},[56313],{"type":40,"value":56208},{"type":30,"tag":1046,"props":56315,"children":56316},{"style":1070},[56317],{"type":40,"value":1113},{"type":30,"tag":1046,"props":56319,"children":56320},{"class":1048,"line":4622},[56321],{"type":30,"tag":1046,"props":56322,"children":56323},{"style":1070},[56324],{"type":40,"value":1207},{"type":30,"tag":1046,"props":56326,"children":56327},{"class":1048,"line":4662},[56328],{"type":30,"tag":1046,"props":56329,"children":56330},{"emptyLinePlaceholder":13},[56331],{"type":40,"value":1121},{"type":30,"tag":1046,"props":56333,"children":56334},{"class":1048,"line":4687},[56335,56339,56343,56347,56351],{"type":30,"tag":1046,"props":56336,"children":56337},{"style":1053},[56338],{"type":40,"value":1130},{"type":30,"tag":1046,"props":56340,"children":56341},{"style":1053},[56342],{"type":40,"value":1310},{"type":30,"tag":1046,"props":56344,"children":56345},{"style":1138},[56346],{"type":40,"value":25563},{"type":30,"tag":1046,"props":56348,"children":56349},{"style":1070},[56350],{"type":40,"value":1320},{"type":30,"tag":1046,"props":56352,"children":56353},{"style":1070},[56354],{"type":40,"value":1073},{"type":30,"tag":1046,"props":56356,"children":56357},{"class":1048,"line":4695},[56358,56362,56366,56370,56374,56378,56383],{"type":30,"tag":1046,"props":56359,"children":56360},{"style":1053},[56361],{"type":40,"value":1333},{"type":30,"tag":1046,"props":56363,"children":56364},{"style":1105},[56365],{"type":40,"value":56208},{"type":30,"tag":1046,"props":56367,"children":56368},{"style":1070},[56369],{"type":40,"value":1179},{"type":30,"tag":1046,"props":56371,"children":56372},{"style":1138},[56373],{"type":40,"value":26784},{"type":30,"tag":1046,"props":56375,"children":56376},{"style":1070},[56377],{"type":40,"value":1146},{"type":30,"tag":1046,"props":56379,"children":56380},{"style":1105},[56381],{"type":40,"value":56382},"baseSalary",{"type":30,"tag":1046,"props":56384,"children":56385},{"style":1070},[56386],{"type":40,"value":1198},{"type":30,"tag":1046,"props":56388,"children":56389},{"class":1048,"line":4703},[56390],{"type":30,"tag":1046,"props":56391,"children":56392},{"style":1070},[56393],{"type":40,"value":1207},{"type":30,"tag":1046,"props":56395,"children":56396},{"class":1048,"line":4739},[56397],{"type":30,"tag":1046,"props":56398,"children":56399},{"style":1070},[56400],{"type":40,"value":1423},{"type":30,"tag":43,"props":56402,"children":56403},{},[56404,56406,56411,56413,56419],{"type":40,"value":56405},"Avec ce design, si vous avez besoin d’ajouter un nouveau type d’employé, par exemple un \"Designer\", vous n’avez plus à toucher à la classe ",{"type":30,"tag":1042,"props":56407,"children":56409},{"className":56408},[],[56410],{"type":40,"value":24156},{"type":40,"value":56412},". Vous créez simplement une nouvelle classe qui implémente ",{"type":30,"tag":1042,"props":56414,"children":56416},{"className":56415},[],[56417],{"type":40,"value":56418},"SalaryCalculator",{"type":40,"value":6296},{"type":30,"tag":1035,"props":56421,"children":56423},{"className":1039,"code":56422,"language":1038,"meta":8,"style":8},"class DesignerSalaryCalculator implements SalaryCalculator {\n    @Override\n    public double calculateSalary(double baseSalary) {\n        return baseSalary * 1.8;\n    }\n}\n",[56424],{"type":30,"tag":1042,"props":56425,"children":56426},{"__ignoreMap":8},[56427,56451,56462,56497,56521,56528],{"type":30,"tag":1046,"props":56428,"children":56429},{"class":1048,"line":1049},[56430,56434,56439,56443,56447],{"type":30,"tag":1046,"props":56431,"children":56432},{"style":1053},[56433],{"type":40,"value":7282},{"type":30,"tag":1046,"props":56435,"children":56436},{"style":1064},[56437],{"type":40,"value":56438}," DesignerSalaryCalculator",{"type":30,"tag":1046,"props":56440,"children":56441},{"style":1053},[56442],{"type":40,"value":3166},{"type":30,"tag":1046,"props":56444,"children":56445},{"style":1064},[56446],{"type":40,"value":55885},{"type":30,"tag":1046,"props":56448,"children":56449},{"style":1070},[56450],{"type":40,"value":1073},{"type":30,"tag":1046,"props":56452,"children":56453},{"class":1048,"line":675},[56454,56458],{"type":30,"tag":1046,"props":56455,"children":56456},{"style":1647},[56457],{"type":40,"value":1828},{"type":30,"tag":1046,"props":56459,"children":56460},{"style":1653},[56461],{"type":40,"value":3258},{"type":30,"tag":1046,"props":56463,"children":56464},{"class":1048,"line":681},[56465,56469,56473,56477,56481,56485,56489,56493],{"type":30,"tag":1046,"props":56466,"children":56467},{"style":1053},[56468],{"type":40,"value":1130},{"type":30,"tag":1046,"props":56470,"children":56471},{"style":1053},[56472],{"type":40,"value":1310},{"type":30,"tag":1046,"props":56474,"children":56475},{"style":1138},[56476],{"type":40,"value":25563},{"type":30,"tag":1046,"props":56478,"children":56479},{"style":1070},[56480],{"type":40,"value":1146},{"type":30,"tag":1046,"props":56482,"children":56483},{"style":1053},[56484],{"type":40,"value":20944},{"type":30,"tag":1046,"props":56486,"children":56487},{"style":1153},[56488],{"type":40,"value":55481},{"type":30,"tag":1046,"props":56490,"children":56491},{"style":1070},[56492],{"type":40,"value":1161},{"type":30,"tag":1046,"props":56494,"children":56495},{"style":1070},[56496],{"type":40,"value":1073},{"type":30,"tag":1046,"props":56498,"children":56499},{"class":1048,"line":1124},[56500,56504,56508,56512,56517],{"type":30,"tag":1046,"props":56501,"children":56502},{"style":1053},[56503],{"type":40,"value":1333},{"type":30,"tag":1046,"props":56505,"children":56506},{"style":1105},[56507],{"type":40,"value":55680},{"type":30,"tag":1046,"props":56509,"children":56510},{"style":1795},[56511],{"type":40,"value":21197},{"type":30,"tag":1046,"props":56513,"children":56514},{"style":6886},[56515],{"type":40,"value":56516}," 1.8",{"type":30,"tag":1046,"props":56518,"children":56519},{"style":1070},[56520],{"type":40,"value":1113},{"type":30,"tag":1046,"props":56522,"children":56523},{"class":1048,"line":1168},[56524],{"type":30,"tag":1046,"props":56525,"children":56526},{"style":1070},[56527],{"type":40,"value":1207},{"type":30,"tag":1046,"props":56529,"children":56530},{"class":1048,"line":1201},[56531],{"type":30,"tag":1046,"props":56532,"children":56533},{"style":1070},[56534],{"type":40,"value":1423},{"type":30,"tag":43,"props":56536,"children":56537},{},[56538],{"type":40,"value":56539},"L’ajout d’un nouveau type d’employé devient alors une extension naturelle, sans modification du code existant. C’est exactement ce que le principe OCP encourage : rendre le code flexible et modulaire tout en évitant les modifications qui pourraient introduire des bugs.",{"type":30,"tag":19673,"props":56541,"children":56542},{"type":19675},[56543],{"type":30,"tag":43,"props":56544,"children":56545},{},[56546],{"type":40,"value":56547},"** Quand vous concevez votre code avec OCP, réfléchissez toujours en termes d'extension future. Posez-vous la question : \"Si je devais ajouter une nouvelle fonctionnalité, est-ce que je serais obligé de modifier le code existant ?\"",{"type":30,"tag":84,"props":56549,"children":56550},{},[],{"type":30,"tag":211,"props":56552,"children":56554},{"cta":213,"href":214,"title":56553,"type":216},"Chaque nouvelle fonctionnalité vous oblige à toucher à du code existant qui marche ?",[56555],{"type":30,"tag":43,"props":56556,"children":56557},{},[56558],{"type":40,"value":56559},"L'ajout d'une feature simple crée des régressions en cascade, les développeurs ont peur de modifier le code existant, et les releases deviennent de plus en plus risquées. Réservons 30 minutes pour identifier les zones de votre code les plus fragiles et prioriser les refactorings.",{"type":30,"tag":31,"props":56561,"children":56563},{"id":56562},"pourquoi-ocp-est-essentiel-dans-le-software-craftsmanship",[56564],{"type":40,"value":56565},"Pourquoi OCP est essentiel dans le Software Craftsmanship",{"type":30,"tag":43,"props":56567,"children":56568},{},[56569,56571,56578,56580,56585,56586,56590],{"type":40,"value":56570},"Le principe OCP ne se limite pas seulement à écrire du code plus propre. Il est au cœur de ce qu'on appelle le ",{"type":30,"tag":36,"props":56572,"children":56573},{},[56574],{"type":30,"tag":75,"props":56575,"children":56576},{"href":77},[56577],{"type":40,"value":13173},{"type":40,"value":56579},", un mouvement qui prône l’écriture de code non seulement fonctionnel, mais aussi ",{"type":30,"tag":36,"props":56581,"children":56582},{},[56583],{"type":40,"value":56584},"élégant",{"type":40,"value":8328},{"type":30,"tag":36,"props":56587,"children":56588},{},[56589],{"type":40,"value":32397},{"type":40,"value":56591},". Respecter le principe OCP vous aide à :",{"type":30,"tag":1518,"props":56593,"children":56594},{},[56595,56605,56615],{"type":30,"tag":167,"props":56596,"children":56597},{},[56598,56603],{"type":30,"tag":36,"props":56599,"children":56600},{},[56601],{"type":40,"value":56602},"Réduire les risques de régressions",{"type":40,"value":56604}," : En évitant de modifier du code existant, vous réduisez les chances d’introduire des bugs dans des parties déjà testées. Dans mes missions chez des grandes DSI, ce point se traduit directement en moins d’incidents de production et en releases plus fréquentes.",{"type":30,"tag":167,"props":56606,"children":56607},{},[56608,56613],{"type":30,"tag":36,"props":56609,"children":56610},{},[56611],{"type":40,"value":56612},"Faciliter les extensions",{"type":40,"value":56614}," : L’ajout de nouvelles fonctionnalités devient plus simple. Vous n’avez plus à fouiller dans du code complexe pour ajouter une petite modification.",{"type":30,"tag":167,"props":56616,"children":56617},{},[56618,56623],{"type":30,"tag":36,"props":56619,"children":56620},{},[56621],{"type":40,"value":56622},"Améliorer la collaboration en équipe",{"type":40,"value":56624}," : Lorsque le code est modulaire et bien structuré, il est plus facile pour d’autres développeurs de comprendre et d’étendre le système sans avoir à se préoccuper de casser des fonctionnalités.",{"type":30,"tag":19673,"props":56626,"children":56627},{"type":55830},[56628],{"type":30,"tag":43,"props":56629,"children":56630},{},[56631],{"type":40,"value":56632},"** Un code qui ne suit pas OCP est souvent source de conflits lors du travail en équipe. Si plusieurs développeurs doivent modifier la même classe, des erreurs sont inévitables.",{"type":30,"tag":43,"props":56634,"children":56635},{},[56636,56638,56642,56644,56649],{"type":40,"value":56637},"Dans le contexte du ",{"type":30,"tag":75,"props":56639,"children":56640},{"href":77},[56641],{"type":40,"value":13173},{"type":40,"value":56643},", suivre OCP est une manière de ",{"type":30,"tag":36,"props":56645,"children":56646},{},[56647],{"type":40,"value":56648},"prendre soin de votre code",{"type":40,"value":56650}," sur le long terme. Cela vous permet de vous concentrer sur l'extension de votre logiciel, sans vous retrouver à constamment corriger des erreurs liées aux modifications du code existant.",{"type":30,"tag":84,"props":56652,"children":56653},{},[],{"type":30,"tag":31,"props":56655,"children":56657},{"id":56656},"comment-appliquer-ocp-dans-vos-projets-java",[56658],{"type":40,"value":56659},"Comment appliquer OCP dans vos projets Java",{"type":30,"tag":43,"props":56661,"children":56662},{},[56663],{"type":40,"value":56664},"Dans cette section, je vais vous montrer des méthodes pratiques pour appliquer OCP dans vos projets Java, au-delà des interfaces que nous avons déjà vues.",{"type":30,"tag":116,"props":56666,"children":56668},{"id":56667},"exemple-3-utilisation-de-classes-abstraites-pour-respecter-ocp",[56669],{"type":40,"value":56670},"Exemple 3 : Utilisation de classes abstraites pour respecter OCP",{"type":30,"tag":43,"props":56672,"children":56673},{},[56674],{"type":40,"value":56675},"Une autre manière courante de respecter OCP est d’utiliser des classes abstraites. Les classes abstraites permettent de définir des comportements communs que plusieurs sous-classes peuvent partager, tout en laissant la liberté aux sous-classes d’étendre ou de redéfinir certains comportements.",{"type":30,"tag":43,"props":56677,"children":56678},{},[56679],{"type":40,"value":56680},"Prenons l'exemple précédent de calcul des salaires. Voici comment vous pourriez utiliser des classes abstraites pour atteindre un résultat similaire tout en respectant OCP :",{"type":30,"tag":1035,"props":56682,"children":56684},{"className":1039,"code":56683,"language":1038,"meta":8,"style":8},"abstract class Employee {\n    protected double baseSalary;\n\n    public Employee(double baseSalary) {\n        this.baseSalary = baseSalary;\n    }\n\n    // Méthode abstraite que chaque sous-classe implémentera\n    public abstract double calculateSalary();\n}\n\nclass Manager extends Employee {\n    public Manager(double baseSalary) {\n        super(baseSalary);\n    }\n\n    @Override\n    public double calculateSalary() {\n        return baseSalary * 2;\n    }\n}\n\nclass Developer extends Employee {\n    public Developer(double baseSalary) {\n        super(baseSalary);\n    }\n\n    @Override\n    public double calculateSalary() {\n        return baseSalary * 1.5;\n    }\n}\n",[56685],{"type":30,"tag":1042,"props":56686,"children":56687},{"__ignoreMap":8},[56688,56708,56727,56734,56765,56792,56799,56806,56814,56838,56845,56852,56875,56906,56925,56932,56939,56950,56973,56996,57003,57010,57017,57041,57072,57091,57098,57105,57116,57139,57162,57169],{"type":30,"tag":1046,"props":56689,"children":56690},{"class":1048,"line":1049},[56691,56696,56700,56704],{"type":30,"tag":1046,"props":56692,"children":56693},{"style":1053},[56694],{"type":40,"value":56695},"abstract",{"type":30,"tag":1046,"props":56697,"children":56698},{"style":1053},[56699],{"type":40,"value":1061},{"type":30,"tag":1046,"props":56701,"children":56702},{"style":1064},[56703],{"type":40,"value":24181},{"type":30,"tag":1046,"props":56705,"children":56706},{"style":1070},[56707],{"type":40,"value":1073},{"type":30,"tag":1046,"props":56709,"children":56710},{"class":1048,"line":675},[56711,56715,56719,56723],{"type":30,"tag":1046,"props":56712,"children":56713},{"style":1053},[56714],{"type":40,"value":37251},{"type":30,"tag":1046,"props":56716,"children":56717},{"style":1053},[56718],{"type":40,"value":1310},{"type":30,"tag":1046,"props":56720,"children":56721},{"style":1105},[56722],{"type":40,"value":55481},{"type":30,"tag":1046,"props":56724,"children":56725},{"style":1070},[56726],{"type":40,"value":1113},{"type":30,"tag":1046,"props":56728,"children":56729},{"class":1048,"line":681},[56730],{"type":30,"tag":1046,"props":56731,"children":56732},{"emptyLinePlaceholder":13},[56733],{"type":40,"value":1121},{"type":30,"tag":1046,"props":56735,"children":56736},{"class":1048,"line":1124},[56737,56741,56745,56749,56753,56757,56761],{"type":30,"tag":1046,"props":56738,"children":56739},{"style":1053},[56740],{"type":40,"value":1130},{"type":30,"tag":1046,"props":56742,"children":56743},{"style":1138},[56744],{"type":40,"value":24181},{"type":30,"tag":1046,"props":56746,"children":56747},{"style":1070},[56748],{"type":40,"value":1146},{"type":30,"tag":1046,"props":56750,"children":56751},{"style":1053},[56752],{"type":40,"value":20944},{"type":30,"tag":1046,"props":56754,"children":56755},{"style":1153},[56756],{"type":40,"value":55481},{"type":30,"tag":1046,"props":56758,"children":56759},{"style":1070},[56760],{"type":40,"value":1161},{"type":30,"tag":1046,"props":56762,"children":56763},{"style":1070},[56764],{"type":40,"value":1073},{"type":30,"tag":1046,"props":56766,"children":56767},{"class":1048,"line":1168},[56768,56772,56776,56780,56784,56788],{"type":30,"tag":1046,"props":56769,"children":56770},{"style":1780},[56771],{"type":40,"value":1783},{"type":30,"tag":1046,"props":56773,"children":56774},{"style":1070},[56775],{"type":40,"value":1179},{"type":30,"tag":1046,"props":56777,"children":56778},{"style":1105},[56779],{"type":40,"value":55579},{"type":30,"tag":1046,"props":56781,"children":56782},{"style":1795},[56783],{"type":40,"value":1798},{"type":30,"tag":1046,"props":56785,"children":56786},{"style":1105},[56787],{"type":40,"value":55481},{"type":30,"tag":1046,"props":56789,"children":56790},{"style":1070},[56791],{"type":40,"value":1113},{"type":30,"tag":1046,"props":56793,"children":56794},{"class":1048,"line":1201},[56795],{"type":30,"tag":1046,"props":56796,"children":56797},{"style":1070},[56798],{"type":40,"value":1207},{"type":30,"tag":1046,"props":56800,"children":56801},{"class":1048,"line":1210},[56802],{"type":30,"tag":1046,"props":56803,"children":56804},{"emptyLinePlaceholder":13},[56805],{"type":40,"value":1121},{"type":30,"tag":1046,"props":56807,"children":56808},{"class":1048,"line":1218},[56809],{"type":30,"tag":1046,"props":56810,"children":56811},{"style":3961},[56812],{"type":40,"value":56813},"    // Méthode abstraite que chaque sous-classe implémentera\n",{"type":30,"tag":1046,"props":56815,"children":56816},{"class":1048,"line":1255},[56817,56821,56826,56830,56834],{"type":30,"tag":1046,"props":56818,"children":56819},{"style":1053},[56820],{"type":40,"value":1130},{"type":30,"tag":1046,"props":56822,"children":56823},{"style":1053},[56824],{"type":40,"value":56825}," abstract",{"type":30,"tag":1046,"props":56827,"children":56828},{"style":1053},[56829],{"type":40,"value":1310},{"type":30,"tag":1046,"props":56831,"children":56832},{"style":1138},[56833],{"type":40,"value":25563},{"type":30,"tag":1046,"props":56835,"children":56836},{"style":1070},[56837],{"type":40,"value":1406},{"type":30,"tag":1046,"props":56839,"children":56840},{"class":1048,"line":1284},[56841],{"type":30,"tag":1046,"props":56842,"children":56843},{"style":1070},[56844],{"type":40,"value":1423},{"type":30,"tag":1046,"props":56846,"children":56847},{"class":1048,"line":1292},[56848],{"type":30,"tag":1046,"props":56849,"children":56850},{"emptyLinePlaceholder":13},[56851],{"type":40,"value":1121},{"type":30,"tag":1046,"props":56853,"children":56854},{"class":1048,"line":1300},[56855,56859,56863,56867,56871],{"type":30,"tag":1046,"props":56856,"children":56857},{"style":1053},[56858],{"type":40,"value":7282},{"type":30,"tag":1046,"props":56860,"children":56861},{"style":1064},[56862],{"type":40,"value":45071},{"type":30,"tag":1046,"props":56864,"children":56865},{"style":1053},[56866],{"type":40,"value":37551},{"type":30,"tag":1046,"props":56868,"children":56869},{"style":1064},[56870],{"type":40,"value":24181},{"type":30,"tag":1046,"props":56872,"children":56873},{"style":1070},[56874],{"type":40,"value":1073},{"type":30,"tag":1046,"props":56876,"children":56877},{"class":1048,"line":1327},[56878,56882,56886,56890,56894,56898,56902],{"type":30,"tag":1046,"props":56879,"children":56880},{"style":1053},[56881],{"type":40,"value":1130},{"type":30,"tag":1046,"props":56883,"children":56884},{"style":1138},[56885],{"type":40,"value":45071},{"type":30,"tag":1046,"props":56887,"children":56888},{"style":1070},[56889],{"type":40,"value":1146},{"type":30,"tag":1046,"props":56891,"children":56892},{"style":1053},[56893],{"type":40,"value":20944},{"type":30,"tag":1046,"props":56895,"children":56896},{"style":1153},[56897],{"type":40,"value":55481},{"type":30,"tag":1046,"props":56899,"children":56900},{"style":1070},[56901],{"type":40,"value":1161},{"type":30,"tag":1046,"props":56903,"children":56904},{"style":1070},[56905],{"type":40,"value":1073},{"type":30,"tag":1046,"props":56907,"children":56908},{"class":1048,"line":1354},[56909,56913,56917,56921],{"type":30,"tag":1046,"props":56910,"children":56911},{"style":9718},[56912],{"type":40,"value":51918},{"type":30,"tag":1046,"props":56914,"children":56915},{"style":1070},[56916],{"type":40,"value":1146},{"type":30,"tag":1046,"props":56918,"children":56919},{"style":1105},[56920],{"type":40,"value":56382},{"type":30,"tag":1046,"props":56922,"children":56923},{"style":1070},[56924],{"type":40,"value":1198},{"type":30,"tag":1046,"props":56926,"children":56927},{"class":1048,"line":1391},[56928],{"type":30,"tag":1046,"props":56929,"children":56930},{"style":1070},[56931],{"type":40,"value":1207},{"type":30,"tag":1046,"props":56933,"children":56934},{"class":1048,"line":1409},[56935],{"type":30,"tag":1046,"props":56936,"children":56937},{"emptyLinePlaceholder":13},[56938],{"type":40,"value":1121},{"type":30,"tag":1046,"props":56940,"children":56941},{"class":1048,"line":1417},[56942,56946],{"type":30,"tag":1046,"props":56943,"children":56944},{"style":1647},[56945],{"type":40,"value":1828},{"type":30,"tag":1046,"props":56947,"children":56948},{"style":1653},[56949],{"type":40,"value":3258},{"type":30,"tag":1046,"props":56951,"children":56952},{"class":1048,"line":2023},[56953,56957,56961,56965,56969],{"type":30,"tag":1046,"props":56954,"children":56955},{"style":1053},[56956],{"type":40,"value":1130},{"type":30,"tag":1046,"props":56958,"children":56959},{"style":1053},[56960],{"type":40,"value":1310},{"type":30,"tag":1046,"props":56962,"children":56963},{"style":1138},[56964],{"type":40,"value":25563},{"type":30,"tag":1046,"props":56966,"children":56967},{"style":1070},[56968],{"type":40,"value":1320},{"type":30,"tag":1046,"props":56970,"children":56971},{"style":1070},[56972],{"type":40,"value":1073},{"type":30,"tag":1046,"props":56974,"children":56975},{"class":1048,"line":2083},[56976,56980,56984,56988,56992],{"type":30,"tag":1046,"props":56977,"children":56978},{"style":1053},[56979],{"type":40,"value":1333},{"type":30,"tag":1046,"props":56981,"children":56982},{"style":1105},[56983],{"type":40,"value":55680},{"type":30,"tag":1046,"props":56985,"children":56986},{"style":1795},[56987],{"type":40,"value":21197},{"type":30,"tag":1046,"props":56989,"children":56990},{"style":6886},[56991],{"type":40,"value":28867},{"type":30,"tag":1046,"props":56993,"children":56994},{"style":1070},[56995],{"type":40,"value":1113},{"type":30,"tag":1046,"props":56997,"children":56998},{"class":1048,"line":2126},[56999],{"type":30,"tag":1046,"props":57000,"children":57001},{"style":1070},[57002],{"type":40,"value":1207},{"type":30,"tag":1046,"props":57004,"children":57005},{"class":1048,"line":2159},[57006],{"type":30,"tag":1046,"props":57007,"children":57008},{"style":1070},[57009],{"type":40,"value":1423},{"type":30,"tag":1046,"props":57011,"children":57012},{"class":1048,"line":2167},[57013],{"type":30,"tag":1046,"props":57014,"children":57015},{"emptyLinePlaceholder":13},[57016],{"type":40,"value":1121},{"type":30,"tag":1046,"props":57018,"children":57019},{"class":1048,"line":4537},[57020,57024,57029,57033,57037],{"type":30,"tag":1046,"props":57021,"children":57022},{"style":1053},[57023],{"type":40,"value":7282},{"type":30,"tag":1046,"props":57025,"children":57026},{"style":1064},[57027],{"type":40,"value":57028}," Developer",{"type":30,"tag":1046,"props":57030,"children":57031},{"style":1053},[57032],{"type":40,"value":37551},{"type":30,"tag":1046,"props":57034,"children":57035},{"style":1064},[57036],{"type":40,"value":24181},{"type":30,"tag":1046,"props":57038,"children":57039},{"style":1070},[57040],{"type":40,"value":1073},{"type":30,"tag":1046,"props":57042,"children":57043},{"class":1048,"line":4545},[57044,57048,57052,57056,57060,57064,57068],{"type":30,"tag":1046,"props":57045,"children":57046},{"style":1053},[57047],{"type":40,"value":1130},{"type":30,"tag":1046,"props":57049,"children":57050},{"style":1138},[57051],{"type":40,"value":57028},{"type":30,"tag":1046,"props":57053,"children":57054},{"style":1070},[57055],{"type":40,"value":1146},{"type":30,"tag":1046,"props":57057,"children":57058},{"style":1053},[57059],{"type":40,"value":20944},{"type":30,"tag":1046,"props":57061,"children":57062},{"style":1153},[57063],{"type":40,"value":55481},{"type":30,"tag":1046,"props":57065,"children":57066},{"style":1070},[57067],{"type":40,"value":1161},{"type":30,"tag":1046,"props":57069,"children":57070},{"style":1070},[57071],{"type":40,"value":1073},{"type":30,"tag":1046,"props":57073,"children":57074},{"class":1048,"line":4582},[57075,57079,57083,57087],{"type":30,"tag":1046,"props":57076,"children":57077},{"style":9718},[57078],{"type":40,"value":51918},{"type":30,"tag":1046,"props":57080,"children":57081},{"style":1070},[57082],{"type":40,"value":1146},{"type":30,"tag":1046,"props":57084,"children":57085},{"style":1105},[57086],{"type":40,"value":56382},{"type":30,"tag":1046,"props":57088,"children":57089},{"style":1070},[57090],{"type":40,"value":1198},{"type":30,"tag":1046,"props":57092,"children":57093},{"class":1048,"line":4622},[57094],{"type":30,"tag":1046,"props":57095,"children":57096},{"style":1070},[57097],{"type":40,"value":1207},{"type":30,"tag":1046,"props":57099,"children":57100},{"class":1048,"line":4662},[57101],{"type":30,"tag":1046,"props":57102,"children":57103},{"emptyLinePlaceholder":13},[57104],{"type":40,"value":1121},{"type":30,"tag":1046,"props":57106,"children":57107},{"class":1048,"line":4687},[57108,57112],{"type":30,"tag":1046,"props":57109,"children":57110},{"style":1647},[57111],{"type":40,"value":1828},{"type":30,"tag":1046,"props":57113,"children":57114},{"style":1653},[57115],{"type":40,"value":3258},{"type":30,"tag":1046,"props":57117,"children":57118},{"class":1048,"line":4695},[57119,57123,57127,57131,57135],{"type":30,"tag":1046,"props":57120,"children":57121},{"style":1053},[57122],{"type":40,"value":1130},{"type":30,"tag":1046,"props":57124,"children":57125},{"style":1053},[57126],{"type":40,"value":1310},{"type":30,"tag":1046,"props":57128,"children":57129},{"style":1138},[57130],{"type":40,"value":25563},{"type":30,"tag":1046,"props":57132,"children":57133},{"style":1070},[57134],{"type":40,"value":1320},{"type":30,"tag":1046,"props":57136,"children":57137},{"style":1070},[57138],{"type":40,"value":1073},{"type":30,"tag":1046,"props":57140,"children":57141},{"class":1048,"line":4703},[57142,57146,57150,57154,57158],{"type":30,"tag":1046,"props":57143,"children":57144},{"style":1053},[57145],{"type":40,"value":1333},{"type":30,"tag":1046,"props":57147,"children":57148},{"style":1105},[57149],{"type":40,"value":55680},{"type":30,"tag":1046,"props":57151,"children":57152},{"style":1795},[57153],{"type":40,"value":21197},{"type":30,"tag":1046,"props":57155,"children":57156},{"style":6886},[57157],{"type":40,"value":55760},{"type":30,"tag":1046,"props":57159,"children":57160},{"style":1070},[57161],{"type":40,"value":1113},{"type":30,"tag":1046,"props":57163,"children":57164},{"class":1048,"line":4739},[57165],{"type":30,"tag":1046,"props":57166,"children":57167},{"style":1070},[57168],{"type":40,"value":1207},{"type":30,"tag":1046,"props":57170,"children":57171},{"class":1048,"line":4771},[57172],{"type":30,"tag":1046,"props":57173,"children":57174},{"style":1070},[57175],{"type":40,"value":1423},{"type":30,"tag":43,"props":57177,"children":57178},{},[57179,57181,57186],{"type":40,"value":57180},"Avec cette approche, la classe ",{"type":30,"tag":1042,"props":57182,"children":57184},{"className":57183},[],[57185],{"type":40,"value":24156},{"type":40,"value":57187}," définit un cadre général pour tous les types d’employés, et chaque sous-classe est responsable de l’implémentation spécifique du calcul des salaires. Cela permet d’étendre le système en ajoutant de nouvelles sous-classes sans toucher au code existant.",{"type":30,"tag":19673,"props":57189,"children":57190},{"type":19675},[57191],{"type":30,"tag":43,"props":57192,"children":57193},{},[57194],{"type":40,"value":57195},"** Les classes abstraites sont très utiles pour éviter la duplication de code commun tout en respectant OCP.",{"type":30,"tag":84,"props":57197,"children":57198},{},[],{"type":30,"tag":31,"props":57200,"children":57202},{"id":57201},"les-pièges-courants-et-comment-les-éviter",[57203],{"type":40,"value":57204},"Les pièges courants et comment les éviter",{"type":30,"tag":43,"props":57206,"children":57207},{},[57208],{"type":40,"value":57209},"Appliquer OCP peut sembler simple en théorie, mais il est facile de tomber dans certains pièges. Voici quelques erreurs courantes à éviter lorsque vous essayez d",{"type":30,"tag":43,"props":57211,"children":57212},{},[57213],{"type":40,"value":57214},"’adopter ce principe :",{"type":30,"tag":1518,"props":57216,"children":57217},{},[57218,57241],{"type":30,"tag":167,"props":57219,"children":57220},{},[57221,57226,57228,57233,57234,57239],{"type":30,"tag":36,"props":57222,"children":57223},{},[57224],{"type":40,"value":57225},"Trop de complexité inutile",{"type":40,"value":57227}," : Le but de OCP est de rendre le code ",{"type":30,"tag":36,"props":57229,"children":57230},{},[57231],{"type":40,"value":57232},"extensible",{"type":40,"value":21036},{"type":30,"tag":36,"props":57235,"children":57236},{},[57237],{"type":40,"value":57238},"complexe",{"type":40,"value":57240},". Si vous créez trop de couches d'abstraction ou d'héritage juste pour respecter OCP, vous risquez de compliquer inutilement le code. Utilisez OCP quand c'est pertinent, mais ne le forcez pas là où ce n'est pas nécessaire.",{"type":30,"tag":167,"props":57242,"children":57243},{},[57244,57249,57251,57256],{"type":30,"tag":36,"props":57245,"children":57246},{},[57247],{"type":40,"value":57248},"Abus d'héritage",{"type":40,"value":57250}," : Il est facile de tomber dans le piège de créer de longues chaînes d’héritage dans le but de respecter OCP. Cependant, l'héritage peut rendre le code rigide et difficile à modifier. Dans certains cas, ",{"type":30,"tag":36,"props":57252,"children":57253},{},[57254],{"type":40,"value":57255},"la composition",{"type":40,"value":57257}," (utiliser des objets plutôt que des sous-classes) est une meilleure solution.",{"type":30,"tag":19673,"props":57259,"children":57260},{"type":19675},[57261],{"type":30,"tag":43,"props":57262,"children":57263},{},[57264],{"type":40,"value":57265},"** Lorsque vous hésitez entre l’héritage et la composition, privilégiez la composition. Elle vous permet de créer des modules plus flexibles et réutilisables.",{"type":30,"tag":1518,"props":57267,"children":57268},{"start":681},[57269],{"type":30,"tag":167,"props":57270,"children":57271},{},[57272,57277],{"type":30,"tag":36,"props":57273,"children":57274},{},[57275],{"type":40,"value":57276},"Modifier le code existant quand il n'est pas nécessaire",{"type":40,"value":57278}," : Parfois, vous pourriez être tenté de modifier du code existant pour qu'il corresponde à un nouveau besoin. Si vous trouvez que vous devez constamment ajuster des classes, cela peut être un signe que votre design initial n'était pas assez flexible.",{"type":30,"tag":84,"props":57280,"children":57281},{},[],{"type":30,"tag":31,"props":57283,"children":57285},{"id":57284},"conclusion-rendre-votre-code-plus-flexible-avec-ocp",[57286],{"type":40,"value":57287},"Conclusion : Rendre votre code plus flexible avec OCP",{"type":30,"tag":43,"props":57289,"children":57290},{},[57291],{"type":40,"value":57292},"Le principe OCP est un outil puissant qui vous aide à concevoir du code extensible, robuste et maintenable. En appliquant ce principe, vous limitez les modifications du code existant, ce qui réduit les risques d’introduire des erreurs et facilite l’ajout de nouvelles fonctionnalités.",{"type":30,"tag":43,"props":57294,"children":57295},{},[57296,57298,57302],{"type":40,"value":57297},"Que ce soit en utilisant des interfaces, des classes abstraites ou même des concepts comme la composition, OCP vous offre une flexibilité qui rend vos applications plus adaptables aux changements futurs. En ",{"type":30,"tag":75,"props":57299,"children":57300},{"href":77},[57301],{"type":40,"value":13173},{"type":40,"value":57303},", respecter ce principe montre un engagement envers l’écriture de code qui non seulement fonctionne, mais qui évolue de manière élégante au fil du temps.",{"type":30,"tag":84,"props":57305,"children":57306},{},[],{"type":30,"tag":31,"props":57308,"children":57309},{"id":6335},[57310],{"type":40,"value":6341},{"type":30,"tag":530,"props":57312,"children":57313},{},[57314,57319],{"type":30,"tag":534,"props":57315,"children":57316},{},[57317],{"type":40,"value":57318},"1. Comment savoir si j’applique correctement le principe OCP ?",{"type":30,"tag":43,"props":57320,"children":57321},{},[57322],{"type":40,"value":57323},"Si vous pouvez ajouter de nouvelles fonctionnalités à votre code sans toucher au code existant, vous êtes probablement sur la bonne voie. Utilisez des abstractions comme les interfaces et les classes abstraites pour séparer les comportements.",{"type":30,"tag":530,"props":57325,"children":57326},{},[57327,57332],{"type":30,"tag":534,"props":57328,"children":57329},{},[57330],{"type":40,"value":57331},"2. Est-ce que suivre OCP rend le code plus compliqué ?",{"type":30,"tag":43,"props":57333,"children":57334},{},[57335],{"type":40,"value":57336},"Cela dépend de la manière dont vous l’implémentez. Si vous ajoutez trop de couches d’abstraction, cela peut effectivement compliquer les choses. L’objectif est de trouver un équilibre où votre code reste compréhensible tout en étant extensible.",{"type":30,"tag":530,"props":57338,"children":57339},{},[57340,57345],{"type":30,"tag":534,"props":57341,"children":57342},{},[57343],{"type":40,"value":57344},"3. Que faire si j’ai déjà du code qui ne respecte pas OCP ?",{"type":30,"tag":43,"props":57346,"children":57347},{},[57348],{"type":40,"value":57349},"Vous pouvez refactorer progressivement votre code en identifiant les parties les plus susceptibles de changer, puis en les isolant à l’aide d’abstractions. Refactoriser petit à petit permet d’améliorer le code sans introduire trop de risques.",{"type":30,"tag":530,"props":57351,"children":57352},{},[57353,57358],{"type":30,"tag":534,"props":57354,"children":57355},{},[57356],{"type":40,"value":57357},"4. OCP est-il toujours applicable ?",{"type":30,"tag":43,"props":57359,"children":57360},{},[57361],{"type":40,"value":57362},"Non, parfois, il n’est pas nécessaire d’appliquer OCP, surtout si vous travaillez sur une petite partie du code qui ne changera probablement jamais. Le principe doit être appliqué là où il est pertinent, c’est-à-dire là où il y a un potentiel de changement ou d’extension.",{"type":30,"tag":84,"props":57364,"children":57365},{},[],{"type":30,"tag":211,"props":57367,"children":57368},{"cta":19356,"href":639,"title":19357,"type":641},[57369],{"type":30,"tag":43,"props":57370,"children":57371},{},[57372],{"type":40,"value":19363},{"type":30,"tag":6456,"props":57374,"children":57375},{},[57376],{"type":40,"value":6460},{"title":8,"searchDepth":675,"depth":675,"links":57378},[57379,57380,57384,57385,57388,57389,57390],{"id":55324,"depth":675,"text":55327},{"id":55354,"depth":675,"text":55357,"children":57381},[57382,57383],{"id":55401,"depth":681,"text":55404},{"id":55858,"depth":681,"text":55861},{"id":56562,"depth":675,"text":56565},{"id":56656,"depth":675,"text":56659,"children":57386},[57387],{"id":56667,"depth":681,"text":56670},{"id":57201,"depth":675,"text":57204},{"id":57284,"depth":675,"text":57287},{"id":6335,"depth":675,"text":6341},"content:fr:architecture-craft:principe-ocp-software-craftsmanship-exemples-java.md","fr/architecture-craft/principe-ocp-software-craftsmanship-exemples-java.md","fr/architecture-craft/principe-ocp-software-craftsmanship-exemples-java",{"_path":35006,"_dir":717,"_draft":7,"_partial":7,"_locale":8,"title":57395,"description":57396,"id":10487,"date":57397,"listed":13,"nocomments":7,"hidden":7,"categories":57398,"tags":57399,"--cover":57400,"readingTime":57401,"body":57406,"_type":709,"_id":59802,"_source":711,"_file":59803,"_stem":59804,"_extension":714},"Principe SRP en Software Craftsmanship, Comprendre et Appliquer le Single Responsibility Principle en Java","Découvrez comment appliquer le principe de responsabilité unique (SRP) en Java pour améliorer la lisibilité, la maintenabilité et la testabilité de...","2024-01-16",[15],[17,18],"covers/articles/principe-srp.jpg",{"text":57402,"minutes":57403,"time":57404,"words":57405},"8 min read",7.705,462300,1541,{"type":27,"children":57407,"toc":59787},[57408,57414,57426,57446,57451,57457,57474,57479,57483,57710,57730,57735,58006,58033,58042,58048,58061,58067,58072,58078,58083,58089,58094,58100,58106,58119,58387,58392,58787,58793,58805,59128,59133,59585,59588,59594,59599,59652,59658,59664,59669,59675,59680,59686,59691,59697,59702,59708,59721,59734,59747,59760,59773,59776,59783],{"type":30,"tag":31,"props":57409,"children":57411},{"id":57410},"principe-srp-en-software-craftsmanship-explications-et-exemples-en-java",[57412],{"type":40,"value":57413},"Principe SRP en Software Craftsmanship : Explications et Exemples en Java",{"type":30,"tag":43,"props":57415,"children":57416},{},[57417,57419,57424],{"type":40,"value":57418},"Avez-vous déjà travaillé sur un projet où une classe faisait tellement de choses qu'il était presque impossible de savoir par où commencer pour la modifier ? Peut-être que vous avez dû ajouter une nouvelle fonctionnalité ou corriger un bug, mais chaque changement semblait risquer de casser autre chose. Ce sentiment de frustration, je le connais bien, et il est souvent dû à une violation du ",{"type":30,"tag":36,"props":57420,"children":57421},{},[57422],{"type":40,"value":57423},"principe SRP (Single Responsibility Principle)",{"type":40,"value":57425},". Robert C. Martin, qui a formalisé ce principe dans \"Clean Code\", le résume ainsi : une classe ne devrait avoir qu'une seule raison de changer.",{"type":30,"tag":43,"props":57427,"children":57428},{},[57429,57431,57435,57437,57444],{"type":40,"value":57430},"Le SRP est l'un des cinq ",{"type":30,"tag":75,"props":57432,"children":57433},{"href":12830},[57434],{"type":40,"value":12833},{"type":40,"value":57436},", qui sont des piliers du ",{"type":30,"tag":36,"props":57438,"children":57439},{},[57440],{"type":30,"tag":75,"props":57441,"children":57442},{"href":77},[57443],{"type":40,"value":80},{"type":40,"value":57445},". Mais comprendre ces concepts en théorie est une chose, les appliquer dans votre code quotidien en est une autre. Si vous avez déjà tenté de suivre des règles comme le SRP mais vous êtes retrouvé avec des classes éclatées ou un code trop fragmenté, vous n'êtes pas seul.",{"type":30,"tag":43,"props":57447,"children":57448},{},[57449],{"type":40,"value":57450},"Dans cet article, vous allez découvrir comment appliquer le SRP de manière pragmatique et efficace dans vos projets Java. Vous repartirez avec des exemples concrets, une meilleure compréhension de ce principe, et la certitude qu'il peut vraiment améliorer la qualité de votre code.",{"type":30,"tag":31,"props":57452,"children":57454},{"id":57453},"introduction-au-principe-srp",[57455],{"type":40,"value":57456},"Introduction au principe SRP",{"type":30,"tag":43,"props":57458,"children":57459},{},[57460,57461,57465,57467,57472],{"type":40,"value":143},{"type":30,"tag":36,"props":57462,"children":57463},{},[57464],{"type":40,"value":40826},{"type":40,"value":57466},", ou principe de responsabilité unique, est souvent résumé ainsi : ",{"type":30,"tag":36,"props":57468,"children":57469},{},[57470],{"type":40,"value":57471},"\"Une classe ne devrait avoir qu'une seule raison de changer.\"",{"type":40,"value":57473}," Autrement dit, une classe doit se concentrer sur une seule tâche ou responsabilité.",{"type":30,"tag":43,"props":57475,"children":57476},{},[57477],{"type":40,"value":57478},"L'idée derrière le SRP est simple, mais puissante. Lorsque vous suivez ce principe, chaque classe dans votre code est responsable d'un aspect spécifique du système, ce qui la rend plus facile à comprendre, à modifier et à tester. Si une classe a plusieurs responsabilités, elle devient complexe, et chaque modification pour une responsabilité peut avoir des impacts imprévus sur une autre.",{"type":30,"tag":43,"props":57480,"children":57481},{},[57482],{"type":40,"value":29325},{"type":30,"tag":1035,"props":57484,"children":57486},{"className":1039,"code":57485,"language":1038,"meta":8,"style":8},"public class UserManager {\n    public void createUser(String username, String password) {\n        // Logique pour créer un utilisateur\n    }\n\n    public void log(String message) {\n        // Logique pour enregistrer un log\n    }\n\n    public void sendEmail(String email, String message) {\n        // Logique pour envoyer un email\n    }\n}\n",[57487],{"type":30,"tag":1042,"props":57488,"children":57489},{"__ignoreMap":8},[57490,57510,57560,57568,57575,57582,57618,57626,57633,57640,57688,57696,57703],{"type":30,"tag":1046,"props":57491,"children":57492},{"class":1048,"line":1049},[57493,57497,57501,57506],{"type":30,"tag":1046,"props":57494,"children":57495},{"style":1053},[57496],{"type":40,"value":1056},{"type":30,"tag":1046,"props":57498,"children":57499},{"style":1053},[57500],{"type":40,"value":1061},{"type":30,"tag":1046,"props":57502,"children":57503},{"style":1064},[57504],{"type":40,"value":57505}," UserManager",{"type":30,"tag":1046,"props":57507,"children":57508},{"style":1070},[57509],{"type":40,"value":1073},{"type":30,"tag":1046,"props":57511,"children":57512},{"class":1048,"line":675},[57513,57517,57521,57526,57530,57534,57539,57543,57547,57552,57556],{"type":30,"tag":1046,"props":57514,"children":57515},{"style":1053},[57516],{"type":40,"value":1130},{"type":30,"tag":1046,"props":57518,"children":57519},{"style":1053},[57520],{"type":40,"value":1135},{"type":30,"tag":1046,"props":57522,"children":57523},{"style":1138},[57524],{"type":40,"value":57525}," createUser",{"type":30,"tag":1046,"props":57527,"children":57528},{"style":1070},[57529],{"type":40,"value":1146},{"type":30,"tag":1046,"props":57531,"children":57532},{"style":1084},[57533],{"type":40,"value":2882},{"type":30,"tag":1046,"props":57535,"children":57536},{"style":1153},[57537],{"type":40,"value":57538}," username",{"type":30,"tag":1046,"props":57540,"children":57541},{"style":1070},[57542],{"type":40,"value":2891},{"type":30,"tag":1046,"props":57544,"children":57545},{"style":1084},[57546],{"type":40,"value":2067},{"type":30,"tag":1046,"props":57548,"children":57549},{"style":1153},[57550],{"type":40,"value":57551}," password",{"type":30,"tag":1046,"props":57553,"children":57554},{"style":1070},[57555],{"type":40,"value":1161},{"type":30,"tag":1046,"props":57557,"children":57558},{"style":1070},[57559],{"type":40,"value":1073},{"type":30,"tag":1046,"props":57561,"children":57562},{"class":1048,"line":681},[57563],{"type":30,"tag":1046,"props":57564,"children":57565},{"style":3961},[57566],{"type":40,"value":57567},"        // Logique pour créer un utilisateur\n",{"type":30,"tag":1046,"props":57569,"children":57570},{"class":1048,"line":1124},[57571],{"type":30,"tag":1046,"props":57572,"children":57573},{"style":1070},[57574],{"type":40,"value":1207},{"type":30,"tag":1046,"props":57576,"children":57577},{"class":1048,"line":1168},[57578],{"type":30,"tag":1046,"props":57579,"children":57580},{"emptyLinePlaceholder":13},[57581],{"type":40,"value":1121},{"type":30,"tag":1046,"props":57583,"children":57584},{"class":1048,"line":1201},[57585,57589,57593,57598,57602,57606,57610,57614],{"type":30,"tag":1046,"props":57586,"children":57587},{"style":1053},[57588],{"type":40,"value":1130},{"type":30,"tag":1046,"props":57590,"children":57591},{"style":1053},[57592],{"type":40,"value":1135},{"type":30,"tag":1046,"props":57594,"children":57595},{"style":1138},[57596],{"type":40,"value":57597}," log",{"type":30,"tag":1046,"props":57599,"children":57600},{"style":1070},[57601],{"type":40,"value":1146},{"type":30,"tag":1046,"props":57603,"children":57604},{"style":1084},[57605],{"type":40,"value":2882},{"type":30,"tag":1046,"props":57607,"children":57608},{"style":1153},[57609],{"type":40,"value":21315},{"type":30,"tag":1046,"props":57611,"children":57612},{"style":1070},[57613],{"type":40,"value":1161},{"type":30,"tag":1046,"props":57615,"children":57616},{"style":1070},[57617],{"type":40,"value":1073},{"type":30,"tag":1046,"props":57619,"children":57620},{"class":1048,"line":1210},[57621],{"type":30,"tag":1046,"props":57622,"children":57623},{"style":3961},[57624],{"type":40,"value":57625},"        // Logique pour enregistrer un log\n",{"type":30,"tag":1046,"props":57627,"children":57628},{"class":1048,"line":1218},[57629],{"type":30,"tag":1046,"props":57630,"children":57631},{"style":1070},[57632],{"type":40,"value":1207},{"type":30,"tag":1046,"props":57634,"children":57635},{"class":1048,"line":1255},[57636],{"type":30,"tag":1046,"props":57637,"children":57638},{"emptyLinePlaceholder":13},[57639],{"type":40,"value":1121},{"type":30,"tag":1046,"props":57641,"children":57642},{"class":1048,"line":1284},[57643,57647,57651,57655,57659,57663,57668,57672,57676,57680,57684],{"type":30,"tag":1046,"props":57644,"children":57645},{"style":1053},[57646],{"type":40,"value":1130},{"type":30,"tag":1046,"props":57648,"children":57649},{"style":1053},[57650],{"type":40,"value":1135},{"type":30,"tag":1046,"props":57652,"children":57653},{"style":1138},[57654],{"type":40,"value":39535},{"type":30,"tag":1046,"props":57656,"children":57657},{"style":1070},[57658],{"type":40,"value":1146},{"type":30,"tag":1046,"props":57660,"children":57661},{"style":1084},[57662],{"type":40,"value":2882},{"type":30,"tag":1046,"props":57664,"children":57665},{"style":1153},[57666],{"type":40,"value":57667}," email",{"type":30,"tag":1046,"props":57669,"children":57670},{"style":1070},[57671],{"type":40,"value":2891},{"type":30,"tag":1046,"props":57673,"children":57674},{"style":1084},[57675],{"type":40,"value":2067},{"type":30,"tag":1046,"props":57677,"children":57678},{"style":1153},[57679],{"type":40,"value":21315},{"type":30,"tag":1046,"props":57681,"children":57682},{"style":1070},[57683],{"type":40,"value":1161},{"type":30,"tag":1046,"props":57685,"children":57686},{"style":1070},[57687],{"type":40,"value":1073},{"type":30,"tag":1046,"props":57689,"children":57690},{"class":1048,"line":1292},[57691],{"type":30,"tag":1046,"props":57692,"children":57693},{"style":3961},[57694],{"type":40,"value":57695},"        // Logique pour envoyer un email\n",{"type":30,"tag":1046,"props":57697,"children":57698},{"class":1048,"line":1300},[57699],{"type":30,"tag":1046,"props":57700,"children":57701},{"style":1070},[57702],{"type":40,"value":1207},{"type":30,"tag":1046,"props":57704,"children":57705},{"class":1048,"line":1327},[57706],{"type":30,"tag":1046,"props":57707,"children":57708},{"style":1070},[57709],{"type":40,"value":1423},{"type":30,"tag":43,"props":57711,"children":57712},{},[57713,57714,57720,57722,57728],{"type":40,"value":51816},{"type":30,"tag":1042,"props":57715,"children":57717},{"className":57716},[],[57718],{"type":40,"value":57719},"UserManager",{"type":40,"value":57721}," gère plusieurs responsabilités : la création d'utilisateur, la gestion des logs, et l'envoi d'emails. Si vous devez modifier la méthode ",{"type":30,"tag":1042,"props":57723,"children":57725},{"className":57724},[],[57726],{"type":40,"value":57727},"createUser",{"type":40,"value":57729},", vous risquez de casser des fonctionnalités de logging ou d'emailing, car tout est couplé dans une seule classe.",{"type":30,"tag":43,"props":57731,"children":57732},{},[57733],{"type":40,"value":57734},"Pour appliquer le SRP, vous devez découper cette classe en plusieurs classes, chacune ayant une responsabilité bien définie :",{"type":30,"tag":1035,"props":57736,"children":57738},{"className":1039,"code":57737,"language":1038,"meta":8,"style":8},"public class UserManager {\n    public void createUser(String username, String password) {\n        // Logique pour créer un utilisateur\n    }\n}\n\npublic class Logger {\n    public void log(String message) {\n        // Logique pour enregistrer un log\n    }\n}\n\npublic class EmailService {\n    public void sendEmail(String email, String message) {\n        // Logique pour envoyer un email\n    }\n}\n",[57739],{"type":30,"tag":1042,"props":57740,"children":57741},{"__ignoreMap":8},[57742,57761,57808,57815,57822,57829,57836,57856,57891,57898,57905,57912,57919,57938,57985,57992,57999],{"type":30,"tag":1046,"props":57743,"children":57744},{"class":1048,"line":1049},[57745,57749,57753,57757],{"type":30,"tag":1046,"props":57746,"children":57747},{"style":1053},[57748],{"type":40,"value":1056},{"type":30,"tag":1046,"props":57750,"children":57751},{"style":1053},[57752],{"type":40,"value":1061},{"type":30,"tag":1046,"props":57754,"children":57755},{"style":1064},[57756],{"type":40,"value":57505},{"type":30,"tag":1046,"props":57758,"children":57759},{"style":1070},[57760],{"type":40,"value":1073},{"type":30,"tag":1046,"props":57762,"children":57763},{"class":1048,"line":675},[57764,57768,57772,57776,57780,57784,57788,57792,57796,57800,57804],{"type":30,"tag":1046,"props":57765,"children":57766},{"style":1053},[57767],{"type":40,"value":1130},{"type":30,"tag":1046,"props":57769,"children":57770},{"style":1053},[57771],{"type":40,"value":1135},{"type":30,"tag":1046,"props":57773,"children":57774},{"style":1138},[57775],{"type":40,"value":57525},{"type":30,"tag":1046,"props":57777,"children":57778},{"style":1070},[57779],{"type":40,"value":1146},{"type":30,"tag":1046,"props":57781,"children":57782},{"style":1084},[57783],{"type":40,"value":2882},{"type":30,"tag":1046,"props":57785,"children":57786},{"style":1153},[57787],{"type":40,"value":57538},{"type":30,"tag":1046,"props":57789,"children":57790},{"style":1070},[57791],{"type":40,"value":2891},{"type":30,"tag":1046,"props":57793,"children":57794},{"style":1084},[57795],{"type":40,"value":2067},{"type":30,"tag":1046,"props":57797,"children":57798},{"style":1153},[57799],{"type":40,"value":57551},{"type":30,"tag":1046,"props":57801,"children":57802},{"style":1070},[57803],{"type":40,"value":1161},{"type":30,"tag":1046,"props":57805,"children":57806},{"style":1070},[57807],{"type":40,"value":1073},{"type":30,"tag":1046,"props":57809,"children":57810},{"class":1048,"line":681},[57811],{"type":30,"tag":1046,"props":57812,"children":57813},{"style":3961},[57814],{"type":40,"value":57567},{"type":30,"tag":1046,"props":57816,"children":57817},{"class":1048,"line":1124},[57818],{"type":30,"tag":1046,"props":57819,"children":57820},{"style":1070},[57821],{"type":40,"value":1207},{"type":30,"tag":1046,"props":57823,"children":57824},{"class":1048,"line":1168},[57825],{"type":30,"tag":1046,"props":57826,"children":57827},{"style":1070},[57828],{"type":40,"value":1423},{"type":30,"tag":1046,"props":57830,"children":57831},{"class":1048,"line":1201},[57832],{"type":30,"tag":1046,"props":57833,"children":57834},{"emptyLinePlaceholder":13},[57835],{"type":40,"value":1121},{"type":30,"tag":1046,"props":57837,"children":57838},{"class":1048,"line":1210},[57839,57843,57847,57852],{"type":30,"tag":1046,"props":57840,"children":57841},{"style":1053},[57842],{"type":40,"value":1056},{"type":30,"tag":1046,"props":57844,"children":57845},{"style":1053},[57846],{"type":40,"value":1061},{"type":30,"tag":1046,"props":57848,"children":57849},{"style":1064},[57850],{"type":40,"value":57851}," Logger",{"type":30,"tag":1046,"props":57853,"children":57854},{"style":1070},[57855],{"type":40,"value":1073},{"type":30,"tag":1046,"props":57857,"children":57858},{"class":1048,"line":1218},[57859,57863,57867,57871,57875,57879,57883,57887],{"type":30,"tag":1046,"props":57860,"children":57861},{"style":1053},[57862],{"type":40,"value":1130},{"type":30,"tag":1046,"props":57864,"children":57865},{"style":1053},[57866],{"type":40,"value":1135},{"type":30,"tag":1046,"props":57868,"children":57869},{"style":1138},[57870],{"type":40,"value":57597},{"type":30,"tag":1046,"props":57872,"children":57873},{"style":1070},[57874],{"type":40,"value":1146},{"type":30,"tag":1046,"props":57876,"children":57877},{"style":1084},[57878],{"type":40,"value":2882},{"type":30,"tag":1046,"props":57880,"children":57881},{"style":1153},[57882],{"type":40,"value":21315},{"type":30,"tag":1046,"props":57884,"children":57885},{"style":1070},[57886],{"type":40,"value":1161},{"type":30,"tag":1046,"props":57888,"children":57889},{"style":1070},[57890],{"type":40,"value":1073},{"type":30,"tag":1046,"props":57892,"children":57893},{"class":1048,"line":1255},[57894],{"type":30,"tag":1046,"props":57895,"children":57896},{"style":3961},[57897],{"type":40,"value":57625},{"type":30,"tag":1046,"props":57899,"children":57900},{"class":1048,"line":1284},[57901],{"type":30,"tag":1046,"props":57902,"children":57903},{"style":1070},[57904],{"type":40,"value":1207},{"type":30,"tag":1046,"props":57906,"children":57907},{"class":1048,"line":1292},[57908],{"type":30,"tag":1046,"props":57909,"children":57910},{"style":1070},[57911],{"type":40,"value":1423},{"type":30,"tag":1046,"props":57913,"children":57914},{"class":1048,"line":1300},[57915],{"type":30,"tag":1046,"props":57916,"children":57917},{"emptyLinePlaceholder":13},[57918],{"type":40,"value":1121},{"type":30,"tag":1046,"props":57920,"children":57921},{"class":1048,"line":1327},[57922,57926,57930,57934],{"type":30,"tag":1046,"props":57923,"children":57924},{"style":1053},[57925],{"type":40,"value":1056},{"type":30,"tag":1046,"props":57927,"children":57928},{"style":1053},[57929],{"type":40,"value":1061},{"type":30,"tag":1046,"props":57931,"children":57932},{"style":1064},[57933],{"type":40,"value":39515},{"type":30,"tag":1046,"props":57935,"children":57936},{"style":1070},[57937],{"type":40,"value":1073},{"type":30,"tag":1046,"props":57939,"children":57940},{"class":1048,"line":1354},[57941,57945,57949,57953,57957,57961,57965,57969,57973,57977,57981],{"type":30,"tag":1046,"props":57942,"children":57943},{"style":1053},[57944],{"type":40,"value":1130},{"type":30,"tag":1046,"props":57946,"children":57947},{"style":1053},[57948],{"type":40,"value":1135},{"type":30,"tag":1046,"props":57950,"children":57951},{"style":1138},[57952],{"type":40,"value":39535},{"type":30,"tag":1046,"props":57954,"children":57955},{"style":1070},[57956],{"type":40,"value":1146},{"type":30,"tag":1046,"props":57958,"children":57959},{"style":1084},[57960],{"type":40,"value":2882},{"type":30,"tag":1046,"props":57962,"children":57963},{"style":1153},[57964],{"type":40,"value":57667},{"type":30,"tag":1046,"props":57966,"children":57967},{"style":1070},[57968],{"type":40,"value":2891},{"type":30,"tag":1046,"props":57970,"children":57971},{"style":1084},[57972],{"type":40,"value":2067},{"type":30,"tag":1046,"props":57974,"children":57975},{"style":1153},[57976],{"type":40,"value":21315},{"type":30,"tag":1046,"props":57978,"children":57979},{"style":1070},[57980],{"type":40,"value":1161},{"type":30,"tag":1046,"props":57982,"children":57983},{"style":1070},[57984],{"type":40,"value":1073},{"type":30,"tag":1046,"props":57986,"children":57987},{"class":1048,"line":1391},[57988],{"type":30,"tag":1046,"props":57989,"children":57990},{"style":3961},[57991],{"type":40,"value":57695},{"type":30,"tag":1046,"props":57993,"children":57994},{"class":1048,"line":1409},[57995],{"type":30,"tag":1046,"props":57996,"children":57997},{"style":1070},[57998],{"type":40,"value":1207},{"type":30,"tag":1046,"props":58000,"children":58001},{"class":1048,"line":1417},[58002],{"type":30,"tag":1046,"props":58003,"children":58004},{"style":1070},[58005],{"type":40,"value":1423},{"type":30,"tag":43,"props":58007,"children":58008},{},[58009,58011,58016,58018,58024,58026,58031],{"type":40,"value":58010},"Maintenant, chaque classe a une seule responsabilité : ",{"type":30,"tag":1042,"props":58012,"children":58014},{"className":58013},[],[58015],{"type":40,"value":57719},{"type":40,"value":58017}," s'occupe de la création d'utilisateur, ",{"type":30,"tag":1042,"props":58019,"children":58021},{"className":58020},[],[58022],{"type":40,"value":58023},"Logger",{"type":40,"value":58025}," gère les logs, et ",{"type":30,"tag":1042,"props":58027,"children":58029},{"className":58028},[],[58030],{"type":40,"value":39491},{"type":40,"value":58032}," est responsable de l'envoi des emails. Cela rend le code plus propre et plus facile à maintenir.",{"type":30,"tag":211,"props":58034,"children":58036},{"cta":213,"href":214,"title":58035,"type":216},"Vos classes et services font tout — et font tout mal ?",[58037],{"type":30,"tag":43,"props":58038,"children":58039},{},[58040],{"type":40,"value":58041},"Impossible de tester quoi que ce soit de manière isolée, chaque modification entraîne des effets de bord imprévisibles, et les développeurs évitent de toucher aux classes critiques. Réservons 30 minutes pour analyser les points de douleur de votre architecture et définir un plan de refactoring priorisé.",{"type":30,"tag":31,"props":58043,"children":58045},{"id":58044},"pourquoi-le-srp-est-il-important-dans-le-software-craftsmanship",[58046],{"type":40,"value":58047},"Pourquoi le SRP est-il important dans le Software Craftsmanship ?",{"type":30,"tag":43,"props":58049,"children":58050},{},[58051,58052,58059],{"type":40,"value":143},{"type":30,"tag":36,"props":58053,"children":58054},{},[58055],{"type":30,"tag":75,"props":58056,"children":58057},{"href":77},[58058],{"type":40,"value":80},{"type":40,"value":58060}," se concentre sur l’écriture d’un code de qualité, maintenable et évolutif. C’est un mouvement qui valorise les bonnes pratiques de développement et la création de logiciels avec soin et précision. Dans cette optique, le principe de responsabilité unique (SRP) joue un rôle clé.",{"type":30,"tag":2339,"props":58062,"children":58064},{"id":58063},"simplification-et-maintenabilité",[58065],{"type":40,"value":58066},"Simplification et maintenabilité",{"type":30,"tag":43,"props":58068,"children":58069},{},[58070],{"type":40,"value":58071},"Le SRP aide à réduire la complexité de votre code. Une classe qui fait une seule chose est bien plus facile à comprendre et à modifier qu’une classe qui a plusieurs responsabilités. Cela permet de limiter les erreurs et d'améliorer la productivité des équipes.",{"type":30,"tag":2339,"props":58073,"children":58075},{"id":58074},"facilite-les-tests-unitaires",[58076],{"type":40,"value":58077},"Facilite les tests unitaires",{"type":30,"tag":43,"props":58079,"children":58080},{},[58081],{"type":40,"value":58082},"Une autre raison pour laquelle le SRP est essentiel, c’est qu'il rend les tests unitaires plus simples. Quand une classe a une seule responsabilité, elle a généralement moins de dépendances et est plus facile à tester. Vous pouvez tester chaque fonctionnalité séparément, sans avoir à simuler d'autres comportements inutiles pour le test en cours.",{"type":30,"tag":2339,"props":58084,"children":58086},{"id":58085},"favorise-lévolutivité",[58087],{"type":40,"value":58088},"Favorise l’évolutivité",{"type":30,"tag":43,"props":58090,"children":58091},{},[58092],{"type":40,"value":58093},"En suivant le SRP, il devient plus facile d’étendre les fonctionnalités de votre application. Lorsque chaque classe a une responsabilité clairement définie, ajouter une nouvelle fonctionnalité ne nécessite pas de refactoriser une grande partie de votre code. Vous pouvez simplement ajouter une nouvelle classe ou modifier une classe existante sans introduire de régressions dans les autres parties du système. C’est exactement ce que j’ai observé dans une équipe que j’accompagnais dans le secteur de l’assurance : les cycles de release sont passés de 6 semaines à 2 semaines après avoir appliqué le SRP sur les services métier les plus chargés.",{"type":30,"tag":116,"props":58095,"children":58097},{"id":58096},"_3-comment-appliquer-le-srp-en-java-exemples-concrets",[58098],{"type":40,"value":58099},"3. Comment appliquer le SRP en Java : exemples concrets",{"type":30,"tag":2339,"props":58101,"children":58103},{"id":58102},"exemple-1-gestion-des-utilisateurs",[58104],{"type":40,"value":58105},"Exemple 1 : Gestion des utilisateurs",{"type":30,"tag":43,"props":58107,"children":58108},{},[58109,58111,58117],{"type":40,"value":58110},"Voici un exemple de violation du SRP avec une classe ",{"type":30,"tag":1042,"props":58112,"children":58114},{"className":58113},[],[58115],{"type":40,"value":58116},"UserService",{"type":40,"value":58118}," qui gère à la fois la création d'utilisateurs et l'envoi d'emails.",{"type":30,"tag":1035,"props":58120,"children":58122},{"className":1039,"code":58121,"language":1038,"meta":8,"style":8},"public class UserService {\n    public void createUser(String username, String password) {\n        // Logique pour créer un utilisateur\n        System.out.println(\"Utilisateur créé avec succès !\");\n        \n        // Envoyer un email de bienvenue\n        sendWelcomeEmail(username);\n    }\n\n    public void sendWelcomeEmail(String username) {\n        // Logique pour envoyer un email de bienvenue\n        System.out.println(\"Email envoyé à \" + username);\n    }\n}\n",[58123],{"type":30,"tag":1042,"props":58124,"children":58125},{"__ignoreMap":8},[58126,58145,58192,58199,58235,58242,58250,58271,58278,58285,58321,58329,58373,58380],{"type":30,"tag":1046,"props":58127,"children":58128},{"class":1048,"line":1049},[58129,58133,58137,58141],{"type":30,"tag":1046,"props":58130,"children":58131},{"style":1053},[58132],{"type":40,"value":1056},{"type":30,"tag":1046,"props":58134,"children":58135},{"style":1053},[58136],{"type":40,"value":1061},{"type":30,"tag":1046,"props":58138,"children":58139},{"style":1064},[58140],{"type":40,"value":48044},{"type":30,"tag":1046,"props":58142,"children":58143},{"style":1070},[58144],{"type":40,"value":1073},{"type":30,"tag":1046,"props":58146,"children":58147},{"class":1048,"line":675},[58148,58152,58156,58160,58164,58168,58172,58176,58180,58184,58188],{"type":30,"tag":1046,"props":58149,"children":58150},{"style":1053},[58151],{"type":40,"value":1130},{"type":30,"tag":1046,"props":58153,"children":58154},{"style":1053},[58155],{"type":40,"value":1135},{"type":30,"tag":1046,"props":58157,"children":58158},{"style":1138},[58159],{"type":40,"value":57525},{"type":30,"tag":1046,"props":58161,"children":58162},{"style":1070},[58163],{"type":40,"value":1146},{"type":30,"tag":1046,"props":58165,"children":58166},{"style":1084},[58167],{"type":40,"value":2882},{"type":30,"tag":1046,"props":58169,"children":58170},{"style":1153},[58171],{"type":40,"value":57538},{"type":30,"tag":1046,"props":58173,"children":58174},{"style":1070},[58175],{"type":40,"value":2891},{"type":30,"tag":1046,"props":58177,"children":58178},{"style":1084},[58179],{"type":40,"value":2067},{"type":30,"tag":1046,"props":58181,"children":58182},{"style":1153},[58183],{"type":40,"value":57551},{"type":30,"tag":1046,"props":58185,"children":58186},{"style":1070},[58187],{"type":40,"value":1161},{"type":30,"tag":1046,"props":58189,"children":58190},{"style":1070},[58191],{"type":40,"value":1073},{"type":30,"tag":1046,"props":58193,"children":58194},{"class":1048,"line":681},[58195],{"type":30,"tag":1046,"props":58196,"children":58197},{"style":3961},[58198],{"type":40,"value":57567},{"type":30,"tag":1046,"props":58200,"children":58201},{"class":1048,"line":1124},[58202,58206,58210,58214,58218,58222,58226,58231],{"type":30,"tag":1046,"props":58203,"children":58204},{"style":1105},[58205],{"type":40,"value":12555},{"type":30,"tag":1046,"props":58207,"children":58208},{"style":1070},[58209],{"type":40,"value":1179},{"type":30,"tag":1046,"props":58211,"children":58212},{"style":1105},[58213],{"type":40,"value":12564},{"type":30,"tag":1046,"props":58215,"children":58216},{"style":1070},[58217],{"type":40,"value":1179},{"type":30,"tag":1046,"props":58219,"children":58220},{"style":1138},[58221],{"type":40,"value":12573},{"type":30,"tag":1046,"props":58223,"children":58224},{"style":1070},[58225],{"type":40,"value":1146},{"type":30,"tag":1046,"props":58227,"children":58228},{"style":1675},[58229],{"type":40,"value":58230},"\"Utilisateur créé avec succès !\"",{"type":30,"tag":1046,"props":58232,"children":58233},{"style":1070},[58234],{"type":40,"value":1198},{"type":30,"tag":1046,"props":58236,"children":58237},{"class":1048,"line":1168},[58238],{"type":30,"tag":1046,"props":58239,"children":58240},{"style":1105},[58241],{"type":40,"value":19014},{"type":30,"tag":1046,"props":58243,"children":58244},{"class":1048,"line":1201},[58245],{"type":30,"tag":1046,"props":58246,"children":58247},{"style":3961},[58248],{"type":40,"value":58249},"        // Envoyer un email de bienvenue\n",{"type":30,"tag":1046,"props":58251,"children":58252},{"class":1048,"line":1210},[58253,58258,58262,58267],{"type":30,"tag":1046,"props":58254,"children":58255},{"style":1138},[58256],{"type":40,"value":58257},"        sendWelcomeEmail",{"type":30,"tag":1046,"props":58259,"children":58260},{"style":1070},[58261],{"type":40,"value":1146},{"type":30,"tag":1046,"props":58263,"children":58264},{"style":1105},[58265],{"type":40,"value":58266},"username",{"type":30,"tag":1046,"props":58268,"children":58269},{"style":1070},[58270],{"type":40,"value":1198},{"type":30,"tag":1046,"props":58272,"children":58273},{"class":1048,"line":1218},[58274],{"type":30,"tag":1046,"props":58275,"children":58276},{"style":1070},[58277],{"type":40,"value":1207},{"type":30,"tag":1046,"props":58279,"children":58280},{"class":1048,"line":1255},[58281],{"type":30,"tag":1046,"props":58282,"children":58283},{"emptyLinePlaceholder":13},[58284],{"type":40,"value":1121},{"type":30,"tag":1046,"props":58286,"children":58287},{"class":1048,"line":1284},[58288,58292,58296,58301,58305,58309,58313,58317],{"type":30,"tag":1046,"props":58289,"children":58290},{"style":1053},[58291],{"type":40,"value":1130},{"type":30,"tag":1046,"props":58293,"children":58294},{"style":1053},[58295],{"type":40,"value":1135},{"type":30,"tag":1046,"props":58297,"children":58298},{"style":1138},[58299],{"type":40,"value":58300}," sendWelcomeEmail",{"type":30,"tag":1046,"props":58302,"children":58303},{"style":1070},[58304],{"type":40,"value":1146},{"type":30,"tag":1046,"props":58306,"children":58307},{"style":1084},[58308],{"type":40,"value":2882},{"type":30,"tag":1046,"props":58310,"children":58311},{"style":1153},[58312],{"type":40,"value":57538},{"type":30,"tag":1046,"props":58314,"children":58315},{"style":1070},[58316],{"type":40,"value":1161},{"type":30,"tag":1046,"props":58318,"children":58319},{"style":1070},[58320],{"type":40,"value":1073},{"type":30,"tag":1046,"props":58322,"children":58323},{"class":1048,"line":1292},[58324],{"type":30,"tag":1046,"props":58325,"children":58326},{"style":3961},[58327],{"type":40,"value":58328},"        // Logique pour envoyer un email de bienvenue\n",{"type":30,"tag":1046,"props":58330,"children":58331},{"class":1048,"line":1300},[58332,58336,58340,58344,58348,58352,58356,58361,58365,58369],{"type":30,"tag":1046,"props":58333,"children":58334},{"style":1105},[58335],{"type":40,"value":12555},{"type":30,"tag":1046,"props":58337,"children":58338},{"style":1070},[58339],{"type":40,"value":1179},{"type":30,"tag":1046,"props":58341,"children":58342},{"style":1105},[58343],{"type":40,"value":12564},{"type":30,"tag":1046,"props":58345,"children":58346},{"style":1070},[58347],{"type":40,"value":1179},{"type":30,"tag":1046,"props":58349,"children":58350},{"style":1138},[58351],{"type":40,"value":12573},{"type":30,"tag":1046,"props":58353,"children":58354},{"style":1070},[58355],{"type":40,"value":1146},{"type":30,"tag":1046,"props":58357,"children":58358},{"style":1675},[58359],{"type":40,"value":58360},"\"Email envoyé à \"",{"type":30,"tag":1046,"props":58362,"children":58363},{"style":1795},[58364],{"type":40,"value":7261},{"type":30,"tag":1046,"props":58366,"children":58367},{"style":1105},[58368],{"type":40,"value":57538},{"type":30,"tag":1046,"props":58370,"children":58371},{"style":1070},[58372],{"type":40,"value":1198},{"type":30,"tag":1046,"props":58374,"children":58375},{"class":1048,"line":1327},[58376],{"type":30,"tag":1046,"props":58377,"children":58378},{"style":1070},[58379],{"type":40,"value":1207},{"type":30,"tag":1046,"props":58381,"children":58382},{"class":1048,"line":1354},[58383],{"type":30,"tag":1046,"props":58384,"children":58385},{"style":1070},[58386],{"type":40,"value":1423},{"type":30,"tag":43,"props":58388,"children":58389},{},[58390],{"type":40,"value":58391},"Cette classe gère deux responsabilités : la création d'utilisateur et l'envoi d'emails. En suivant le SRP, nous devrions séparer ces responsabilités dans deux classes distinctes.",{"type":30,"tag":1035,"props":58393,"children":58395},{"className":1039,"code":58394,"language":1038,"meta":8,"style":8},"public class UserService {\n    private EmailService emailService;\n\n    public UserService(EmailService emailService) {\n        this.emailService = emailService;\n    }\n\n    public void createUser(String username, String password) {\n        // Logique pour créer un utilisateur\n        System.out.println(\"Utilisateur créé avec succès !\");\n        \n        // Utilisation de l'EmailService pour envoyer l'email\n        emailService.sendWelcomeEmail(username);\n    }\n}\n\npublic class EmailService {\n    public void sendWelcomeEmail(String username) {\n        // Logique pour envoyer un email de bienvenue\n        System.out.println(\"Email envoyé à \" + username);\n    }\n}\n",[58396],{"type":30,"tag":1042,"props":58397,"children":58398},{"__ignoreMap":8},[58399,58418,58437,58444,58475,58502,58509,58516,58563,58570,58605,58612,58620,58648,58655,58662,58669,58688,58723,58730,58773,58780],{"type":30,"tag":1046,"props":58400,"children":58401},{"class":1048,"line":1049},[58402,58406,58410,58414],{"type":30,"tag":1046,"props":58403,"children":58404},{"style":1053},[58405],{"type":40,"value":1056},{"type":30,"tag":1046,"props":58407,"children":58408},{"style":1053},[58409],{"type":40,"value":1061},{"type":30,"tag":1046,"props":58411,"children":58412},{"style":1064},[58413],{"type":40,"value":48044},{"type":30,"tag":1046,"props":58415,"children":58416},{"style":1070},[58417],{"type":40,"value":1073},{"type":30,"tag":1046,"props":58419,"children":58420},{"class":1048,"line":675},[58421,58425,58429,58433],{"type":30,"tag":1046,"props":58422,"children":58423},{"style":1053},[58424],{"type":40,"value":1081},{"type":30,"tag":1046,"props":58426,"children":58427},{"style":1084},[58428],{"type":40,"value":39515},{"type":30,"tag":1046,"props":58430,"children":58431},{"style":1105},[58432],{"type":40,"value":39655},{"type":30,"tag":1046,"props":58434,"children":58435},{"style":1070},[58436],{"type":40,"value":1113},{"type":30,"tag":1046,"props":58438,"children":58439},{"class":1048,"line":681},[58440],{"type":30,"tag":1046,"props":58441,"children":58442},{"emptyLinePlaceholder":13},[58443],{"type":40,"value":1121},{"type":30,"tag":1046,"props":58445,"children":58446},{"class":1048,"line":1124},[58447,58451,58455,58459,58463,58467,58471],{"type":30,"tag":1046,"props":58448,"children":58449},{"style":1053},[58450],{"type":40,"value":1130},{"type":30,"tag":1046,"props":58452,"children":58453},{"style":1138},[58454],{"type":40,"value":48044},{"type":30,"tag":1046,"props":58456,"children":58457},{"style":1070},[58458],{"type":40,"value":1146},{"type":30,"tag":1046,"props":58460,"children":58461},{"style":1084},[58462],{"type":40,"value":39491},{"type":30,"tag":1046,"props":58464,"children":58465},{"style":1153},[58466],{"type":40,"value":39655},{"type":30,"tag":1046,"props":58468,"children":58469},{"style":1070},[58470],{"type":40,"value":1161},{"type":30,"tag":1046,"props":58472,"children":58473},{"style":1070},[58474],{"type":40,"value":1073},{"type":30,"tag":1046,"props":58476,"children":58477},{"class":1048,"line":1168},[58478,58482,58486,58490,58494,58498],{"type":30,"tag":1046,"props":58479,"children":58480},{"style":1780},[58481],{"type":40,"value":1783},{"type":30,"tag":1046,"props":58483,"children":58484},{"style":1070},[58485],{"type":40,"value":1179},{"type":30,"tag":1046,"props":58487,"children":58488},{"style":1105},[58489],{"type":40,"value":39701},{"type":30,"tag":1046,"props":58491,"children":58492},{"style":1795},[58493],{"type":40,"value":1798},{"type":30,"tag":1046,"props":58495,"children":58496},{"style":1105},[58497],{"type":40,"value":39655},{"type":30,"tag":1046,"props":58499,"children":58500},{"style":1070},[58501],{"type":40,"value":1113},{"type":30,"tag":1046,"props":58503,"children":58504},{"class":1048,"line":1201},[58505],{"type":30,"tag":1046,"props":58506,"children":58507},{"style":1070},[58508],{"type":40,"value":1207},{"type":30,"tag":1046,"props":58510,"children":58511},{"class":1048,"line":1210},[58512],{"type":30,"tag":1046,"props":58513,"children":58514},{"emptyLinePlaceholder":13},[58515],{"type":40,"value":1121},{"type":30,"tag":1046,"props":58517,"children":58518},{"class":1048,"line":1218},[58519,58523,58527,58531,58535,58539,58543,58547,58551,58555,58559],{"type":30,"tag":1046,"props":58520,"children":58521},{"style":1053},[58522],{"type":40,"value":1130},{"type":30,"tag":1046,"props":58524,"children":58525},{"style":1053},[58526],{"type":40,"value":1135},{"type":30,"tag":1046,"props":58528,"children":58529},{"style":1138},[58530],{"type":40,"value":57525},{"type":30,"tag":1046,"props":58532,"children":58533},{"style":1070},[58534],{"type":40,"value":1146},{"type":30,"tag":1046,"props":58536,"children":58537},{"style":1084},[58538],{"type":40,"value":2882},{"type":30,"tag":1046,"props":58540,"children":58541},{"style":1153},[58542],{"type":40,"value":57538},{"type":30,"tag":1046,"props":58544,"children":58545},{"style":1070},[58546],{"type":40,"value":2891},{"type":30,"tag":1046,"props":58548,"children":58549},{"style":1084},[58550],{"type":40,"value":2067},{"type":30,"tag":1046,"props":58552,"children":58553},{"style":1153},[58554],{"type":40,"value":57551},{"type":30,"tag":1046,"props":58556,"children":58557},{"style":1070},[58558],{"type":40,"value":1161},{"type":30,"tag":1046,"props":58560,"children":58561},{"style":1070},[58562],{"type":40,"value":1073},{"type":30,"tag":1046,"props":58564,"children":58565},{"class":1048,"line":1255},[58566],{"type":30,"tag":1046,"props":58567,"children":58568},{"style":3961},[58569],{"type":40,"value":57567},{"type":30,"tag":1046,"props":58571,"children":58572},{"class":1048,"line":1284},[58573,58577,58581,58585,58589,58593,58597,58601],{"type":30,"tag":1046,"props":58574,"children":58575},{"style":1105},[58576],{"type":40,"value":12555},{"type":30,"tag":1046,"props":58578,"children":58579},{"style":1070},[58580],{"type":40,"value":1179},{"type":30,"tag":1046,"props":58582,"children":58583},{"style":1105},[58584],{"type":40,"value":12564},{"type":30,"tag":1046,"props":58586,"children":58587},{"style":1070},[58588],{"type":40,"value":1179},{"type":30,"tag":1046,"props":58590,"children":58591},{"style":1138},[58592],{"type":40,"value":12573},{"type":30,"tag":1046,"props":58594,"children":58595},{"style":1070},[58596],{"type":40,"value":1146},{"type":30,"tag":1046,"props":58598,"children":58599},{"style":1675},[58600],{"type":40,"value":58230},{"type":30,"tag":1046,"props":58602,"children":58603},{"style":1070},[58604],{"type":40,"value":1198},{"type":30,"tag":1046,"props":58606,"children":58607},{"class":1048,"line":1292},[58608],{"type":30,"tag":1046,"props":58609,"children":58610},{"style":1105},[58611],{"type":40,"value":19014},{"type":30,"tag":1046,"props":58613,"children":58614},{"class":1048,"line":1300},[58615],{"type":30,"tag":1046,"props":58616,"children":58617},{"style":3961},[58618],{"type":40,"value":58619},"        // Utilisation de l'EmailService pour envoyer l'email\n",{"type":30,"tag":1046,"props":58621,"children":58622},{"class":1048,"line":1327},[58623,58627,58631,58636,58640,58644],{"type":30,"tag":1046,"props":58624,"children":58625},{"style":1105},[58626],{"type":40,"value":39775},{"type":30,"tag":1046,"props":58628,"children":58629},{"style":1070},[58630],{"type":40,"value":1179},{"type":30,"tag":1046,"props":58632,"children":58633},{"style":1138},[58634],{"type":40,"value":58635},"sendWelcomeEmail",{"type":30,"tag":1046,"props":58637,"children":58638},{"style":1070},[58639],{"type":40,"value":1146},{"type":30,"tag":1046,"props":58641,"children":58642},{"style":1105},[58643],{"type":40,"value":58266},{"type":30,"tag":1046,"props":58645,"children":58646},{"style":1070},[58647],{"type":40,"value":1198},{"type":30,"tag":1046,"props":58649,"children":58650},{"class":1048,"line":1354},[58651],{"type":30,"tag":1046,"props":58652,"children":58653},{"style":1070},[58654],{"type":40,"value":1207},{"type":30,"tag":1046,"props":58656,"children":58657},{"class":1048,"line":1391},[58658],{"type":30,"tag":1046,"props":58659,"children":58660},{"style":1070},[58661],{"type":40,"value":1423},{"type":30,"tag":1046,"props":58663,"children":58664},{"class":1048,"line":1409},[58665],{"type":30,"tag":1046,"props":58666,"children":58667},{"emptyLinePlaceholder":13},[58668],{"type":40,"value":1121},{"type":30,"tag":1046,"props":58670,"children":58671},{"class":1048,"line":1417},[58672,58676,58680,58684],{"type":30,"tag":1046,"props":58673,"children":58674},{"style":1053},[58675],{"type":40,"value":1056},{"type":30,"tag":1046,"props":58677,"children":58678},{"style":1053},[58679],{"type":40,"value":1061},{"type":30,"tag":1046,"props":58681,"children":58682},{"style":1064},[58683],{"type":40,"value":39515},{"type":30,"tag":1046,"props":58685,"children":58686},{"style":1070},[58687],{"type":40,"value":1073},{"type":30,"tag":1046,"props":58689,"children":58690},{"class":1048,"line":2023},[58691,58695,58699,58703,58707,58711,58715,58719],{"type":30,"tag":1046,"props":58692,"children":58693},{"style":1053},[58694],{"type":40,"value":1130},{"type":30,"tag":1046,"props":58696,"children":58697},{"style":1053},[58698],{"type":40,"value":1135},{"type":30,"tag":1046,"props":58700,"children":58701},{"style":1138},[58702],{"type":40,"value":58300},{"type":30,"tag":1046,"props":58704,"children":58705},{"style":1070},[58706],{"type":40,"value":1146},{"type":30,"tag":1046,"props":58708,"children":58709},{"style":1084},[58710],{"type":40,"value":2882},{"type":30,"tag":1046,"props":58712,"children":58713},{"style":1153},[58714],{"type":40,"value":57538},{"type":30,"tag":1046,"props":58716,"children":58717},{"style":1070},[58718],{"type":40,"value":1161},{"type":30,"tag":1046,"props":58720,"children":58721},{"style":1070},[58722],{"type":40,"value":1073},{"type":30,"tag":1046,"props":58724,"children":58725},{"class":1048,"line":2083},[58726],{"type":30,"tag":1046,"props":58727,"children":58728},{"style":3961},[58729],{"type":40,"value":58328},{"type":30,"tag":1046,"props":58731,"children":58732},{"class":1048,"line":2126},[58733,58737,58741,58745,58749,58753,58757,58761,58765,58769],{"type":30,"tag":1046,"props":58734,"children":58735},{"style":1105},[58736],{"type":40,"value":12555},{"type":30,"tag":1046,"props":58738,"children":58739},{"style":1070},[58740],{"type":40,"value":1179},{"type":30,"tag":1046,"props":58742,"children":58743},{"style":1105},[58744],{"type":40,"value":12564},{"type":30,"tag":1046,"props":58746,"children":58747},{"style":1070},[58748],{"type":40,"value":1179},{"type":30,"tag":1046,"props":58750,"children":58751},{"style":1138},[58752],{"type":40,"value":12573},{"type":30,"tag":1046,"props":58754,"children":58755},{"style":1070},[58756],{"type":40,"value":1146},{"type":30,"tag":1046,"props":58758,"children":58759},{"style":1675},[58760],{"type":40,"value":58360},{"type":30,"tag":1046,"props":58762,"children":58763},{"style":1795},[58764],{"type":40,"value":7261},{"type":30,"tag":1046,"props":58766,"children":58767},{"style":1105},[58768],{"type":40,"value":57538},{"type":30,"tag":1046,"props":58770,"children":58771},{"style":1070},[58772],{"type":40,"value":1198},{"type":30,"tag":1046,"props":58774,"children":58775},{"class":1048,"line":2159},[58776],{"type":30,"tag":1046,"props":58777,"children":58778},{"style":1070},[58779],{"type":40,"value":1207},{"type":30,"tag":1046,"props":58781,"children":58782},{"class":1048,"line":2167},[58783],{"type":30,"tag":1046,"props":58784,"children":58785},{"style":1070},[58786],{"type":40,"value":1423},{"type":30,"tag":2339,"props":58788,"children":58790},{"id":58789},"exemple-2-traitement-des-paiements",[58791],{"type":40,"value":58792},"Exemple 2 : Traitement des paiements",{"type":30,"tag":43,"props":58794,"children":58795},{},[58796,58798,58803],{"type":40,"value":58797},"Prenons l’exemple d’une classe ",{"type":30,"tag":1042,"props":58799,"children":58801},{"className":58800},[],[58802],{"type":40,"value":35943},{"type":40,"value":58804}," qui viole le SRP en gérant à la fois le traitement des paiements et l’envoi des reçus.",{"type":30,"tag":1035,"props":58806,"children":58808},{"className":1039,"code":58807,"language":1038,"meta":8,"style":8},"public class PaymentProcessor {\n    public void processPayment(String creditCard, double amount) {\n        // Logique pour traiter le paiement\n        System.out.println(\"Paiement de \" + amount + \"€ traité avec la carte \" + creditCard);\n\n        // Envoyer un reçu par email\n        sendReceipt(creditCard, amount);\n    }\n\n    private void sendReceipt(String creditCard, double amount) {\n        // Logique pour envoyer un reçu\n        System.out.println(\"Reçu envoyé pour un paiement de \" + amount + \"€.\");\n    }\n}\n",[58809],{"type":30,"tag":1042,"props":58810,"children":58811},{"__ignoreMap":8},[58812,58831,58879,58886,58948,58955,58963,58991,58998,59005,59053,59061,59114,59121],{"type":30,"tag":1046,"props":58813,"children":58814},{"class":1048,"line":1049},[58815,58819,58823,58827],{"type":30,"tag":1046,"props":58816,"children":58817},{"style":1053},[58818],{"type":40,"value":1056},{"type":30,"tag":1046,"props":58820,"children":58821},{"style":1053},[58822],{"type":40,"value":1061},{"type":30,"tag":1046,"props":58824,"children":58825},{"style":1064},[58826],{"type":40,"value":35968},{"type":30,"tag":1046,"props":58828,"children":58829},{"style":1070},[58830],{"type":40,"value":1073},{"type":30,"tag":1046,"props":58832,"children":58833},{"class":1048,"line":675},[58834,58838,58842,58846,58850,58854,58859,58863,58867,58871,58875],{"type":30,"tag":1046,"props":58835,"children":58836},{"style":1053},[58837],{"type":40,"value":1130},{"type":30,"tag":1046,"props":58839,"children":58840},{"style":1053},[58841],{"type":40,"value":1135},{"type":30,"tag":1046,"props":58843,"children":58844},{"style":1138},[58845],{"type":40,"value":20317},{"type":30,"tag":1046,"props":58847,"children":58848},{"style":1070},[58849],{"type":40,"value":1146},{"type":30,"tag":1046,"props":58851,"children":58852},{"style":1084},[58853],{"type":40,"value":2882},{"type":30,"tag":1046,"props":58855,"children":58856},{"style":1153},[58857],{"type":40,"value":58858}," creditCard",{"type":30,"tag":1046,"props":58860,"children":58861},{"style":1070},[58862],{"type":40,"value":2891},{"type":30,"tag":1046,"props":58864,"children":58865},{"style":1053},[58866],{"type":40,"value":1310},{"type":30,"tag":1046,"props":58868,"children":58869},{"style":1153},[58870],{"type":40,"value":25180},{"type":30,"tag":1046,"props":58872,"children":58873},{"style":1070},[58874],{"type":40,"value":1161},{"type":30,"tag":1046,"props":58876,"children":58877},{"style":1070},[58878],{"type":40,"value":1073},{"type":30,"tag":1046,"props":58880,"children":58881},{"class":1048,"line":681},[58882],{"type":30,"tag":1046,"props":58883,"children":58884},{"style":3961},[58885],{"type":40,"value":27273},{"type":30,"tag":1046,"props":58887,"children":58888},{"class":1048,"line":1124},[58889,58893,58897,58901,58905,58909,58913,58918,58922,58927,58931,58936,58940,58944],{"type":30,"tag":1046,"props":58890,"children":58891},{"style":1105},[58892],{"type":40,"value":12555},{"type":30,"tag":1046,"props":58894,"children":58895},{"style":1070},[58896],{"type":40,"value":1179},{"type":30,"tag":1046,"props":58898,"children":58899},{"style":1105},[58900],{"type":40,"value":12564},{"type":30,"tag":1046,"props":58902,"children":58903},{"style":1070},[58904],{"type":40,"value":1179},{"type":30,"tag":1046,"props":58906,"children":58907},{"style":1138},[58908],{"type":40,"value":12573},{"type":30,"tag":1046,"props":58910,"children":58911},{"style":1070},[58912],{"type":40,"value":1146},{"type":30,"tag":1046,"props":58914,"children":58915},{"style":1675},[58916],{"type":40,"value":58917},"\"Paiement de \"",{"type":30,"tag":1046,"props":58919,"children":58920},{"style":1795},[58921],{"type":40,"value":7261},{"type":30,"tag":1046,"props":58923,"children":58924},{"style":1105},[58925],{"type":40,"value":58926}," amount ",{"type":30,"tag":1046,"props":58928,"children":58929},{"style":1795},[58930],{"type":40,"value":12595},{"type":30,"tag":1046,"props":58932,"children":58933},{"style":1675},[58934],{"type":40,"value":58935}," \"€ traité avec la carte \"",{"type":30,"tag":1046,"props":58937,"children":58938},{"style":1795},[58939],{"type":40,"value":7261},{"type":30,"tag":1046,"props":58941,"children":58942},{"style":1105},[58943],{"type":40,"value":58858},{"type":30,"tag":1046,"props":58945,"children":58946},{"style":1070},[58947],{"type":40,"value":1198},{"type":30,"tag":1046,"props":58949,"children":58950},{"class":1048,"line":1168},[58951],{"type":30,"tag":1046,"props":58952,"children":58953},{"emptyLinePlaceholder":13},[58954],{"type":40,"value":1121},{"type":30,"tag":1046,"props":58956,"children":58957},{"class":1048,"line":1201},[58958],{"type":30,"tag":1046,"props":58959,"children":58960},{"style":3961},[58961],{"type":40,"value":58962},"        // Envoyer un reçu par email\n",{"type":30,"tag":1046,"props":58964,"children":58965},{"class":1048,"line":1210},[58966,58971,58975,58979,58983,58987],{"type":30,"tag":1046,"props":58967,"children":58968},{"style":1138},[58969],{"type":40,"value":58970},"        sendReceipt",{"type":30,"tag":1046,"props":58972,"children":58973},{"style":1070},[58974],{"type":40,"value":1146},{"type":30,"tag":1046,"props":58976,"children":58977},{"style":1105},[58978],{"type":40,"value":36969},{"type":30,"tag":1046,"props":58980,"children":58981},{"style":1070},[58982],{"type":40,"value":2891},{"type":30,"tag":1046,"props":58984,"children":58985},{"style":1105},[58986],{"type":40,"value":25180},{"type":30,"tag":1046,"props":58988,"children":58989},{"style":1070},[58990],{"type":40,"value":1198},{"type":30,"tag":1046,"props":58992,"children":58993},{"class":1048,"line":1218},[58994],{"type":30,"tag":1046,"props":58995,"children":58996},{"style":1070},[58997],{"type":40,"value":1207},{"type":30,"tag":1046,"props":58999,"children":59000},{"class":1048,"line":1255},[59001],{"type":30,"tag":1046,"props":59002,"children":59003},{"emptyLinePlaceholder":13},[59004],{"type":40,"value":1121},{"type":30,"tag":1046,"props":59006,"children":59007},{"class":1048,"line":1284},[59008,59012,59016,59021,59025,59029,59033,59037,59041,59045,59049],{"type":30,"tag":1046,"props":59009,"children":59010},{"style":1053},[59011],{"type":40,"value":1081},{"type":30,"tag":1046,"props":59013,"children":59014},{"style":1053},[59015],{"type":40,"value":1135},{"type":30,"tag":1046,"props":59017,"children":59018},{"style":1138},[59019],{"type":40,"value":59020}," sendReceipt",{"type":30,"tag":1046,"props":59022,"children":59023},{"style":1070},[59024],{"type":40,"value":1146},{"type":30,"tag":1046,"props":59026,"children":59027},{"style":1084},[59028],{"type":40,"value":2882},{"type":30,"tag":1046,"props":59030,"children":59031},{"style":1153},[59032],{"type":40,"value":58858},{"type":30,"tag":1046,"props":59034,"children":59035},{"style":1070},[59036],{"type":40,"value":2891},{"type":30,"tag":1046,"props":59038,"children":59039},{"style":1053},[59040],{"type":40,"value":1310},{"type":30,"tag":1046,"props":59042,"children":59043},{"style":1153},[59044],{"type":40,"value":25180},{"type":30,"tag":1046,"props":59046,"children":59047},{"style":1070},[59048],{"type":40,"value":1161},{"type":30,"tag":1046,"props":59050,"children":59051},{"style":1070},[59052],{"type":40,"value":1073},{"type":30,"tag":1046,"props":59054,"children":59055},{"class":1048,"line":1292},[59056],{"type":30,"tag":1046,"props":59057,"children":59058},{"style":3961},[59059],{"type":40,"value":59060},"        // Logique pour envoyer un reçu\n",{"type":30,"tag":1046,"props":59062,"children":59063},{"class":1048,"line":1300},[59064,59068,59072,59076,59080,59084,59088,59093,59097,59101,59105,59110],{"type":30,"tag":1046,"props":59065,"children":59066},{"style":1105},[59067],{"type":40,"value":12555},{"type":30,"tag":1046,"props":59069,"children":59070},{"style":1070},[59071],{"type":40,"value":1179},{"type":30,"tag":1046,"props":59073,"children":59074},{"style":1105},[59075],{"type":40,"value":12564},{"type":30,"tag":1046,"props":59077,"children":59078},{"style":1070},[59079],{"type":40,"value":1179},{"type":30,"tag":1046,"props":59081,"children":59082},{"style":1138},[59083],{"type":40,"value":12573},{"type":30,"tag":1046,"props":59085,"children":59086},{"style":1070},[59087],{"type":40,"value":1146},{"type":30,"tag":1046,"props":59089,"children":59090},{"style":1675},[59091],{"type":40,"value":59092},"\"Reçu envoyé pour un paiement de \"",{"type":30,"tag":1046,"props":59094,"children":59095},{"style":1795},[59096],{"type":40,"value":7261},{"type":30,"tag":1046,"props":59098,"children":59099},{"style":1105},[59100],{"type":40,"value":58926},{"type":30,"tag":1046,"props":59102,"children":59103},{"style":1795},[59104],{"type":40,"value":12595},{"type":30,"tag":1046,"props":59106,"children":59107},{"style":1675},[59108],{"type":40,"value":59109}," \"€.\"",{"type":30,"tag":1046,"props":59111,"children":59112},{"style":1070},[59113],{"type":40,"value":1198},{"type":30,"tag":1046,"props":59115,"children":59116},{"class":1048,"line":1327},[59117],{"type":30,"tag":1046,"props":59118,"children":59119},{"style":1070},[59120],{"type":40,"value":1207},{"type":30,"tag":1046,"props":59122,"children":59123},{"class":1048,"line":1354},[59124],{"type":30,"tag":1046,"props":59125,"children":59126},{"style":1070},[59127],{"type":40,"value":1423},{"type":30,"tag":43,"props":59129,"children":59130},{},[59131],{"type":40,"value":59132},"Ici, la classe gère deux responsabilités. En appliquant le SRP, on peut diviser cela en deux classes distinctes.",{"type":30,"tag":1035,"props":59134,"children":59136},{"className":1039,"code":59135,"language":1038,"meta":8,"style":8},"public class PaymentProcessor {\n    private ReceiptSender receiptSender;\n\n    public PaymentProcessor(ReceiptSender receiptSender) {\n        this.receiptSender = receiptSender;\n    }\n\n    public void processPayment(String creditCard, double amount) {\n        // Logique pour traiter le paiement\n        System.out.println(\"Paiement de \" + amount + \"€ traité avec la carte \" + creditCard);\n\n        // Utilisation de ReceiptSender pour envoyer le reçu\n        receiptSender.sendReceipt(creditCard, amount);\n    }\n}\n\npublic class ReceiptSender {\n    public void sendReceipt(String creditCard, double amount) {\n        // Logique pour envoyer un reçu\n        System.out.println(\"Reçu envoyé pour un paiement de \" + amount + \"€.\");\n    }\n}\n",[59137],{"type":30,"tag":1042,"props":59138,"children":59139},{"__ignoreMap":8},[59140,59159,59180,59187,59219,59247,59254,59261,59308,59315,59374,59381,59389,59426,59433,59440,59447,59466,59513,59520,59571,59578],{"type":30,"tag":1046,"props":59141,"children":59142},{"class":1048,"line":1049},[59143,59147,59151,59155],{"type":30,"tag":1046,"props":59144,"children":59145},{"style":1053},[59146],{"type":40,"value":1056},{"type":30,"tag":1046,"props":59148,"children":59149},{"style":1053},[59150],{"type":40,"value":1061},{"type":30,"tag":1046,"props":59152,"children":59153},{"style":1064},[59154],{"type":40,"value":35968},{"type":30,"tag":1046,"props":59156,"children":59157},{"style":1070},[59158],{"type":40,"value":1073},{"type":30,"tag":1046,"props":59160,"children":59161},{"class":1048,"line":675},[59162,59166,59171,59176],{"type":30,"tag":1046,"props":59163,"children":59164},{"style":1053},[59165],{"type":40,"value":1081},{"type":30,"tag":1046,"props":59167,"children":59168},{"style":1084},[59169],{"type":40,"value":59170}," ReceiptSender",{"type":30,"tag":1046,"props":59172,"children":59173},{"style":1105},[59174],{"type":40,"value":59175}," receiptSender",{"type":30,"tag":1046,"props":59177,"children":59178},{"style":1070},[59179],{"type":40,"value":1113},{"type":30,"tag":1046,"props":59181,"children":59182},{"class":1048,"line":681},[59183],{"type":30,"tag":1046,"props":59184,"children":59185},{"emptyLinePlaceholder":13},[59186],{"type":40,"value":1121},{"type":30,"tag":1046,"props":59188,"children":59189},{"class":1048,"line":1124},[59190,59194,59198,59202,59207,59211,59215],{"type":30,"tag":1046,"props":59191,"children":59192},{"style":1053},[59193],{"type":40,"value":1130},{"type":30,"tag":1046,"props":59195,"children":59196},{"style":1138},[59197],{"type":40,"value":35968},{"type":30,"tag":1046,"props":59199,"children":59200},{"style":1070},[59201],{"type":40,"value":1146},{"type":30,"tag":1046,"props":59203,"children":59204},{"style":1084},[59205],{"type":40,"value":59206},"ReceiptSender",{"type":30,"tag":1046,"props":59208,"children":59209},{"style":1153},[59210],{"type":40,"value":59175},{"type":30,"tag":1046,"props":59212,"children":59213},{"style":1070},[59214],{"type":40,"value":1161},{"type":30,"tag":1046,"props":59216,"children":59217},{"style":1070},[59218],{"type":40,"value":1073},{"type":30,"tag":1046,"props":59220,"children":59221},{"class":1048,"line":1168},[59222,59226,59230,59235,59239,59243],{"type":30,"tag":1046,"props":59223,"children":59224},{"style":1780},[59225],{"type":40,"value":1783},{"type":30,"tag":1046,"props":59227,"children":59228},{"style":1070},[59229],{"type":40,"value":1179},{"type":30,"tag":1046,"props":59231,"children":59232},{"style":1105},[59233],{"type":40,"value":59234},"receiptSender ",{"type":30,"tag":1046,"props":59236,"children":59237},{"style":1795},[59238],{"type":40,"value":1798},{"type":30,"tag":1046,"props":59240,"children":59241},{"style":1105},[59242],{"type":40,"value":59175},{"type":30,"tag":1046,"props":59244,"children":59245},{"style":1070},[59246],{"type":40,"value":1113},{"type":30,"tag":1046,"props":59248,"children":59249},{"class":1048,"line":1201},[59250],{"type":30,"tag":1046,"props":59251,"children":59252},{"style":1070},[59253],{"type":40,"value":1207},{"type":30,"tag":1046,"props":59255,"children":59256},{"class":1048,"line":1210},[59257],{"type":30,"tag":1046,"props":59258,"children":59259},{"emptyLinePlaceholder":13},[59260],{"type":40,"value":1121},{"type":30,"tag":1046,"props":59262,"children":59263},{"class":1048,"line":1218},[59264,59268,59272,59276,59280,59284,59288,59292,59296,59300,59304],{"type":30,"tag":1046,"props":59265,"children":59266},{"style":1053},[59267],{"type":40,"value":1130},{"type":30,"tag":1046,"props":59269,"children":59270},{"style":1053},[59271],{"type":40,"value":1135},{"type":30,"tag":1046,"props":59273,"children":59274},{"style":1138},[59275],{"type":40,"value":20317},{"type":30,"tag":1046,"props":59277,"children":59278},{"style":1070},[59279],{"type":40,"value":1146},{"type":30,"tag":1046,"props":59281,"children":59282},{"style":1084},[59283],{"type":40,"value":2882},{"type":30,"tag":1046,"props":59285,"children":59286},{"style":1153},[59287],{"type":40,"value":58858},{"type":30,"tag":1046,"props":59289,"children":59290},{"style":1070},[59291],{"type":40,"value":2891},{"type":30,"tag":1046,"props":59293,"children":59294},{"style":1053},[59295],{"type":40,"value":1310},{"type":30,"tag":1046,"props":59297,"children":59298},{"style":1153},[59299],{"type":40,"value":25180},{"type":30,"tag":1046,"props":59301,"children":59302},{"style":1070},[59303],{"type":40,"value":1161},{"type":30,"tag":1046,"props":59305,"children":59306},{"style":1070},[59307],{"type":40,"value":1073},{"type":30,"tag":1046,"props":59309,"children":59310},{"class":1048,"line":1255},[59311],{"type":30,"tag":1046,"props":59312,"children":59313},{"style":3961},[59314],{"type":40,"value":27273},{"type":30,"tag":1046,"props":59316,"children":59317},{"class":1048,"line":1284},[59318,59322,59326,59330,59334,59338,59342,59346,59350,59354,59358,59362,59366,59370],{"type":30,"tag":1046,"props":59319,"children":59320},{"style":1105},[59321],{"type":40,"value":12555},{"type":30,"tag":1046,"props":59323,"children":59324},{"style":1070},[59325],{"type":40,"value":1179},{"type":30,"tag":1046,"props":59327,"children":59328},{"style":1105},[59329],{"type":40,"value":12564},{"type":30,"tag":1046,"props":59331,"children":59332},{"style":1070},[59333],{"type":40,"value":1179},{"type":30,"tag":1046,"props":59335,"children":59336},{"style":1138},[59337],{"type":40,"value":12573},{"type":30,"tag":1046,"props":59339,"children":59340},{"style":1070},[59341],{"type":40,"value":1146},{"type":30,"tag":1046,"props":59343,"children":59344},{"style":1675},[59345],{"type":40,"value":58917},{"type":30,"tag":1046,"props":59347,"children":59348},{"style":1795},[59349],{"type":40,"value":7261},{"type":30,"tag":1046,"props":59351,"children":59352},{"style":1105},[59353],{"type":40,"value":58926},{"type":30,"tag":1046,"props":59355,"children":59356},{"style":1795},[59357],{"type":40,"value":12595},{"type":30,"tag":1046,"props":59359,"children":59360},{"style":1675},[59361],{"type":40,"value":58935},{"type":30,"tag":1046,"props":59363,"children":59364},{"style":1795},[59365],{"type":40,"value":7261},{"type":30,"tag":1046,"props":59367,"children":59368},{"style":1105},[59369],{"type":40,"value":58858},{"type":30,"tag":1046,"props":59371,"children":59372},{"style":1070},[59373],{"type":40,"value":1198},{"type":30,"tag":1046,"props":59375,"children":59376},{"class":1048,"line":1292},[59377],{"type":30,"tag":1046,"props":59378,"children":59379},{"emptyLinePlaceholder":13},[59380],{"type":40,"value":1121},{"type":30,"tag":1046,"props":59382,"children":59383},{"class":1048,"line":1300},[59384],{"type":30,"tag":1046,"props":59385,"children":59386},{"style":3961},[59387],{"type":40,"value":59388},"        // Utilisation de ReceiptSender pour envoyer le reçu\n",{"type":30,"tag":1046,"props":59390,"children":59391},{"class":1048,"line":1327},[59392,59397,59401,59406,59410,59414,59418,59422],{"type":30,"tag":1046,"props":59393,"children":59394},{"style":1105},[59395],{"type":40,"value":59396},"        receiptSender",{"type":30,"tag":1046,"props":59398,"children":59399},{"style":1070},[59400],{"type":40,"value":1179},{"type":30,"tag":1046,"props":59402,"children":59403},{"style":1138},[59404],{"type":40,"value":59405},"sendReceipt",{"type":30,"tag":1046,"props":59407,"children":59408},{"style":1070},[59409],{"type":40,"value":1146},{"type":30,"tag":1046,"props":59411,"children":59412},{"style":1105},[59413],{"type":40,"value":36969},{"type":30,"tag":1046,"props":59415,"children":59416},{"style":1070},[59417],{"type":40,"value":2891},{"type":30,"tag":1046,"props":59419,"children":59420},{"style":1105},[59421],{"type":40,"value":25180},{"type":30,"tag":1046,"props":59423,"children":59424},{"style":1070},[59425],{"type":40,"value":1198},{"type":30,"tag":1046,"props":59427,"children":59428},{"class":1048,"line":1354},[59429],{"type":30,"tag":1046,"props":59430,"children":59431},{"style":1070},[59432],{"type":40,"value":1207},{"type":30,"tag":1046,"props":59434,"children":59435},{"class":1048,"line":1391},[59436],{"type":30,"tag":1046,"props":59437,"children":59438},{"style":1070},[59439],{"type":40,"value":1423},{"type":30,"tag":1046,"props":59441,"children":59442},{"class":1048,"line":1409},[59443],{"type":30,"tag":1046,"props":59444,"children":59445},{"emptyLinePlaceholder":13},[59446],{"type":40,"value":1121},{"type":30,"tag":1046,"props":59448,"children":59449},{"class":1048,"line":1417},[59450,59454,59458,59462],{"type":30,"tag":1046,"props":59451,"children":59452},{"style":1053},[59453],{"type":40,"value":1056},{"type":30,"tag":1046,"props":59455,"children":59456},{"style":1053},[59457],{"type":40,"value":1061},{"type":30,"tag":1046,"props":59459,"children":59460},{"style":1064},[59461],{"type":40,"value":59170},{"type":30,"tag":1046,"props":59463,"children":59464},{"style":1070},[59465],{"type":40,"value":1073},{"type":30,"tag":1046,"props":59467,"children":59468},{"class":1048,"line":2023},[59469,59473,59477,59481,59485,59489,59493,59497,59501,59505,59509],{"type":30,"tag":1046,"props":59470,"children":59471},{"style":1053},[59472],{"type":40,"value":1130},{"type":30,"tag":1046,"props":59474,"children":59475},{"style":1053},[59476],{"type":40,"value":1135},{"type":30,"tag":1046,"props":59478,"children":59479},{"style":1138},[59480],{"type":40,"value":59020},{"type":30,"tag":1046,"props":59482,"children":59483},{"style":1070},[59484],{"type":40,"value":1146},{"type":30,"tag":1046,"props":59486,"children":59487},{"style":1084},[59488],{"type":40,"value":2882},{"type":30,"tag":1046,"props":59490,"children":59491},{"style":1153},[59492],{"type":40,"value":58858},{"type":30,"tag":1046,"props":59494,"children":59495},{"style":1070},[59496],{"type":40,"value":2891},{"type":30,"tag":1046,"props":59498,"children":59499},{"style":1053},[59500],{"type":40,"value":1310},{"type":30,"tag":1046,"props":59502,"children":59503},{"style":1153},[59504],{"type":40,"value":25180},{"type":30,"tag":1046,"props":59506,"children":59507},{"style":1070},[59508],{"type":40,"value":1161},{"type":30,"tag":1046,"props":59510,"children":59511},{"style":1070},[59512],{"type":40,"value":1073},{"type":30,"tag":1046,"props":59514,"children":59515},{"class":1048,"line":2083},[59516],{"type":30,"tag":1046,"props":59517,"children":59518},{"style":3961},[59519],{"type":40,"value":59060},{"type":30,"tag":1046,"props":59521,"children":59522},{"class":1048,"line":2126},[59523,59527,59531,59535,59539,59543,59547,59551,59555,59559,59563,59567],{"type":30,"tag":1046,"props":59524,"children":59525},{"style":1105},[59526],{"type":40,"value":12555},{"type":30,"tag":1046,"props":59528,"children":59529},{"style":1070},[59530],{"type":40,"value":1179},{"type":30,"tag":1046,"props":59532,"children":59533},{"style":1105},[59534],{"type":40,"value":12564},{"type":30,"tag":1046,"props":59536,"children":59537},{"style":1070},[59538],{"type":40,"value":1179},{"type":30,"tag":1046,"props":59540,"children":59541},{"style":1138},[59542],{"type":40,"value":12573},{"type":30,"tag":1046,"props":59544,"children":59545},{"style":1070},[59546],{"type":40,"value":1146},{"type":30,"tag":1046,"props":59548,"children":59549},{"style":1675},[59550],{"type":40,"value":59092},{"type":30,"tag":1046,"props":59552,"children":59553},{"style":1795},[59554],{"type":40,"value":7261},{"type":30,"tag":1046,"props":59556,"children":59557},{"style":1105},[59558],{"type":40,"value":58926},{"type":30,"tag":1046,"props":59560,"children":59561},{"style":1795},[59562],{"type":40,"value":12595},{"type":30,"tag":1046,"props":59564,"children":59565},{"style":1675},[59566],{"type":40,"value":59109},{"type":30,"tag":1046,"props":59568,"children":59569},{"style":1070},[59570],{"type":40,"value":1198},{"type":30,"tag":1046,"props":59572,"children":59573},{"class":1048,"line":2159},[59574],{"type":30,"tag":1046,"props":59575,"children":59576},{"style":1070},[59577],{"type":40,"value":1207},{"type":30,"tag":1046,"props":59579,"children":59580},{"class":1048,"line":2167},[59581],{"type":30,"tag":1046,"props":59582,"children":59583},{"style":1070},[59584],{"type":40,"value":1423},{"type":30,"tag":84,"props":59586,"children":59587},{},[],{"type":30,"tag":31,"props":59589,"children":59591},{"id":59590},"les-avantages-pratiques-du-srp",[59592],{"type":40,"value":59593},"Les avantages pratiques du SRP",{"type":30,"tag":43,"props":59595,"children":59596},{},[59597],{"type":40,"value":59598},"Appliquer le SRP apporte plusieurs avantages concrets :",{"type":30,"tag":163,"props":59600,"children":59601},{},[59602,59612,59622,59632,59642],{"type":30,"tag":167,"props":59603,"children":59604},{},[59605,59610],{"type":30,"tag":36,"props":59606,"children":59607},{},[59608],{"type":40,"value":59609},"Amélioration de la lisibilité du code",{"type":40,"value":59611}," : Chaque classe est responsable d'une seule tâche, ce qui simplifie la compréhension du code.",{"type":30,"tag":167,"props":59613,"children":59614},{},[59615,59620],{"type":30,"tag":36,"props":59616,"children":59617},{},[59618],{"type":40,"value":59619},"Facilité de maintenance et évolutions",{"type":40,"value":59621}," : Vous pouvez modifier une fonctionnalité sans impacter d'autres parties du code.",{"type":30,"tag":167,"props":59623,"children":59624},{},[59625,59630],{"type":30,"tag":36,"props":59626,"children":59627},{},[59628],{"type":40,"value":59629},"Tests unitaires plus simples",{"type":40,"value":59631}," : Avec des responsabilités uniques, les classes sont plus faciles à tester.",{"type":30,"tag":167,"props":59633,"children":59634},{},[59635,59640],{"type":30,"tag":36,"props":59636,"children":59637},{},[59638],{"type":40,"value":59639},"Réduction du couplage",{"type":40,"value":59641}," : Le découpage des responsabilités réduit les dépendances entre les composants.",{"type":30,"tag":167,"props":59643,"children":59644},{},[59645,59650],{"type":30,"tag":36,"props":59646,"children":59647},{},[59648],{"type":40,"value":59649},"Réutilisabilité accrue",{"type":40,"value":59651}," : Des classes spécialisées peuvent être réutilisées dans d'autres projets ou contextes.",{"type":30,"tag":31,"props":59653,"children":59655},{"id":59654},"quand-et-pourquoi-le-srp-peut-poser-des-défis",[59656],{"type":40,"value":59657},"Quand et pourquoi le SRP peut poser des défis",{"type":30,"tag":116,"props":59659,"children":59661},{"id":59660},"risque-de-sur-fragmentation",[59662],{"type":40,"value":59663},"Risque de sur-fragmentation",{"type":30,"tag":43,"props":59665,"children":59666},{},[59667],{"type":40,"value":59668},"Appliquer le SRP de manière trop stricte peut entraîner une sur-fragmentation du code, avec trop de classes qui rendent la navigation difficile. Je vous recommande de trouver un équilibre et d’éviter d’éclater le code inutilement.",{"type":30,"tag":116,"props":59670,"children":59672},{"id":59671},"complexité-dans-les-petites-applications",[59673],{"type":40,"value":59674},"Complexité dans les petites applications",{"type":30,"tag":43,"props":59676,"children":59677},{},[59678],{"type":40,"value":59679},"Dans les petits projets ou prototypes, suivre rigoureusement le SRP peut ralentir le développement. Il est parfois acceptable de ne pas appliquer strictement ce principe dans des projets simples ou temporaires.",{"type":30,"tag":116,"props":59681,"children":59683},{"id":59682},"difficulté-à-identifier-les-responsabilités",[59684],{"type":40,"value":59685},"Difficulté à identifier les responsabilités",{"type":30,"tag":43,"props":59687,"children":59688},{},[59689],{"type":40,"value":59690},"Les frontières entre les responsabilités peuvent parfois être floues. Une bonne règle est de se poser la question : \"Pourquoi cette classe pourrait-elle changer ?\" Si la réponse est multiple, cela indique probablement une violation du SRP.",{"type":30,"tag":116,"props":59692,"children":59694},{"id":59693},"refactorisation",[59695],{"type":40,"value":59696},"Refactorisation",{"type":30,"tag":43,"props":59698,"children":59699},{},[59700],{"type":40,"value":59701},"dans les projets existants\nAppliquer le SRP à un projet existant avec beaucoup de dette technique peut nécessiter une refactorisation lourde. Adoptez une approche progressive pour améliorer progressivement la structure du code.",{"type":30,"tag":31,"props":59703,"children":59705},{"id":59704},"faq-questions-fréquemment-posées-sur-le-srp",[59706],{"type":40,"value":59707},"FAQ : Questions fréquemment posées sur le SRP",{"type":30,"tag":530,"props":59709,"children":59710},{},[59711,59716],{"type":30,"tag":534,"props":59712,"children":59713},{},[59714],{"type":40,"value":59715},"1. Qu’est-ce que le principe de responsabilité unique (SRP) ?",{"type":30,"tag":43,"props":59717,"children":59718},{},[59719],{"type":40,"value":59720},"Le SRP stipule qu’une classe ne doit avoir qu’une seule responsabilité, c’est-à-dire qu’elle ne devrait avoir qu’une seule raison de changer.",{"type":30,"tag":530,"props":59722,"children":59723},{},[59724,59729],{"type":30,"tag":534,"props":59725,"children":59726},{},[59727],{"type":40,"value":59728},"2. Pourquoi est-il important de suivre le SRP ?",{"type":30,"tag":43,"props":59730,"children":59731},{},[59732],{"type":40,"value":59733},"Le SRP améliore la lisibilité, la maintenabilité et la testabilité du code, tout en réduisant le couplage entre les composants.",{"type":30,"tag":530,"props":59735,"children":59736},{},[59737,59742],{"type":30,"tag":534,"props":59738,"children":59739},{},[59740],{"type":40,"value":59741},"3. Comment savoir si une classe viole le SRP ?",{"type":30,"tag":43,"props":59743,"children":59744},{},[59745],{"type":40,"value":59746},"Si une classe a plusieurs responsabilités ou plusieurs raisons de changer, elle viole probablement le SRP.",{"type":30,"tag":530,"props":59748,"children":59749},{},[59750,59755],{"type":30,"tag":534,"props":59751,"children":59752},{},[59753],{"type":40,"value":59754},"4. Le SRP n’augmente-t-il pas le nombre de classes et la complexité du projet ?",{"type":30,"tag":43,"props":59756,"children":59757},{},[59758],{"type":40,"value":59759},"Le SRP peut augmenter le nombre de classes, mais cela simplifie la compréhension de chaque classe individuellement, rendant le projet plus facile à maintenir.",{"type":30,"tag":530,"props":59761,"children":59762},{},[59763,59768],{"type":30,"tag":534,"props":59764,"children":59765},{},[59766],{"type":40,"value":59767},"5. Dois-je toujours appliquer le SRP, même dans les petits projets ?",{"type":30,"tag":43,"props":59769,"children":59770},{},[59771],{"type":40,"value":59772},"Dans de petits projets ou prototypes, il est acceptable de ne pas appliquer strictement le SRP dès le début, mais le principe devient crucial à mesure que le projet évolue.",{"type":30,"tag":84,"props":59774,"children":59775},{},[],{"type":30,"tag":211,"props":59777,"children":59778},{"cta":12975,"href":639,"title":12976,"type":641},[59779],{"type":30,"tag":43,"props":59780,"children":59781},{},[59782],{"type":40,"value":41032},{"type":30,"tag":6456,"props":59784,"children":59785},{},[59786],{"type":40,"value":6460},{"title":8,"searchDepth":675,"depth":675,"links":59788},[59789,59790,59791,59794,59795,59801],{"id":57410,"depth":675,"text":57413},{"id":57453,"depth":675,"text":57456},{"id":58044,"depth":675,"text":58047,"children":59792},[59793],{"id":58096,"depth":681,"text":58099},{"id":59590,"depth":675,"text":59593},{"id":59654,"depth":675,"text":59657,"children":59796},[59797,59798,59799,59800],{"id":59660,"depth":681,"text":59663},{"id":59671,"depth":681,"text":59674},{"id":59682,"depth":681,"text":59685},{"id":59693,"depth":681,"text":59696},{"id":59704,"depth":675,"text":59707},"content:fr:architecture-craft:principe-srp-software-craftsmanship-exemples-java.md","fr/architecture-craft/principe-srp-software-craftsmanship-exemples-java.md","fr/architecture-craft/principe-srp-software-craftsmanship-exemples-java",1775679808957]