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: 248
02 de maio de 2025
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