# MVC selbst schreiben



## soyo (2. Oktober 2007)

Hallo ...

... Was MVC ist und wozu es gut ist weiß ich. Mein Problem liegt in der Umsetzung in PHP. Ich habe unzähle fertige PHP Frameworks gefunden, außerdem auch ein Tutorial. Leider basiert das Tutorial auf Zend. Ich wollte vermeiden fertige Frameworks zu verwenden, da ich gern alles selber schreibe.

Nu zu meinen Fragen: Lohnt sich das Buch 'PHP Design Patterns' von O'Relly bezüglich MVC?
Kennt jemand ein verständliches, möglich deutsches, Tutorial was sich mit dem MVC Pattern auseinadnersetzt. Wenn möglich, kein Tutorial welches sich auf irgendein Framework bezieht.

Gruß soyo


----------



## X-Color (2. Oktober 2007)

Hi,
schön das du dich tiefer in die Materie PHP begeben möchtest. 
Der Grund warum ein MVC-Modell verwendet wird ist der, dass du bei einer Anwendung an einem schon frühen Zeitpunkt keinen Überblick mehr über PHP und HTML hast, da alles miteinander vermischt wird. 
Da hilft das MVC, das durch seine Architektur PHP Klassen und deren Funktionen, das Ausführen von Funktionen und das einbetten in HTML sauber trennt. So ist immer sofort ersichtlich wo sich welche Funktion befindet, wenn Fehler auftreten die dadurch hervorgerufen werden.

Es ist also unumgänglich in die Objektorientierte Programmierung umzusteigen, die das MVC-Model verwendet und bevor du mit einem Framework beginnen möchtest, sammel noch genug Erfahrung in PHP und Anwendungsentwicklung.

Grüße Gerrit

// Sorry hatte mich verlesen und ging davon aus, das du noch nichts über MVC weisst.


----------



## soyo (2. Oktober 2007)

Ich glaub du hast dich verlesen. Ich programmiere schon einige Jahre mit PHP und mittlerweile auch schon einige Zeit OOP in PHP. Mein Wissen ist sicherlich nicht so groß wie das einiger anderer User hier, aber ich komm zurecht 

Um HTML und PHP zu trennen nutze ich schon lange, eine eigene Template-Klasse. Um das ganze jetzt noch flexibler zu gestalten, versuche ich mich an MVC.

Gruß soyo


----------



## ByeBye 182971 (2. Oktober 2007)

Was hälts du davon ein geeignetes Framework zu nutzen wie z.b. Zend Framwork oder CakePHP ?

Ich benutze selbst das Zend Framework und bin sehr zufrieden! Man kommt sehr schnell in die Materie dank mancher Anleitungen. Es ist auch noch recht neu und ist deshalb noch nicht so umfangreich (zwecks nachlernen).

Ich kann dir das empfehlen.


----------



## X-Color (2. Oktober 2007)

Ja das habe ich leider, sorry .
Ich denke es würde ein Buch zu OOP reichen (falls du noch keines besitzt), das sich mit einem Kapitel für MVC beschäftigt. Wenn du andere andere Entwurfsmuster kennenlernen möchtest, dann greif dir natürlich gleich das ganze Sortiment. Kann dir allerdings nichts über das von dir vorgeschlagene Buch sagen.

Hab auf anhieb jetzt auch kein Tutorial finden können. 
Kurz umschrieben gliedert sich ja MVC  in Models, Views und Controllers.
Der Controller führt Funktionen (Methoden) einer Klasse aus und erhält meist nur als 	 Rückgabewert true oder False, mehr nicht! 
Keine Schleifen, kein if-else, keine Berechnungen...Nur Methodenaufrufe!
Das Model (je eine klasse), enthält die Methoden die vom Controller ausgeführt werden sollen und setzt diese um (wichtig dabei ist auch zu beachten, das Funktionen Atomar sein sollten, also sich wirklich nur um eine Aufgabe kümmern).
Der View enthält die Optischen Informationen und wird am Ende vom Controller geladen.

So kann ein MVC aussehen:
/index.php (Controller)

```
<?php
	session_start();

	include('models/datenbank.php');
	include('models/class_helper.php');
	include('models/class_bild.php');

	$roteKreuz = new HelperFabrik;
	$helper = $roteKreuz->anlegen();
	$gallerie = new BildFabrik;
	$bild = $gallerie->anlegen();

	switch($_POST['aktion']) {
		case 'upload':
			try {
				$bild->uploadAusfuehren();
			} catch (Exception $e) {
				print $e->getMessage();
			}
			$aktion = '_preview';
		break;
		case 'speichern':
			$bild->eintragSpeichern();
			$aktion = '_index';
		break;
		default:
			$galerieIndex = $bild->galerieIndexLesen();
			$aktion = '_index';
		break;
	}
	include('views/galerie'.$aktion.'.tpl.html');
?>
```

/models/class_bild.php (Models)

```
<?php
class BildFabrik {
	function anlegen() {
		return new Bild();
  	}
}
class Bild {
/** Variablen ***************************/
/****************************************/
	private $uploadOrdner = '';
	private $tempOrdner = '';
	private $gallerieOrdner = '';
	private $datenbank = null;
	
/** Magische Methoden *******************/
/****************************************/
	private function __construcht() {
	}

/** Spezielle Methoden ******************/
/****************************************/
	public function uploadAusfuehren() {
		if (move_uploaded_file($_FILES['picture']['tmp_name'], $this->getUploadOrdner().$_FILES['picture']['name'])) {
    		$this->setOrginalDateiname($_FILES['picture']['name']);
    	} else {
   		 	throw new exception('Fehler beim Upload aufgetreten');
		}
	}
```

und jetzt nur noch das HTML-File, welches auf die Attribute eines Objekts zugreift.

Gruß Gerrit


----------



## Flex (2. Oktober 2007)

Patterns für Enterprise Application Architekturen von Martin Fowler

Das Buch wurde mir bereits mehrmals empfohlen bzw. darauf verwiesen, aufgrund von Geldmangel konnte ich es mir bisher aber nicht leisten.

Professionelle PHP5 Programmierung von George Schlossnagle fand ich ebenfalls sehr interessant.

Ansonsten hilft der Artikel auf Wikipedia dir auch schon ein Stück weiter.

Ansonsten sind die meisten Tutorials/Artikel über MVC und Design Patterns auf Englisch.


----------



## soyo (2. Oktober 2007)

Sicherlich ist ein Framework sehr sinnvoll, erst recht wenn man im Team arbeitet. Nur bleibt für mich immer die Frage, was passiert eigentlich wenn ich diese oder jene Methode anwende? 
Also kommt für mich kein fertiges Framework in Frage, wie schon oben geschrieben. 

Also wird mir nix anderes übrig bleiben, als ein Buch zu kaufen. Kann ja auch nicht schaden 

Gruß soyo


----------



## daddz (3. Oktober 2007)

Schau dir mal diese Artikel an: Understanding MVC in PHP.
Vielleicht hilft dir das ein wenig auf die Sprünge!


----------



## ByeBye 182971 (5. November 2007)

Hat jemand noch Code-Beispiele vielleicht?

Ich versuche auch gerade mein eigenes MVC zu schreiben, da mir die Frameworks meist zu umfangreich und manchmal etwas undurchschaubar sind.

Gruß suf*****


----------

