Sie sind hier : sebastian1012.bplaced.net/ homepage-neu / Themen-Blog1 / aufteilen-von-funktionen-doppelte-validierung.php

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?