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 ...
}