Mentre facevo una domanda sulle convenzioni di denominazione dei modelli singolari/plurali di ieri, ho riscontrato il concetto di un modello di dominio. A quanto ho capito finora, un modello di dominio è semplicemente un oggetto che rappresenta un'entità nella mia applicazione.Modelli di dominio PHP, DAO e modalità di implementazione
Per usare un esempio molto semplice, qualcosa di simile:
class User {
private $name;
public setName() {}
public getName() {}
}
Ora, la domanda sorge spontanea, come faccio a popolare questo "Domain Model", o da qualche fonte di ingresso, di da un database o origine dati?
Mentre leggevo su Modelli di dominio, ho avuto l'impressione che non ci fosse altro che una rappresentazione del concetto di Dominio in questione all'interno di essi. Quindi ora avrò bisogno anche di un'altra classe (DAO?) Responsabile per l'interazione con l'origine dati, in questo caso una tabella di database chiamata "Utente". La mia classe DAO gestirà inserimenti, aggiornamenti, eliminazioni e più recuperi.
sono arrivato fino a questo approccio per la compilazione di un utente del dominio del modello da input, in questi dati caso postali, e quindi salvare il record al database, con una classe UserDAO:
/**
* Populating Domain Model from input, and saving to database
*/
/** Instantiate User Domain Model, and populate it from input */
$user = new User();
$user->setName($_POST['name']);
/** Creating a new database record from User Domain Model */
$userdao = new UserDAO($pdo);
$userdao->insert($user);
Ed ecco come ho anticipato l'interazione con il database quando ho bisogno di recuperare i dati, in questo caso più record utente:
/**
* Fetching data from database to populate User Domain Models in an array
*/
/** Instantiate new UserDAO object to interact with User table */
$users = new UserDAO($pdo);
$users->findAll();
$user_collection = [];
/** Loop UserDAO object set to populate user collection array */
foreach ($users as $user) {
/** Create new User domain object from row, and add to collection array */
$user = new User($user);
$user_collection[$user->name()] = $user;
}
sembra che l'unico vero vantaggio è organizzazione.
La mia iterazione corrente ha essenzialmente una classe utente che assume tutte le responsabilità della classe UserDAO di cui sopra, e restituisce direttamente gli array di dati dal database, che poi utilizzo nei miei "Controller"/"Presentatori" e che gocciolare attraverso le mie viste (passive).
Quello che mi chiedo è:
Sono sulla strada giusta?
Dove si trova la convalida dell'input? Presumo che debba andare nel modello di dominio, se ho ragione nelle mie supposizioni finora?
Qual è il vantaggio di utilizzare questa tecnica, oltre ad aiutare ad organizzare i concetti di base su cui l'applicazione si baserà e opererà? Perché ho bisogno di questo strato aggiuntivo invece di operare direttamente sui risultati dell'array dal DB?
Io chiamo i miei handler di classi DAO, ad esempio "User_handler". Questi gestori popolano i modelli di dominio e accettano set di dati per inserti o aggiornamenti. La convalida dell'input viene eseguita nei miei controller. – Timmetje
* fortemente * correlato: http://stackoverflow.com/questions/5863870/how-should-a-model-be-structured-in-mvc/5864000#5864000 – ircmaxell