Prenderò l'esempio di un oggetto user
. Un utente deve essere registrato, registrato, disconnesso, modificato (ad es., Cambio di email), ecc.Web MVC: come strutturare il livello Modello?
Quindi da una parte ho un oggetto user
, che include una varietà di variabili di classe (pseudo, email, ecc.) insieme a getter e setter e forse alcune funzioni che non si occupano del db.
Sull'altra ho una classe DAO
che è l'oggetto che gestisce direttamente il database tramite una varietà di query MySQL/PDO (crea record, aggiorna, recupera informazioni, ecc.).
C'è qualche motivo per non avere l'oggetto user
interagire direttamente con l'oggetto DAO
? In altre parole, quando Controller
richiede una query di database relativa a un'istanza user
esistente (ad esempio, durante il processo di registrazione), deve semplicemente chiamare una funzione in user
che a sua volta chiama una funzione in DAO
o dovrebbe esserci un livello intermedio tra ?
Ho visto esempi in cui il controller chiama una terza classe per interagire con il DAO e passa un'istanza user
come arg. A volte invece, questo terzo livello è responsabile della creazione dell'istanza user
e della gestione dello DAO
. Mi sembra che tutte le funzioni utilizzate per gestire lo DAO
possano risiedere all'interno dell'oggetto user
. Cosa mi manca?
-1: nessuno di quel codice si trova nel controller. Hai una logica di business del dominio nel livello di presentazione. E tu "utente" "classe" non fornisce incapsulamento o comportamento. –
Oh .. e il tuo esempio di codice di 'UsersDAO' è in realtà un data mapper, [non un DAO] (http://java.sun.com/blueprints/corej2eepatterns/Patterns/DataAccessObject.html). I DAO non interagiscono direttamente con lo storage –
@ tereško Sentiti libero di pubblicare la tua soluzione come risposta. Inoltre, non sono sicuro di come si possa dire che ho una logica di business del dominio nel livello di presentazione quando non ho nemmeno pubblicato un esempio del livello di presentazione. –