{"id":4071,"date":"2024-12-14T09:00:36","date_gmt":"2024-12-14T06:00:36","guid":{"rendered":"https:\/\/demensdeum.com\/blog\/2024\/12\/14\/dry-matters\/"},"modified":"2024-12-16T22:32:09","modified_gmt":"2024-12-16T19:32:09","slug":"dry-matters","status":"publish","type":"post","link":"https:\/\/demensdeum.com\/blog\/fr\/2024\/12\/14\/dry-matters\/","title":{"rendered":"Pourquoi SEC est important"},"content":{"rendered":"<p>Il existe de nombreux articles sur le th\u00e8me DRY, je recommande de lire la source originale &#8220;The Pragmatist Programmer&#8221; d&#8217;Andy Hunt et Dave Thomas. Cependant, je vois encore combien de d\u00e9veloppeurs se posent des questions sur ce principe dans le d\u00e9veloppement de logiciels.<\/p>\n<p>Le principe DRY stipule que nous ne devons pas nous r\u00e9p\u00e9ter, cela s&#8217;applique \u00e0 la fois au code et aux processus que nous effectuons en tant que programmeurs. Exemple de code qui viole DRY\u00a0:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-swift\" data-lang=\"Swift\"><code>class Client {\n    public let name: String\n    private var messages: [String] = []\n    \n    init(name: String) {\n        self.name = name\n    }\n    \n    func receive(_ message: String) {\n        messages.append(message)\n    }\n}\n\nclass ClientController {\n    func greet(client: Client?) {\n        guard let client else {\n            debugPrint(\"No client!\")\n            return\n        }\n        client.receive(\"Hello \\(client.name)!\")\n    }\n\n    func goodbye(client: Client?) {\n        guard let client else {\n            debugPrint(\"No client!!\")\n            return\n        }\n        client.receive(\"Bye \\(client.name)!\")\n    }\n}\n<\/code><\/pre>\n<\/div>\n<p>Comme vous pouvez le voir dans les m\u00e9thodes greet et goodbye, une instance facultative de la classe Client est transmise, qui doit ensuite \u00eatre v\u00e9rifi\u00e9e pour z\u00e9ro, puis vous pouvez commencer \u00e0 travailler avec elle. Pour vous conformer \u00e0 la m\u00e9thode DRY, vous devez supprimer la v\u00e9rification nulle en double pour l&#8217;instance de classe. Cela peut \u00eatre impl\u00e9ment\u00e9 de plusieurs mani\u00e8res\u00a0; une option consiste \u00e0 transmettre l\u2019instance au constructeur de classe, apr\u00e8s quoi aucune v\u00e9rification n\u2019est n\u00e9cessaire.<\/p>\n<p>Nous nous conformons \u00e0 DRY en utilisant la sp\u00e9cialisation ClientController sur une seule instance Client\u00a0:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-swift\" data-lang=\"Swift\"><code>class Client {\n    public let name: String\n    private var messages: [String] = []\n    \n    init(name: String) {\n        self.name = name\n    }\n    \n    func receive(_ message: String) {\n        messages.append(message)\n    }\n}\n\nclass ClientController {\n    private let client: Client\n\n    init(client: Client) {\n        self.client = client\n    }\n\n    func greet() {\n        client.receive(\"Hello \\(client.name)!\")\n    }\n\n    func goodbye() {\n        client.receive(\"Bye \\(client.name)!\")\n    }\n}\n<\/code><\/pre>\n<\/div>\n<p>DRY concerne \u00e9galement les processus qui se produisent lors du d\u00e9veloppement de logiciels. Imaginons une situation dans laquelle une \u00e9quipe de d\u00e9veloppement doit mettre en ligne elle-m\u00eame une version sur le march\u00e9, ce qui la d\u00e9tourne du d\u00e9veloppement de logiciels. Cela constitue \u00e9galement une violation de DRY\u00a0; Cette situation est r\u00e9solue en connectant un pipeline CI\/CD, dans lequel la version est publi\u00e9e automatiquement, sous r\u00e9serve du respect de certaines conditions par les d\u00e9veloppeurs.<\/p>\n<p>En g\u00e9n\u00e9ral, DRY concerne l&#8217;absence de r\u00e9p\u00e9titions \u00e0 la fois dans les processus et dans le code, ceci est \u00e9galement important en raison de la pr\u00e9sence du facteur humain : le code qui contient du code moins r\u00e9p\u00e9titif et bruyant est plus facile \u00e0 v\u00e9rifier pour les erreurs ; Les processus automatis\u00e9s emp\u00eachent les utilisateurs de commettre des erreurs lors de leur ex\u00e9cution, car aucun humain n&#8217;est impliqu\u00e9.<\/p>\n<p>Steve Jobs avait un dicton : \u00ab Une ligne de code que vous n\u2019avez jamais eu \u00e0 \u00e9crire est une ligne de code que vous n\u2019avez jamais \u00e0 d\u00e9boguer. \u00bb<\/p>\n<h2>Sources<\/h2>\n<p><a href=\"https:\/\/pragprog.com\/titles\/tpp20\/the-pragmatic-programmer-20th-anniversary-edition\/\" rel=\"noopener\" target=\"_blank\">https:\/\/pragprog.com\/titles\/tpp20\/the-pragmatic-programmer-20th-anniversary-edition\/<\/a><br \/>\n<a href=\"https:\/\/youtu.be\/-msIEOGvTYM\" rel=\"noopener\" target=\"_blank\">https:\/\/youtu.be\/-msIEOGvTYM<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Il existe de nombreux articles sur le th\u00e8me DRY, je recommande de lire la source originale &#8220;The Pragmatist Programmer&#8221; d&#8217;Andy Hunt et Dave Thomas. Cependant, je vois encore combien de d\u00e9veloppeurs se posent des questions sur ce principe dans le d\u00e9veloppement de logiciels. Le principe DRY stipule que nous ne devons pas nous r\u00e9p\u00e9ter, cela<a class=\"more-link\" href=\"https:\/\/demensdeum.com\/blog\/fr\/2024\/12\/14\/dry-matters\/\">Continue reading <span class=\"screen-reader-text\">&#8220;Pourquoi SEC est important&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[49],"tags":[],"class_list":["post-4071","post","type-post","status-publish","format-standard","hentry","category-blog","entry"],"translation":{"provider":"WPGlobus","version":"3.0.2","language":"fr","enabled_languages":["en","ru","zh","de","fr","ja","pt","hi"],"languages":{"en":{"title":true,"content":true,"excerpt":false},"ru":{"title":true,"content":true,"excerpt":false},"zh":{"title":true,"content":true,"excerpt":false},"de":{"title":true,"content":true,"excerpt":false},"fr":{"title":true,"content":true,"excerpt":false},"ja":{"title":true,"content":true,"excerpt":false},"pt":{"title":true,"content":true,"excerpt":false},"hi":{"title":false,"content":false,"excerpt":false}}},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/posts\/4071","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/comments?post=4071"}],"version-history":[{"count":7,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/posts\/4071\/revisions"}],"predecessor-version":[{"id":4078,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/posts\/4071\/revisions\/4078"}],"wp:attachment":[{"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/media?parent=4071"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/categories?post=4071"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/tags?post=4071"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}