Claudius L.: Umsetzung der Trennung von PHP- und HTML-Code / des EVA-Prinzips

Beitrag lesen

Hallo dedlfix,

und vielen Dank für deine Antwort.

"Ausgabe" beschränkt sich nicht nur auf echo und Konsorten, vielmehr ist mit diesem Teil die Ausgabelogik gemeint. Wenn also für die Ausgabe ein Array mit Datensätzen zu durchlaufen ist, und (abgesehen davon, dass man das mit modernem CSS machen kann) jede zweite Zeile eine andere Formatierung bekommen soll, dann ist die foreach-Schleife, das Umschalten des Zweite-Zeile-Flags und das if, um darauf zu testen, nicht Verarbeitungs- sondern Ausgabelogik.

Ok, so habe ich es noch nie betrachtet. Nach dieser Definition ist mein obiges Codebeispiel (zumindest das obere) also eigentlich ein Stück reiner Ausgabelogik, richtig?

Ähnlich schwer tue ich mich an dieser Stelle des Codes[2]:
// Abfrage der Bestätigung, falls ein Konto zum Löschen markiert wurde
if (set_not_empty('post', 'delete_account_id') && set_not_empty('post', 'delete_account_name') && set_not_empty('post', 'delete_account_owner_name'))

Das ist Verarbeitungslogik. Die erstellt für die Ausgabelogik eine boolesche Variable. Die A. muss das da oben alles nicht wissen. Sie muss nur entscheiden können, ob dies oder jenes auszugeben ist.

Soweit kann ich das im Prinzip nachvollziehen. Das ist im Prinzip die Art „redundater Prüfung“, von der ich nach dem zweiten Codebeispiel gesprochen habe. Und genau das scheint mir in meinem Fall so seltsam, da der oben zitierte Code der letzte meiner Verarbeitungsschritte ist. Folglich ergäbe sich bei Verwendung einer boolschen Kontrollvariablen für die Ausgabe:

// Abfrage der Bestätigung, falls ein Konto zum Löschen markiert wurde  
  
$account_selected_to_delete = false;  
  
if (set_not_empty('post', 'delete_account_id') && set_not_empty('post', 'delete_account_name') && set_not_empty('post', 'delete_account_owner_name'))  
	{  
		$account_selected_to_delete = true;  
	}  
  
// Beginn der Ausgabe  
  
if ($account_selected_to_delete)  
	{  
		$format = '<p>Wirklich das Konto %1$s löschen? (Besitzer: %2$s)</p>  
<form action="index.php?view=manage_accounts" method="post">  
	<fieldset>  
		<input type="hidden" name="account_id" value="%3$s" />  
		<button name="confirm" value="ok" type="submit">Ja</button>  
		<button name="confirm" value="" type="submit">Nein</button>  
		<!--<input type="submit" name="confirm" value="ok" />  
		<input type="submit" name="confirm" value="" />-->  
	</fieldset>  
</form>';  
		  
		printf($format, htmlspecialchars($_POST['delete_account_name']), htmlspecialchars($_POST['delete_account_owner_name']), htmlspecialchars($_POST['delete_account_id']));  
	}  
	  
// Weitere Ausgaben wie Auflistung aller Konten (vgl. Codebeispiel 1)

Aber so meinst du doch im Prinzip, oder?

Ein absolutes "Richtig" oder "Falsch" gibt es nicht. Die Antwort kann eigentlich nur lauten: So, dass man die Aufgabenstellung leicht im Code nachvollziehen kann, dass Änderungen einfach ohne riesige Auswirkungen auf den Rest des Programms erledigt werden können.

Ist zwar vermutlich Ansichtssache, aber welches Vorgehen ist deiner Meinung nach empfehlenswerter: das von mir oben gezeigte, oder so, wie es zehbaeh macht?
In zehbaehs Version ist meiner Meinung nach das HTML besser les- und durchschaubar, meine Version legt das Augenmerk mehr auf die technische Seite. Dafür habe ich aber auch das ganze HTML mit Platzhaltern kompakt in einem String. Gibt es hier ein objektives „Besser“?

Das Thema ist übrigens grad vor drei Tagen diskutiert worden: Trennung der Anliegen (Logik - Layout).

Danke für den Hinweis, das habe ich übersehen. ;-)
Enthält auf jeden Fall einige interessante Denkanstöße.

[2]: Die Funktion set_not_empty() ist eine vorher im Programmablauf definierte Funktion, die im Prinzip nur isset() und $foo != '' zusammenfasst.

Dafür gibt es empty().

Ohje, das ist peinlich. Da hat der Wunsch, eine praktische, zusammenfassende Funktion zu basteln wohl das Denken vernebelt …

Schönen Abend noch und viele Grüße,

Claudius