2009-07-03 15 views
5

Assumiamo un semplice controller MVC Spring che riceve l'ID di un oggetto dominio. Il Controller dovrebbe chiamare un servizio che dovrebbe fare qualcosa con quell'oggetto dominio.Spring MVC Domain Gestione degli oggetti Best Practice

Dove si "converte" l'ID dell'oggetto dominio nell'oggetto dominio caricandolo dal database? Questo non dovrebbe essere fatto dal Controller. Quindi l'interfaccia del metodo di servizio deve utilizzare l'IDdell'oggetto di dominio anziché l'oggetto dominio stesso. Ma l'interfaccia del servizio sarebbe più bella se prende l'oggetto dominio come parametro.

Cosa ne pensi di questo caso di uso comune? Come si risolve questo?

risposta

4

Il controller deve passare l'id nel livello di servizio e quindi ripristinare ciò che è necessario per rendere il resto della risposta HTTP.

Così -

Map<String,Object> doGet (@RequestParam("id") int id) { 
    return serviceLayer.getStuffByDomainObjectId(id); 
} 

Tutto il resto è solo andare a essere inquinare lo strato web, che non dovrebbe preoccuparsi affatto di persistenza. L'intero scopo del livello di servizio è quello di ottenere oggetti di dominio e dire loro di eseguire la loro logica di business. Quindi, una chiamata al database dovrebbe risiedere nel livello di servizio in quanto tale -

public Map<String,Object> getStuffByDomainObjectId(int id) { 
    DomainObject domainObject = dao.getDomainObjectById(id); 
    domainObject.businessLogicMethod(); 
    return domainObject.map(); 
} 
2

in un mio progetto ho usato il livello di servizio:

class ProductService { 

    void removeById(long id); 

} 
2

Credo ciò dipende dal fatto che il servizio è remoto o locale. Come regola, cerco di passare gli ID, ove possibile, ai servizi remoti, ma preferisco gli oggetti per quelli locali.

Il ragionamento dietro questo è che riduce il traffico di rete da solo l'invio di ciò che è strettamente necessario ai servizi remoti e impedisce più chiamate a DAO per i servizi locali (anche se con Hibernate caching questo potrebbe essere un punto di silenzio, per i servizi locali).

+0

Nick, è "punto controverso" :-) – anton1980

Problemi correlati