{"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\/de\/2024\/12\/14\/dry-matters\/","title":{"rendered":"Warum TROCKEN wichtig ist"},"content":{"rendered":"<p>Es gibt viele Artikel zum Thema DRY, ich empfehle die Lekt\u00fcre der Originalquelle \u201eThe Pragmatist Programmer\u201c von Andy Hunt und Dave Thomas. Allerdings sehe ich immer noch, wie viele Entwickler Fragen zu diesem Prinzip in der Softwareentwicklung haben.<\/p>\n<p>Das DRY-Prinzip besagt, dass wir uns nicht wiederholen sollten. Dies gilt sowohl f\u00fcr den Code als auch f\u00fcr die Prozesse, die wir als Programmierer ausf\u00fchren. Beispielcode, der gegen DRY verst\u00f6\u00dft:<\/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>Wie Sie in den Methoden \u201egreet\u201c und \u201egoodbye\u201c sehen k\u00f6nnen, wird eine optionale Instanz der Client-Klasse \u00fcbergeben, die dann auf Null \u00fcberpr\u00fcft werden muss, und dann k\u00f6nnen Sie mit der Arbeit beginnen. Um der DRY-Methode zu entsprechen, m\u00fcssen Sie die doppelte Nullpr\u00fcfung f\u00fcr die Klasseninstanz entfernen. Dies kann auf viele Arten implementiert werden; eine M\u00f6glichkeit besteht darin, die Instanz an den Klassenkonstruktor zu \u00fcbergeben, wonach keine \u00dcberpr\u00fcfungen erforderlich sind.<\/p>\n<p>Wir halten DRY ein, indem wir die ClientController-Spezialisierung auf einer einzelnen Client-Instanz verwenden:<\/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 betrifft auch Prozesse, die w\u00e4hrend der Softwareentwicklung auftreten. Stellen wir uns eine Situation vor, in der ein Entwicklungsteam selbst eine Version auf den Markt hochladen muss und sie dadurch von der Softwareentwicklung ablenkt. Dies ist ebenfalls ein Versto\u00df gegen DRY. Diese Situation wird durch die Anbindung einer CI\/CD-Pipeline gel\u00f6st, in der das Release automatisch ver\u00f6ffentlicht wird, sofern bestimmte Bedingungen von den Entwicklern erf\u00fcllt werden.<\/p>\n<p>Im Allgemeinen geht es bei DRY um das Fehlen von Wiederholungen sowohl in Prozessen als auch im Code. Dies ist auch aufgrund des menschlichen Faktors wichtig: Code, der weniger sich wiederholenden, verrauschten Code enth\u00e4lt, l\u00e4sst sich leichter auf Fehler \u00fcberpr\u00fcfen; Automatisierte Prozesse machen es f\u00fcr Menschen unm\u00f6glich, bei der Ausf\u00fchrung Fehler zu machen, da kein Mensch beteiligt ist.<\/p>\n<p>Steve Jobs hatte ein Sprichwort: \u201eEine Codezeile, die Sie nie schreiben mussten, ist eine Codezeile, die Sie nie debuggen mussten.\u201c<\/p>\n<h2>Quellen<\/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>Es gibt viele Artikel zum Thema DRY, ich empfehle die Lekt\u00fcre der Originalquelle \u201eThe Pragmatist Programmer\u201c von Andy Hunt und Dave Thomas. Allerdings sehe ich immer noch, wie viele Entwickler Fragen zu diesem Prinzip in der Softwareentwicklung haben. Das DRY-Prinzip besagt, dass wir uns nicht wiederholen sollten. Dies gilt sowohl f\u00fcr den Code als auch<a class=\"more-link\" href=\"https:\/\/demensdeum.com\/blog\/de\/2024\/12\/14\/dry-matters\/\">Continue reading <span class=\"screen-reader-text\">&#8220;Warum TROCKEN wichtig ist&#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":"de","enabled_languages":["en","ru","zh","de","fr","ja","pt"],"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}}},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/posts\/4071","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/comments?post=4071"}],"version-history":[{"count":7,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/posts\/4071\/revisions"}],"predecessor-version":[{"id":4078,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/posts\/4071\/revisions\/4078"}],"wp:attachment":[{"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/media?parent=4071"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/categories?post=4071"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/tags?post=4071"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}