Domanda

Consente di assumere un semplice MVC controller Primavera che riceve l'ID di un oggetto di dominio. Il controller dovrebbe chiamare un servizio che dovrebbe fare qualcosa con quella oggetto di dominio.

Dove "convertire" l'ID dell'oggetto dominio nell'oggetto dominio caricandolo dal database? Questo non dovrebbe essere fatto dal controllore. Così l'interfaccia di metodo di servizio deve usare accettare la ID di oggetto di dominio al posto del dominio dell'oggetto stesso. Ma l'interfaccia del servizio sarebbe più bello se ci vuole l'oggetto di dominio come parametro.

Quali sono i tuoi pensieri su questo caso di uso comune? Come si risolve questo?

È stato utile?

Soluzione

Il controller dovrebbe passare l'id giù nel livello di servizio e poi tornare tutto ciò che è necessario per rendere il resto della risposta HTTP.

-

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 svolgere la loro logica di business. Quindi, una chiamata database deve 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();
}

Altri suggerimenti

in un mio progetto ho usato il livello di servizio:

class ProductService {

    void removeById(long id);

}

Io credo che questo dipende dal fatto che il servizio è remoto o locale. Come regola cerco di trasmettere gli ID, ove possibile, ai servizi remoti, ma preferisco 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 chiamate multiple a DAO per i servizi locali (anche se con Hibernate caching questo potrebbe essere un punto di silenzio, per i servizi locali).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top