No lugar de criar um construtor em cada service recebendo a minha classe ClientHttpConfiguration eu n poderia so colocar static nos metodos dispararRequisicao e usá-los diretamente nas classes service?
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
No lugar de criar um construtor em cada service recebendo a minha classe ClientHttpConfiguration eu n poderia so colocar static nos metodos dispararRequisicao e usá-los diretamente nas classes service?
Olá Guilherme! Tudo bem?
Vamos analisar isso juntos.
Usando Métodos static
Você pode, sim, transformar os métodos dispararRequisicaoGet e dispararRequisicaoPost em métodos static. Isso permitiria chamá-los diretamente sem precisar instanciar a classe ClientHttpConfiguration. Veja um exemplo de como ficaria:
public class ClientHttpConfiguration {
public static HttpResponse<String> dispararRequisicaoGet(String uri) throws IOException, InterruptedException {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(uri))
.method("GET", HttpRequest.BodyPublishers.noBody())
.build();
return client.send(request, HttpResponse.BodyHandlers.ofString());
}
public static HttpResponse<String> dispararRequisicaoPost(String uri, JsonObject json) throws IOException, InterruptedException {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(uri))
.header("Content-Type", "application/json")
.method("POST", HttpRequest.BodyPublishers.ofString(json.toString()))
.build();
return client.send(request, HttpResponse.BodyHandlers.ofString());
}
}
Chamando os Métodos static nas Classes Service
Com os métodos static, você pode chamá-los diretamente nas suas classes service sem precisar de uma instância de ClientHttpConfiguration. Veja um exemplo de como ficaria na classe AbrigoService:
public class AbrigoService {
public void listarAbrigo() throws IOException, InterruptedException {
String uri = "http://localhost:8080/abrigos";
HttpResponse<String> response = ClientHttpConfiguration.dispararRequisicaoGet(uri);
// Processar a resposta...
}
public void cadastrarAbrigo(JsonObject json) throws IOException, InterruptedException {
String uri = "http://localhost:8080/abrigos";
HttpResponse<String> response = ClientHttpConfiguration.dispararRequisicaoPost(uri, json);
// Processar a resposta...
}
}
Usar métodos static pode ser uma solução rápida e prática, mas é importante considerar alguns pontos:
static podem ser mais difíceis de testar, especialmente se você precisar usar mocks.static podem violar princípios de design orientado a objetos, como o princípio da responsabilidade única (SRP) e o princípio de inversão de dependência (DIP).Espero ter ajudado e bons estudos!