Durante la mia carriera ho visto pochi disegni diversi, come lavorare con DAO, Service, Controller layer. Voglio chiedere due, che sono simili ma hanno poche differenze. Il primo disegno crea una barriera visibile tra i livelli. I controllori utilizzano sempre servizi e solo servizi. I servizi possono utilizzare altri servizi o DAO. I controllori non possono utilizzare direttamente alcun DAO. Questo design è chiaro, ma ha grandi svantaggi per me: dobbiamo sempre creare un metodo in servizio per ogni metodo in DAO. Ma in molti casi i metodi di servizio invocano solo i metodi DAO e qualsiasi altra cosa.Quale modello di progettazione è meglio lavorare con Controllers/Services/DAO
Per esempio: Abbiamo UserDao
class UserDao {
public List<User> findByName(String name) { ... }
public List<User> findByLastName(String name) { ... }
public List<User> findOlderThan(int age) { ... }
......
}
Tutti i metodi di cui sopra sono utilizzati dai controllori. Cosa dovremmo fare nel nostro caso? Creare metodi simili in UserService
:
class UserService {
public List<User> findByName(String name) { return userDao.findByName(name); }
public List<User> findByLastName(String name) { return userDao.findByLastName(name); }
public List<User> findOlderThan(int age) { return userDao.findOlderThan(age); }
......
}
Per me questo è ulteriore strato di inutile per i metodi di sola lettura.
In secondo design non abbiamo un problema con questo perché possiamo usare DAO direttamente in Controller. In questa progettazione abbiamo una regola: se vogliamo recuperare un dato da "archivio dati" possiamo usare DAO in qualsiasi livello, se vogliamo apportare alcune modifiche in "archivio dati" dobbiamo usare metodi di servizio.
Cosa ne pensi, ragazzi, di questi progetti? Che è migliore? Quale dovrei usare nei miei progetti e quale dovrebbe essere dimenticato? Potresti condividere con me la tua esperienza in questa sfera?
Grazie per questa risposta. "Se esamini DAO, il tuo livello del modello inizia a filtrare nella presentazione." - Penso che questo sia un grande vantaggio per il primo design e un enorme svantaggio per il secondo. –
@ tereško Allora perché non inserire solo entityManager in Service?Non è entityManager a dao stesso, che è adatto in CRUD/operazioni di una risorsa? – MGorgon
@MGorgon a parte il fatto che sia una cosa specifica per Java, beh .. il gestore di entità non è un DAO, ma un altro livello di astrazione per la persistenza. Il che significa che la tua domanda non ha senso. I DAO non fanno parte della persistenza. –