Princípio open-closed na prática usando Ruby
--
O princípio open-closed, um dos princípios do SOLID, diz que uma classe deve ser aberta para extensão, mas fechada para modificação. Em outras palavras, uma classe deve ser projetada de maneira a permitir que novas funcionalidades sejam adicionadas sem alterar o código existente.
Um exemplo simples de aplicação do princípio open-closed em Ruby seria uma classe de formatação de números.
Considere a seguinte classe:
class NumberFormatter
def initialize(number)
@number = number
end
def format
# formata o número de acordo com algum padrão específico
end
end
Essa classe possui um método format
que formata um número de acordo com algum padrão específico. No entanto, se quisermos adicionar novos tipos de formatação, teríamos que modificar o código existente na classe NumberFormatter
. Isso viola o princípio open-closed, pois estamos modificando o código existente ao invés de estender sua funcionalidade.
Para aplicar o princípio open-closed, podemos refatorar a classe NumberFormatter
da seguinte maneira:
class NumberFormatter
def initialize(number, formatter)
@number = number
@formatter = formatter
end
def format
@formatter.format(@number)
end
end
class SpecificFormatter
def format(number)
# formata o número de acordo com algum padrão específico
end
end
Agora, a classe NumberFormatter
é responsável por chamar o método de formatação, enquanto a classe SpecificFormatter
é responsável por implementar a lógica de formatação.
Dessa forma, podemos adicionar novos tipos de formatação criando novas classes que implementem o método de formatação, sem precisar modificar o código existente na classe NumberFormatter
. Isso nos permite estender a funcionalidade da classe sem violar o princípio open-closed.