{"id":556,"date":"2011-04-06T08:51:08","date_gmt":"2011-04-06T06:51:08","guid":{"rendered":"https:\/\/d-mueller.de\/blog\/?p=556"},"modified":"2011-04-06T08:56:17","modified_gmt":"2011-04-06T06:56:17","slug":"aufteilen-von-funktionen-doppelte-validierung","status":"publish","type":"post","link":"https:\/\/d-mueller.de\/blog\/aufteilen-von-funktionen-doppelte-validierung\/","title":{"rendered":"Aufteilen von Funktionen = doppelte Validierung"},"content":{"rendered":"<p>F\u00fcr ein kleines Nebenprojekt bin ich am Werkeln mit <a href=\"http:\/\/codeigniter.com\/\">codeigniter<\/a>. Soweit so gut. Ich brauchte eine Funktion, die den Bildupload und anschlie\u00dfendes resizing erledigte. Kein Problem, dank <a href=\"http:\/\/codeigniter.com\/user_guide\/libraries\/file_uploading.html\">Upload-Klasse<\/a> und <a href=\"http:\/\/codeigniter.com\/user_guide\/libraries\/image_lib.html\">Image Manipulation-Klasse<\/a>. Okay, das hier soll aber keine Lobhymne auf ein Framework werden, sondern ein allgemeines Thema ansprechen.<\/p>\n<p>Ich hab also meine Funktion, die upload <b>und<\/b> resize erledigt. Wens interessiert:<\/p>\n<pre data-enlighter-language=\"php\" class=\"EnlighterJSRAW\">\r\npublic function process_image($cat_id)\r\n{\r\n\t\/\/----------------------------------\r\n\t\/\/Upload\r\n\t\r\n\tif (intval($cat_id) &lt;= 0)\r\n\t\tthrow new Exception(&quot;Invalid Video ID&quot;);\r\n\t\r\n\t$upload_config = array\r\n\t(\r\n\t\t&#039;upload_path&#039; =&gt; IMAGES_PATH,\r\n\t\t&#039;allowed_types&#039; =&gt; &#039;gif|jpg|png|jpeg&#039;,\r\n\t\t&#039;overwrite&#039; =&gt; true\r\n\t);\r\n\t\r\n\tif (!is_dir(IMAGES_PATH))\r\n\t\tthrow new Exception(&quot;Could not find Upload directory&quot;);\r\n\r\n\t$this-&gt;load-&gt;library(&#039;upload&#039;, $upload_config);\r\n\r\n\tif (!$this-&gt;upload-&gt;do_upload())\r\n\t\tthrow new Exception(&quot;Upload Error: &quot; . $this-&gt;upload-&gt;display_errors()); \r\n\r\n\t$upload_info = $this-&gt;upload-&gt;data();\r\n\r\n\t\/\/----------------------------------\r\n\t\/\/Resize\r\n\t$thumbname = IMAGES_PATH . &#039;thumb_&#039; . $cat_id . &#039;_&#039; . uniqid() . &quot;.&quot; . $upload_info[&#039;image_type&#039;];\r\n\t\t\t\t\r\n\t$resize_config = array\r\n\t(\r\n\t\t&#039;source_image&#039; =&gt; $upload_info[&#039;full_path&#039;],\r\n\t\t&#039;maintain_ratio&#039; =&gt; false,\r\n\t\t&#039;width&#039; =&gt; 65,\r\n\t\t&#039;height&#039; =&gt; 65,\r\n\t\t&#039;new_image&#039; =&gt; $thumbname\r\n\t);\r\n\t\r\n\t$this-&gt;load-&gt;library(&#039;image_lib&#039;, $resize_config); \r\n\t\r\n\tif (!$this-&gt;image_lib-&gt;resize())\r\n\t{\r\n\t\t@unlink($upload_info[&#039;full_path&#039;]);\r\n\t\t\r\n\t\tthrow new Exception(&quot;Resize Error: &quot; . $this-&gt;image_lib-&gt;display_errors());\r\n\t}\r\n\t\r\n\t@unlink($upload_info[&#039;full_path&#039;]);\r\n\t\r\n\treturn true;\r\n}\r\n<\/pre>\n<p>Nunja, als Mensch der die <a href=\"https:\/\/d-mueller.de\/blog\/grundprinzipien-der-objektorientierten-programmierung\/\">OOP Grundprinzipien<\/a> hochhalten m\u00f6chte, schmerzt es nat\u00fcrlich, dass die Funktion sich um Upload <b>und<\/b> Resize k\u00fcmmert. Ich trenne also die Funktionen auf, Wiederverwendbarkeit und so&#8230; <\/p>\n<h2>Der Haken an der Sache<\/h2>\n<p>Dabei passiert nun das, was immer passiert: <b>Ich f\u00fchle mich getrieben, den ganzen Kram neu zu validieren<\/b>. <\/p>\n<blockquote><p>\nIst die <i>$cat_id<\/i> noch g\u00fcltig? Gibt es das Verzeichnis IMAGE_PATH noch? Existiert mein zu resizendes Bild und ist es wirklich ein Bild?\n<\/p><\/blockquote>\n<p>Toll. H\u00e4tte ich die Funktionen nicht aufgetrennt, k\u00f6nnte mich auf all das verlassen. Weil ich jetzt genau wei\u00df, dass ich die Resize-Methode alleine <b>nie in diesem Projekt brauchen werde<\/b>, ist der Refactoring-Aufwand also komplett f\u00fcr die Katz, weil er mir keinen Vorteil bringt. Man kann argumentieren, dass man sp\u00e4ter ja irgendwann nochmal einen isolierten Resize brauchen werde, ja&#8230;<\/p>\n<p>Naja, ich werde wohl zuk\u00fcnftig diesbez\u00fcglich meine Prinzipien ab und an \u00fcber den Haufen werfen, wenn ich in so einem kleinen Projekt gewiss sein kann, dass dadurch kein Nachteil entsteht. <b>Wie l\u00f6st ihr solche Fragen?<\/b><\/p>\n","protected":false},"excerpt":{"rendered":"<p>F\u00fcr ein kleines Nebenprojekt bin ich am Werkeln mit codeigniter. Soweit so gut. Ich brauchte eine Funktion, die den Bildupload und anschlie\u00dfendes resizing erledigte. Kein Problem, dank Upload-Klasse und Image Manipulation-Klasse. Okay, das hier soll aber keine Lobhymne auf ein &hellip; <a href=\"https:\/\/d-mueller.de\/blog\/aufteilen-von-funktionen-doppelte-validierung\/\">Weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,5,3],"tags":[],"class_list":["post-556","post","type-post","status-publish","format-standard","hentry","category-php","category-software-engineering","category-webdev"],"_links":{"self":[{"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/posts\/556","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/comments?post=556"}],"version-history":[{"count":0,"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/posts\/556\/revisions"}],"wp:attachment":[{"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/media?parent=556"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/categories?post=556"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/tags?post=556"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}