3
respostas

[Dúvida] eu fiz meu converter dados sem a interface isso e algo bom ou ruim

public class ConverterDados {

private ObjectMapper mapper = new ObjectMapper();

public <T> T converterObjetos (String json, Class <T> classe) {
    try {
        return mapper.readValue(json, classe);
    } catch (JsonProcessingException e) {
        throw new RuntimeException(e);
    }
}

public <T> List<T> conversorLista(String json, Class<T> classe) {
    try {
        return mapper.readValue(json, mapper.getTypeFactory().constructCollectionType(List.class, classe));
    } catch (JsonProcessingException e) {
        throw new RuntimeException(e);
    }
}

}

3 respostas

Olá, Amanda.

Tudo bem?

Seu código para conversão de dados está bem estruturado e funciona corretamente sem uma interface. No entanto, usar uma interface poderia proporcionar maior flexibilidade e permitir que você adapte facilmente seu conversor para diferentes implementações no futuro. Isso é particularmente útil se você precisar alterar a forma como os dados são convertidos sem modificar o código principal.

Continue explorando e ajustando seu código conforme necessário. Se tiver mais dúvidas ou precisar de ajuda, o fórum está à disposição para te apoiar!

Bons estudos!

Olá eu iria fazer exatamente a mesma pergutna que a Amanda rs por tanto vou direto ao ponto aqui. Eu entendi que tendo interface isso torna mais flexivel , mas gostaria de alguns exemplos para entender melhor onde seria feito a mudança e suas vantagens, se psosivel responder com um codigo de exemplo por favor.

Opa, Lucas vou tentar explicar.

O código que a Amanda escreveu é bem funcional, mas se em algum momento você precisar alterar o processo de conversão, terá que modificar diretamente a classe ConverterDados. Isso pode causar problemas se o código estiver sendo utilizado em várias partes do projeto.

Com Interface

Vamos criar uma interface Conversor que define os métodos de conversão:

public interface Conversor {
    <T> T converterObjetos(String json, Class<T> classe);
    <T> List<T> conversorLista(String json, Class<T> classe);
}

Agora, a classe ConverterDados vai implementar essa interface:

public class ConverterDados implements Conversor {
    private ObjectMapper mapper = new ObjectMapper();

    @Override
    public <T> T converterObjetos(String json, Class<T> classe) {
        try {
            return mapper.readValue(json, classe);
        } catch (JsonProcessingException e) {
            throw new RuntimeException(e);
        }
    }

    @Override
    public <T> List<T> conversorLista(String json, Class<T> classe) {
        try {
            return mapper.readValue(json, mapper.getTypeFactory().constructCollectionType(List.class, classe));
        } catch (JsonProcessingException e) {
            throw new RuntimeException(e);
        }
    }
}

Vantagens

  1. Flexibilidade: Se amanhã você precisar criar um conversor que não usa ObjectMapper, mas sim outra biblioteca, basta criar uma nova classe que implementa a interface Conversor e substituir a implementação. Não será necessário alterar o código que depende dessa interface.

  2. Substituição de Implementação: Você pode ter diferentes implementações de conversão para diferentes contextos (por exemplo, conversão de XML ou YAML) e alterná-las conforme necessário, sem modificar o código principal.

Exemplo de Nova Implementação

Suponha que agora você precisa de um conversor que apenas retorne o mesmo JSON (uma implementação muito simples):

public class ConversorSimples implements Conversor {

    @Override
    public <T> T converterObjetos(String json, Class<T> classe) {
        // Retorna um objeto JSON "genérico"
        return (T) json;
    }

    @Override
    public <T> List<T> conversorLista(String json, Class<T> classe) {
        // Retorna uma lista contendo apenas o JSON
        return List.of((T) json);
    }
}

Você pode utilizar essa nova implementação em qualquer parte do seu código que precise de uma conversão mais simples, sem mudar a lógica existente.

Com isso o código fica mais organizado e mais flexível a mudanças.