MVC: Model Design

e.motion

Mitglied
Hi!

Die Beispiele sind zwar in PHP aber da es eigentlich nur auf die Logik ankommt hab ich mich dazu entschieden ins Coders Talk Forum zu posten.

Ich schreibe gerade just 4 fun ein MVC System mit PHP. Nun hab ich folgendes Problem beim entwerfen der Model Komponenten.

Nehmen wir zum Beispiel das Model News.

PHP:
class News
{
	var $id;
	var $poster;
	var $headline;
	var $category;
	var $content;	
	var $date;

	function delete($id)
	{
		//Löschen der News anhand der ID aus der Db
	}

	function read($id)
	{
		//Liest die Daten der News anhand der ID aus der Db aus ud setzt die Variablen der Klasse
	}
	
	//get Methoden für die Variablen der Klasse
}

Wenn ich jetzt in der View Komponente nur eine News anzeigen will ist das ja auch weiter kein Problem.
Aber wie kann ich jetzt alle News anzeigen lassen die in der Datanbank gespeichert sind bzw. alle News von einem betimmten User oder alle News die neuer sind als ein bestimmtes Datum?

Im Prinzip würde es ja wie folgt gezeigt funktionieren:
PHP:
$newsarr = array();
$db->query("SELECT id FROM news WHERE poster='$poster_id'");
while($db->readNext())
{
	$newsarr[$db->record("id")] = new News($db->record("id"));
}

foreach($newsarr as $id => $news)
{
	echo $news->getContent();
}
Dies wäre allerdings ziemlich Umständlich und ja dem Pinzip des MVC widersprechen da der View ja nur über die Models auf die Datenbank zugreifen darf.

Wie kann ich jetzt am besten das News Model gestalten um dieses Problem zu umgehen?

Hoffe ihr versteht meine Fragestellung.

MfG e.motion
 
MVC ist umständlich. Zumindest solange die Projekte klein sind. Umso grösser das Projekt wird umso mehr sinn macht der Zusatzaufwand einer klaren trennung.

Du darfst gerne HTML und PHP mischen, solange in diesem Mischfile keine Logic deklariert sondern nur aufgerufen wird.
 
MVC ist umständlich. Zumindest solange die Projekte klein sind.

Stimmt schon aber ich wills ja einfach mal so just 4 fun ausprobieren.

Hab jetzt einfach eine Klasse NewsContainer geschrieben der ich ORDER BY, LIMIT und WHERE Bedingungen übergebe. Diese list mir dann automatisch die News aus. In der NewsContainer Klasse habe ich eine Variable in der immer das Aktuelle NewsObjekt entahlten. Per readNext() Methode der Klasse kann dann immer das nächste NewsObjekt auf die Variable gesetzt werden.
 
Zurück