05 de abril de 2025
SOLID é um conjunto de princípios fundamentais para escrever código limpo, flexível e fácil de manter. Vamos adaptar esses conceitos para Ruby com exemplos práticos.
"Uma classe deve ter apenas uma razão para mudar"
class Order def calculate_total # lógica para calcular o total do pedido end def save_to_db # lógica para salvar no banco de dados end def send_confirmation_email # lógica para envio de email end end
Problema: A classe Pedido
tem múltiplas responsabilidades.
class Order def calculate_total # lógica para calcular o total do pedido end end class OrderRepository def save(order) # lógica para salvar no banco de dados end end class EmailService def send_confirmation(order) # lógica para envio de email end end
"Classes devem estar abertas para extensão, mas fechadas para modificação"
class AreaCalculator def calculate(shape) if shape.is_a?(Square) shape.side * shape.side elsif shape.is_a?(Circle) Math::PI * shape.radius * shape.radius end end end
Problema: Precisa modificar a classe para adicionar novas formas.
module Shape def calculate_area raise NotImplementedError end end class Square include Shape def initialize(side) @side = side end def calculate_area @side * @side end end
"Classes derivadas devem ser substituíveis por suas classes base"
class Duck def fly puts "Flying" end end class RubberDuck < Duck def fly raise "Rubber duck can't fly!" end end
Problema: Viola o contrato da superclasse.
module Flyable def fly raise NotImplementedError end end class Duck include Flyable def fly puts "Flying" end end class RubberDuck # Não inclui Flyable end
"Clientes não devem ser forçados a depender de interfaces que não usam"
module Device def turn_on; end def turn_off; end def volume_up; end def volume_down; end end class Television include Device # Implementa todos os métodos end class Lightbulb include Device def volume_up raise NotImplementedError end def volume_down raise NotImplementedError end end
module Powerable def turn_on; end def turn_off; end end module VolumeControllable def volume_up; end def volume_down; end end class Television include Powerable include VolumeControllable # implementa todos os métodos end class Lightbulb include Powerable # implementa apenas métodos relacionados à Powerable end
"Dependa de abstrações, não de implementações concretas"
class OrderService def initialize @database = MySQLDatabase.new end end
class OrderService def initialize(database) @database = database end end # Uso: service = OrderService.new(MySQLDatabase.new)
Aplicar SOLID ajuda a criar:
Código mais testável
Sistemas mais flexíveis
Melhor organização
Fácil manutenção
Próximos passos:
Pratique refatoração aplicando SOLID
Explore Design Patterns
Use ferramentas como RuboCop para análise de código
Lembre-se: SOLID não é dogma, mas um guia para código melhor!
Visualizações: 91
23 de março de 2025
18 de março de 2025
14 de março de 2025
27 de fevereiro de 2025
05 de abril de 2016