Capisco come funziona ORM persist
:
//ORM "persist" oversimplification
function persist(&$entity)
{
...
$insertId = api_actual_db_insert(...);
$entity->setId($insertId);
}
//usage of ORM later ...
$this->getEntityManager()->persist($entity);
print $entity->getId(); //prints ID of newly inserted record
Ma perché no ...
function persist($entity)
{
...
$insertId = api_actual_db_insert(...);
return $insertId;
}
//later ...
$insertId = $this->getEntityManager()->persist($entity);
$entity->setId($insertId);
print $entity->getId();
Entrambe le modalità funzionano. Il mio problema è con "riferimenti". Posso forse vedere un po 'il perché e qual'è il motivo dietro il quale gli ORM funzionano in questo modo, ma la mia domanda deriva dallo scrivere la mia funzionalità specifica di dominio che ho deciso di imitare dopo i concetti di ORM e sto avendo "problemi" "con l'utilizzo di riferimenti. Questioni non tecniche ma questioni di scienze morali e informatiche, per quanto riguarda il ragionamento e le motivazioni per utilizzarle in questo contesto.
Per essere precisi, esaminando il codice di Doctrine (la mia scelta di ORM), non ho visto un riferimento esplicito di Entity
passato, quindi la meccanica di un ORM può usare qualche altra tecnica diversa. La mia domanda rimarrà comunque indipendentemente dal metodo. Quello che mi interessa è che Entity
è popolato con insert_id
, e insert_id
non viene restituito esplicitamente.
Il mio codice
Ho un concetto di Selection
oggetto che contiene un sacco di cose. Forse più tardi potrebbe diventare un vero Entity
, ma al momento non lo è (un sacco di lavoro di refactoring da fare prima che sia pronto), quindi devo gestirlo manualmente, senza il supporto ORM. Ho scritto la mia funzione persist
che è simile e la mia domanda è fondamentalmente ciò che ho già detto sopra. Posso capire perché un ORM funziona in questo modo ma non capisco se dovrei implementare il mio storage allo stesso modo o meno .
Domanda
Per essere espliciti ... c'è qualche motivo particolare o particolare per cui un ORM userebbe questa tecnica specifica di popolamento di Entity
con insert_id
senza un'istruzione esplicita return
, opposta a restituire insert_id
esplicitamente tramite return
dichiarazione al chiamante? Se scelgo di restituire insert_id
esplicitamente, cosa mancherò / spezzerò?