Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Objeto JSON dentro da classe Abrigo

Ele criou uma classe Abrigo e substituiu o json passado para funções. Mas e se na classe Abrigo eu usasse um json por debaixo dos panos? Dessa forma:

public class Abrigo {
        private  JsonObject json = new JsonObject();
        
        public Abrigo(String nome, String telefone, String email) {
                this.json.addProperty("nome", nome);
                this.json.addProperty("telefone", telefone);
                this.json.addProperty("email", email);
        }

        //faria um metodo para retornar o json
        
        public JsonObject getJson() {
                return this.json;
        }
}

Assim, ao invés de mudar os outros métodos que esperam receber um json, voce só altera a parte de criar, e quando o método precisar do json, vc chama o método get. Minha dúvida é se isso é uma abordagem válida, digamos que seja um sistema legado e muito maior, que espera sempre receber um json, é válido fazer isso? De certa forma extrai a complexidade do código e deixa a responsabilidade somente para a classe abrigo.

1 resposta
solução!

Olá, Jelson! Sua pergunta é muito interessante e mostra que você está pensando em como melhorar a estrutura do código e torná-lo mais manutenível, o que é excelente!

A abordagem que você sugeriu é válida e pode ser útil em certos contextos, especialmente quando se está lidando com um sistema legado que espera sempre receber um JSON. A ideia de encapsular a lógica de criação do JSON dentro da classe Abrigo pode realmente ajudar a simplificar o código e torná-lo mais fácil de entender e manter.

No entanto, é importante lembrar que essa abordagem pode tornar a classe Abrigo mais acoplada à representação JSON, o que pode não ser ideal em alguns casos. Por exemplo, se no futuro você decidir mudar de JSON para XML ou algum outro formato, você teria que alterar a classe Abrigo, o que viola o Princípio Aberto/Fechado (um dos princípios SOLID de design de software orientado a objetos).

Uma alternativa seria criar uma classe ou método separado responsável por converter um objeto Abrigo em JSON. Isso poderia ser feito, por exemplo, com um método estático em uma classe utilitária ou com um padrão de design como o Adapter. Dessa forma, a classe Abrigo se concentra apenas em representar um abrigo e não precisa se preocupar com detalhes de como é representada como JSON.

Aqui está um exemplo de como isso poderia ser feito:

public class JsonUtils {
    public static JsonObject toJson(Abrigo abrigo) {
        JsonObject json = new JsonObject();
        json.addProperty("nome", abrigo.getNome());
        json.addProperty("telefone", abrigo.getTelefone());
        json.addProperty("email", abrigo.getEmail());
        return json;
    }
}

E então, quando você precisar passar um objeto Abrigo como JSON, você poderia fazer algo assim:

Abrigo abrigo = new Abrigo(nome, telefone, email);
JsonObject json = JsonUtils.toJson(abrigo);

Espero ter ajudado e bons estudos!