Hier im Forum bekommt ihr bei euren fragen schnelle hilfe.Hier geht es rund um das Web SeitenProgrammieren.Alles rund ums Javascript,Html,Php,Css und Sql.Auf fast allen Fragen haben wir eine Antwort.
Der Soforthilfe-chat verspricht das ,was sein Name sagt. Hier sind Leute Online die sofort ihre hilfe anbieten.Seht in der OnlineListe nach und wenn einer Online ist werdet ihr auch antwort bekommen. Admine ,Moderatoren und Helfer sind unsere Spezialisten in Sachen Web Programierung
71 Unwetterwarnungen in Deutschland
Die Datenbank wurde zuletzt am 02.08.2020 17:34:28 aktualiesiert
71

Aufteilen von Funktionen = doppelte Validierung

Für ein kleines Nebenprojekt bin ich am Werkeln mit codeigniter. Soweit so gut. Ich brauchte eine Funktion, die den Bildupload und anschließendes resizing erledigte. Kein Problem, dank Upload-Klasse und Image Manipulation-Klasse. Okay, das hier soll aber keine Lobhymne auf ein Framework werden, sondern ein allgemeines Thema ansprechen.

Ich hab also meine Funktion, die upload und resize erledigt. Wens interessiert:

public function process_image($cat_id) { 	//---------------------------------- 	//Upload 	 	if (intval($cat_id) <= 0) 		throw new Exception("Invalid Video ID"); 	 	$upload_config = array 	( 		'upload_path' => IMAGES_PATH, 		'allowed_types' => 'gif|jpg|png|jpeg', 		'overwrite' => true 	); 	 	if (!is_dir(IMAGES_PATH)) 		throw new Exception("Could not find Upload directory");  	$this->load->library('upload', $upload_config);  	if (!$this->upload->do_upload()) 		throw new Exception("Upload Error: " . $this->upload->display_errors());   	$upload_info = $this->upload->data();  	//---------------------------------- 	//Resize 	$thumbname = IMAGES_PATH . 'thumb_' . $cat_id . '_' . uniqid() . "." . $upload_info['image_type']; 				 	$resize_config = array 	( 		'source_image' => $upload_info['full_path'], 		'maintain_ratio' => false, 		'width' => 65, 		'height' => 65, 		'new_image' => $thumbname 	); 	 	$this->load->library('image_lib', $resize_config);  	 	if (!$this->image_lib->resize()) 	{ 		@unlink($upload_info['full_path']); 		 		throw new Exception("Resize Error: " . $this->image_lib->display_errors()); 	} 	 	@unlink($upload_info['full_path']); 	 	return true; } 

Nunja, als Mensch der die OOP Grundprinzipien hochhalten möchte, schmerzt es natürlich, dass die Funktion sich um Upload und Resize kümmert. Ich trenne also die Funktionen auf, Wiederverwendbarkeit und so…

Der Haken an der Sache

Dabei passiert nun das, was immer passiert: Ich fühle mich getrieben, den ganzen Kram neu zu validieren.

Ist die $cat_id noch gültig? Gibt es das Verzeichnis IMAGE_PATH noch? Existiert mein zu resizendes Bild und ist es wirklich ein Bild?

Toll. Hätte ich die Funktionen nicht aufgetrennt, könnte mich auf all das verlassen. Weil ich jetzt genau weiß, dass ich die Resize-Methode alleine nie in diesem Projekt brauchen werde, ist der Refactoring-Aufwand also komplett für die Katz, weil er mir keinen Vorteil bringt. Man kann argumentieren, dass man später ja irgendwann nochmal einen isolierten Resize brauchen werde, ja…

Naja, ich werde wohl zukünftig diesbezüglich meine Prinzipien ab und an über den Haufen werfen, wenn ich in so einem kleinen Projekt gewiss sein kann, dass dadurch kein Nachteil entsteht. Wie löst ihr solche Fragen?