[{"data":1,"prerenderedAt":2538},["ShallowReactive",2],{"/fr/architecture-craft/principe-srp-software-craftsmanship-exemples-java":3,"search-api":-1},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"id":10,"date":11,"listed":12,"nocomments":6,"hidden":6,"categories":13,"tags":15,"--cover":18,"readingTime":19,"body":24,"_type":2532,"_id":2533,"_source":2534,"_file":2535,"_stem":2536,"_extension":2537},"/fr/architecture-craft/principe-srp-software-craftsmanship-exemples-java","architecture-craft",false,"","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...",47,"2024-01-16",true,[14],"Principes du software craftsmanship",[16,17],"principe","qualité","covers/articles/principe-srp.jpg",{"text":20,"minutes":21,"time":22,"words":23},"8 min read",7.705,462300,1541,{"type":25,"children":26,"toc":2517},"root",[27,36,50,75,80,86,105,110,115,383,404,409,685,713,726,732,745,752,757,763,768,774,779,786,792,805,1084,1089,1497,1503,1516,1846,1851,2303,2307,2313,2318,2373,2379,2385,2390,2396,2401,2407,2412,2418,2423,2429,2444,2457,2470,2483,2496,2499,2511],{"type":28,"tag":29,"props":30,"children":32},"element","h2",{"id":31},"principe-srp-en-software-craftsmanship-explications-et-exemples-en-java",[33],{"type":34,"value":35},"text","Principe SRP en Software Craftsmanship : Explications et Exemples en Java",{"type":28,"tag":37,"props":38,"children":39},"p",{},[40,42,48],{"type":34,"value":41},"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":28,"tag":43,"props":44,"children":45},"strong",{},[46],{"type":34,"value":47},"principe SRP (Single Responsibility Principle)",{"type":34,"value":49},". 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":28,"tag":37,"props":51,"children":52},{},[53,55,62,64,73],{"type":34,"value":54},"Le SRP est l'un des cinq ",{"type":28,"tag":56,"props":57,"children":59},"a",{"href":58},"/fr/architecture-craft/principes-solid-java-exemples",[60],{"type":34,"value":61},"principes SOLID",{"type":34,"value":63},", qui sont des piliers du ",{"type":28,"tag":43,"props":65,"children":66},{},[67],{"type":28,"tag":56,"props":68,"children":70},{"href":69},"/fr/dette-technique/software-craftsmanship-principes-exemples-java",[71],{"type":34,"value":72},"software craftsmanship",{"type":34,"value":74},". 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":28,"tag":37,"props":76,"children":77},{},[78],{"type":34,"value":79},"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":28,"tag":29,"props":81,"children":83},{"id":82},"introduction-au-principe-srp",[84],{"type":34,"value":85},"Introduction au principe SRP",{"type":28,"tag":37,"props":87,"children":88},{},[89,91,96,98,103],{"type":34,"value":90},"Le ",{"type":28,"tag":43,"props":92,"children":93},{},[94],{"type":34,"value":95},"Single Responsibility Principle (SRP)",{"type":34,"value":97},", ou principe de responsabilité unique, est souvent résumé ainsi : ",{"type":28,"tag":43,"props":99,"children":100},{},[101],{"type":34,"value":102},"\"Une classe ne devrait avoir qu'une seule raison de changer.\"",{"type":34,"value":104}," Autrement dit, une classe doit se concentrer sur une seule tâche ou responsabilité.",{"type":28,"tag":37,"props":106,"children":107},{},[108],{"type":34,"value":109},"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":28,"tag":37,"props":111,"children":112},{},[113],{"type":34,"value":114},"Prenons un exemple simple :",{"type":28,"tag":116,"props":117,"children":121},"pre",{"className":118,"code":119,"language":120,"meta":7,"style":7},"language-java shiki shiki-themes catppuccin-frappe github-dark","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","java",[122],{"type":28,"tag":123,"props":124,"children":125},"code",{"__ignoreMap":7},[126,155,216,226,235,244,282,291,299,307,357,366,374],{"type":28,"tag":127,"props":128,"children":131},"span",{"class":129,"line":130},"line",1,[132,138,143,149],{"type":28,"tag":127,"props":133,"children":135},{"style":134},"--shiki-default:#CA9EE6;--shiki-dark:#F97583",[136],{"type":34,"value":137},"public",{"type":28,"tag":127,"props":139,"children":140},{"style":134},[141],{"type":34,"value":142}," class",{"type":28,"tag":127,"props":144,"children":146},{"style":145},"--shiki-default:#E5C890;--shiki-default-font-style:italic;--shiki-dark:#B392F0;--shiki-dark-font-style:inherit",[147],{"type":34,"value":148}," UserManager",{"type":28,"tag":127,"props":150,"children":152},{"style":151},"--shiki-default:#949CBB;--shiki-dark:#E1E4E8",[153],{"type":34,"value":154}," {\n",{"type":28,"tag":127,"props":156,"children":158},{"class":129,"line":157},2,[159,164,169,175,180,186,192,197,202,207,212],{"type":28,"tag":127,"props":160,"children":161},{"style":134},[162],{"type":34,"value":163},"    public",{"type":28,"tag":127,"props":165,"children":166},{"style":134},[167],{"type":34,"value":168}," void",{"type":28,"tag":127,"props":170,"children":172},{"style":171},"--shiki-default:#8CAAEE;--shiki-default-font-style:italic;--shiki-dark:#B392F0;--shiki-dark-font-style:inherit",[173],{"type":34,"value":174}," createUser",{"type":28,"tag":127,"props":176,"children":177},{"style":151},[178],{"type":34,"value":179},"(",{"type":28,"tag":127,"props":181,"children":183},{"style":182},"--shiki-default:#CA9EE6;--shiki-dark:#E1E4E8",[184],{"type":34,"value":185},"String",{"type":28,"tag":127,"props":187,"children":189},{"style":188},"--shiki-default:#EA999C;--shiki-default-font-style:italic;--shiki-dark:#FFAB70;--shiki-dark-font-style:inherit",[190],{"type":34,"value":191}," username",{"type":28,"tag":127,"props":193,"children":194},{"style":151},[195],{"type":34,"value":196},",",{"type":28,"tag":127,"props":198,"children":199},{"style":182},[200],{"type":34,"value":201}," String",{"type":28,"tag":127,"props":203,"children":204},{"style":188},[205],{"type":34,"value":206}," password",{"type":28,"tag":127,"props":208,"children":209},{"style":151},[210],{"type":34,"value":211},")",{"type":28,"tag":127,"props":213,"children":214},{"style":151},[215],{"type":34,"value":154},{"type":28,"tag":127,"props":217,"children":219},{"class":129,"line":218},3,[220],{"type":28,"tag":127,"props":221,"children":223},{"style":222},"--shiki-default:#737994;--shiki-default-font-style:italic;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit",[224],{"type":34,"value":225},"        // Logique pour créer un utilisateur\n",{"type":28,"tag":127,"props":227,"children":229},{"class":129,"line":228},4,[230],{"type":28,"tag":127,"props":231,"children":232},{"style":151},[233],{"type":34,"value":234},"    }\n",{"type":28,"tag":127,"props":236,"children":238},{"class":129,"line":237},5,[239],{"type":28,"tag":127,"props":240,"children":241},{"emptyLinePlaceholder":12},[242],{"type":34,"value":243},"\n",{"type":28,"tag":127,"props":245,"children":247},{"class":129,"line":246},6,[248,252,256,261,265,269,274,278],{"type":28,"tag":127,"props":249,"children":250},{"style":134},[251],{"type":34,"value":163},{"type":28,"tag":127,"props":253,"children":254},{"style":134},[255],{"type":34,"value":168},{"type":28,"tag":127,"props":257,"children":258},{"style":171},[259],{"type":34,"value":260}," log",{"type":28,"tag":127,"props":262,"children":263},{"style":151},[264],{"type":34,"value":179},{"type":28,"tag":127,"props":266,"children":267},{"style":182},[268],{"type":34,"value":185},{"type":28,"tag":127,"props":270,"children":271},{"style":188},[272],{"type":34,"value":273}," message",{"type":28,"tag":127,"props":275,"children":276},{"style":151},[277],{"type":34,"value":211},{"type":28,"tag":127,"props":279,"children":280},{"style":151},[281],{"type":34,"value":154},{"type":28,"tag":127,"props":283,"children":285},{"class":129,"line":284},7,[286],{"type":28,"tag":127,"props":287,"children":288},{"style":222},[289],{"type":34,"value":290},"        // Logique pour enregistrer un log\n",{"type":28,"tag":127,"props":292,"children":294},{"class":129,"line":293},8,[295],{"type":28,"tag":127,"props":296,"children":297},{"style":151},[298],{"type":34,"value":234},{"type":28,"tag":127,"props":300,"children":302},{"class":129,"line":301},9,[303],{"type":28,"tag":127,"props":304,"children":305},{"emptyLinePlaceholder":12},[306],{"type":34,"value":243},{"type":28,"tag":127,"props":308,"children":310},{"class":129,"line":309},10,[311,315,319,324,328,332,337,341,345,349,353],{"type":28,"tag":127,"props":312,"children":313},{"style":134},[314],{"type":34,"value":163},{"type":28,"tag":127,"props":316,"children":317},{"style":134},[318],{"type":34,"value":168},{"type":28,"tag":127,"props":320,"children":321},{"style":171},[322],{"type":34,"value":323}," sendEmail",{"type":28,"tag":127,"props":325,"children":326},{"style":151},[327],{"type":34,"value":179},{"type":28,"tag":127,"props":329,"children":330},{"style":182},[331],{"type":34,"value":185},{"type":28,"tag":127,"props":333,"children":334},{"style":188},[335],{"type":34,"value":336}," email",{"type":28,"tag":127,"props":338,"children":339},{"style":151},[340],{"type":34,"value":196},{"type":28,"tag":127,"props":342,"children":343},{"style":182},[344],{"type":34,"value":201},{"type":28,"tag":127,"props":346,"children":347},{"style":188},[348],{"type":34,"value":273},{"type":28,"tag":127,"props":350,"children":351},{"style":151},[352],{"type":34,"value":211},{"type":28,"tag":127,"props":354,"children":355},{"style":151},[356],{"type":34,"value":154},{"type":28,"tag":127,"props":358,"children":360},{"class":129,"line":359},11,[361],{"type":28,"tag":127,"props":362,"children":363},{"style":222},[364],{"type":34,"value":365},"        // Logique pour envoyer un email\n",{"type":28,"tag":127,"props":367,"children":369},{"class":129,"line":368},12,[370],{"type":28,"tag":127,"props":371,"children":372},{"style":151},[373],{"type":34,"value":234},{"type":28,"tag":127,"props":375,"children":377},{"class":129,"line":376},13,[378],{"type":28,"tag":127,"props":379,"children":380},{"style":151},[381],{"type":34,"value":382},"}\n",{"type":28,"tag":37,"props":384,"children":385},{},[386,388,394,396,402],{"type":34,"value":387},"Ici, la classe ",{"type":28,"tag":123,"props":389,"children":391},{"className":390},[],[392],{"type":34,"value":393},"UserManager",{"type":34,"value":395}," 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":28,"tag":123,"props":397,"children":399},{"className":398},[],[400],{"type":34,"value":401},"createUser",{"type":34,"value":403},", vous risquez de casser des fonctionnalités de logging ou d'emailing, car tout est couplé dans une seule classe.",{"type":28,"tag":37,"props":405,"children":406},{},[407],{"type":34,"value":408},"Pour appliquer le SRP, vous devez découper cette classe en plusieurs classes, chacune ayant une responsabilité bien définie :",{"type":28,"tag":116,"props":410,"children":412},{"className":118,"code":411,"language":120,"meta":7,"style":7},"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",[413],{"type":28,"tag":123,"props":414,"children":415},{"__ignoreMap":7},[416,435,482,489,496,503,510,530,565,572,579,586,593,613,661,669,677],{"type":28,"tag":127,"props":417,"children":418},{"class":129,"line":130},[419,423,427,431],{"type":28,"tag":127,"props":420,"children":421},{"style":134},[422],{"type":34,"value":137},{"type":28,"tag":127,"props":424,"children":425},{"style":134},[426],{"type":34,"value":142},{"type":28,"tag":127,"props":428,"children":429},{"style":145},[430],{"type":34,"value":148},{"type":28,"tag":127,"props":432,"children":433},{"style":151},[434],{"type":34,"value":154},{"type":28,"tag":127,"props":436,"children":437},{"class":129,"line":157},[438,442,446,450,454,458,462,466,470,474,478],{"type":28,"tag":127,"props":439,"children":440},{"style":134},[441],{"type":34,"value":163},{"type":28,"tag":127,"props":443,"children":444},{"style":134},[445],{"type":34,"value":168},{"type":28,"tag":127,"props":447,"children":448},{"style":171},[449],{"type":34,"value":174},{"type":28,"tag":127,"props":451,"children":452},{"style":151},[453],{"type":34,"value":179},{"type":28,"tag":127,"props":455,"children":456},{"style":182},[457],{"type":34,"value":185},{"type":28,"tag":127,"props":459,"children":460},{"style":188},[461],{"type":34,"value":191},{"type":28,"tag":127,"props":463,"children":464},{"style":151},[465],{"type":34,"value":196},{"type":28,"tag":127,"props":467,"children":468},{"style":182},[469],{"type":34,"value":201},{"type":28,"tag":127,"props":471,"children":472},{"style":188},[473],{"type":34,"value":206},{"type":28,"tag":127,"props":475,"children":476},{"style":151},[477],{"type":34,"value":211},{"type":28,"tag":127,"props":479,"children":480},{"style":151},[481],{"type":34,"value":154},{"type":28,"tag":127,"props":483,"children":484},{"class":129,"line":218},[485],{"type":28,"tag":127,"props":486,"children":487},{"style":222},[488],{"type":34,"value":225},{"type":28,"tag":127,"props":490,"children":491},{"class":129,"line":228},[492],{"type":28,"tag":127,"props":493,"children":494},{"style":151},[495],{"type":34,"value":234},{"type":28,"tag":127,"props":497,"children":498},{"class":129,"line":237},[499],{"type":28,"tag":127,"props":500,"children":501},{"style":151},[502],{"type":34,"value":382},{"type":28,"tag":127,"props":504,"children":505},{"class":129,"line":246},[506],{"type":28,"tag":127,"props":507,"children":508},{"emptyLinePlaceholder":12},[509],{"type":34,"value":243},{"type":28,"tag":127,"props":511,"children":512},{"class":129,"line":284},[513,517,521,526],{"type":28,"tag":127,"props":514,"children":515},{"style":134},[516],{"type":34,"value":137},{"type":28,"tag":127,"props":518,"children":519},{"style":134},[520],{"type":34,"value":142},{"type":28,"tag":127,"props":522,"children":523},{"style":145},[524],{"type":34,"value":525}," Logger",{"type":28,"tag":127,"props":527,"children":528},{"style":151},[529],{"type":34,"value":154},{"type":28,"tag":127,"props":531,"children":532},{"class":129,"line":293},[533,537,541,545,549,553,557,561],{"type":28,"tag":127,"props":534,"children":535},{"style":134},[536],{"type":34,"value":163},{"type":28,"tag":127,"props":538,"children":539},{"style":134},[540],{"type":34,"value":168},{"type":28,"tag":127,"props":542,"children":543},{"style":171},[544],{"type":34,"value":260},{"type":28,"tag":127,"props":546,"children":547},{"style":151},[548],{"type":34,"value":179},{"type":28,"tag":127,"props":550,"children":551},{"style":182},[552],{"type":34,"value":185},{"type":28,"tag":127,"props":554,"children":555},{"style":188},[556],{"type":34,"value":273},{"type":28,"tag":127,"props":558,"children":559},{"style":151},[560],{"type":34,"value":211},{"type":28,"tag":127,"props":562,"children":563},{"style":151},[564],{"type":34,"value":154},{"type":28,"tag":127,"props":566,"children":567},{"class":129,"line":301},[568],{"type":28,"tag":127,"props":569,"children":570},{"style":222},[571],{"type":34,"value":290},{"type":28,"tag":127,"props":573,"children":574},{"class":129,"line":309},[575],{"type":28,"tag":127,"props":576,"children":577},{"style":151},[578],{"type":34,"value":234},{"type":28,"tag":127,"props":580,"children":581},{"class":129,"line":359},[582],{"type":28,"tag":127,"props":583,"children":584},{"style":151},[585],{"type":34,"value":382},{"type":28,"tag":127,"props":587,"children":588},{"class":129,"line":368},[589],{"type":28,"tag":127,"props":590,"children":591},{"emptyLinePlaceholder":12},[592],{"type":34,"value":243},{"type":28,"tag":127,"props":594,"children":595},{"class":129,"line":376},[596,600,604,609],{"type":28,"tag":127,"props":597,"children":598},{"style":134},[599],{"type":34,"value":137},{"type":28,"tag":127,"props":601,"children":602},{"style":134},[603],{"type":34,"value":142},{"type":28,"tag":127,"props":605,"children":606},{"style":145},[607],{"type":34,"value":608}," EmailService",{"type":28,"tag":127,"props":610,"children":611},{"style":151},[612],{"type":34,"value":154},{"type":28,"tag":127,"props":614,"children":616},{"class":129,"line":615},14,[617,621,625,629,633,637,641,645,649,653,657],{"type":28,"tag":127,"props":618,"children":619},{"style":134},[620],{"type":34,"value":163},{"type":28,"tag":127,"props":622,"children":623},{"style":134},[624],{"type":34,"value":168},{"type":28,"tag":127,"props":626,"children":627},{"style":171},[628],{"type":34,"value":323},{"type":28,"tag":127,"props":630,"children":631},{"style":151},[632],{"type":34,"value":179},{"type":28,"tag":127,"props":634,"children":635},{"style":182},[636],{"type":34,"value":185},{"type":28,"tag":127,"props":638,"children":639},{"style":188},[640],{"type":34,"value":336},{"type":28,"tag":127,"props":642,"children":643},{"style":151},[644],{"type":34,"value":196},{"type":28,"tag":127,"props":646,"children":647},{"style":182},[648],{"type":34,"value":201},{"type":28,"tag":127,"props":650,"children":651},{"style":188},[652],{"type":34,"value":273},{"type":28,"tag":127,"props":654,"children":655},{"style":151},[656],{"type":34,"value":211},{"type":28,"tag":127,"props":658,"children":659},{"style":151},[660],{"type":34,"value":154},{"type":28,"tag":127,"props":662,"children":664},{"class":129,"line":663},15,[665],{"type":28,"tag":127,"props":666,"children":667},{"style":222},[668],{"type":34,"value":365},{"type":28,"tag":127,"props":670,"children":672},{"class":129,"line":671},16,[673],{"type":28,"tag":127,"props":674,"children":675},{"style":151},[676],{"type":34,"value":234},{"type":28,"tag":127,"props":678,"children":680},{"class":129,"line":679},17,[681],{"type":28,"tag":127,"props":682,"children":683},{"style":151},[684],{"type":34,"value":382},{"type":28,"tag":37,"props":686,"children":687},{},[688,690,695,697,703,705,711],{"type":34,"value":689},"Maintenant, chaque classe a une seule responsabilité : ",{"type":28,"tag":123,"props":691,"children":693},{"className":692},[],[694],{"type":34,"value":393},{"type":34,"value":696}," s'occupe de la création d'utilisateur, ",{"type":28,"tag":123,"props":698,"children":700},{"className":699},[],[701],{"type":34,"value":702},"Logger",{"type":34,"value":704}," gère les logs, et ",{"type":28,"tag":123,"props":706,"children":708},{"className":707},[],[709],{"type":34,"value":710},"EmailService",{"type":34,"value":712}," est responsable de l'envoi des emails. Cela rend le code plus propre et plus facile à maintenir.",{"type":28,"tag":714,"props":715,"children":720},"cta",{"cta":716,"href":717,"title":718,"type":719},"Réserver mon diagnostic gratuit →","https://app.kamanga.fr/forms/discovery-call","Vos classes et services font tout — et font tout mal ?","call",[721],{"type":28,"tag":37,"props":722,"children":723},{},[724],{"type":34,"value":725},"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":28,"tag":29,"props":727,"children":729},{"id":728},"pourquoi-le-srp-est-il-important-dans-le-software-craftsmanship",[730],{"type":34,"value":731},"Pourquoi le SRP est-il important dans le Software Craftsmanship ?",{"type":28,"tag":37,"props":733,"children":734},{},[735,736,743],{"type":34,"value":90},{"type":28,"tag":43,"props":737,"children":738},{},[739],{"type":28,"tag":56,"props":740,"children":741},{"href":69},[742],{"type":34,"value":72},{"type":34,"value":744}," 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":28,"tag":746,"props":747,"children":749},"h4",{"id":748},"simplification-et-maintenabilité",[750],{"type":34,"value":751},"Simplification et maintenabilité",{"type":28,"tag":37,"props":753,"children":754},{},[755],{"type":34,"value":756},"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":28,"tag":746,"props":758,"children":760},{"id":759},"facilite-les-tests-unitaires",[761],{"type":34,"value":762},"Facilite les tests unitaires",{"type":28,"tag":37,"props":764,"children":765},{},[766],{"type":34,"value":767},"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":28,"tag":746,"props":769,"children":771},{"id":770},"favorise-lévolutivité",[772],{"type":34,"value":773},"Favorise l’évolutivité",{"type":28,"tag":37,"props":775,"children":776},{},[777],{"type":34,"value":778},"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":28,"tag":780,"props":781,"children":783},"h3",{"id":782},"_3-comment-appliquer-le-srp-en-java-exemples-concrets",[784],{"type":34,"value":785},"3. Comment appliquer le SRP en Java : exemples concrets",{"type":28,"tag":746,"props":787,"children":789},{"id":788},"exemple-1-gestion-des-utilisateurs",[790],{"type":34,"value":791},"Exemple 1 : Gestion des utilisateurs",{"type":28,"tag":37,"props":793,"children":794},{},[795,797,803],{"type":34,"value":796},"Voici un exemple de violation du SRP avec une classe ",{"type":28,"tag":123,"props":798,"children":800},{"className":799},[],[801],{"type":34,"value":802},"UserService",{"type":34,"value":804}," qui gère à la fois la création d'utilisateurs et l'envoi d'emails.",{"type":28,"tag":116,"props":806,"children":808},{"className":118,"code":807,"language":120,"meta":7,"style":7},"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",[809],{"type":28,"tag":123,"props":810,"children":811},{"__ignoreMap":7},[812,832,879,886,929,937,945,966,973,980,1016,1024,1070,1077],{"type":28,"tag":127,"props":813,"children":814},{"class":129,"line":130},[815,819,823,828],{"type":28,"tag":127,"props":816,"children":817},{"style":134},[818],{"type":34,"value":137},{"type":28,"tag":127,"props":820,"children":821},{"style":134},[822],{"type":34,"value":142},{"type":28,"tag":127,"props":824,"children":825},{"style":145},[826],{"type":34,"value":827}," UserService",{"type":28,"tag":127,"props":829,"children":830},{"style":151},[831],{"type":34,"value":154},{"type":28,"tag":127,"props":833,"children":834},{"class":129,"line":157},[835,839,843,847,851,855,859,863,867,871,875],{"type":28,"tag":127,"props":836,"children":837},{"style":134},[838],{"type":34,"value":163},{"type":28,"tag":127,"props":840,"children":841},{"style":134},[842],{"type":34,"value":168},{"type":28,"tag":127,"props":844,"children":845},{"style":171},[846],{"type":34,"value":174},{"type":28,"tag":127,"props":848,"children":849},{"style":151},[850],{"type":34,"value":179},{"type":28,"tag":127,"props":852,"children":853},{"style":182},[854],{"type":34,"value":185},{"type":28,"tag":127,"props":856,"children":857},{"style":188},[858],{"type":34,"value":191},{"type":28,"tag":127,"props":860,"children":861},{"style":151},[862],{"type":34,"value":196},{"type":28,"tag":127,"props":864,"children":865},{"style":182},[866],{"type":34,"value":201},{"type":28,"tag":127,"props":868,"children":869},{"style":188},[870],{"type":34,"value":206},{"type":28,"tag":127,"props":872,"children":873},{"style":151},[874],{"type":34,"value":211},{"type":28,"tag":127,"props":876,"children":877},{"style":151},[878],{"type":34,"value":154},{"type":28,"tag":127,"props":880,"children":881},{"class":129,"line":218},[882],{"type":28,"tag":127,"props":883,"children":884},{"style":222},[885],{"type":34,"value":225},{"type":28,"tag":127,"props":887,"children":888},{"class":129,"line":228},[889,895,900,905,909,914,918,924],{"type":28,"tag":127,"props":890,"children":892},{"style":891},"--shiki-default:#C6D0F5;--shiki-dark:#E1E4E8",[893],{"type":34,"value":894},"        System",{"type":28,"tag":127,"props":896,"children":897},{"style":151},[898],{"type":34,"value":899},".",{"type":28,"tag":127,"props":901,"children":902},{"style":891},[903],{"type":34,"value":904},"out",{"type":28,"tag":127,"props":906,"children":907},{"style":151},[908],{"type":34,"value":899},{"type":28,"tag":127,"props":910,"children":911},{"style":171},[912],{"type":34,"value":913},"println",{"type":28,"tag":127,"props":915,"children":916},{"style":151},[917],{"type":34,"value":179},{"type":28,"tag":127,"props":919,"children":921},{"style":920},"--shiki-default:#A6D189;--shiki-dark:#9ECBFF",[922],{"type":34,"value":923},"\"Utilisateur créé avec succès !\"",{"type":28,"tag":127,"props":925,"children":926},{"style":151},[927],{"type":34,"value":928},");\n",{"type":28,"tag":127,"props":930,"children":931},{"class":129,"line":237},[932],{"type":28,"tag":127,"props":933,"children":934},{"style":891},[935],{"type":34,"value":936},"        \n",{"type":28,"tag":127,"props":938,"children":939},{"class":129,"line":246},[940],{"type":28,"tag":127,"props":941,"children":942},{"style":222},[943],{"type":34,"value":944},"        // Envoyer un email de bienvenue\n",{"type":28,"tag":127,"props":946,"children":947},{"class":129,"line":284},[948,953,957,962],{"type":28,"tag":127,"props":949,"children":950},{"style":171},[951],{"type":34,"value":952},"        sendWelcomeEmail",{"type":28,"tag":127,"props":954,"children":955},{"style":151},[956],{"type":34,"value":179},{"type":28,"tag":127,"props":958,"children":959},{"style":891},[960],{"type":34,"value":961},"username",{"type":28,"tag":127,"props":963,"children":964},{"style":151},[965],{"type":34,"value":928},{"type":28,"tag":127,"props":967,"children":968},{"class":129,"line":293},[969],{"type":28,"tag":127,"props":970,"children":971},{"style":151},[972],{"type":34,"value":234},{"type":28,"tag":127,"props":974,"children":975},{"class":129,"line":301},[976],{"type":28,"tag":127,"props":977,"children":978},{"emptyLinePlaceholder":12},[979],{"type":34,"value":243},{"type":28,"tag":127,"props":981,"children":982},{"class":129,"line":309},[983,987,991,996,1000,1004,1008,1012],{"type":28,"tag":127,"props":984,"children":985},{"style":134},[986],{"type":34,"value":163},{"type":28,"tag":127,"props":988,"children":989},{"style":134},[990],{"type":34,"value":168},{"type":28,"tag":127,"props":992,"children":993},{"style":171},[994],{"type":34,"value":995}," sendWelcomeEmail",{"type":28,"tag":127,"props":997,"children":998},{"style":151},[999],{"type":34,"value":179},{"type":28,"tag":127,"props":1001,"children":1002},{"style":182},[1003],{"type":34,"value":185},{"type":28,"tag":127,"props":1005,"children":1006},{"style":188},[1007],{"type":34,"value":191},{"type":28,"tag":127,"props":1009,"children":1010},{"style":151},[1011],{"type":34,"value":211},{"type":28,"tag":127,"props":1013,"children":1014},{"style":151},[1015],{"type":34,"value":154},{"type":28,"tag":127,"props":1017,"children":1018},{"class":129,"line":359},[1019],{"type":28,"tag":127,"props":1020,"children":1021},{"style":222},[1022],{"type":34,"value":1023},"        // Logique pour envoyer un email de bienvenue\n",{"type":28,"tag":127,"props":1025,"children":1026},{"class":129,"line":368},[1027,1031,1035,1039,1043,1047,1051,1056,1062,1066],{"type":28,"tag":127,"props":1028,"children":1029},{"style":891},[1030],{"type":34,"value":894},{"type":28,"tag":127,"props":1032,"children":1033},{"style":151},[1034],{"type":34,"value":899},{"type":28,"tag":127,"props":1036,"children":1037},{"style":891},[1038],{"type":34,"value":904},{"type":28,"tag":127,"props":1040,"children":1041},{"style":151},[1042],{"type":34,"value":899},{"type":28,"tag":127,"props":1044,"children":1045},{"style":171},[1046],{"type":34,"value":913},{"type":28,"tag":127,"props":1048,"children":1049},{"style":151},[1050],{"type":34,"value":179},{"type":28,"tag":127,"props":1052,"children":1053},{"style":920},[1054],{"type":34,"value":1055},"\"Email envoyé à \"",{"type":28,"tag":127,"props":1057,"children":1059},{"style":1058},"--shiki-default:#81C8BE;--shiki-dark:#F97583",[1060],{"type":34,"value":1061}," +",{"type":28,"tag":127,"props":1063,"children":1064},{"style":891},[1065],{"type":34,"value":191},{"type":28,"tag":127,"props":1067,"children":1068},{"style":151},[1069],{"type":34,"value":928},{"type":28,"tag":127,"props":1071,"children":1072},{"class":129,"line":376},[1073],{"type":28,"tag":127,"props":1074,"children":1075},{"style":151},[1076],{"type":34,"value":234},{"type":28,"tag":127,"props":1078,"children":1079},{"class":129,"line":615},[1080],{"type":28,"tag":127,"props":1081,"children":1082},{"style":151},[1083],{"type":34,"value":382},{"type":28,"tag":37,"props":1085,"children":1086},{},[1087],{"type":34,"value":1088},"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":28,"tag":116,"props":1090,"children":1092},{"className":118,"code":1091,"language":120,"meta":7,"style":7},"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",[1093],{"type":28,"tag":123,"props":1094,"children":1095},{"__ignoreMap":7},[1096,1115,1137,1144,1175,1206,1213,1220,1267,1274,1309,1316,1324,1353,1360,1367,1374,1393,1429,1437,1481,1489],{"type":28,"tag":127,"props":1097,"children":1098},{"class":129,"line":130},[1099,1103,1107,1111],{"type":28,"tag":127,"props":1100,"children":1101},{"style":134},[1102],{"type":34,"value":137},{"type":28,"tag":127,"props":1104,"children":1105},{"style":134},[1106],{"type":34,"value":142},{"type":28,"tag":127,"props":1108,"children":1109},{"style":145},[1110],{"type":34,"value":827},{"type":28,"tag":127,"props":1112,"children":1113},{"style":151},[1114],{"type":34,"value":154},{"type":28,"tag":127,"props":1116,"children":1117},{"class":129,"line":157},[1118,1123,1127,1132],{"type":28,"tag":127,"props":1119,"children":1120},{"style":134},[1121],{"type":34,"value":1122},"    private",{"type":28,"tag":127,"props":1124,"children":1125},{"style":182},[1126],{"type":34,"value":608},{"type":28,"tag":127,"props":1128,"children":1129},{"style":891},[1130],{"type":34,"value":1131}," emailService",{"type":28,"tag":127,"props":1133,"children":1134},{"style":151},[1135],{"type":34,"value":1136},";\n",{"type":28,"tag":127,"props":1138,"children":1139},{"class":129,"line":218},[1140],{"type":28,"tag":127,"props":1141,"children":1142},{"emptyLinePlaceholder":12},[1143],{"type":34,"value":243},{"type":28,"tag":127,"props":1145,"children":1146},{"class":129,"line":228},[1147,1151,1155,1159,1163,1167,1171],{"type":28,"tag":127,"props":1148,"children":1149},{"style":134},[1150],{"type":34,"value":163},{"type":28,"tag":127,"props":1152,"children":1153},{"style":171},[1154],{"type":34,"value":827},{"type":28,"tag":127,"props":1156,"children":1157},{"style":151},[1158],{"type":34,"value":179},{"type":28,"tag":127,"props":1160,"children":1161},{"style":182},[1162],{"type":34,"value":710},{"type":28,"tag":127,"props":1164,"children":1165},{"style":188},[1166],{"type":34,"value":1131},{"type":28,"tag":127,"props":1168,"children":1169},{"style":151},[1170],{"type":34,"value":211},{"type":28,"tag":127,"props":1172,"children":1173},{"style":151},[1174],{"type":34,"value":154},{"type":28,"tag":127,"props":1176,"children":1177},{"class":129,"line":237},[1178,1184,1188,1193,1198,1202],{"type":28,"tag":127,"props":1179,"children":1181},{"style":1180},"--shiki-default:#E78284;--shiki-dark:#79B8FF",[1182],{"type":34,"value":1183},"        this",{"type":28,"tag":127,"props":1185,"children":1186},{"style":151},[1187],{"type":34,"value":899},{"type":28,"tag":127,"props":1189,"children":1190},{"style":891},[1191],{"type":34,"value":1192},"emailService ",{"type":28,"tag":127,"props":1194,"children":1195},{"style":1058},[1196],{"type":34,"value":1197},"=",{"type":28,"tag":127,"props":1199,"children":1200},{"style":891},[1201],{"type":34,"value":1131},{"type":28,"tag":127,"props":1203,"children":1204},{"style":151},[1205],{"type":34,"value":1136},{"type":28,"tag":127,"props":1207,"children":1208},{"class":129,"line":246},[1209],{"type":28,"tag":127,"props":1210,"children":1211},{"style":151},[1212],{"type":34,"value":234},{"type":28,"tag":127,"props":1214,"children":1215},{"class":129,"line":284},[1216],{"type":28,"tag":127,"props":1217,"children":1218},{"emptyLinePlaceholder":12},[1219],{"type":34,"value":243},{"type":28,"tag":127,"props":1221,"children":1222},{"class":129,"line":293},[1223,1227,1231,1235,1239,1243,1247,1251,1255,1259,1263],{"type":28,"tag":127,"props":1224,"children":1225},{"style":134},[1226],{"type":34,"value":163},{"type":28,"tag":127,"props":1228,"children":1229},{"style":134},[1230],{"type":34,"value":168},{"type":28,"tag":127,"props":1232,"children":1233},{"style":171},[1234],{"type":34,"value":174},{"type":28,"tag":127,"props":1236,"children":1237},{"style":151},[1238],{"type":34,"value":179},{"type":28,"tag":127,"props":1240,"children":1241},{"style":182},[1242],{"type":34,"value":185},{"type":28,"tag":127,"props":1244,"children":1245},{"style":188},[1246],{"type":34,"value":191},{"type":28,"tag":127,"props":1248,"children":1249},{"style":151},[1250],{"type":34,"value":196},{"type":28,"tag":127,"props":1252,"children":1253},{"style":182},[1254],{"type":34,"value":201},{"type":28,"tag":127,"props":1256,"children":1257},{"style":188},[1258],{"type":34,"value":206},{"type":28,"tag":127,"props":1260,"children":1261},{"style":151},[1262],{"type":34,"value":211},{"type":28,"tag":127,"props":1264,"children":1265},{"style":151},[1266],{"type":34,"value":154},{"type":28,"tag":127,"props":1268,"children":1269},{"class":129,"line":301},[1270],{"type":28,"tag":127,"props":1271,"children":1272},{"style":222},[1273],{"type":34,"value":225},{"type":28,"tag":127,"props":1275,"children":1276},{"class":129,"line":309},[1277,1281,1285,1289,1293,1297,1301,1305],{"type":28,"tag":127,"props":1278,"children":1279},{"style":891},[1280],{"type":34,"value":894},{"type":28,"tag":127,"props":1282,"children":1283},{"style":151},[1284],{"type":34,"value":899},{"type":28,"tag":127,"props":1286,"children":1287},{"style":891},[1288],{"type":34,"value":904},{"type":28,"tag":127,"props":1290,"children":1291},{"style":151},[1292],{"type":34,"value":899},{"type":28,"tag":127,"props":1294,"children":1295},{"style":171},[1296],{"type":34,"value":913},{"type":28,"tag":127,"props":1298,"children":1299},{"style":151},[1300],{"type":34,"value":179},{"type":28,"tag":127,"props":1302,"children":1303},{"style":920},[1304],{"type":34,"value":923},{"type":28,"tag":127,"props":1306,"children":1307},{"style":151},[1308],{"type":34,"value":928},{"type":28,"tag":127,"props":1310,"children":1311},{"class":129,"line":359},[1312],{"type":28,"tag":127,"props":1313,"children":1314},{"style":891},[1315],{"type":34,"value":936},{"type":28,"tag":127,"props":1317,"children":1318},{"class":129,"line":368},[1319],{"type":28,"tag":127,"props":1320,"children":1321},{"style":222},[1322],{"type":34,"value":1323},"        // Utilisation de l'EmailService pour envoyer l'email\n",{"type":28,"tag":127,"props":1325,"children":1326},{"class":129,"line":376},[1327,1332,1336,1341,1345,1349],{"type":28,"tag":127,"props":1328,"children":1329},{"style":891},[1330],{"type":34,"value":1331},"        emailService",{"type":28,"tag":127,"props":1333,"children":1334},{"style":151},[1335],{"type":34,"value":899},{"type":28,"tag":127,"props":1337,"children":1338},{"style":171},[1339],{"type":34,"value":1340},"sendWelcomeEmail",{"type":28,"tag":127,"props":1342,"children":1343},{"style":151},[1344],{"type":34,"value":179},{"type":28,"tag":127,"props":1346,"children":1347},{"style":891},[1348],{"type":34,"value":961},{"type":28,"tag":127,"props":1350,"children":1351},{"style":151},[1352],{"type":34,"value":928},{"type":28,"tag":127,"props":1354,"children":1355},{"class":129,"line":615},[1356],{"type":28,"tag":127,"props":1357,"children":1358},{"style":151},[1359],{"type":34,"value":234},{"type":28,"tag":127,"props":1361,"children":1362},{"class":129,"line":663},[1363],{"type":28,"tag":127,"props":1364,"children":1365},{"style":151},[1366],{"type":34,"value":382},{"type":28,"tag":127,"props":1368,"children":1369},{"class":129,"line":671},[1370],{"type":28,"tag":127,"props":1371,"children":1372},{"emptyLinePlaceholder":12},[1373],{"type":34,"value":243},{"type":28,"tag":127,"props":1375,"children":1376},{"class":129,"line":679},[1377,1381,1385,1389],{"type":28,"tag":127,"props":1378,"children":1379},{"style":134},[1380],{"type":34,"value":137},{"type":28,"tag":127,"props":1382,"children":1383},{"style":134},[1384],{"type":34,"value":142},{"type":28,"tag":127,"props":1386,"children":1387},{"style":145},[1388],{"type":34,"value":608},{"type":28,"tag":127,"props":1390,"children":1391},{"style":151},[1392],{"type":34,"value":154},{"type":28,"tag":127,"props":1394,"children":1396},{"class":129,"line":1395},18,[1397,1401,1405,1409,1413,1417,1421,1425],{"type":28,"tag":127,"props":1398,"children":1399},{"style":134},[1400],{"type":34,"value":163},{"type":28,"tag":127,"props":1402,"children":1403},{"style":134},[1404],{"type":34,"value":168},{"type":28,"tag":127,"props":1406,"children":1407},{"style":171},[1408],{"type":34,"value":995},{"type":28,"tag":127,"props":1410,"children":1411},{"style":151},[1412],{"type":34,"value":179},{"type":28,"tag":127,"props":1414,"children":1415},{"style":182},[1416],{"type":34,"value":185},{"type":28,"tag":127,"props":1418,"children":1419},{"style":188},[1420],{"type":34,"value":191},{"type":28,"tag":127,"props":1422,"children":1423},{"style":151},[1424],{"type":34,"value":211},{"type":28,"tag":127,"props":1426,"children":1427},{"style":151},[1428],{"type":34,"value":154},{"type":28,"tag":127,"props":1430,"children":1432},{"class":129,"line":1431},19,[1433],{"type":28,"tag":127,"props":1434,"children":1435},{"style":222},[1436],{"type":34,"value":1023},{"type":28,"tag":127,"props":1438,"children":1440},{"class":129,"line":1439},20,[1441,1445,1449,1453,1457,1461,1465,1469,1473,1477],{"type":28,"tag":127,"props":1442,"children":1443},{"style":891},[1444],{"type":34,"value":894},{"type":28,"tag":127,"props":1446,"children":1447},{"style":151},[1448],{"type":34,"value":899},{"type":28,"tag":127,"props":1450,"children":1451},{"style":891},[1452],{"type":34,"value":904},{"type":28,"tag":127,"props":1454,"children":1455},{"style":151},[1456],{"type":34,"value":899},{"type":28,"tag":127,"props":1458,"children":1459},{"style":171},[1460],{"type":34,"value":913},{"type":28,"tag":127,"props":1462,"children":1463},{"style":151},[1464],{"type":34,"value":179},{"type":28,"tag":127,"props":1466,"children":1467},{"style":920},[1468],{"type":34,"value":1055},{"type":28,"tag":127,"props":1470,"children":1471},{"style":1058},[1472],{"type":34,"value":1061},{"type":28,"tag":127,"props":1474,"children":1475},{"style":891},[1476],{"type":34,"value":191},{"type":28,"tag":127,"props":1478,"children":1479},{"style":151},[1480],{"type":34,"value":928},{"type":28,"tag":127,"props":1482,"children":1484},{"class":129,"line":1483},21,[1485],{"type":28,"tag":127,"props":1486,"children":1487},{"style":151},[1488],{"type":34,"value":234},{"type":28,"tag":127,"props":1490,"children":1492},{"class":129,"line":1491},22,[1493],{"type":28,"tag":127,"props":1494,"children":1495},{"style":151},[1496],{"type":34,"value":382},{"type":28,"tag":746,"props":1498,"children":1500},{"id":1499},"exemple-2-traitement-des-paiements",[1501],{"type":34,"value":1502},"Exemple 2 : Traitement des paiements",{"type":28,"tag":37,"props":1504,"children":1505},{},[1506,1508,1514],{"type":34,"value":1507},"Prenons l’exemple d’une classe ",{"type":28,"tag":123,"props":1509,"children":1511},{"className":1510},[],[1512],{"type":34,"value":1513},"PaymentProcessor",{"type":34,"value":1515}," qui viole le SRP en gérant à la fois le traitement des paiements et l’envoi des reçus.",{"type":28,"tag":116,"props":1517,"children":1519},{"className":118,"code":1518,"language":120,"meta":7,"style":7},"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",[1520],{"type":28,"tag":123,"props":1521,"children":1522},{"__ignoreMap":7},[1523,1543,1594,1602,1665,1672,1680,1709,1716,1723,1771,1779,1832,1839],{"type":28,"tag":127,"props":1524,"children":1525},{"class":129,"line":130},[1526,1530,1534,1539],{"type":28,"tag":127,"props":1527,"children":1528},{"style":134},[1529],{"type":34,"value":137},{"type":28,"tag":127,"props":1531,"children":1532},{"style":134},[1533],{"type":34,"value":142},{"type":28,"tag":127,"props":1535,"children":1536},{"style":145},[1537],{"type":34,"value":1538}," PaymentProcessor",{"type":28,"tag":127,"props":1540,"children":1541},{"style":151},[1542],{"type":34,"value":154},{"type":28,"tag":127,"props":1544,"children":1545},{"class":129,"line":157},[1546,1550,1554,1559,1563,1567,1572,1576,1581,1586,1590],{"type":28,"tag":127,"props":1547,"children":1548},{"style":134},[1549],{"type":34,"value":163},{"type":28,"tag":127,"props":1551,"children":1552},{"style":134},[1553],{"type":34,"value":168},{"type":28,"tag":127,"props":1555,"children":1556},{"style":171},[1557],{"type":34,"value":1558}," processPayment",{"type":28,"tag":127,"props":1560,"children":1561},{"style":151},[1562],{"type":34,"value":179},{"type":28,"tag":127,"props":1564,"children":1565},{"style":182},[1566],{"type":34,"value":185},{"type":28,"tag":127,"props":1568,"children":1569},{"style":188},[1570],{"type":34,"value":1571}," creditCard",{"type":28,"tag":127,"props":1573,"children":1574},{"style":151},[1575],{"type":34,"value":196},{"type":28,"tag":127,"props":1577,"children":1578},{"style":134},[1579],{"type":34,"value":1580}," double",{"type":28,"tag":127,"props":1582,"children":1583},{"style":188},[1584],{"type":34,"value":1585}," amount",{"type":28,"tag":127,"props":1587,"children":1588},{"style":151},[1589],{"type":34,"value":211},{"type":28,"tag":127,"props":1591,"children":1592},{"style":151},[1593],{"type":34,"value":154},{"type":28,"tag":127,"props":1595,"children":1596},{"class":129,"line":218},[1597],{"type":28,"tag":127,"props":1598,"children":1599},{"style":222},[1600],{"type":34,"value":1601},"        // Logique pour traiter le paiement\n",{"type":28,"tag":127,"props":1603,"children":1604},{"class":129,"line":228},[1605,1609,1613,1617,1621,1625,1629,1634,1638,1643,1648,1653,1657,1661],{"type":28,"tag":127,"props":1606,"children":1607},{"style":891},[1608],{"type":34,"value":894},{"type":28,"tag":127,"props":1610,"children":1611},{"style":151},[1612],{"type":34,"value":899},{"type":28,"tag":127,"props":1614,"children":1615},{"style":891},[1616],{"type":34,"value":904},{"type":28,"tag":127,"props":1618,"children":1619},{"style":151},[1620],{"type":34,"value":899},{"type":28,"tag":127,"props":1622,"children":1623},{"style":171},[1624],{"type":34,"value":913},{"type":28,"tag":127,"props":1626,"children":1627},{"style":151},[1628],{"type":34,"value":179},{"type":28,"tag":127,"props":1630,"children":1631},{"style":920},[1632],{"type":34,"value":1633},"\"Paiement de \"",{"type":28,"tag":127,"props":1635,"children":1636},{"style":1058},[1637],{"type":34,"value":1061},{"type":28,"tag":127,"props":1639,"children":1640},{"style":891},[1641],{"type":34,"value":1642}," amount ",{"type":28,"tag":127,"props":1644,"children":1645},{"style":1058},[1646],{"type":34,"value":1647},"+",{"type":28,"tag":127,"props":1649,"children":1650},{"style":920},[1651],{"type":34,"value":1652}," \"€ traité avec la carte \"",{"type":28,"tag":127,"props":1654,"children":1655},{"style":1058},[1656],{"type":34,"value":1061},{"type":28,"tag":127,"props":1658,"children":1659},{"style":891},[1660],{"type":34,"value":1571},{"type":28,"tag":127,"props":1662,"children":1663},{"style":151},[1664],{"type":34,"value":928},{"type":28,"tag":127,"props":1666,"children":1667},{"class":129,"line":237},[1668],{"type":28,"tag":127,"props":1669,"children":1670},{"emptyLinePlaceholder":12},[1671],{"type":34,"value":243},{"type":28,"tag":127,"props":1673,"children":1674},{"class":129,"line":246},[1675],{"type":28,"tag":127,"props":1676,"children":1677},{"style":222},[1678],{"type":34,"value":1679},"        // Envoyer un reçu par email\n",{"type":28,"tag":127,"props":1681,"children":1682},{"class":129,"line":284},[1683,1688,1692,1697,1701,1705],{"type":28,"tag":127,"props":1684,"children":1685},{"style":171},[1686],{"type":34,"value":1687},"        sendReceipt",{"type":28,"tag":127,"props":1689,"children":1690},{"style":151},[1691],{"type":34,"value":179},{"type":28,"tag":127,"props":1693,"children":1694},{"style":891},[1695],{"type":34,"value":1696},"creditCard",{"type":28,"tag":127,"props":1698,"children":1699},{"style":151},[1700],{"type":34,"value":196},{"type":28,"tag":127,"props":1702,"children":1703},{"style":891},[1704],{"type":34,"value":1585},{"type":28,"tag":127,"props":1706,"children":1707},{"style":151},[1708],{"type":34,"value":928},{"type":28,"tag":127,"props":1710,"children":1711},{"class":129,"line":293},[1712],{"type":28,"tag":127,"props":1713,"children":1714},{"style":151},[1715],{"type":34,"value":234},{"type":28,"tag":127,"props":1717,"children":1718},{"class":129,"line":301},[1719],{"type":28,"tag":127,"props":1720,"children":1721},{"emptyLinePlaceholder":12},[1722],{"type":34,"value":243},{"type":28,"tag":127,"props":1724,"children":1725},{"class":129,"line":309},[1726,1730,1734,1739,1743,1747,1751,1755,1759,1763,1767],{"type":28,"tag":127,"props":1727,"children":1728},{"style":134},[1729],{"type":34,"value":1122},{"type":28,"tag":127,"props":1731,"children":1732},{"style":134},[1733],{"type":34,"value":168},{"type":28,"tag":127,"props":1735,"children":1736},{"style":171},[1737],{"type":34,"value":1738}," sendReceipt",{"type":28,"tag":127,"props":1740,"children":1741},{"style":151},[1742],{"type":34,"value":179},{"type":28,"tag":127,"props":1744,"children":1745},{"style":182},[1746],{"type":34,"value":185},{"type":28,"tag":127,"props":1748,"children":1749},{"style":188},[1750],{"type":34,"value":1571},{"type":28,"tag":127,"props":1752,"children":1753},{"style":151},[1754],{"type":34,"value":196},{"type":28,"tag":127,"props":1756,"children":1757},{"style":134},[1758],{"type":34,"value":1580},{"type":28,"tag":127,"props":1760,"children":1761},{"style":188},[1762],{"type":34,"value":1585},{"type":28,"tag":127,"props":1764,"children":1765},{"style":151},[1766],{"type":34,"value":211},{"type":28,"tag":127,"props":1768,"children":1769},{"style":151},[1770],{"type":34,"value":154},{"type":28,"tag":127,"props":1772,"children":1773},{"class":129,"line":359},[1774],{"type":28,"tag":127,"props":1775,"children":1776},{"style":222},[1777],{"type":34,"value":1778},"        // Logique pour envoyer un reçu\n",{"type":28,"tag":127,"props":1780,"children":1781},{"class":129,"line":368},[1782,1786,1790,1794,1798,1802,1806,1811,1815,1819,1823,1828],{"type":28,"tag":127,"props":1783,"children":1784},{"style":891},[1785],{"type":34,"value":894},{"type":28,"tag":127,"props":1787,"children":1788},{"style":151},[1789],{"type":34,"value":899},{"type":28,"tag":127,"props":1791,"children":1792},{"style":891},[1793],{"type":34,"value":904},{"type":28,"tag":127,"props":1795,"children":1796},{"style":151},[1797],{"type":34,"value":899},{"type":28,"tag":127,"props":1799,"children":1800},{"style":171},[1801],{"type":34,"value":913},{"type":28,"tag":127,"props":1803,"children":1804},{"style":151},[1805],{"type":34,"value":179},{"type":28,"tag":127,"props":1807,"children":1808},{"style":920},[1809],{"type":34,"value":1810},"\"Reçu envoyé pour un paiement de \"",{"type":28,"tag":127,"props":1812,"children":1813},{"style":1058},[1814],{"type":34,"value":1061},{"type":28,"tag":127,"props":1816,"children":1817},{"style":891},[1818],{"type":34,"value":1642},{"type":28,"tag":127,"props":1820,"children":1821},{"style":1058},[1822],{"type":34,"value":1647},{"type":28,"tag":127,"props":1824,"children":1825},{"style":920},[1826],{"type":34,"value":1827}," \"€.\"",{"type":28,"tag":127,"props":1829,"children":1830},{"style":151},[1831],{"type":34,"value":928},{"type":28,"tag":127,"props":1833,"children":1834},{"class":129,"line":376},[1835],{"type":28,"tag":127,"props":1836,"children":1837},{"style":151},[1838],{"type":34,"value":234},{"type":28,"tag":127,"props":1840,"children":1841},{"class":129,"line":615},[1842],{"type":28,"tag":127,"props":1843,"children":1844},{"style":151},[1845],{"type":34,"value":382},{"type":28,"tag":37,"props":1847,"children":1848},{},[1849],{"type":34,"value":1850},"Ici, la classe gère deux responsabilités. En appliquant le SRP, on peut diviser cela en deux classes distinctes.",{"type":28,"tag":116,"props":1852,"children":1854},{"className":118,"code":1853,"language":120,"meta":7,"style":7},"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",[1855],{"type":28,"tag":123,"props":1856,"children":1857},{"__ignoreMap":7},[1858,1877,1898,1905,1937,1965,1972,1979,2026,2033,2092,2099,2107,2144,2151,2158,2165,2184,2231,2238,2289,2296],{"type":28,"tag":127,"props":1859,"children":1860},{"class":129,"line":130},[1861,1865,1869,1873],{"type":28,"tag":127,"props":1862,"children":1863},{"style":134},[1864],{"type":34,"value":137},{"type":28,"tag":127,"props":1866,"children":1867},{"style":134},[1868],{"type":34,"value":142},{"type":28,"tag":127,"props":1870,"children":1871},{"style":145},[1872],{"type":34,"value":1538},{"type":28,"tag":127,"props":1874,"children":1875},{"style":151},[1876],{"type":34,"value":154},{"type":28,"tag":127,"props":1878,"children":1879},{"class":129,"line":157},[1880,1884,1889,1894],{"type":28,"tag":127,"props":1881,"children":1882},{"style":134},[1883],{"type":34,"value":1122},{"type":28,"tag":127,"props":1885,"children":1886},{"style":182},[1887],{"type":34,"value":1888}," ReceiptSender",{"type":28,"tag":127,"props":1890,"children":1891},{"style":891},[1892],{"type":34,"value":1893}," receiptSender",{"type":28,"tag":127,"props":1895,"children":1896},{"style":151},[1897],{"type":34,"value":1136},{"type":28,"tag":127,"props":1899,"children":1900},{"class":129,"line":218},[1901],{"type":28,"tag":127,"props":1902,"children":1903},{"emptyLinePlaceholder":12},[1904],{"type":34,"value":243},{"type":28,"tag":127,"props":1906,"children":1907},{"class":129,"line":228},[1908,1912,1916,1920,1925,1929,1933],{"type":28,"tag":127,"props":1909,"children":1910},{"style":134},[1911],{"type":34,"value":163},{"type":28,"tag":127,"props":1913,"children":1914},{"style":171},[1915],{"type":34,"value":1538},{"type":28,"tag":127,"props":1917,"children":1918},{"style":151},[1919],{"type":34,"value":179},{"type":28,"tag":127,"props":1921,"children":1922},{"style":182},[1923],{"type":34,"value":1924},"ReceiptSender",{"type":28,"tag":127,"props":1926,"children":1927},{"style":188},[1928],{"type":34,"value":1893},{"type":28,"tag":127,"props":1930,"children":1931},{"style":151},[1932],{"type":34,"value":211},{"type":28,"tag":127,"props":1934,"children":1935},{"style":151},[1936],{"type":34,"value":154},{"type":28,"tag":127,"props":1938,"children":1939},{"class":129,"line":237},[1940,1944,1948,1953,1957,1961],{"type":28,"tag":127,"props":1941,"children":1942},{"style":1180},[1943],{"type":34,"value":1183},{"type":28,"tag":127,"props":1945,"children":1946},{"style":151},[1947],{"type":34,"value":899},{"type":28,"tag":127,"props":1949,"children":1950},{"style":891},[1951],{"type":34,"value":1952},"receiptSender ",{"type":28,"tag":127,"props":1954,"children":1955},{"style":1058},[1956],{"type":34,"value":1197},{"type":28,"tag":127,"props":1958,"children":1959},{"style":891},[1960],{"type":34,"value":1893},{"type":28,"tag":127,"props":1962,"children":1963},{"style":151},[1964],{"type":34,"value":1136},{"type":28,"tag":127,"props":1966,"children":1967},{"class":129,"line":246},[1968],{"type":28,"tag":127,"props":1969,"children":1970},{"style":151},[1971],{"type":34,"value":234},{"type":28,"tag":127,"props":1973,"children":1974},{"class":129,"line":284},[1975],{"type":28,"tag":127,"props":1976,"children":1977},{"emptyLinePlaceholder":12},[1978],{"type":34,"value":243},{"type":28,"tag":127,"props":1980,"children":1981},{"class":129,"line":293},[1982,1986,1990,1994,1998,2002,2006,2010,2014,2018,2022],{"type":28,"tag":127,"props":1983,"children":1984},{"style":134},[1985],{"type":34,"value":163},{"type":28,"tag":127,"props":1987,"children":1988},{"style":134},[1989],{"type":34,"value":168},{"type":28,"tag":127,"props":1991,"children":1992},{"style":171},[1993],{"type":34,"value":1558},{"type":28,"tag":127,"props":1995,"children":1996},{"style":151},[1997],{"type":34,"value":179},{"type":28,"tag":127,"props":1999,"children":2000},{"style":182},[2001],{"type":34,"value":185},{"type":28,"tag":127,"props":2003,"children":2004},{"style":188},[2005],{"type":34,"value":1571},{"type":28,"tag":127,"props":2007,"children":2008},{"style":151},[2009],{"type":34,"value":196},{"type":28,"tag":127,"props":2011,"children":2012},{"style":134},[2013],{"type":34,"value":1580},{"type":28,"tag":127,"props":2015,"children":2016},{"style":188},[2017],{"type":34,"value":1585},{"type":28,"tag":127,"props":2019,"children":2020},{"style":151},[2021],{"type":34,"value":211},{"type":28,"tag":127,"props":2023,"children":2024},{"style":151},[2025],{"type":34,"value":154},{"type":28,"tag":127,"props":2027,"children":2028},{"class":129,"line":301},[2029],{"type":28,"tag":127,"props":2030,"children":2031},{"style":222},[2032],{"type":34,"value":1601},{"type":28,"tag":127,"props":2034,"children":2035},{"class":129,"line":309},[2036,2040,2044,2048,2052,2056,2060,2064,2068,2072,2076,2080,2084,2088],{"type":28,"tag":127,"props":2037,"children":2038},{"style":891},[2039],{"type":34,"value":894},{"type":28,"tag":127,"props":2041,"children":2042},{"style":151},[2043],{"type":34,"value":899},{"type":28,"tag":127,"props":2045,"children":2046},{"style":891},[2047],{"type":34,"value":904},{"type":28,"tag":127,"props":2049,"children":2050},{"style":151},[2051],{"type":34,"value":899},{"type":28,"tag":127,"props":2053,"children":2054},{"style":171},[2055],{"type":34,"value":913},{"type":28,"tag":127,"props":2057,"children":2058},{"style":151},[2059],{"type":34,"value":179},{"type":28,"tag":127,"props":2061,"children":2062},{"style":920},[2063],{"type":34,"value":1633},{"type":28,"tag":127,"props":2065,"children":2066},{"style":1058},[2067],{"type":34,"value":1061},{"type":28,"tag":127,"props":2069,"children":2070},{"style":891},[2071],{"type":34,"value":1642},{"type":28,"tag":127,"props":2073,"children":2074},{"style":1058},[2075],{"type":34,"value":1647},{"type":28,"tag":127,"props":2077,"children":2078},{"style":920},[2079],{"type":34,"value":1652},{"type":28,"tag":127,"props":2081,"children":2082},{"style":1058},[2083],{"type":34,"value":1061},{"type":28,"tag":127,"props":2085,"children":2086},{"style":891},[2087],{"type":34,"value":1571},{"type":28,"tag":127,"props":2089,"children":2090},{"style":151},[2091],{"type":34,"value":928},{"type":28,"tag":127,"props":2093,"children":2094},{"class":129,"line":359},[2095],{"type":28,"tag":127,"props":2096,"children":2097},{"emptyLinePlaceholder":12},[2098],{"type":34,"value":243},{"type":28,"tag":127,"props":2100,"children":2101},{"class":129,"line":368},[2102],{"type":28,"tag":127,"props":2103,"children":2104},{"style":222},[2105],{"type":34,"value":2106},"        // Utilisation de ReceiptSender pour envoyer le reçu\n",{"type":28,"tag":127,"props":2108,"children":2109},{"class":129,"line":376},[2110,2115,2119,2124,2128,2132,2136,2140],{"type":28,"tag":127,"props":2111,"children":2112},{"style":891},[2113],{"type":34,"value":2114},"        receiptSender",{"type":28,"tag":127,"props":2116,"children":2117},{"style":151},[2118],{"type":34,"value":899},{"type":28,"tag":127,"props":2120,"children":2121},{"style":171},[2122],{"type":34,"value":2123},"sendReceipt",{"type":28,"tag":127,"props":2125,"children":2126},{"style":151},[2127],{"type":34,"value":179},{"type":28,"tag":127,"props":2129,"children":2130},{"style":891},[2131],{"type":34,"value":1696},{"type":28,"tag":127,"props":2133,"children":2134},{"style":151},[2135],{"type":34,"value":196},{"type":28,"tag":127,"props":2137,"children":2138},{"style":891},[2139],{"type":34,"value":1585},{"type":28,"tag":127,"props":2141,"children":2142},{"style":151},[2143],{"type":34,"value":928},{"type":28,"tag":127,"props":2145,"children":2146},{"class":129,"line":615},[2147],{"type":28,"tag":127,"props":2148,"children":2149},{"style":151},[2150],{"type":34,"value":234},{"type":28,"tag":127,"props":2152,"children":2153},{"class":129,"line":663},[2154],{"type":28,"tag":127,"props":2155,"children":2156},{"style":151},[2157],{"type":34,"value":382},{"type":28,"tag":127,"props":2159,"children":2160},{"class":129,"line":671},[2161],{"type":28,"tag":127,"props":2162,"children":2163},{"emptyLinePlaceholder":12},[2164],{"type":34,"value":243},{"type":28,"tag":127,"props":2166,"children":2167},{"class":129,"line":679},[2168,2172,2176,2180],{"type":28,"tag":127,"props":2169,"children":2170},{"style":134},[2171],{"type":34,"value":137},{"type":28,"tag":127,"props":2173,"children":2174},{"style":134},[2175],{"type":34,"value":142},{"type":28,"tag":127,"props":2177,"children":2178},{"style":145},[2179],{"type":34,"value":1888},{"type":28,"tag":127,"props":2181,"children":2182},{"style":151},[2183],{"type":34,"value":154},{"type":28,"tag":127,"props":2185,"children":2186},{"class":129,"line":1395},[2187,2191,2195,2199,2203,2207,2211,2215,2219,2223,2227],{"type":28,"tag":127,"props":2188,"children":2189},{"style":134},[2190],{"type":34,"value":163},{"type":28,"tag":127,"props":2192,"children":2193},{"style":134},[2194],{"type":34,"value":168},{"type":28,"tag":127,"props":2196,"children":2197},{"style":171},[2198],{"type":34,"value":1738},{"type":28,"tag":127,"props":2200,"children":2201},{"style":151},[2202],{"type":34,"value":179},{"type":28,"tag":127,"props":2204,"children":2205},{"style":182},[2206],{"type":34,"value":185},{"type":28,"tag":127,"props":2208,"children":2209},{"style":188},[2210],{"type":34,"value":1571},{"type":28,"tag":127,"props":2212,"children":2213},{"style":151},[2214],{"type":34,"value":196},{"type":28,"tag":127,"props":2216,"children":2217},{"style":134},[2218],{"type":34,"value":1580},{"type":28,"tag":127,"props":2220,"children":2221},{"style":188},[2222],{"type":34,"value":1585},{"type":28,"tag":127,"props":2224,"children":2225},{"style":151},[2226],{"type":34,"value":211},{"type":28,"tag":127,"props":2228,"children":2229},{"style":151},[2230],{"type":34,"value":154},{"type":28,"tag":127,"props":2232,"children":2233},{"class":129,"line":1431},[2234],{"type":28,"tag":127,"props":2235,"children":2236},{"style":222},[2237],{"type":34,"value":1778},{"type":28,"tag":127,"props":2239,"children":2240},{"class":129,"line":1439},[2241,2245,2249,2253,2257,2261,2265,2269,2273,2277,2281,2285],{"type":28,"tag":127,"props":2242,"children":2243},{"style":891},[2244],{"type":34,"value":894},{"type":28,"tag":127,"props":2246,"children":2247},{"style":151},[2248],{"type":34,"value":899},{"type":28,"tag":127,"props":2250,"children":2251},{"style":891},[2252],{"type":34,"value":904},{"type":28,"tag":127,"props":2254,"children":2255},{"style":151},[2256],{"type":34,"value":899},{"type":28,"tag":127,"props":2258,"children":2259},{"style":171},[2260],{"type":34,"value":913},{"type":28,"tag":127,"props":2262,"children":2263},{"style":151},[2264],{"type":34,"value":179},{"type":28,"tag":127,"props":2266,"children":2267},{"style":920},[2268],{"type":34,"value":1810},{"type":28,"tag":127,"props":2270,"children":2271},{"style":1058},[2272],{"type":34,"value":1061},{"type":28,"tag":127,"props":2274,"children":2275},{"style":891},[2276],{"type":34,"value":1642},{"type":28,"tag":127,"props":2278,"children":2279},{"style":1058},[2280],{"type":34,"value":1647},{"type":28,"tag":127,"props":2282,"children":2283},{"style":920},[2284],{"type":34,"value":1827},{"type":28,"tag":127,"props":2286,"children":2287},{"style":151},[2288],{"type":34,"value":928},{"type":28,"tag":127,"props":2290,"children":2291},{"class":129,"line":1483},[2292],{"type":28,"tag":127,"props":2293,"children":2294},{"style":151},[2295],{"type":34,"value":234},{"type":28,"tag":127,"props":2297,"children":2298},{"class":129,"line":1491},[2299],{"type":28,"tag":127,"props":2300,"children":2301},{"style":151},[2302],{"type":34,"value":382},{"type":28,"tag":2304,"props":2305,"children":2306},"hr",{},[],{"type":28,"tag":29,"props":2308,"children":2310},{"id":2309},"les-avantages-pratiques-du-srp",[2311],{"type":34,"value":2312},"Les avantages pratiques du SRP",{"type":28,"tag":37,"props":2314,"children":2315},{},[2316],{"type":34,"value":2317},"Appliquer le SRP apporte plusieurs avantages concrets :",{"type":28,"tag":2319,"props":2320,"children":2321},"ul",{},[2322,2333,2343,2353,2363],{"type":28,"tag":2323,"props":2324,"children":2325},"li",{},[2326,2331],{"type":28,"tag":43,"props":2327,"children":2328},{},[2329],{"type":34,"value":2330},"Amélioration de la lisibilité du code",{"type":34,"value":2332}," : Chaque classe est responsable d'une seule tâche, ce qui simplifie la compréhension du code.",{"type":28,"tag":2323,"props":2334,"children":2335},{},[2336,2341],{"type":28,"tag":43,"props":2337,"children":2338},{},[2339],{"type":34,"value":2340},"Facilité de maintenance et évolutions",{"type":34,"value":2342}," : Vous pouvez modifier une fonctionnalité sans impacter d'autres parties du code.",{"type":28,"tag":2323,"props":2344,"children":2345},{},[2346,2351],{"type":28,"tag":43,"props":2347,"children":2348},{},[2349],{"type":34,"value":2350},"Tests unitaires plus simples",{"type":34,"value":2352}," : Avec des responsabilités uniques, les classes sont plus faciles à tester.",{"type":28,"tag":2323,"props":2354,"children":2355},{},[2356,2361],{"type":28,"tag":43,"props":2357,"children":2358},{},[2359],{"type":34,"value":2360},"Réduction du couplage",{"type":34,"value":2362}," : Le découpage des responsabilités réduit les dépendances entre les composants.",{"type":28,"tag":2323,"props":2364,"children":2365},{},[2366,2371],{"type":28,"tag":43,"props":2367,"children":2368},{},[2369],{"type":34,"value":2370},"Réutilisabilité accrue",{"type":34,"value":2372}," : Des classes spécialisées peuvent être réutilisées dans d'autres projets ou contextes.",{"type":28,"tag":29,"props":2374,"children":2376},{"id":2375},"quand-et-pourquoi-le-srp-peut-poser-des-défis",[2377],{"type":34,"value":2378},"Quand et pourquoi le SRP peut poser des défis",{"type":28,"tag":780,"props":2380,"children":2382},{"id":2381},"risque-de-sur-fragmentation",[2383],{"type":34,"value":2384},"Risque de sur-fragmentation",{"type":28,"tag":37,"props":2386,"children":2387},{},[2388],{"type":34,"value":2389},"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":28,"tag":780,"props":2391,"children":2393},{"id":2392},"complexité-dans-les-petites-applications",[2394],{"type":34,"value":2395},"Complexité dans les petites applications",{"type":28,"tag":37,"props":2397,"children":2398},{},[2399],{"type":34,"value":2400},"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":28,"tag":780,"props":2402,"children":2404},{"id":2403},"difficulté-à-identifier-les-responsabilités",[2405],{"type":34,"value":2406},"Difficulté à identifier les responsabilités",{"type":28,"tag":37,"props":2408,"children":2409},{},[2410],{"type":34,"value":2411},"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":28,"tag":780,"props":2413,"children":2415},{"id":2414},"refactorisation",[2416],{"type":34,"value":2417},"Refactorisation",{"type":28,"tag":37,"props":2419,"children":2420},{},[2421],{"type":34,"value":2422},"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":28,"tag":29,"props":2424,"children":2426},{"id":2425},"faq-questions-fréquemment-posées-sur-le-srp",[2427],{"type":34,"value":2428},"FAQ : Questions fréquemment posées sur le SRP",{"type":28,"tag":2430,"props":2431,"children":2432},"details",{},[2433,2439],{"type":28,"tag":2434,"props":2435,"children":2436},"summary",{},[2437],{"type":34,"value":2438},"1. Qu’est-ce que le principe de responsabilité unique (SRP) ?",{"type":28,"tag":37,"props":2440,"children":2441},{},[2442],{"type":34,"value":2443},"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":28,"tag":2430,"props":2445,"children":2446},{},[2447,2452],{"type":28,"tag":2434,"props":2448,"children":2449},{},[2450],{"type":34,"value":2451},"2. Pourquoi est-il important de suivre le SRP ?",{"type":28,"tag":37,"props":2453,"children":2454},{},[2455],{"type":34,"value":2456},"Le SRP améliore la lisibilité, la maintenabilité et la testabilité du code, tout en réduisant le couplage entre les composants.",{"type":28,"tag":2430,"props":2458,"children":2459},{},[2460,2465],{"type":28,"tag":2434,"props":2461,"children":2462},{},[2463],{"type":34,"value":2464},"3. Comment savoir si une classe viole le SRP ?",{"type":28,"tag":37,"props":2466,"children":2467},{},[2468],{"type":34,"value":2469},"Si une classe a plusieurs responsabilités ou plusieurs raisons de changer, elle viole probablement le SRP.",{"type":28,"tag":2430,"props":2471,"children":2472},{},[2473,2478],{"type":28,"tag":2434,"props":2474,"children":2475},{},[2476],{"type":34,"value":2477},"4. Le SRP n’augmente-t-il pas le nombre de classes et la complexité du projet ?",{"type":28,"tag":37,"props":2479,"children":2480},{},[2481],{"type":34,"value":2482},"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":28,"tag":2430,"props":2484,"children":2485},{},[2486,2491],{"type":28,"tag":2434,"props":2487,"children":2488},{},[2489],{"type":34,"value":2490},"5. Dois-je toujours appliquer le SRP, même dans les petits projets ?",{"type":28,"tag":37,"props":2492,"children":2493},{},[2494],{"type":34,"value":2495},"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":28,"tag":2304,"props":2497,"children":2498},{},[],{"type":28,"tag":714,"props":2500,"children":2505},{"cta":2501,"href":2502,"title":2503,"type":2504},"Accéder à l'assessment gratuit →","/mes-ressources","Ressource gratuite : Votre équipe livre-t-elle aussi vite qu'elle le pourrait ?","resource",[2506],{"type":28,"tag":37,"props":2507,"children":2508},{},[2509],{"type":34,"value":2510},"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":28,"tag":2512,"props":2513,"children":2514},"style",{},[2515],{"type":34,"value":2516},"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":7,"searchDepth":157,"depth":157,"links":2518},[2519,2520,2521,2524,2525,2531],{"id":31,"depth":157,"text":35},{"id":82,"depth":157,"text":85},{"id":728,"depth":157,"text":731,"children":2522},[2523],{"id":782,"depth":218,"text":785},{"id":2309,"depth":157,"text":2312},{"id":2375,"depth":157,"text":2378,"children":2526},[2527,2528,2529,2530],{"id":2381,"depth":218,"text":2384},{"id":2392,"depth":218,"text":2395},{"id":2403,"depth":218,"text":2406},{"id":2414,"depth":218,"text":2417},{"id":2425,"depth":157,"text":2428},"markdown","content:fr:architecture-craft:principe-srp-software-craftsmanship-exemples-java.md","content","fr/architecture-craft/principe-srp-software-craftsmanship-exemples-java.md","fr/architecture-craft/principe-srp-software-craftsmanship-exemples-java","md",1775679829923]