Scusa in anticipo se questo è un po 'di confusione, è difficile come esprimerlo.
Attualmente sto usando Spring MVC con alcuni servizi RESTful mescolati per qualche logica lato client AJAX. Sto cercando di passare a uno stile più SOA per codificare le nostre opinioni. Dato che MVC e il servizio REST potrebbero vivere nella stessa applicazione, è necessario utilizzare Spring RestTemplate
nel codice quando è necessario popolare gli oggetti in Model
?
In questo momento GET User e display nella vista, Spring MVC parla con un DAO e quindi aggiunge User in Model. Dopo aver letto alcune cose qui su SO e Spring's Site sembra che RestTemplate
possa essere usato per ottenere i dati da un servizio REST e quindi inserire nel modello (se proviene da una terza parte).
C'è qualche motivo per cui il codice dovrebbe (o non dovrebbe) passare all'utilizzo di RestTemplate
per le chiamate interne di REST invece di utilizzare solo il DOA e così via? Presumo che andare verso SOA significa entrare in questo stile, ma sembra un po 'goffo per chiamare un servizio che si trova all'interno della stessa applicazione. Ma vedo anche il valore aggiunto di avere il servizio esistente una volta e utilizzarlo più volte, aggiornandolo in un punto invece che in tutto, in modo che qualsiasi codice Web front-end venga automaticamente aggiornato con eventuali modifiche al livello di servizio.
Esempio:
@RequestMapping(value={"showUserTable"},method={RequestMethod.GET})
public String showUserTable(Model model){
List<User> users = User.getAll(); //DAO nonsense here, assume List exists
model.addAttribute("users", users);
return "userTable"; // returns a jsp simply looping through the list and displaying.
}
C'è qualche motivo per andare a complicare questi per usare il servizio REST interno a favore dell'incapsulamento che guadagno di SOA, o c'è un modo più pulito per consumare questi servizi?
@RequestMapping(value={"showUserTable"},method={RequestMethod.GET})
public String showUserTable(Model model){
List<User> users = restTemplate.getForObject("http://example.com/users", User.class); // or however I use restTemplates, havent done it yet so still fuzzy but shouldnt be too tricky.
model.addAttribute("users", users);
return "userTable"; // returns a jsp simply looping through the list and displaying.
}