Come si usa Pattern DataMapper? Posso usarlo come oggetto di accesso al database glorificato, alias TableGateway
(caricando una singola classe da una singola tabella di database), oppure posso usarlo di più per stimolare le preoccupazioni aziendali (ad esempio caricare oggetti complessi da molte tabelle DB). O mescolare entrambi?
Esempio
Supponiamo che nella mia applicazione aziendale abbia un Product
e un Motor
entità. A volte ho bisogno di uno solo, a volte solo dell'altro. Ma a volte ho bisogno di una struttura in cui un motore appartiene a un prodotto. (Il prodotto è proprietario del motore), e ho bisogno di caricare entrambi, e posso creare e utilizzare una singola funzione del mio DataMapper per farlo.
Denominazione / struttura orientata al business
$products = new ProductDataMapper();
//This is the business-relevant construct, loading a complex object
$product = $products->getProductWithMotor(1, 2);//ids
echo $product->getName(); //"Product with id 1"
echo $product->getMotor()->getName(); //"Motor with id 2"
TableGateway
Naming / Structure
$products = new ProductDataMapper();
//just loading an object by id, no specific business meaning
$product = $products->findById(1);
$motors = new MotorDataMapper();
//just loading an object by id
$motor = $motors->getMotor(2);
//business-relevant line (Product owns the Motor)
//that was hidden away inside the getProductWithMotor above,
//now inside some business layer
$product->setMotor($motor);
echo $product->getName(); //"Product with id 1"
echo $product->getMotor()->getName(); //"Motor with id 2"
Domanda
La mia domanda riguarda "Che cosa era / è l'intento di utilizzare il pattern DataMapper?"
Esiste l'intento di utilizzare come livello aziendale (ovvero caricare oggetti rilevanti per il business con funzioni DataMapper
per creare oggetti complessi relativi al business), o è puramente inteso a fare semplici funzioni Crea / Aggiorna / Elimina / Inserisci ed è disconnettersi dalla creazione di oggetti rilevanti per il business, lasciandolo su un livello di funzionalità aziendale?