Hallo
Ich mache mir Gedanken darüber, wie man vom MVC den Model-Teil programmieren könnte. Dazu sind mir 2 Varianten eingefallen.
Ausgangsbasis:
Um hier alles möglichst einfach zu halten, werden in keiner Klasse setter/getter verwendet.
Die properties sind allesamt public.
Es gibt eine Datenbank:
Und auch noch einen WebService:
In der MySQL-Tabelle A gibt es dann nicht nur die Spalte x, y und z, sondern auch die Spalte id.
Es soll möglich sein, Daten aus MySql auszulesen und dem Webservice zu schicken.
Variante 1:
Hier wird NICHT von A geerbt.
Variante 2:
Hier WIRD von A geerbt.
Vergleich der beiden Varianten:
Variante 1 hat eine aufwendigere Programmierung von ABd und AWeb, dafür jedoch eine einfache Programmierung im Hauptprogramm. Es muss nur ein A-Objekt übergeben werden.
Variante 2 hat eine einfachere Programmierung von ABd und AWeb, dafür muss im Hauptprogramm jede Eigenschaft von A einzeln ausgelesen und übergeben werden.
Mein Favorit wäre Variante 1.
Was ist eure Meinung dazu?
P. S. wie bin ich auf das gekommen? Es gab hier mal im Forum von jemanden ein Thema, wo es um MVC ging. Und dort hatte ich so etwas erwähnt: eine Kombination aus Datenbank und Webservice. Darum habe ich mir das hier überlegt. Aber ich bin in OOP noch nicht 100% sattelfest. Deshalb würde mich die Meinung von den Profis interessieren.
Ich mache mir Gedanken darüber, wie man vom MVC den Model-Teil programmieren könnte. Dazu sind mir 2 Varianten eingefallen.
Ausgangsbasis:
PHP-Code:
class A // beliebige Klasse, dessen Daten in der DB gespeichert werden
{
public $x;
public $y;
public $z;
public function __construct($x, $y, $z)
{
$this->x = $x;
$this->y = $y;
$this->z = $z;
}
}
Die properties sind allesamt public.
Es gibt eine Datenbank:
PHP-Code:
class MySql
{
public function query($str)
{
// ...
}
}
PHP-Code:
class Web
{
public function send($str) // hier kann man dem Webserice etwas schicken
{
// ...
}
}
Es soll möglich sein, Daten aus MySql auszulesen und dem Webservice zu schicken.
Variante 1:
Hier wird NICHT von A geerbt.
PHP-Code:
class ADb
{
public $id; // fragt man Daten von MySQL ab, erhält man noch eine id
public $a; // A-Instanz als property
public function select($id)
{
$db = new MySql();
$result = $db->query('SELECT x,y,z FROM a WHERE id = '.$id.';');
$this->id = $id;
$this->a = new A($result->x, $result->y, $result->z);
}
}
PHP-Code:
class AWeb
{
public $uid; // fragt man Daten vom Webservice ab, erhält man z. B. noch eine uid
public $a; // A-Instanz als property
public function send()
{
$web = new Web();
$web->send($this->a->x.$this->a->y.$this->a->z);
}
}
PHP-Code:
$aWeb = new AWeb();
$aDb = new ADb();
$aDb->select(1);
$aWeb->a = $aDb->a; // hier übergibt man eine A-Instanz
$aWeb->send();
Hier WIRD von A geerbt.
PHP-Code:
class ADb extends A
{
public $id; // fragt man Daten von MySQL ab, erhält man noch eine id
public function select($id)
{
$db = new MySql();
$result = $db->query('SELECT x,y,z FROM a WHERE id = '.$id.';');
$this->id = $id;
$this->x = $result->x;
$this->y = $result->y;
$this->z = $result->z;
}
}
PHP-Code:
class AWeb extends A
{
public $uid; // fragt man Daten vom Webservice ab, erhält man z. B. noch eine uid
public function send()
{
$web = new Web();
$web->send($this->x.$this->y.$this->z);
}
}
PHP-Code:
$aWeb = new AWeb();
$aDb = new ADb();
$aDb->select(1);
$aWeb->x = $aDb->x; // hier muss man x, y und z einzeln übergeben
$aWeb->y = $aDb->y;
$aWeb->z = $aDb->z;
$aWeb->send();
Variante 1 hat eine aufwendigere Programmierung von ABd und AWeb, dafür jedoch eine einfache Programmierung im Hauptprogramm. Es muss nur ein A-Objekt übergeben werden.
Variante 2 hat eine einfachere Programmierung von ABd und AWeb, dafür muss im Hauptprogramm jede Eigenschaft von A einzeln ausgelesen und übergeben werden.
Mein Favorit wäre Variante 1.
Was ist eure Meinung dazu?
P. S. wie bin ich auf das gekommen? Es gab hier mal im Forum von jemanden ein Thema, wo es um MVC ging. Und dort hatte ich so etwas erwähnt: eine Kombination aus Datenbank und Webservice. Darum habe ich mir das hier überlegt. Aber ich bin in OOP noch nicht 100% sattelfest. Deshalb würde mich die Meinung von den Profis interessieren.
Kommentar