Anche se ho una buona esperienza con OOP, sono abbastanza nuovo nel concetto di (H) MVC. Capisco il concetto di base del design modulare che viene fornito con HMVC, è la grande attrazione di esso. Ma una cosa che mi ha infastidito e che spero possa aiutarmi a capire meglio HMVC è come gestisci la connessione al database?
Suppongo che tu avresti un modulo, chiamiamolo Database, che avvierebbe la connessione. Ora all'inizio del mio script avrei qualcosa del tipo:
$dbConn = new Database();
Avvierebbe la connessione al database. Tuttavia, quando voglio eseguire una query, devo eseguire qualcosa sulla falsariga di:
$query = "my query string";
$result = $dbConn->query($query);
Quindi ho bisogno di accedere alla funzione di query dell'oggetto del database. Ora, per quanto posso dire in HMVC, non dovrei accedere direttamente a $dbConn
da un modello di un altro modulo. Ma quasi tutti i moduli avranno bisogno di accedere a $dbConn
.
Da quanto ho capito questo significa che nel controller di tutti gli altri moduli, ogni volta che ho bisogno di eseguire una query, dovrei creare una nuova istanza del modulo Database, passando una serie di argomenti, dicendo al Database quale metodo eseguire e quali argomenti richiede quel metodo.
Ma allora se devo fare una chiamata al database a metà di un metodo nel modello di un modulo? Molto spesso ho bisogno di aggiornare una tabella, o selezionare alcuni dati in base a un'istruzione if. Sicuramente non dovrei spostare quella logica sul controller?
Ciò significa che devo essere in grado di accedere a un altro modulo all'interno di un modello, che sembra infrangere le regole di HMVC. Quindi, come posso implementare un modulo di database in quanto questo mi confonde?