05 de abril de 2025

SOLID - 5 Princípios para um Código de Qualidade

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.


1. Single Responsibility Principle (Princípio da Responsabilidade Única)

"Uma classe deve ter apenas uma razão para mudar"

Exemplo Ruim:

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.

Exemplo Correto:

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

2. Open/Closed Principle (Princípio Aberto/Fechado)

"Classes devem estar abertas para extensão, mas fechadas para modificação"

Exemplo Ruim:

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.

Exemplo Correto:

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

3. Liskov Substitution Principle (Princípio da Substituição de Liskov)

"Classes derivadas devem ser substituíveis por suas classes base"

Exemplo Ruim:

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.

Exemplo Correto:

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

4. Interface Segregation Principle (Princípio da Segregação de Interfaces)

"Clientes não devem ser forçados a depender de interfaces que não usam"

Exemplo Ruim:

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

Exemplo Correto:

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

5. Dependency Inversion Principle (Princípio da Inversão de Dependência)

"Dependa de abstrações, não de implementações concretas"

Exemplo Ruim:

class OrderService
  def initialize
    @database = MySQLDatabase.new
  end
end

Exemplo Correto:

class OrderService
  def initialize(database)
    @database = database
  end
end

# Uso:
service = OrderService.new(MySQLDatabase.new)

Conclusão

Aplicar SOLID ajuda a criar:

  • Código mais testável

  • Sistemas mais flexíveis

  • Melhor organização

  • Fácil manutenção

Próximos passos:

  1. Pratique refatoração aplicando SOLID

  2. Explore Design Patterns

  3. 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



Diversos

28 de março de 2025

Regex

Entendendo Expressões Regulares com Exemplos Práticos

23 de março de 2025

Segurança em Aplicações Web

Neste post, vamos explorar boas práticas de segurança que você pode implementar para proteger sua aplicação web de vulnerabilidades comuns.

21 de março de 2025

Domain-Driven Design

Atacando as Complexidades no Coração do Software

18 de março de 2025

Conceitos Básicos da Internet

Tudo o que Você Precisa Saber para Entender como a Internet Funciona

14 de março de 2025

Como Escrever Código Limpo e Fácil de Manter

Dicas Essenciais para Desenvolvedores.

03 de março de 2025

Introdução ao Docker

Simplificando Ambientes de Desenvolvimento com Docker.

27 de fevereiro de 2025

Introdução ao Git e GitHub para Iniciantes

Comece a versionar seu código hoje!

05 de abril de 2016

Inserir botão Doar do Pagseguro em seu Wordpress

Aprenda a inserir o botão Doar do Pagseguro em seu hospedado no Wordpress.com

Sérgio Toledo | Full-Stack Web Developer | LinkedIn | GitHub | YouTube

Todos os direitos reservados ©