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

Dúvida método listar

Na aula, o método listar fica desse jeito:

    public Set<Conta> listar() {
        Set<Conta> contas = new HashSet<>();

        String sql = "SELECT * FROM conta";

        try {
            PreparedStatement preparedStatement = connection.prepareStatement(sql);
            ResultSet resultSet = preparedStatement.executeQuery();

            while(resultSet.next()) {
                Integer numero = resultSet.getInt(1);
                BigDecimal saldo = resultSet.getBigDecimal(2);
                String nome = resultSet.getString(3);
                String cpf = resultSet.getString(4);
                String email = resultSet.getString(5);

                Cliente cliente = new Cliente(new DadosCadastroCliente(nome, cpf, email));
                contas.add(new Conta(numero, cliente));

//                DadosCadastroCliente dados = new DadosCadastroCliente(nome, cpf, email);
//                Cliente cliente = new Cliente(dados);
//                DadosAberturaConta aberturaConta = new DadosAberturaConta(numero, dados);
//                contas.add(new Conta(aberturaConta.numero(), cliente));
            }
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
        return contas;
    }

Gostaria de falar sobre o comentário do código: foi uma implementação que eu fiz. Está correto essa abordagem também? Haja vista que eu pensei em primeiramente atribuir valores a DadosCadastroCliente e depois atribui-los a cliente, e em seguida atribuir valores a DadosAberturaConta para depois atribui-los a conta. (não seria exatemente esse o propósito dos Records DadosCadastroCliente e DadosAberturaConta??)

1 resposta
solução!

Olá, Lucas!

Sobre a abordagem que você mencionou em seu comentário no código, ela é válida e pode ser considerada correta dependendo do contexto e da estrutura que você deseja para o seu projeto. Vamos analisar um pouco mais a fundo.

A utilização de classes como DadosCadastroCliente e DadosAberturaConta é uma boa prática para organizar e encapsular os dados, facilitando o gerenciamento e a manutenção do código. Ao criar instâncias dessas classes antes de passá-las para as classes Cliente e Conta, você está seguindo um padrão que pode ajudar na clareza e na separação de responsabilidades dentro do seu código.

No trecho comentado que você adicionou:

// DadosCadastroCliente dados = new DadosCadastroCliente(nome, cpf, email);
// Cliente cliente = new Cliente(dados);
// DadosAberturaConta aberturaConta = new DadosAberturaConta(numero, dados);
// contas.add(new Conta(aberturaConta.numero(), cliente));

você primeiro cria uma instância de DadosCadastroCliente, depois usa essa instância para criar um Cliente, em seguida cria uma instância de DadosAberturaConta e finalmente cria a Conta. Isso não só encapsula bem os dados, mas também mantém cada construção de objeto focada em suas próprias responsabilidades.

Essa abordagem é especialmente útil se você precisar de mais flexibilidade para manipular ou validar os dados antes de criar as instâncias finais de Cliente e Conta. Por exemplo, se houver regras de negócio que precisem ser aplicadas ou validações específicas para os dados do cliente ou da conta, separar essas etapas pode tornar o código mais fácil de entender e de modificar.

Por outro lado, a abordagem direta usada no exemplo da aula:

Cliente cliente = new Cliente(new DadosCadastroCliente(nome, cpf, email));
contas.add(new Conta(numero, cliente));

é mais concisa e pode ser suficiente para casos em que as validações e manipulações dos dados são simples ou podem ser incorporadas dentro dos construtores das classes DadosCadastroCliente e Cliente.

Ambas as abordagens têm seus méritos e a escolha entre elas depende das necessidades específicas do seu projeto e das preferências de design de software. Se a separação mais explícita de etapas adiciona clareza e facilita a manutenção em seu contexto, então sua abordagem é totalmente justificável.

Espero ter ajudado e bons estudos!

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