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: 749
15 de agosto de 2025
23 de julho de 2025
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