Ho un metodo di controllo come segue:
public class RoomsController {
@RequestMapping(method = RequestMethod.GET, path="/v1/rooms/{name}")
public ResponseEntity<?> getRoomInformation(@PathVariable String name, @RequestHeader("Auth-Token") String token){
try {
Room room = roomService.findByLogin(name);
User user = userService.findByBackendToken(token);
if(room == null || InstantHelper.biggerThanSixHours(room.getUpdatedAt()))
room = gitHubService.createOrUpdateRoom(name, user.getAccessToken());
String roomJson = new RoomFormatter(room).toJson();
joinRoom(room.getLogin(), token);
return new ResponseEntity<String>(roomJson, HttpStatus.OK);
} catch (ChathubBackendException e) {
log.error(e);
return new ResponseEntity<>("Error: "+e.getMessage(), HttpStatus.NOT_FOUND);
}
}
come si vede, ho questa linea, ad esempio: roomService.findByLogin(name);
ma da quello che ho capito, un servizio non restituisce alcun valore, è solo eseguire qualche azione e generare un'eccezione se qualcosa va storto. Questa è la prima cosa.
Il secondo è relativo alla formattazione / join parte
String roomJson = new RoomFormatter(room).toJson();
joinRoom(room.getLogin(), token);
return new ResponseEntity<String>(roomJson, HttpStatus.OK);
Non sono sicuro che il controller debba gestire questa quantità di responsabilità, come sapere se è il momento di aggiornare le informazioni sulla sala da API, chiamare esplicitamente RoomFormatter
. Sono un po 'perso qui, perché non so davvero dove metterlo. Penso che dovrei avere uno strato intermedio che non è un servizio né un repository, e questo strato dovrebbe sapere cosa fare con la stanza, formattare il JSON e così via, ma non so cosa dovrebbe essere o se c'è un modello per questo tipo di cose. Forse è ok avere queste cose nel controller ... comunque. Tutte le idee sono ben accette!