Inversão de controle (IoC) usando Ruby

Deyvid Nascimento
2 min readDec 23, 2022

--

A inversão de controle (IoC, do inglês “Inversion of Control”) é um padrão de projeto que visa inverter a responsabilidade de criar e manter dependências entre objetos. Em vez de um objeto criar e manter suas próprias dependências, essas dependências são passadas para ele através de sua construção ou através de um método de configuração.

Aqui está um exemplo de como o padrão de inversão de controle pode ser implementado em Ruby:

class User
def initialize(name, email)
@name = name
@email = email
end

def send_email(message)
# O objeto User depende da classe EmailSender para enviar emails
EmailSender.new.send_email(@email, message)
end
end

class EmailSender
def send_email(email, message)
# Aqui estamos enviando o email de fato
end
end

Em vez de criarmos uma instância de EmailSender dentro do objeto User, podemos passar uma instância de EmailSender para o objeto User através de seu construtor ou através de um método de configuração, invertendo o controle da criação da dependência para o objeto que a utiliza.


user = User.new("João", "joao@example.com")
email_sender = EmailSender.new
user.send_email("Olá, como você está?", email_sender)

Neste exemplo, a classe User depende da classe EmailSender para enviar emails.

Em vez de criarmos uma instância de EmailSender dentro da classe User, passamos uma instância de EmailSender para o objeto User através de seu construtor ou através de um método de configuração.

class User
def initialize(name, email)
@name = name
@email = email
end

def send_email(message, email_sender)
email_sender.send_email(@email, message)
end
end

class EmailSender
def send_email(email, message)
# Aqui estamos enviando o email de fato
end
end

Invertendo o controle da criação da dependência para o objeto que a utiliza. Isso nos permite trocar facilmente a implementação da classe EmailSender sem precisar alterar o código da classe User.

--

--

No responses yet