Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

S.O.L.I.D x Camada de negócio x Camada de Serviço x Mudança

A junção do trio, Interface, Decorator e Injeção de dependência, ficou muito boa a solução. Mas não deixei de notar que só trabalhamos no nível das classes de serviço e não nas classes de negócio... Implementar esse abordagem no nível de negócio também seria uma boa solução? Digamos que eu tenha a seguinte classe:

class Conta {
    double salario;
    // ... outros atributos ...

    void saca(double quantidade) {
        double novoSaldo = this.saldo - quantidade; 
        this.saldo = novoSaldo;
    }
void deposita(double quantidade) {
        this.saldo += quantidade;
    }
void transfere(Conta destino, double valor) {
            this.saldo = this.saldo - valor;
            destino.saldo = destino.saldo + valor;
        }
}

Seria uma boa solução criar uma IConta, Injetar a classe Conta no StartUp e usar o Decorator quando surgisse eventuais mudanças?

Ou seria melhor transformar esses métodos em serviços? ficando desta forma:

interface IContaService
{
    saca(double quantidade);
       deposita(double quantidade);
    transfere(Conta destino, double valor);
}
class ContaService : IContaService{
        Conta conta;
    void saca(double quantidade) {
        double novoSaldo = conta.saldo - quantidade; 
        conta.saldo = novoSaldo;
    }
void deposita(double quantidade) {
        conta.saldo += quantidade;
    }
void transfere(Conta destino, double valor) {
            conta.saldo = conta.saldo - valor;
            destino.saldo = destino.saldo + valor;
        }
}
class Conta {
    double salario;
    // ... outros atributos ...
}
1 resposta

Olá Eduardo, tudo bem?

Me parece interessante este ponto de vista, mas também me parece um pouco de Over Engeneering para a aplicação.

Para o caso de apenas um tipo de conta me parece que funcionaria, mas no caso de vários tipos de contas que implementam a classe Startup não poderia ter vários serviços com a mesma interface. Então seria necessário criar uma interface para cada tipo de conta. E isso me parece algo demais para uma simples classe de modelo (sem tirar a grandiosidade dessa classe na aplicação), mas neste caso parece muito mais simples criar a classe de modelo, que poderá ser estendida e usada com o new quando for necessário.

Bom este é o meu ponto de vista, que o você acha sobre isso?

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software