1
resposta

Trocar construtor por static

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?

1 resposta

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:

  1. Testabilidade: Métodos static podem ser mais difíceis de testar, especialmente se você precisar usar mocks.
  2. Flexibilidade: Usar um construtor e injeção de dependência (como mostrado na aula) facilita a substituição de implementações, o que pode ser útil em testes e manutenção futura.
  3. Princípios de Design: Métodos 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!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.