Questa è una domanda sulle relazioni di classe e non sulle funzionalità di classe.
Attualmente le mie classi DBConnection
e DBQuery
sono due oggetti separati
class DBConnection {
public $dbh;
__construct() {
$this->dbh = ... //Establish Connection to db
}
}
class DBQuery {
private $dbh;
__construct(PDO $dbh) {
$this->dbh= $dbh;
}
public runSQLQuery($query) {
$result = $this->dbh->execute($query);
$return $result;
}
}
$dbh = new DBConnection();
$DBQuery = new DBQuery($dbh);
$DBQuery->executeSQLQuery("SELECT * FROM mytable");
Così ho iniettato DBConnection
in DBQuery
.
Prima domanda - posso averli uniti come un unico oggetto invece che $dbh
è improbabile che possa essere usato in qualsiasi altra classe rispetto a DBQuery
.
È questa cattiva pratica raggrupparli, perché?
class DBQuery {
private $dbh;
__construct() {
$this->dbh = ... //Establish Connection to db
}
public runSQLQuery($query) {
$result = $this->dbh->execute($query);
$return $result;
}
}
$DBQuery = new DBQuery();
$DBQuery->executeSQLQuery("SELECT * FROM mytable");
Seconda domanda - Se la fusione è No-No allora, che ne dici di estendere, mantiene DBConnection
class separata in modo che possa essere usata da un'altra classe, se necessario, la classe DBQuery
semplicemente estende la classe %codice%.
Sembrano essere correlati logicamente quindi anche questa cattiva pratica, perché?
class DBConnection {
public $dbh;
__construct() {
$this->dbh = ... //Establish Connection to db
}
}
class DBQuery extends DBConnection {
__construct() {
parent::__construct()
}
public runSQLQuery($query) {
$result = $this->dbh->execute($query);
$return $result;
}
}
$DBQuery = new DBQuery();
$DBQuery->executeSQLQuery("SELECT * FROM mytable");
La linea di fondo è che sto cercando di trovare una soluzione in cui non devo istanziare oggetti extra (usa troppe righe di codice) e scrivere righe di codice non necessarie all'interno delle classi solo per passare l'una all'altra per nessun ovvio ragionare.
P.S. Ho familiarità con SOLID OOD e Separation of Concerns tuttavia non vedo ancora previsioni per tenere separate queste due classi.