Sto lavorando a un piccolo gioco multi giocatore per il mio progetto per l'ultimo anno e attualmente sto lavorando al server. È un gioco Tank Battle e ha due entità principali che userò sul lato server che sono
Giocatore (dettagli del giocatore come username, password, currentTank, statistiche)
Tank (Dettagli di un carro armato come velocity, rotationVelocity, Turret)
Torretta (dettagli della torretta come velocità di rotazione, tasso di fuoco, ecc.)
Statistiche (statistiche come totalKills, morti totali, colpi totali ecc.)
Recentemente ho letto di DAO e di come separano le preoccupazioni del database e ho pensato di usarlo nel mio progetto perché il mio progetto ha una buona quantità di dati da perseguire e anche dal fatto che voglio imparare questa tecnica.
Dopo aver letto su DAO mi sono reso conto che sarà necessario mappare il DTO agli oggetti del dominio per la logica aziendale. Dato che avrò un bel po 'di logica su questi oggetti e metodi che non sono realmente necessari su DTO.
Quindi ad esempio mappo:
PlayerDTO - > PlayerObject
Ogni volta che c'è una richiesta da parte del giocatore di muovere il suo carro armato, accodo la direzione in una coda contenuta nel serbatoio del giocatore. (Questo mostra la necessità di avere Oggetto Dominio in quanto non ho bisogno di una coda di movimento sul database ma ho bisogno degli oggetti del serbatoio per mettere in coda i movimenti)
Ora diciamo nel mio MovementService del mio server, faccio il giro dell'elenco PlayerObject (i giocatori registrati) e aggiorno la posizione del tank del giocatore chiamando il player.moveTank () che aggiornerà le sue posizioni in base al movimento accodato in la coda di movimento all'interno di TankObject contenuta in PlayerObject. Capisco fino a questo punto quello che devo fare.
Ora la mia domanda è: come posso salvare PlayerObject sul Database? Devo mapparlo nuovamente su PlayerDTO? Qual è il modo più efficace per farlo?
Per ora ho pensato che quando il giocatore si disconnette, nel mio LogoutService userò il servizio PlayerDAO e otterrò PlayerDTO usando l'ID PlayerObject e aggiornerò i dettagli dell'oggetto e lo salverò nel database ma sento che sarò effettuare chiamate di database aggiuntive solo per ottenere l'oggetto (una chiamata di selezione extra) e per salvarlo piuttosto che aggiornare semplicemente l'oggetto utilizzando la query di aggiornamento.
Ritengo inoltre che solo per l'aggiornamento, diciamo la sua posizione sul database, dovrò utilizzare una query che sovrascriverà tutto. C'è un modo migliore di farlo o lo sto facendo bene?
Nota: non userò nessun ORM nel mio progetto.
P.S. Ho cercato molto ma non ho trovato nessuna domanda simile. So di non aver inserito alcun codice ed è una lunga domanda, ma se qualcosa non è chiaro fammelo sapere.