Skip to content

Comentarios y sugerencias #1

@SofiCortes

Description

@SofiCortes

Buenas, te dejo algunos comentarios:

  1. Por convención, los métodos en Java (y por consecuencia, los tests también, porque son métodos) se escriben en camelCase
  2. Ojo con los múltiples constructores de Cuenta. Cuenta tiene 2 constructores, y si el código cliente quiere usar la clase, cómo sabes que constructor deberías usar? Tengo que entrar a la clase a mirar el código, o puedo terminar creando un objeto con un estado inadecuado. Tambien se puede delegar la lógica de un constructor en otro.
  3. Cuenta.setMovimientos se debería eliminar, ya que nunca se usa y expone estado mutable innecesariamente.
  4. En la clase Cuenta, en getMovimientos().stream().filter(movimiento -> movimiento.fueDepositado(LocalDate.now())).count() >= 3 hay mucha lógica algoritmica. Qué significa esta línea? Qué está haciendo? Podrías mejorar la declaratividad generando una abstracción para darle entidad.
  5. En los tests ExtraerMasQueElSaldo() y ExtraerMasDe1000() declarás variables que no usás. Intentá borrar todo el código que no se esté usando.
  6. Hay algo de lógica repetida en estos métodos, en las primeras líneas de cada uno.
    private void validarOperacionPoner(double saldo){
    if (saldo <= 0) {
    throw new MontoNegativoException(saldo + ": el monto a ingresar debe ser un valor positivo");
    }
    if (getMovimientos().stream().filter(movimiento -> movimiento.fueDepositado(LocalDate.now())).count() >= 3 ) {
    throw new MaximaCantidadDepositosException("Ya excedio los " + 3 + " depositos diarios");
    }
    }
    private void validarOperacionSacar(double saldo){
    if (saldo <= 0) {
    throw new MontoNegativoException(saldo + ": el monto a ingresar debe ser un valor positivo");
    }
    if (getSaldo() - saldo < 0) {
    throw new SaldoMenorException("No puede sacar mas de " + getSaldo() + " $");
    }
    double montoExtraidoHoy = getMontoExtraidoA(LocalDate.now());
    double limite = 1000 - montoExtraidoHoy;
    if (saldo > limite) {
    throw new MaximoExtraccionDiarioException("No puede extraer mas de $ " + 1000
    + " diarios, límite: " + limite);
    }
    }

    En estos otros métodos tenemos lógica repetida en las últimas 2 líneas de cada uno.
    public void poner(double cuanto) {
    validarOperacionPoner(cuanto);
    this.setSaldo(this.getSaldo() + cuanto);
    this.movimientos.add(new Movimiento(LocalDate.now(), cuanto, true));
    }
    public void sacar(double cuanto) {
    validarOperacionSacar(cuanto);
    this.setSaldo(this.getSaldo() - cuanto);
    this.movimientos.add(new Movimiento(LocalDate.now(), cuanto, false));
    }
  7. En la clase Movimiento hay un flag booleano esDeposito que habilita varios type-tests que hacés en tu código, y además, oculta las abstracciones de depósitos y extracciones. Deberías eliminarlo (o al menos hacerlo calculado y restringir su uso) subclasificando los movimientos.

Saludos!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions