Aplicación SOLID de principios en Ruby: ejemplos y mejores prácticas

Single Responsibility Principle(SRP)

Este principio establece que cada clase debe tener una sola responsabilidad. Enfatiza que una clase debe realizar una función específica y no tener demasiadas razones para cambiar.

Ejemplo: Gestión de la información de los usuarios y envío de notificaciones por correo electrónico.

class UserManager  
  def create_user(user_data)  
    # Logic for creating a user  
  end  
end  
  
class EmailService  
  def send_email(email_data)  
    # Logic for sending an email  
  end  
end  

Open/Closed Principle(OCP)

Este principio fomenta la extensión de la funcionalidad agregando código nuevo en lugar de modificar el código existente.

Ejemplo: Manejo de diferentes métodos de pago en una aplicación de comercio electrónico.

class PaymentProcessor  
  def process_payment  
    # Common logic for payment processing  
  end  
end  
  
class CreditCardPaymentProcessor < PaymentProcessor  
  def process_payment  
    # Logic for processing credit card payment  
  end  
end  
  
class PayPalPaymentProcessor < PaymentProcessor  
  def process_payment  
    # Logic for processing PayPal payment  
  end  
end  

Liskov Substitution Principle(LSP)

Este principio afirma que los objetos de una clase derivada deben ser sustituibles por objetos de la clase base sin afectar la corrección del programa.

Ejemplo: Manejo de formas geométricas.

class Shape  
  def area  
    # Common logic for calculating area  
  end  
end  
  
class Rectangle < Shape  
  def area  
    # Logic for calculating area of rectangle  
  end  
end  
  
class Square < Shape  
  def area  
    # Logic for calculating area of square  
  end  
end  

Interface Segregation Principle(ISP)

Este principio aconseja dividir las interfaces en otras más pequeñas para evitar obligar a las clases a implementar métodos que no necesitan.

Ejemplo: Interfaces para actualización y visualización de datos.

module UpdateableFeature  
  def update_feature  
    # Logic for updating feature  
  end  
end  
  
module DisplayableFeature  
  def display_feature  
    # Logic for displaying feature  
  end  
end  

Dependency Inversion Principle(DIP)

Este principio sugiere usar la inyección de dependencia para administrar las dependencias.

Ejemplo: Uso de inyección de dependencia para administrar dependencias.

class OrderProcessor  
  def initialize(db_connection, email_service)  
    @db_connection = db_connection  
    @email_service = email_service  
  end  
end  

Recuerde que la aplicación de SOLID los principios Ruby debe hacerse de manera flexible según el propósito específico de su proyecto y su comprensión de SOLID y Ruby.