Controller che chiama più servizi

4

Ho alcuni livelli nella mia WebApplication: Presentation, Service, DAO, Domain.

I servizi chiamano oggetti DAO che leggono i dati da un database / file qualunque.

Ho un Controller che deve recuperare i dati da% diverso% co_de e impostarli come parte di Services .

Dovrei inserire la logica per chiamare diversi Servizi nel metodo Controller o dovrei creare una sorta di Response che a sua volta chiamerà Servizi diversi? In tal caso, in quale livello dovrebbe risiedere la facciata?

@Path("/")
public class MyController {

  @Autowired
  private FirstService firstService;

  @Autowired
  private SecondService secondService;

  @GET
  public Response getData(@QueryParam("query") final String query) {
      final MyResponse response = new MyResponse();

      // Service 1
      final String firstData = firstService.getData(query);
      response.setFirstData(query);


      if (someCondition) {
        // Service 2
        final String secondData = secondService.getData(query);
        response.setSecondData(query);
      }

      // more Service calls maybe

      return Response.status(Response.Status.OK).entity(response).build();
  }

}
    
posta Diyarbakir 25.04.2016 - 13:47
fonte

1 risposta

4

A mio modesto parere, il controllore dovrebbe essere la "facciata" stessa, il che significa che il controllore dovrebbe decidere quale servizio chiamare, e i servizi dovrebbero essere incaricati di generare l'oggetto risposta.

Quello che farei è definire un metodo per azione e discriminare il servizio usando la denominazione REST, qualcosa del genere:

@Path("/")
public class MyController {

  @Autowired
  private FirstService firstService;

  @Autowired
  private SecondService secondService;

  @RequestMapping(value = "/service1/{query}", method = {RequestMethod.GET})
  public Response getData(@RequestParam("query") final String query) {

      return firstService.yourMethod(); // inside the service you handle the response.
  }

  @RequestMapping(value = "/service2/{query}", method = {RequestMethod.GET})
  public Response getData(@RequestParam("query") final String query) {

      return secondService.another(); // inside the service you handle the response.
  }

}
    
risposta data 25.04.2016 - 13:58
fonte

Leggi altre domande sui tag