HMVC e connessioni di database

3

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?

    
posta Styphon 06.12.2013 - 14:26
fonte

2 risposte

1

HMVC riguarda la composizione dell'interfaccia utente, non ha nulla a che fare con il modo in cui i livelli sottostanti comunicano tra loro. Mi dilungherò un po 'sull'esempio presentato qui .

Supponiamo che tu voglia avere una vista che permetta a un utente di fare un commento su un post del blog. Avresti i campi per name , e-mail , title e comment , ma vuoi anche che un campo country venga visualizzato come elenco a discesa. Nell'azione che mostra questa vista si farebbe una query del database che carica i paesi e quindi popola quel menu a discesa. Che è ok, ma ti costringe a duplicare la query e la vista necessaria per visualizzare i paesi se ne hai bisogno in un'altra parte della tua applicazione. Un approccio migliore sarebbe quello di creare un controller separato per i paesi con un'azione che restituisce una vista con il menu a discesa e quindi eseguire tale azione ogni volta che è necessario mostrare un elenco di paesi.

Questa è la "widgetizzazione" di cui parla l'articolo precedente.

    
risposta data 04.02.2014 - 17:56
fonte
0

È praticamente impossibile essere veramente al 100% modulari, ci saranno sempre certe dipendenze. La cosa migliore che puoi fare è provare ad organizzarlo in un modo che abbia senso per il tuo particolare progetto.

Detto questo, non è vietato fare modelli dal modulo A per comunicare con i modelli dal modulo B.

    
risposta data 06.12.2013 - 14:50
fonte

Leggi altre domande sui tag