Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

SOLID: Princípio da Responsabilidade Única

Tendo a classe Calculador_de_descontos como método da Classe "Descontos" não teríamos uma melhor coesão nas responsabilidades da classe Descontos?

Isso feriria o Princípio da Responsabilidade Única visto que, temos um desconto a ser calculado que implica necessariamente no cálculo desse desconto?

2 respostas

Oi Wilton, não sei se entendi direito, para ser sincero. Pode colocar os códigos aqui?

solução!

Deixa eu tentar reformular:

Ao invés de termos dois arquivos sendo um o "descontos.py" e o outro "calculador_de_descontos.py", seria "ruim", no sentido de boas práticas, colocarmos a classe "Calculador_de_Descontos" dentro do arquivo "descontos.py"?

Assim:

# -*- coding: UTF-8 -*-
#../design-patterns-python/descontos.py

class Desconto_por_cinco_itens(object):

    def __init__(self, proximo_desconto):
        self.__proximo_desconto = proximo_desconto

    def calcula(self, orcamento):
        if orcamento.total_itens > 5:
            return orcamento.valor * 0.1
        else:
            return self.__proximo_desconto.calcula(orcamento)


class Desconto_por_mais_de_quinhentos_reais(object):

    def __init__(self, proximo_desconto):
        self.__proximo_desconto = proximo_desconto

    def calcula(self, orcamento):
        if orcamento.valor > 500.0:
            return orcamento.valor * 0.07
        else:
            return self.__proximo_desconto.calcula(orcamento)


class Sem_desconto(object):
    def calcula(self, orcamento):
        return 0.0


# CLASSE QUE ESTAVA SEPARADA NO ARQUIVO CALCULADOR_DE_DESCONTOS.PY
class Calculador_de_descontos(object):

    def calcula(self, orcamento):
        desconto = Desconto_por_cinco_itens(
            Desconto_por_mais_de_quinhentos_reais(
                Sem_desconto()
            )
        ).calcula(orcamento)

        return desconto