Sto sviluppando un'API RESTful e sto utilizzando DAO per fornire i dati al servizio.
Ho difficoltà a decidere dove alcune responsabilità dovrebbero cadere, sia nel servizio o nel contratto DAO. O non solo responsabilità, ma solo decidere cosa dovrebbe o non dovrebbe fare ogni componente.
Nello scenario della parte CRUD dell'API, concentriamoci sulla funzionalità di creazione, ad esempio. Quando una risorsa viene creata (o meno), quale risposta è prevista dal servizio? L'oggetto serializzato che è stato creato? Un messaggio vero / falso? Niente? Questo è ciò che intendo:
// Option 1
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Resource createResource(Resource resource) {
dao.create(resource);
return resource;
}
// Option 2
@POST
@Consumes(MediaType.APPLICATION_JSON)
public void createResource(Resource resource) {
dao.create(resource);
}
// Option 3
@POST
@Consumes(MediaType.APPLICATION_JSON)
public String createResource(Resource resource) {
return dao.create(resource); // or even a custom message?
}
Ma andando oltre. Cosa dovrebbe restituire il DAO? Il metodo dao.create()
deve restituire un valore booleano? Dovrebbe restituire l'oggetto creato o null
se non può essere creato? O solo essere void
?
// Option 1
public Resource create(Resource resource) {
return resources.add(resource) ? resource : null;
}
// Option 2
public void create(Resource resource) {
resources.add(resource);
}
// Option 3
public boolean create(Resource resource) {
return resources.add(resource);
}
Voglio solo capire cosa ci si aspetta da un servizio RESTful e poi, decidere quale sia la migliore divisione di "chi dovrebbe fare cosa".
O sto solo pensando troppo a questo e qualsiasi implementazione ha un senso ed è buona come l'altra?