Hallo ich brüte gerade an der Roadmap und Umsetzung für mein erstes kleines Projekt in PHP. Dabei bin ich auf eine "Design"-Frage gestoßen. (Software-Design wohlgemerkt).
Ich habe diverse Klassen in meinem Projekt die miteinander interagieren sollen. Zum Beispiel habe ich zwei Klassen User und Event. Ein User kann an einem Event teilnehmen, die Teilnahme absagen, etc. Ein Event kann erstellt, geändert oder abgesagt werden.
Gespeichert werden die Interaktionen in einer Datenbank. Schematisch grob könnte die DB so aussehen:
td_User: userID, userName, userMail
td_Event: eventID, eventCity, eventDate
td_BookedEvent: event_ID, user_ID
*Das ist nur grob schematisch und soll nur dazu dienen mein Problem zu schildern. Ich weiß dass das kein guter Entwurf der DB ist.
Meine Klasse User könnte wie folgt aussehen:
Soweit so klar. Jetzt meine Frage. Ich habe mir zusätzlich ein include-File mit einer PDO-Verbindung geschrieben. Was ist aus Sicht des Software-Designs die elegantere und auch bessere Art die Manipulationen auf der DB zu implementieren?
So wie ich das sehe habe ich zwei Möglichkeiten.
1: Ich erstelle eine PHP-Datei die von einem HTML-Form aufgerufen wird, ich übermittle die Daten für einen neuen User an mein Script, ich rufe mit den Daten den Konstruktor auf, lasse mit den Get-Funktionen die Werte in Variablen speichern und übergebe diese Werte dann einer weiteren Funktion die mittels PDO die Werte auf die DB schreibt.
ODER
2: Ich implementiere den Datenbankzugriff bereits im Konstruktor. Sprich ich müsste wohl das PDO.php via Require einbinden.
Ich persönlich würde die zweite Variante bevorzugen, da ich somit zu jeder Methode die aufgerufen werden kann, die aufgerufene Transaktion sowie die übergebenen Parameter besser prüfen und steuern kann (zumindest bilde ich mir das ein). Bin mir aber nicht sicher ob das ein Weg ist, den mir erfahrene Programmierer empfehlen könnten.
Oder mache ich mich nur selbst mit der Frage verrückt?
Sorry, wenn die Frage banal anmuten mag, aber ich will nicht viel Zeit in die Software investieren und später sagt mir dann jeder, was für nen Bullshit ich da zusammen gestümpert hätte.
Danke auf jeden Fall für die Antworten vorab.
Ich habe diverse Klassen in meinem Projekt die miteinander interagieren sollen. Zum Beispiel habe ich zwei Klassen User und Event. Ein User kann an einem Event teilnehmen, die Teilnahme absagen, etc. Ein Event kann erstellt, geändert oder abgesagt werden.
Gespeichert werden die Interaktionen in einer Datenbank. Schematisch grob könnte die DB so aussehen:
td_User: userID, userName, userMail
td_Event: eventID, eventCity, eventDate
td_BookedEvent: event_ID, user_ID
*Das ist nur grob schematisch und soll nur dazu dienen mein Problem zu schildern. Ich weiß dass das kein guter Entwurf der DB ist.
Meine Klasse User könnte wie folgt aussehen:
PHP-Code:
class User
{
private $Mail = "Mailadresse";
private $Username = "Username";
public function GetUserName(){
echo $this->Username;
}
public function GetMail(){
echo $this.Mail;
}
public function setUsername($name)
{
$this->Username = $name;
}
public function __construct($name, $mail)
{
$this->Mail = $mail;
$this->Username = $name;
}
}
Soweit so klar. Jetzt meine Frage. Ich habe mir zusätzlich ein include-File mit einer PDO-Verbindung geschrieben. Was ist aus Sicht des Software-Designs die elegantere und auch bessere Art die Manipulationen auf der DB zu implementieren?
So wie ich das sehe habe ich zwei Möglichkeiten.
1: Ich erstelle eine PHP-Datei die von einem HTML-Form aufgerufen wird, ich übermittle die Daten für einen neuen User an mein Script, ich rufe mit den Daten den Konstruktor auf, lasse mit den Get-Funktionen die Werte in Variablen speichern und übergebe diese Werte dann einer weiteren Funktion die mittels PDO die Werte auf die DB schreibt.
ODER
2: Ich implementiere den Datenbankzugriff bereits im Konstruktor. Sprich ich müsste wohl das PDO.php via Require einbinden.
Ich persönlich würde die zweite Variante bevorzugen, da ich somit zu jeder Methode die aufgerufen werden kann, die aufgerufene Transaktion sowie die übergebenen Parameter besser prüfen und steuern kann (zumindest bilde ich mir das ein). Bin mir aber nicht sicher ob das ein Weg ist, den mir erfahrene Programmierer empfehlen könnten.
Oder mache ich mich nur selbst mit der Frage verrückt?
Sorry, wenn die Frage banal anmuten mag, aber ich will nicht viel Zeit in die Software investieren und später sagt mir dann jeder, was für nen Bullshit ich da zusammen gestümpert hätte.
Danke auf jeden Fall für die Antworten vorab.
Kommentar